diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..60839c7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+_saves/
+_server/config.json
\ No newline at end of file
diff --git a/_saves/.exported b/_saves/.exported
deleted file mode 100644
index 56a6051..0000000
--- a/_saves/.exported
+++ /dev/null
@@ -1 +0,0 @@
-1
\ No newline at end of file
diff --git a/_saves/Eustia_autoSave b/_saves/Eustia_autoSave
deleted file mode 100644
index 2a3d507..0000000
--- a/_saves/Eustia_autoSave
+++ /dev/null
@@ -1 +0,0 @@
-N4IgZgNg9lBOCSATEAuEBnALrApjzADAIwgA0IAFjrFKqAJYC2AhgOY6qXVQB0A7jgBGABzIhmAOybNMHFGGYR0OchOaM5IAMLMmYiADdURchWEsAHqgCct66dEoiBF+RZrLqALQmQ75qgE5DIA1sauIIg4YOFBflExKHHownjISW5QEjgAnoHkOBaOcTgAjgCu9OY4EpioANoAuuT0sozodCAAxllYkpgdKKCCMGFO5JB5TgC+5JgwSnSzIGWVwoOg6HxwiCQzy9BdnYj0uF2Y9Fmc5aLkVigArORTzsuQbBsgrTiMACL4uggqGw5RUIHKygAQvgBDUADL0VgUOooEFggD66OUOEQmOMAHYAGwEawADgATOSACxxTGwSS49EE4lkyk04K4ZiDeqgDyaAA65SpOAIgkFDy6VPJYhY6wa2l0jAoUA0IEas156gFQpFYvKEqlMuYcpQ9RAACt6OVWOVJGqNSA+ZxBcLReLJdK3MbuSAANIAFQAavbSJrVWhBfjyYTyZHyWASF6TWaA4GAGLS9Whx1a53lKMxuMJo3JkCsKAQRAhXIhsPa116g2evze+WCegUCHlWhZut513Md2GpM+y3MKCYSSsWs58MgF0iwf6j0ln3oKgSVgSAzK1W92f1xdD5uytcUejb3ccfdOiP56Ox+/Fkfyy048cz2/z++Fp+JlullguD4MQYhAXghDNjaU5dBQU5iNBm6wVOzYWPQ45oVOoF3OhUCYZuBCobh+GsAAzJ+uYoBI5QQBAL6miAOT0BUJA3pR1G0fRZpMRUmYOreHF0QBPo8eU5FseGglcYxzFChRkk0UJp7yqJDzyXIUnCSpsmEupqCacpDGifielUYp0miaSpkGa2RmydY1nmVpdksQQ9rNBgIRVKgChKGCcGwOktLogFiBaBWcB4mguDIOQmLfIwAASF6YFFTRxeiEA4MwBg4HCUBdFFwDLJiBj0Og3yMp04EgXsaLLIIMJ4BIACCmCTl0IS/DIARmZxICYswOD0GlHmYic6DMIIWVVUMGDYBBoGmvURCkQ8zRNOqbwVtAAiwNyHlYDgJq+H0FxYPQXSfPMk4QP6TByOSDxEEQUpRjwhJ2C91hPN05SwLA93hkQDxUtYPCkXYUNQ4SDj5CAggyJgWXw4wWQ1hkKxFPDiPtVl3UsOw8PCFA5VZATbByCUFjYMwFNE5jaO5b8pw4OcEBTHEiISHAOAAMqyCaySTrAKKElSDykTwVLTMsoWcKu1ULbVnSyg0QQa6Qmva1ruv1D4pAG0bJgG0ExuGyblsWxbzQa1t5A0OUsicL6UAZloVKsAAvGIBiKKCGzLLl+2XBIebWDgpGIOKggPAQkbMNY0flNYhHx/qpKg+6BBgIK1iEkQMTkDa9DpCA5LMIghKEog1iFYgYBgFS6JUqSifooIVKEmA6JgIgU0EDgNJV3gYgXMD+KkficfWKRBBSi40xAA==
\ No newline at end of file
diff --git a/_server/CodeMirror/defs.js b/_server/CodeMirror/defs.js
index 1c16b25..ee517af 100644
--- a/_server/CodeMirror/defs.js
+++ b/_server/CodeMirror/defs.js
@@ -1,4130 +1,4526 @@
 var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [
   {
     "!name": "browser",
-    "Node": {
+    Node: {
       "!type": "fn()",
-      "prototype": {
-        "nextSibling": {
+      prototype: {
+        nextSibling: {
           "!type": "+Element",
-          "!doc": "返回紧接其父节点的childNodes列表中指定节点之后的节点;如果指定节点是该列表中的最后一个节点,则返回null.",
+          "!doc":
+            "返回紧接其父节点的childNodes列表中指定节点之后的节点;如果指定节点是该列表中的最后一个节点,则返回null.",
         },
-        "previousSibling": {
+        previousSibling: {
           "!type": "+Element",
-          "!doc": "返回紧接其父节点的childNodes列表中指定节点之前的节点,如果指定节点是该列表中的第一个节点,则返回null.",
+          "!doc":
+            "返回紧接其父节点的childNodes列表中指定节点之前的节点,如果指定节点是该列表中的第一个节点,则返回null.",
         },
-        "lastChild": {
+        lastChild: {
           "!type": "+Element",
-          "!doc": "返回节点的最后一个孩子."
+          "!doc": "返回节点的最后一个孩子.",
         },
-        "firstChild": {
+        firstChild: {
           "!type": "+Element",
-          "!doc": "返回树中该节点的第一个子节点;如果该节点为无子节点,则返回null.如果该节点是Document,则返回其直接子节点列表中的第一个节点.",
+          "!doc":
+            "返回树中该节点的第一个子节点;如果该节点为无子节点,则返回null.如果该节点是Document,则返回其直接子节点列表中的第一个节点.",
         },
-        "childNodes": {
+        childNodes: {
           "!type": "+NodeList",
-          "!doc": "返回给定元素的子节点的集合."
+          "!doc": "返回给定元素的子节点的集合.",
         },
-        "parentNode": {
+        parentNode: {
           "!type": "+Element",
-          "!doc": "返回DOM树中指定节点的父级."
+          "!doc": "返回DOM树中指定节点的父级.",
         },
-        "tagName": {
+        tagName: {
           "!type": "string",
-          "!doc": "将当前节点的名称作为字符串返回."
+          "!doc": "将当前节点的名称作为字符串返回.",
         },
-        "insertBefore": {
+        insertBefore: {
           "!type": "fn(newElt: +Element, before: +Element) -> +Element",
           "!doc": "将指定的节点插入到参考元素之前,作为当前节点的子级.",
         },
-        "removeChild": {
+        removeChild: {
           "!type": "fn(oldNode: +Element) -> +Element",
           "!doc": "从DOM中删除一个子节点.返回已删除的节点.",
         },
-        "appendChild": {
+        appendChild: {
           "!type": "fn(newNode: +Element) -> +Element",
-          "!doc": "将一个节点添加到指定父节点的子节点列表的末尾.如果该节点已经存在,则将其从当前父节点中删除,然后添加到新的父节点中.",
+          "!doc":
+            "将一个节点添加到指定父节点的子节点列表的末尾.如果该节点已经存在,则将其从当前父节点中删除,然后添加到新的父节点中.",
         },
-        "cloneNode": {
+        cloneNode: {
           "!type": "fn(deep: bool) -> +Element",
-          "!doc": "返回在其上调用此方法的节点的副本."
+          "!doc": "返回在其上调用此方法的节点的副本.",
         },
-        "addEventListener": {
+        addEventListener: {
           "!type": "fn(type: string, listener: fn(e: +Event), capture: bool)",
-          "!doc": "在单个目标上注册单个事件侦听器.事件目标可以是文档中的单个元素,文档本身,窗口或XMLHttpRequest.",
+          "!doc":
+            "在单个目标上注册单个事件侦听器.事件目标可以是文档中的单个元素,文档本身,窗口或XMLHttpRequest.",
         },
-        "removeEventListener": {
+        removeEventListener: {
           "!type": "fn(type: string, listener: fn(), capture: bool)",
           "!doc": "允许从事件目标中删除事件侦听器.",
         },
-        "innerText": {
+        innerText: {
           "!type": "string",
-          "!doc": "获取或设置节点及其后代的文本内容."
-        }
-      },
-      "!doc": "节点是一个接口,许多DOM类型都从该接口继承,并允许类似地对待(或测试)这些各种类型.",
-    },
-    "Element": {
-      "!type": "fn()",
-      "prototype": {
-        "!proto": "Node.prototype",
-        "getAttribute": {
-          "!type": "fn(name: string) -> string",
-          "!doc": "返回指定元素上的命名属性的值.如果命名属性不存在,则返回的值将为null或\" \"(空字符串).",
+          "!doc": "获取或设置节点及其后代的文本内容.",
         },
-        "setAttribute": {
+      },
+      "!doc":
+        "节点是一个接口,许多DOM类型都从该接口继承,并允许类似地对待(或测试)这些各种类型.",
+    },
+    Element: {
+      "!type": "fn()",
+      prototype: {
+        "!proto": "Node.prototype",
+        getAttribute: {
+          "!type": "fn(name: string) -> string",
+          "!doc":
+            '返回指定元素上的命名属性的值.如果命名属性不存在,则返回的值将为null或" "(空字符串).',
+        },
+        setAttribute: {
           "!type": "fn(name: string, value: string)",
           "!doc": "在指定元素上添加新属性或更改现有属性的值.",
         },
-        "removeAttribute": {
+        removeAttribute: {
           "!type": "fn(name: string)",
           "!doc": "从指定元素中删除属性.",
         },
-        "getElementsByTagName": {
+        getElementsByTagName: {
           "!type": "fn(tagName: string) -> +NodeList",
-          "!doc": "返回具有给定标签名的元素列表.搜索指定元素下面的子树,不包括元素本身.返回的列表是活动的,这意味着它将自动使用DOM树进行更新.因此,无需使用相同的元素和参数多次调用element.getElementsByTagName."
+          "!doc":
+            "返回具有给定标签名的元素列表.搜索指定元素下面的子树,不包括元素本身.返回的列表是活动的,这意味着它将自动使用DOM树进行更新.因此,无需使用相同的元素和参数多次调用element.getElementsByTagName.",
         },
-        "getElementsByClassName": {
+        getElementsByClassName: {
           "!type": "fn(name: string) -> +NodeList",
-          "!doc": "返回具有所有给定类名称的一组元素.在文档对象上调用时,将搜索整个文档,包括根节点.您还可以在任何元素上调用getElementsByClassName;它将仅返回元素,它们是具有给定类名的指定根元素的后代."
+          "!doc":
+            "返回具有所有给定类名称的一组元素.在文档对象上调用时,将搜索整个文档,包括根节点.您还可以在任何元素上调用getElementsByClassName;它将仅返回元素,它们是具有给定类名的指定根元素的后代.",
         },
-        "children": {
+        children: {
           "!type": "+HTMLCollection",
-          "!doc": "返回给定元素的子元素的集合."
+          "!doc": "返回给定元素的子元素的集合.",
         },
-        "className": {
+        className: {
           "!type": "string",
           "!doc": "获取并设置指定元素的class属性的值.",
         },
-        "style": {
-          "cssText": "string",
-          "alignmentBaseline": "string",
-          "background": "string",
-          "backgroundAttachment": "string",
-          "backgroundClip": "string",
-          "backgroundColor": "string",
-          "backgroundImage": "string",
-          "backgroundOrigin": "string",
-          "backgroundPosition": "string",
-          "backgroundPositionX": "string",
-          "backgroundPositionY": "string",
-          "backgroundRepeat": "string",
-          "backgroundRepeatX": "string",
-          "backgroundRepeatY": "string",
-          "backgroundSize": "string",
-          "baselineShift": "string",
-          "border": "string",
-          "borderBottom": "string",
-          "borderBottomColor": "string",
-          "borderBottomLeftRadius": "string",
-          "borderBottomRightRadius": "string",
-          "borderBottomStyle": "string",
-          "borderBottomWidth": "string",
-          "borderCollapse": "string",
-          "borderColor": "string",
-          "borderImage": "string",
-          "borderImageOutset": "string",
-          "borderImageRepeat": "string",
-          "borderImageSlice": "string",
-          "borderImageSource": "string",
-          "borderImageWidth": "string",
-          "borderLeft": "string",
-          "borderLeftColor": "string",
-          "borderLeftStyle": "string",
-          "borderLeftWidth": "string",
-          "borderRadius": "string",
-          "borderRight": "string",
-          "borderRightColor": "string",
-          "borderRightStyle": "string",
-          "borderRightWidth": "string",
-          "borderSpacing": "string",
-          "borderStyle": "string",
-          "borderTop": "string",
-          "borderTopColor": "string",
-          "borderTopLeftRadius": "string",
-          "borderTopRightRadius": "string",
-          "borderTopStyle": "string",
-          "borderTopWidth": "string",
-          "borderWidth": "string",
-          "bottom": "string",
-          "boxShadow": "string",
-          "boxSizing": "string",
-          "captionSide": "string",
-          "clear": "string",
-          "clip": "string",
-          "clipPath": "string",
-          "clipRule": "string",
-          "color": "string",
-          "colorInterpolation": "string",
-          "colorInterpolationFilters": "string",
-          "colorProfile": "string",
-          "colorRendering": "string",
-          "content": "string",
-          "counterIncrement": "string",
-          "counterReset": "string",
-          "cursor": "string",
-          "direction": "string",
-          "display": "string",
-          "dominantBaseline": "string",
-          "emptyCells": "string",
-          "enableBackground": "string",
-          "fill": "string",
-          "fillOpacity": "string",
-          "fillRule": "string",
-          "filter": "string",
-          "float": "string",
-          "floodColor": "string",
-          "floodOpacity": "string",
-          "font": "string",
-          "fontFamily": "string",
-          "fontSize": "string",
-          "fontStretch": "string",
-          "fontStyle": "string",
-          "fontVariant": "string",
-          "fontWeight": "string",
-          "glyphOrientationHorizontal": "string",
-          "glyphOrientationVertical": "string",
-          "height": "string",
-          "imageRendering": "string",
-          "kerning": "string",
-          "left": "string",
-          "letterSpacing": "string",
-          "lightingColor": "string",
-          "lineHeight": "string",
-          "listStyle": "string",
-          "listStyleImage": "string",
-          "listStylePosition": "string",
-          "listStyleType": "string",
-          "margin": "string",
-          "marginBottom": "string",
-          "marginLeft": "string",
-          "marginRight": "string",
-          "marginTop": "string",
-          "marker": "string",
-          "markerEnd": "string",
-          "markerMid": "string",
-          "markerStart": "string",
-          "mask": "string",
-          "maxHeight": "string",
-          "maxWidth": "string",
-          "minHeight": "string",
-          "minWidth": "string",
-          "opacity": "string",
-          "orphans": "string",
-          "outline": "string",
-          "outlineColor": "string",
-          "outlineOffset": "string",
-          "outlineStyle": "string",
-          "outlineWidth": "string",
-          "overflow": "string",
-          "overflowWrap": "string",
-          "overflowX": "string",
-          "overflowY": "string",
-          "padding": "string",
-          "paddingBottom": "string",
-          "paddingLeft": "string",
-          "paddingRight": "string",
-          "paddingTop": "string",
-          "page": "string",
-          "pageBreakAfter": "string",
-          "pageBreakBefore": "string",
-          "pageBreakInside": "string",
-          "pointerEvents": "string",
-          "position": "string",
-          "quotes": "string",
-          "resize": "string",
-          "right": "string",
-          "shapeRendering": "string",
-          "size": "string",
-          "speak": "string",
-          "src": "string",
-          "stopColor": "string",
-          "stopOpacity": "string",
-          "stroke": "string",
-          "strokeDasharray": "string",
-          "strokeDashoffset": "string",
-          "strokeLinecap": "string",
-          "strokeLinejoin": "string",
-          "strokeMiterlimit": "string",
-          "strokeOpacity": "string",
-          "strokeWidth": "string",
-          "tabSize": "string",
-          "tableLayout": "string",
-          "textAlign": "string",
-          "textAnchor": "string",
-          "textDecoration": "string",
-          "textIndent": "string",
-          "textLineThrough": "string",
-          "textLineThroughColor": "string",
-          "textLineThroughMode": "string",
-          "textLineThroughStyle": "string",
-          "textLineThroughWidth": "string",
-          "textOverflow": "string",
-          "textOverline": "string",
-          "textOverlineColor": "string",
-          "textOverlineMode": "string",
-          "textOverlineStyle": "string",
-          "textOverlineWidth": "string",
-          "textRendering": "string",
-          "textShadow": "string",
-          "textTransform": "string",
-          "textUnderline": "string",
-          "textUnderlineColor": "string",
-          "textUnderlineMode": "string",
-          "textUnderlineStyle": "string",
-          "textUnderlineWidth": "string",
-          "top": "string",
-          "unicodeBidi": "string",
-          "unicodeRange": "string",
-          "vectorEffect": "string",
-          "verticalAlign": "string",
-          "visibility": "string",
-          "whiteSpace": "string",
-          "width": "string",
-          "wordBreak": "string",
-          "wordSpacing": "string",
-          "wordWrap": "string",
-          "writingMode": "string",
-          "zIndex": "string",
-          "zoom": "string",
-          "!doc": "返回一个表示元素的style属性的对象."
+        style: {
+          cssText: "string",
+          alignmentBaseline: "string",
+          background: "string",
+          backgroundAttachment: "string",
+          backgroundClip: "string",
+          backgroundColor: "string",
+          backgroundImage: "string",
+          backgroundOrigin: "string",
+          backgroundPosition: "string",
+          backgroundPositionX: "string",
+          backgroundPositionY: "string",
+          backgroundRepeat: "string",
+          backgroundRepeatX: "string",
+          backgroundRepeatY: "string",
+          backgroundSize: "string",
+          baselineShift: "string",
+          border: "string",
+          borderBottom: "string",
+          borderBottomColor: "string",
+          borderBottomLeftRadius: "string",
+          borderBottomRightRadius: "string",
+          borderBottomStyle: "string",
+          borderBottomWidth: "string",
+          borderCollapse: "string",
+          borderColor: "string",
+          borderImage: "string",
+          borderImageOutset: "string",
+          borderImageRepeat: "string",
+          borderImageSlice: "string",
+          borderImageSource: "string",
+          borderImageWidth: "string",
+          borderLeft: "string",
+          borderLeftColor: "string",
+          borderLeftStyle: "string",
+          borderLeftWidth: "string",
+          borderRadius: "string",
+          borderRight: "string",
+          borderRightColor: "string",
+          borderRightStyle: "string",
+          borderRightWidth: "string",
+          borderSpacing: "string",
+          borderStyle: "string",
+          borderTop: "string",
+          borderTopColor: "string",
+          borderTopLeftRadius: "string",
+          borderTopRightRadius: "string",
+          borderTopStyle: "string",
+          borderTopWidth: "string",
+          borderWidth: "string",
+          bottom: "string",
+          boxShadow: "string",
+          boxSizing: "string",
+          captionSide: "string",
+          clear: "string",
+          clip: "string",
+          clipPath: "string",
+          clipRule: "string",
+          color: "string",
+          colorInterpolation: "string",
+          colorInterpolationFilters: "string",
+          colorProfile: "string",
+          colorRendering: "string",
+          content: "string",
+          counterIncrement: "string",
+          counterReset: "string",
+          cursor: "string",
+          direction: "string",
+          display: "string",
+          dominantBaseline: "string",
+          emptyCells: "string",
+          enableBackground: "string",
+          fill: "string",
+          fillOpacity: "string",
+          fillRule: "string",
+          filter: "string",
+          float: "string",
+          floodColor: "string",
+          floodOpacity: "string",
+          font: "string",
+          fontFamily: "string",
+          fontSize: "string",
+          fontStretch: "string",
+          fontStyle: "string",
+          fontVariant: "string",
+          fontWeight: "string",
+          glyphOrientationHorizontal: "string",
+          glyphOrientationVertical: "string",
+          height: "string",
+          imageRendering: "string",
+          kerning: "string",
+          left: "string",
+          letterSpacing: "string",
+          lightingColor: "string",
+          lineHeight: "string",
+          listStyle: "string",
+          listStyleImage: "string",
+          listStylePosition: "string",
+          listStyleType: "string",
+          margin: "string",
+          marginBottom: "string",
+          marginLeft: "string",
+          marginRight: "string",
+          marginTop: "string",
+          marker: "string",
+          markerEnd: "string",
+          markerMid: "string",
+          markerStart: "string",
+          mask: "string",
+          maxHeight: "string",
+          maxWidth: "string",
+          minHeight: "string",
+          minWidth: "string",
+          opacity: "string",
+          orphans: "string",
+          outline: "string",
+          outlineColor: "string",
+          outlineOffset: "string",
+          outlineStyle: "string",
+          outlineWidth: "string",
+          overflow: "string",
+          overflowWrap: "string",
+          overflowX: "string",
+          overflowY: "string",
+          padding: "string",
+          paddingBottom: "string",
+          paddingLeft: "string",
+          paddingRight: "string",
+          paddingTop: "string",
+          page: "string",
+          pageBreakAfter: "string",
+          pageBreakBefore: "string",
+          pageBreakInside: "string",
+          pointerEvents: "string",
+          position: "string",
+          quotes: "string",
+          resize: "string",
+          right: "string",
+          shapeRendering: "string",
+          size: "string",
+          speak: "string",
+          src: "string",
+          stopColor: "string",
+          stopOpacity: "string",
+          stroke: "string",
+          strokeDasharray: "string",
+          strokeDashoffset: "string",
+          strokeLinecap: "string",
+          strokeLinejoin: "string",
+          strokeMiterlimit: "string",
+          strokeOpacity: "string",
+          strokeWidth: "string",
+          tabSize: "string",
+          tableLayout: "string",
+          textAlign: "string",
+          textAnchor: "string",
+          textDecoration: "string",
+          textIndent: "string",
+          textLineThrough: "string",
+          textLineThroughColor: "string",
+          textLineThroughMode: "string",
+          textLineThroughStyle: "string",
+          textLineThroughWidth: "string",
+          textOverflow: "string",
+          textOverline: "string",
+          textOverlineColor: "string",
+          textOverlineMode: "string",
+          textOverlineStyle: "string",
+          textOverlineWidth: "string",
+          textRendering: "string",
+          textShadow: "string",
+          textTransform: "string",
+          textUnderline: "string",
+          textUnderlineColor: "string",
+          textUnderlineMode: "string",
+          textUnderlineStyle: "string",
+          textUnderlineWidth: "string",
+          top: "string",
+          unicodeBidi: "string",
+          unicodeRange: "string",
+          vectorEffect: "string",
+          verticalAlign: "string",
+          visibility: "string",
+          whiteSpace: "string",
+          width: "string",
+          wordBreak: "string",
+          wordSpacing: "string",
+          wordWrap: "string",
+          writingMode: "string",
+          zIndex: "string",
+          zoom: "string",
+          "!doc": "返回一个表示元素的style属性的对象.",
         },
-        "classList": {
+        classList: {
           "!type": "+DOMTokenList",
-          "!doc": "返回元素的class属性的标记列表."
+          "!doc": "返回元素的class属性的标记列表.",
         },
-        "title": {
+        title: {
           "!type": "string",
-          "!doc": " \"\u5efa\u7acb\u5f53\u9f20\u6807\u60ac\u505c\u5728\u663e\u793a\u7684\u8282\u70b9\u4e0a\u65f6\u5728\"\u5de5\u5177\u63d0\u793a\"\u5f39\u51fa\u7a97\u53e3\u4e2d\u663e\u793a\u7684\u6587\u672c.\","
+          "!doc":
+            ' "\u5efa\u7acb\u5f53\u9f20\u6807\u60ac\u505c\u5728\u663e\u793a\u7684\u8282\u70b9\u4e0a\u65f6\u5728"\u5de5\u5177\u63d0\u793a"\u5f39\u51fa\u7a97\u53e3\u4e2d\u663e\u793a\u7684\u6587\u672c.",',
         },
-        "width": {
+        width: {
           "!type": "number",
-          "!doc": "返回元素的布局宽度."
+          "!doc": "返回元素的布局宽度.",
         },
-        "height": {
+        height: {
           "!type": "number",
-          "!doc": "元素相对于元素的offsetParent的高度."
+          "!doc": "元素相对于元素的offsetParent的高度.",
         },
-        "getContext": {
+        getContext: {
           "!type": "fn(id: string) -> CanvasRenderingContext2D",
-          "!doc": " DOM画布元素公开了HTMLCanvasElement接口,该接口提供了用于操纵画布元素的布局和表示的属性和方法.HTMLCanvasElement接口继承了元素对象接口的属性和方法.",
+          "!doc":
+            " DOM画布元素公开了HTMLCanvasElement接口,该接口提供了用于操纵画布元素的布局和表示的属性和方法.HTMLCanvasElement接口继承了元素对象接口的属性和方法.",
         },
-        "innerHTML": {
+        innerHTML: {
           "!type": "string",
           "!doc": "设置或获取描述元素后代的HTML语法.",
-        }
+        },
       },
       "!doc": "表示HTML或XML文档中的元素.",
     },
-    "Document": {
+    Document: {
       "!type": "fn()",
-      "prototype": {
+      prototype: {
         "!proto": "Node.prototype",
-        "height": {
+        height: {
           "!type": "number",
           "!doc": "返回当前文档的<body>元素的高度.",
         },
-        "width": {
+        width: {
           "!type": "number",
           "!doc": "以像素为单位返回当前文档的<body>元素的宽度.",
         },
-        "body": {
+        body: {
           "!type": "+Element",
           "!doc": "返回当前文档的<body>或<frameset>节点.",
         },
-        "cookie": {
+        cookie: {
           "!type": "string",
           "!doc": "获取并设置与当前文档关联的cookie.",
         },
-        "URL": "string",
-        "title": {
+        URL: "string",
+        title: {
           "!type": "string",
-          "!doc": "获取或设置文档的标题."
+          "!doc": "获取或设置文档的标题.",
         },
-        "getElementById": {
+        getElementById: {
           "!type": "fn(id: string) -> +Element",
-          "!doc": "通过元素ID返回对该元素的引用."
+          "!doc": "通过元素ID返回对该元素的引用.",
         },
-        "getElementsByTagName": {
+        getElementsByTagName: {
           "!type": "fn(tagName: string) -> +NodeList",
-          "!doc": "返回具有给定标签名称的元素的NodeList.将搜索整个文档,包括根节点.返回的NodeList处于活动状态,这意味着它会自动更新自身以与DOM树保持同步,而无需再次调用document.getElementsByTagName."
+          "!doc":
+            "返回具有给定标签名称的元素的NodeList.将搜索整个文档,包括根节点.返回的NodeList处于活动状态,这意味着它会自动更新自身以与DOM树保持同步,而无需再次调用document.getElementsByTagName.",
         },
-        "getElementsByName": {
+        getElementsByName: {
           "!type": "fn(name: string) -> +HTMLCollection",
           "!doc": "返回HTML文档中具有给定名称的元素列表.",
         },
-        "getElementsByClassName": "Element.prototype.getElementsByClassName"
+        getElementsByClassName: "Element.prototype.getElementsByClassName",
       },
-      "!doc": "浏览器中加载的每个网页都有其自己的文档对象.此对象用作网页内容(DOM树,包括诸如<body>和<table>之类的元素)的入口点,并提供文档的全局功能(例如获取页面的URL和在文档中创建新元素)."
+      "!doc":
+        "浏览器中加载的每个网页都有其自己的文档对象.此对象用作网页内容(DOM树,包括诸如<body>和<table>之类的元素)的入口点,并提供文档的全局功能(例如获取页面的URL和在文档中创建新元素).",
     },
-    "document": {
+    document: {
       "!type": "+Document",
-      "!doc": "浏览器中加载的每个网页都有其自己的文档对象.此对象用作网页内容(DOM树,包括诸如<body>和<table>之类的元素)的入口点,并提供文档的全局功能(例如获取页面的URL和在文档中创建新元素)."
+      "!doc":
+        "浏览器中加载的每个网页都有其自己的文档对象.此对象用作网页内容(DOM树,包括诸如<body>和<table>之类的元素)的入口点,并提供文档的全局功能(例如获取页面的URL和在文档中创建新元素).",
     },
-    "Event": {
+    Event: {
       "!type": "fn()",
-      "prototype": {
-        "stopPropagation": {
+      prototype: {
+        stopPropagation: {
           "!type": "fn()",
-          "!doc": "防止当前事件进一步传播."
+          "!doc": "防止当前事件进一步传播.",
         },
-        "preventDefault": {
+        preventDefault: {
           "!type": "fn()",
-          "!doc": "如果可以取消事件,则取消该事件,而不停止事件的进一步传播."
+          "!doc": "如果可以取消事件,则取消该事件,而不停止事件的进一步传播.",
         },
-        "stopImmediatePropagation": {
+        stopImmediatePropagation: {
           "!type": "fn()",
-          "!doc": "防止同一事件的其他侦听器被调用."
+          "!doc": "防止同一事件的其他侦听器被调用.",
         },
-        "type": {
+        type: {
           "!type": "string",
-          "!doc": "返回包含事件类型的字符串."
+          "!doc": "返回包含事件类型的字符串.",
         },
-        "target": {
+        target: {
           "!type": "+Element",
-          "!doc": " EventTarget是由对象实现的DOM接口,这些对象可以接收DOM事件并具有侦听器.最常见的EventTarget是DOM元素,尽管其他对象也可以是EventTarget,例如文档,窗口,XMLHttpRequest,和别的."
+          "!doc":
+            " EventTarget是由对象实现的DOM接口,这些对象可以接收DOM事件并具有侦听器.最常见的EventTarget是DOM元素,尽管其他对象也可以是EventTarget,例如文档,窗口,XMLHttpRequest,和别的.",
         },
-        "clientX": {
+        clientX: {
           "!type": "number",
-          "!doc": "返回事件发生的应用程序客户区域内的水平坐标(与页面内的坐标相反).例如,单击客户区域左上角将始终显示clientX值为0的鼠标事件,无论页面是否水平滚动."
+          "!doc":
+            "返回事件发生的应用程序客户区域内的水平坐标(与页面内的坐标相反).例如,单击客户区域左上角将始终显示clientX值为0的鼠标事件,无论页面是否水平滚动.",
         },
-        "clientY": {
+        clientY: {
           "!type": "number",
-          "!doc": "返回事件发生在应用程序客户区中的垂直坐标(与页面中的坐标相反).例如,单击客户区左上角将始终显示不管页面是否垂直滚动,clientY值为0的鼠标事件."
+          "!doc":
+            "返回事件发生在应用程序客户区中的垂直坐标(与页面中的坐标相反).例如,单击客户区左上角将始终显示不管页面是否垂直滚动,clientY值为0的鼠标事件.",
         },
-        "keyCode": {
+        keyCode: {
           "!type": "number",
-          "!doc": "返回按键事件中的非字符键或任何其他类型的键盘事件中的任何键的Unicode值.",
+          "!doc":
+            "返回按键事件中的非字符键或任何其他类型的键盘事件中的任何键的Unicode值.",
         },
-        "charCode": {
+        charCode: {
           "!type": "number",
-          "!doc": "返回在按键事件期间按下的字符键的Unicode值."
+          "!doc": "返回在按键事件期间按下的字符键的Unicode值.",
         },
-        "which": {
+        which: {
           "!type": "number",
-          "!doc": "返回所按下键的数字keyCode或所按下字母数字键的字符代码(charCode)."
+          "!doc":
+            "返回所按下键的数字keyCode或所按下字母数字键的字符代码(charCode).",
         },
-        "button": {
+        button: {
           "!type": "number",
-          "!doc": "指示导致事件的鼠标按钮."
+          "!doc": "指示导致事件的鼠标按钮.",
         },
-        "shiftKey": {
+        shiftKey: {
           "!type": "bool",
           "!doc": "指示事件触发时是否按下SHIFT键.",
         },
-        "ctrlKey": {
+        ctrlKey: {
           "!type": "bool",
           "!doc": "指示事件触发时是否按下了CTRL键.",
         },
-        "altKey": {
+        altKey: {
           "!type": "bool",
           "!doc": "指示事件触发时是否按下ALT键.",
-        }
-      }
+        },
+      },
     },
-    "Storage": {
-      "length": {
+    Storage: {
+      length: {
         "!type": "number",
-        "!doc": "存储接口的length只读属性返回一个整数,该整数表示存储在存储对象中的数据项的数量.",
+        "!doc":
+          "存储接口的length只读属性返回一个整数,该整数表示存储在存储对象中的数据项的数量.",
       },
-      "setItem": {
+      setItem: {
         "!type": "fn(name: string, value: string)",
-        "!doc": "存储接口的setItem()方法在传递键名称和值时,会将该键添加到存储中,或者更新该键的值(如果已存在).",
+        "!doc":
+          "存储接口的setItem()方法在传递键名称和值时,会将该键添加到存储中,或者更新该键的值(如果已存在).",
       },
-      "getItem": {
+      getItem: {
         "!type": "fn(name: string) -> string",
         "!doc": "存储接口的getItem()方法在传递键名时将返回该键的值.",
       },
-      "key": {
+      key: {
         "!type": "fn(index: number) -> string",
-        "!doc": "存储接口的key()方法传递数字n时,返回存储中第n个键的名称.键的顺序是用户代理定义的,因此您不应依赖它."
+        "!doc":
+          "存储接口的key()方法传递数字n时,返回存储中第n个键的名称.键的顺序是用户代理定义的,因此您不应依赖它.",
       },
-      "removeItem": {
+      removeItem: {
         "!type": "fn(key: string)",
         "!doc": "存储接口的removeItem()方法在传递了键名后,将从存储中删除该键.",
       },
-      "clear": {
+      clear: {
         "!type": "fn()",
-        "!doc": "存储接口的clear()方法在被调用时将从存储中清空所有键."
-      }
+        "!doc": "存储接口的clear()方法在被调用时将从存储中清空所有键.",
+      },
     },
-    "localStorage": {
+    localStorage: {
       "!type": "Storage",
-      "!doc": " localStorage属性允许您访问本地存储对象.localStorage与sessionStorage类似.唯一的区别是,虽然存储在localStorage中的数据没有到期时间,但是浏览会话时存储在sessionStorage中的数据将被清除.结束-也就是说,当浏览器关闭时.\ n \ n请注意,存储在localStorage或sessionStorage中的数据特定于页面协议."
+      "!doc":
+        " localStorage属性允许您访问本地存储对象.localStorage与sessionStorage类似.唯一的区别是,虽然存储在localStorage中的数据没有到期时间,但是浏览会话时存储在sessionStorage中的数据将被清除.结束-也就是说,当浏览器关闭时. n  n请注意,存储在localStorage或sessionStorage中的数据特定于页面协议.",
     },
-    "console": {
-      "assert": {
+    console: {
+      assert: {
         "!type": "fn(assertion: bool, text: string)",
         "!doc": "如果断言为false,则将错误消息写入控制台.",
       },
-      "error": {
+      error: {
         "!type": "fn(...msg: ?)",
         "!doc": "将错误消息输出到Web控制台.",
       },
-      "info": {
+      info: {
         "!type": "fn(...msg: ?)",
         "!doc": "将参考消息输出到Web控制台.",
       },
-      "log": {
+      log: {
         "!type": "fn(...msg: ?)",
         "!doc": "将消息输出到Web控制台.",
       },
-      "time": {
+      time: {
         "!type": "fn(label: string)",
         "!doc": "启动计时器,您可以使用该计时器来跟踪操作需要多长时间.",
       },
-      "timeEnd": {
+      timeEnd: {
         "!type": "fn(label: string)",
         "!doc": "停止以前通过调用console.time()启动的计时器.",
       },
-      "trace": {
+      trace: {
         "!type": "fn()",
         "!doc": "将堆栈跟踪输出到Web控制台.",
       },
-      "warn": {
+      warn: {
         "!type": "fn(...msg: ?)",
         "!doc": "将警告消息输出到Web控制台.",
       },
-      "!doc": "控制台对象提供对浏览器调试控制台的访问.其工作方式的细节因浏览器而异,但实际上提供了一组事实上的功能.",
+      "!doc":
+        "控制台对象提供对浏览器调试控制台的访问.其工作方式的细节因浏览器而异,但实际上提供了一组事实上的功能.",
     },
-    "window": {
+    window: {
       "!type": "<top>",
       "!doc": "窗口对象代表一个包含DOM文档的窗口.",
     },
-    "self": {
+    self: {
       "!type": "<top>",
       "!doc": "将对象引用返回到窗口对象.",
     },
-    "devicePixelRatio": "number",
-    "requestAnimationFrame": {
+    devicePixelRatio: "number",
+    requestAnimationFrame: {
       "!type": "fn(callback: fn(timestamp: number)) -> number",
-      "!doc": " Window.requestAnimationFrame()方法告诉浏览器您希望执行动画,并请求浏览器在下一次重绘之前调用指定的函数来更新动画.该方法将回调作为参数在重新粉刷之前被调用."
+      "!doc":
+        " Window.requestAnimationFrame()方法告诉浏览器您希望执行动画,并请求浏览器在下一次重绘之前调用指定的函数来更新动画.该方法将回调作为参数在重新粉刷之前被调用.",
     },
-    "cancelAnimationFrame": {
+    cancelAnimationFrame: {
       "!type": "fn(number)n",
       "!doc": "取消先前安排的动画帧请求.",
     },
-    "alert": {
+    alert: {
       "!type": "fn(message: string)",
-      "!doc": "显示具有指定内容和确定按钮的警报对话框."
+      "!doc": "显示具有指定内容和确定按钮的警报对话框.",
     },
-    "confirm": {
+    confirm: {
       "!type": "fn(message: string) -> bool",
       "!doc": "显示带有消息和两个按钮(确定和取消)的模式对话框.",
     },
-    "prompt": {
+    prompt: {
       "!type": "fn(message: string, value: string) -> string",
       "!doc": "显示一个对话框,提示用户输入一些文本.",
     },
-    "setTimeout": {
+    setTimeout: {
       "!type": "fn(f: fn(), ms: number) -> number",
-      "!doc": "在指定的延迟后调用函数或执行代码段."
+      "!doc": "在指定的延迟后调用函数或执行代码段.",
     },
-    "clearTimeout": {
+    clearTimeout: {
       "!type": "fn(timeout: number)",
       "!doc": "清除window.setTimeout()设置的延迟.",
     },
-    "setInterval": {
+    setInterval: {
       "!type": "fn(f: fn(), ms: number) -> number",
-      "!doc": "反复调用一个函数或执行代码段,每次调用该函数之间有固定的时间延迟.",
+      "!doc":
+        "反复调用一个函数或执行代码段,每次调用该函数之间有固定的时间延迟.",
     },
-    "clearInterval": {
+    clearInterval: {
       "!type": "fn(interval: number)",
       "!doc": "取消使用setInterval设置的重复操作.",
     },
-    "atob": {
+    atob: {
       "!type": "fn(encoded: string) -> string",
-      "!doc": "解码使用base-64编码编码的数据字符串."
+      "!doc": "解码使用base-64编码编码的数据字符串.",
     },
-    "btoa": {
+    btoa: {
       "!type": "fn(data: string) -> string",
       "!doc": "从一串二进制数据创建一个base-64编码的ASCII字符串.",
     },
-    "getComputedStyle": {
+    getComputedStyle: {
       "!type": "fn(node: +Element, pseudo?: string) -> Element.prototype.style",
       "!doc": "给出元素的所有CSS属性的最终使用值.",
     },
-    "CanvasRenderingContext2D": {
-      "canvas": "+Element",
-      "width": "number",
-      "height": "number",
-      "commit": "fn()",
-      "save": "fn()",
-      "restore": "fn()",
-      "currentTransform": "?",
-      "scale": "fn(x: number, y: number)",
-      "rotate": "fn(angle: number)",
-      "translate": "fn(x: number, y: number)",
-      "transform": "fn(a: number, b: number, c: number, d: number, e: number, f: number)",
-      "setTransform": "fn(a: number, b: number, c: number, d: number, e: number, f: number)",
-      "resetTransform": "fn()",
-      "globalAlpha": "number",
-      "globalCompositeOperation": "string",
-      "imageSmoothingEnabled": "bool",
-      "strokeStyle": "string",
-      "fillStyle": "string",
-      "createLinearGradient": "fn(x0: number, y0: number, x1: number, y1: number) -> ?",
-      "createPattern": "fn(image: ?, repetition: string) -> ?",
-      "shadowOffsetX": "number",
-      "shadowOffsetY": "number",
-      "shadowBlur": "number",
-      "shadowColor": "string",
-      "clearRect": "fn(x: number, y: number, w: number, h: number)",
-      "fillRect": "fn(x: number, y: number, w: number, h: number)",
-      "strokeRect": "fn(x: number, y: number, w: number, h: number)",
-      "fillRule": "string",
-      "fill": "fn()",
-      "beginPath": "fn()",
-      "stroke": "fn()",
-      "clip": "fn()",
-      "resetClip": "fn()",
-      "fillText": "fn(text: string, x: number, y: number, maxWidth: number)",
-      "strokeText": "fn(text: string, x: number, y: number, maxWidth: number)",
-      "measureText": "fn(text: string) -> ?",
-      "drawImage": "fn(image: ?, dx: number, dy: number)",
-      "createImageData": "fn(sw: number, sh: number) -> ?",
-      "getImageData": "fn(sx: number, sy: number, sw: number, sh: number) -> ?",
-      "putImageData": "fn(imagedata: ?, dx: number, dy: number)",
-      "lineWidth": "number",
-      "lineCap": "string",
-      "lineJoin": "string",
-      "miterLimit": "number",
-      "setLineDash": "fn(segments: [number])",
-      "getLineDash": "fn() -> [number]",
-      "lineDashOffset": "number",
-      "font": "string",
-      "textAlign": "string",
-      "textBaseline": "string",
-      "direction": "string",
-      "closePath": "fn()",
-      "moveTo": "fn(x: number, y: number)",
-      "lineTo": "fn(x: number, y: number)",
-      "quadraticCurveTo": "fn(cpx: number, cpy: number, x: number, y: number)",
-      "bezierCurveTo": "fn(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number)",
-      "arcTo": "fn(x1: number, y1: number, x2: number, y2: number, radius: number)",
-      "rect": "fn(x: number, y: number, w: number, h: number)",
-      "arc": "fn(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: bool)",
-      "ellipse": "fn(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise: bool)"
-    }
+    CanvasRenderingContext2D: {
+      canvas: "+Element",
+      width: "number",
+      height: "number",
+      commit: "fn()",
+      save: "fn()",
+      restore: "fn()",
+      currentTransform: "?",
+      scale: "fn(x: number, y: number)",
+      rotate: "fn(angle: number)",
+      translate: "fn(x: number, y: number)",
+      transform:
+        "fn(a: number, b: number, c: number, d: number, e: number, f: number)",
+      setTransform:
+        "fn(a: number, b: number, c: number, d: number, e: number, f: number)",
+      resetTransform: "fn()",
+      globalAlpha: "number",
+      globalCompositeOperation: "string",
+      imageSmoothingEnabled: "bool",
+      strokeStyle: "string",
+      fillStyle: "string",
+      createLinearGradient:
+        "fn(x0: number, y0: number, x1: number, y1: number) -> ?",
+      createPattern: "fn(image: ?, repetition: string) -> ?",
+      shadowOffsetX: "number",
+      shadowOffsetY: "number",
+      shadowBlur: "number",
+      shadowColor: "string",
+      clearRect: "fn(x: number, y: number, w: number, h: number)",
+      fillRect: "fn(x: number, y: number, w: number, h: number)",
+      strokeRect: "fn(x: number, y: number, w: number, h: number)",
+      fillRule: "string",
+      fill: "fn()",
+      beginPath: "fn()",
+      stroke: "fn()",
+      clip: "fn()",
+      resetClip: "fn()",
+      fillText: "fn(text: string, x: number, y: number, maxWidth: number)",
+      strokeText: "fn(text: string, x: number, y: number, maxWidth: number)",
+      measureText: "fn(text: string) -> ?",
+      drawImage: "fn(image: ?, dx: number, dy: number)",
+      createImageData: "fn(sw: number, sh: number) -> ?",
+      getImageData: "fn(sx: number, sy: number, sw: number, sh: number) -> ?",
+      putImageData: "fn(imagedata: ?, dx: number, dy: number)",
+      lineWidth: "number",
+      lineCap: "string",
+      lineJoin: "string",
+      miterLimit: "number",
+      setLineDash: "fn(segments: [number])",
+      getLineDash: "fn() -> [number]",
+      lineDashOffset: "number",
+      font: "string",
+      textAlign: "string",
+      textBaseline: "string",
+      direction: "string",
+      closePath: "fn()",
+      moveTo: "fn(x: number, y: number)",
+      lineTo: "fn(x: number, y: number)",
+      quadraticCurveTo: "fn(cpx: number, cpy: number, x: number, y: number)",
+      bezierCurveTo:
+        "fn(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number)",
+      arcTo:
+        "fn(x1: number, y1: number, x2: number, y2: number, radius: number)",
+      rect: "fn(x: number, y: number, w: number, h: number)",
+      arc: "fn(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: bool)",
+      ellipse:
+        "fn(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise: bool)",
+    },
   },
   {
     "!name": "ecmascript",
-    "Infinity": {
+    Infinity: {
       "!type": "number",
-      "!doc": "代表无穷大的数值."
+      "!doc": "代表无穷大的数值.",
     },
-    "undefined": {
+    undefined: {
       "!type": "?",
       "!doc": "该值未定义.",
     },
-    "NaN": {
+    NaN: {
       "!type": "number",
-      "!doc": "代表非数字的值."
+      "!doc": "代表非数字的值.",
     },
-    "Object": {
+    Object: {
       "!type": "fn()",
-      "create": {
+      create: {
         "!type": "fn(proto: ?) -> !custom:Object_create",
         "!doc": "使用指定的原型对象和属性创建一个新对象.",
       },
-      "defineProperty": {
-        "!type": "fn(obj: ?, prop: string, desc: propertyDescriptor) -> !custom:Object_defineProperty",
-        "!doc": "直接在对象上定义新属性,或修改对象上的现有属性,然后返回对象.如果想了解如何将Object.defineProperty方法与类似二进制标志的语法一起使用,请参阅本文."
+      defineProperty: {
+        "!type":
+          "fn(obj: ?, prop: string, desc: propertyDescriptor) -> !custom:Object_defineProperty",
+        "!doc":
+          "直接在对象上定义新属性,或修改对象上的现有属性,然后返回对象.如果想了解如何将Object.defineProperty方法与类似二进制标志的语法一起使用,请参阅本文.",
       },
-      "keys": {
+      keys: {
         "!type": "fn(obj: ?) -> [string]",
-        "!doc": "返回一个给定对象自己的可枚举属性的数组,其顺序与for-in循环所提供的顺序相同(不同之处在于for-in循环也枚举了原型链中的属性). "
+        "!doc":
+          "返回一个给定对象自己的可枚举属性的数组,其顺序与for-in循环所提供的顺序相同(不同之处在于for-in循环也枚举了原型链中的属性). ",
       },
-      "assign": {
+      assign: {
         "!type": "fn(target: ?, source: ?, source?: ?) -> !0",
         "!effects": ["copy !1 !0", "copy !2 !0", "copy !3 !0"],
-        "!doc": " Object.assign()方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象.它将返回目标对象.,",
+        "!doc":
+          " Object.assign()方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象.它将返回目标对象.,",
       },
-      "prototype": {
+      prototype: {
         "!stdProto": "Object",
-        "toString": {
+        toString: {
           "!type": "fn() -> string",
-          "!doc": "返回表示对象的字符串."
+          "!doc": "返回表示对象的字符串.",
         },
-        "hasOwnProperty": {
+        hasOwnProperty: {
           "!type": "fn(prop: string) -> bool",
           "!doc": "返回一个布尔值,指示对象是否具有指定的属性.",
-        }
+        },
       },
     },
-    "Function": {
+    Function: {
       "!type": "fn(body: string) -> fn()",
-      "prototype": {
+      prototype: {
         "!stdProto": "Function",
-        "apply": {
+        apply: {
           "!type": "fn(this: ?, args: [?])",
-          "!effects": [
-            "call and return !this this=!0 !1.<i> !1.<i> !1.<i>"
-          ],
-          "!doc": "调用具有给定值的函数,并以数组(或类似对象的数组)形式提供参数.",
+          "!effects": ["call and return !this this=!0 !1.<i> !1.<i> !1.<i>"],
+          "!doc":
+            "调用具有给定值的函数,并以数组(或类似对象的数组)形式提供参数.",
         },
-        "call": {
+        call: {
           "!type": "fn(this: ?, args?: ?) -> !this.!ret",
-          "!effects": [
-            "call and return !this this=!0 !1 !2 !3 !4"
-          ],
+          "!effects": ["call and return !this this=!0 !1 !2 !3 !4"],
           "!doc": "调用具有给定值和单独提供的参数的函数.",
         },
-        "bind": {
+        bind: {
           "!type": "fn(this: ?, args?: ?) -> !custom:Function_bind",
-          "!doc": "创建一个新函数,该函数在被调用时将其this关键字设置为提供的值,并在调用新函数时提供给定的参数序列.",
+          "!doc":
+            "创建一个新函数,该函数在被调用时将其this关键字设置为提供的值,并在调用新函数时提供给定的参数序列.",
         },
-        "prototype": "?"
+        prototype: "?",
       },
     },
-    "Array": {
+    Array: {
       "!type": "fn(size: number) -> !custom:Array_ctor",
-      "isArray": {
+      isArray: {
         "!type": "fn(value: ?) -> bool",
         "!doc": "如果对象是数组,则返回true,否则返回false.",
       },
-      "from": {
-        "!type": "fn(arrayLike: ?, mapFn?: fn(elt: ?, i: number) -> ?, thisArg?: ?) -> [!0.<i>]",
-        "!effects": [
-          "call !1 this=!2 !0.<i> number"
-        ],
-        "!doc": " Array.from()方法从类似数组或可迭代的对象创建一个新的Array实例.,",
+      from: {
+        "!type":
+          "fn(arrayLike: ?, mapFn?: fn(elt: ?, i: number) -> ?, thisArg?: ?) -> [!0.<i>]",
+        "!effects": ["call !1 this=!2 !0.<i> number"],
+        "!doc":
+          " Array.from()方法从类似数组或可迭代的对象创建一个新的Array实例.,",
       },
-      "of": {
+      of: {
         "!type": "fn(elementN: ?) -> [!0]",
-        "!doc": " Array.of()方法创建一个新的Array实例,该实例具有可变数量的参数,而不考虑参数的数量或类型.,",
+        "!doc":
+          " Array.of()方法创建一个新的Array实例,该实例具有可变数量的参数,而不考虑参数的数量或类型.,",
       },
-      "prototype": {
+      prototype: {
         "!stdProto": "Array",
-        "length": {
+        length: {
           "!type": "number",
           "!doc": "一个无符号的32位整数,指定数组中的元素数.",
         },
-        "concat": {
+        concat: {
           "!type": "fn(other: [?]) -> !this",
           "!doc": "返回一个新数组,该数组由该数组与其他数组和/或值组成.",
         },
-        "join": {
+        join: {
           "!type": "fn(separator?: string) -> string",
-          "!doc": "将数组的所有元素连接到字符串中."
+          "!doc": "将数组的所有元素连接到字符串中.",
         },
-        "splice": {
+        splice: {
           "!type": "fn(pos: number, amount: number, newelt?: ?) -> [?]",
           "!doc": "更改数组的内容,在删除旧元素的同时添加新元素.",
         },
-        "pop": {
+        pop: {
           "!type": "fn() -> !this.<i>",
           "!doc": "从数组中删除最后一个元素并返回该元素.",
         },
-        "push": {
+        push: {
           "!type": "fn(newelt: ?) -> number",
-          "!effects": [
-            "propagate !0 !this.<i>"
-          ],
+          "!effects": ["propagate !0 !this.<i>"],
           "!doc": "通过添加给定元素并返回数组的新长度来更改数组.",
         },
-        "shift": {
+        shift: {
           "!type": "fn() -> !this.<i>",
           "!doc": "从数组中删除第一个元素并返回该元素.此方法更改数组的长度.",
         },
-        "unshift": {
+        unshift: {
           "!type": "fn(newelt: ?) -> number",
-          "!effects": [
-            "propagate !0 !this.<i>"
-          ],
+          "!effects": ["propagate !0 !this.<i>"],
           "!doc": "将一个或多个元素添加到数组的开头,并返回数组的新长度.",
         },
-        "slice": {
+        slice: {
           "!type": "fn(from?: number, to?: number) -> !this",
-          "!doc": "返回数组一部分的浅表副本."
+          "!doc": "返回数组一部分的浅表副本.",
         },
-        "reverse": {
+        reverse: {
           "!type": "fn()",
-          "!doc": "就地反转数组.第一个数组元素变为最后一个,而最后一个数组变为第一个.",
+          "!doc":
+            "就地反转数组.第一个数组元素变为最后一个,而最后一个数组变为第一个.",
         },
-        "sort": {
+        sort: {
           "!type": "fn(compare?: fn(a: ?, b: ?) -> number)",
-          "!effects": [
-            "call !0 !this.<i> !this.<i>"
-          ],
-          "!doc": "将数组中的元素排序并返回数组."
+          "!effects": ["call !0 !this.<i> !this.<i>"],
+          "!doc": "将数组中的元素排序并返回数组.",
         },
-        "indexOf": {
+        indexOf: {
           "!type": "fn(elt: ?, from?: number) -> number",
-          "!doc": "返回在数组中可以找到给定元素的第一个索引;如果不存在,则返回-1.",
+          "!doc":
+            "返回在数组中可以找到给定元素的第一个索引;如果不存在,则返回-1.",
         },
-        "lastIndexOf": {
+        lastIndexOf: {
           "!type": "fn(elt: ?, from?: number) -> number",
-          "!doc": "返回在数组中找到给定元素的最后一个索引,如果不存在则返回-1.从fromIndex开始向后搜索数组.",
+          "!doc":
+            "返回在数组中找到给定元素的最后一个索引,如果不存在则返回-1.从fromIndex开始向后搜索数组.",
         },
-        "filter": {
-          "!type": "fn(test: fn(elt: ?, i: number, array: +Array) -> bool, context?: ?) -> !this",
-          "!effects": [
-            "call !0 this=!1 !this.<i> number !this"
-          ],
+        filter: {
+          "!type":
+            "fn(test: fn(elt: ?, i: number, array: +Array) -> bool, context?: ?) -> !this",
+          "!effects": ["call !0 this=!1 !this.<i> number !this"],
           "!doc": "创建一个新数组,其中包含所有通过提供的功能实现的测试的元素.",
         },
-        "forEach": {
+        forEach: {
           "!type": "fn(f: fn(elt: ?, i: number, array: +Array), context?: ?)",
-          "!effects": [
-            "call !0 this=!1 !this.<i> number !this"
-          ],
-          "!doc": "每个数组元素执行一次提供的功能."
+          "!effects": ["call !0 this=!1 !this.<i> number !this"],
+          "!doc": "每个数组元素执行一次提供的功能.",
         },
-        "map": {
-          "!type": "fn(f: fn(elt: ?, i: number, array: +Array) -> ?, context?: ?) -> [!0.!ret]",
-          "!effects": [
-            "call !0 this=!1 !this.<i> number !this"
-          ],
+        map: {
+          "!type":
+            "fn(f: fn(elt: ?, i: number, array: +Array) -> ?, context?: ?) -> [!0.!ret]",
+          "!effects": ["call !0 this=!1 !this.<i> number !this"],
           "!doc": "创建一个新数组,其结果是对该数组中的每个元素调用提供的函数.",
         },
-        "reduce": {
-          "!type": "fn(combine: fn(sum: ?, elt: ?, i: number, array: +Array) -> ?, init?: ?) -> !0.!ret",
-          "!effects": [
-            "call !0 !1 !this.<i> number !this"
-          ],
-          "!doc": "对一个累加器和数组的每个值(从左到右)应用一个函数,以将其减小为单个值.",
+        reduce: {
+          "!type":
+            "fn(combine: fn(sum: ?, elt: ?, i: number, array: +Array) -> ?, init?: ?) -> !0.!ret",
+          "!effects": ["call !0 !1 !this.<i> number !this"],
+          "!doc":
+            "对一个累加器和数组的每个值(从左到右)应用一个函数,以将其减小为单个值.",
         },
-        "fill": {
+        fill: {
           "!type": "fn(value: ?, start?: number, end?: number) -> !this",
-          "!doc": " fill()方法使用静态值填充数组的所有元素,从开始索引到结束索引.,",
+          "!doc":
+            " fill()方法使用静态值填充数组的所有元素,从开始索引到结束索引.,",
         },
-        "find": {
-          "!type": "fn(callback: fn(element: ?, index: number, array: [?]) -> bool, thisArg?: ?) -> !this.<i>",
+        find: {
+          "!type":
+            "fn(callback: fn(element: ?, index: number, array: [?]) -> bool, thisArg?: ?) -> !this.<i>",
           "!effects": ["call !0 this=!2 !this.<i> number"],
-          "!doc": "如果数组中的元素满足提供的测试功能,则find()方法将在数组中返回一个值.否则,返回undefined.,",
+          "!doc":
+            "如果数组中的元素满足提供的测试功能,则find()方法将在数组中返回一个值.否则,返回undefined.,",
         },
-        "findIndex": {
-          "!type": "fn(callback: fn(element: ?, index: number, array: [?]), thisArg?: ?) -> number",
+        findIndex: {
+          "!type":
+            "fn(callback: fn(element: ?, index: number, array: [?]), thisArg?: ?) -> number",
           "!effects": ["call !0 this=!2 !this.<i> number"],
-          "!doc": "如果数组中的元素满足提供的测试功能,则findIndex()方法将返回数组中的索引.否则返回-1.,",
+          "!doc":
+            "如果数组中的元素满足提供的测试功能,则findIndex()方法将返回数组中的索引.否则返回-1.,",
         },
-        "keys": {
+        keys: {
           "!type": "fn() -> +iter[:t=number]",
-          "!doc": " keys()方法返回一个新的数组迭代器,其中包含数组中每个索引的键.,",
+          "!doc":
+            " keys()方法返回一个新的数组迭代器,其中包含数组中每个索引的键.,",
         },
-        "values": {
+        values: {
           "!type": "fn() -> +iter[:t=!this.<i>]",
-          "!doc": " values()方法返回一个新的Array Iterator对象,该对象包含数组中每个索引的值.,",
+          "!doc":
+            " values()方法返回一个新的Array Iterator对象,该对象包含数组中每个索引的值.,",
         },
-        "includes": {
+        includes: {
           "!type": "fn(value: ?, fromIndex?: number) -> bool",
           "!doc": "确定数组是否包含某个元素,并根据需要返回true或false.,",
-        }
+        },
       },
     },
-    "String": {
+    String: {
       "!type": "fn(value: ?) -> string",
-      "prototype": {
+      prototype: {
         "!stdProto": "String",
-        "length": {
+        length: {
           "!type": "number",
-          "!doc": "表示字符串的长度."
+          "!doc": "表示字符串的长度.",
         },
         "<i>": "string",
-        "charAt": {
+        charAt: {
           "!type": "fn(i: number) -> string",
           "!doc": "从字符串中返回指定的字符.",
         },
-        "charCodeAt": {
+        charCodeAt: {
           "!type": "fn(i: number) -> number",
-          "!doc": "返回给定索引处字符的数字Unicode值(Unicode代码点> 0x10000除外).",
+          "!doc":
+            "返回给定索引处字符的数字Unicode值(Unicode代码点> 0x10000除外).",
         },
-        "indexOf": {
+        indexOf: {
           "!type": "fn(char: string, from?: number) -> number",
-          "!doc": "返回指定值首次出现的调用String对象中的索引,从fromIndex开始搜索,\ n如果未找到该值,则返回-1.",
+          "!doc":
+            "返回指定值首次出现的调用String对象中的索引,从fromIndex开始搜索, n如果未找到该值,则返回-1.",
         },
-        "lastIndexOf": {
+        lastIndexOf: {
           "!type": "fn(char: string, from?: number) -> number",
-          "!doc": "返回指定值最后一次出现的调用String对象内的索引,如果未找到则返回-1.从fromIndex开始向后搜索调用字符串.",
+          "!doc":
+            "返回指定值最后一次出现的调用String对象内的索引,如果未找到则返回-1.从fromIndex开始向后搜索调用字符串.",
         },
-        "substring": {
+        substring: {
           "!type": "fn(from: number, to?: number) -> string",
-          "!doc": "返回一个索引与另一个索引之间或字符串末尾的字符串子集.<br/>from为起始位置,to为终止位置.",
+          "!doc":
+            "返回一个索引与另一个索引之间或字符串末尾的字符串子集.<br/>from为起始位置,to为终止位置.",
         },
-        "substr": {
+        substr: {
           "!type": "fn(from: number, length?: number) -> string",
-          "!doc": "以指定的字符数返回从指定位置开始的字符串中的字符.<br/>from为起始位置,length为长度",
+          "!doc":
+            "以指定的字符数返回从指定位置开始的字符串中的字符.<br/>from为起始位置,length为长度",
         },
-        "slice": {
+        slice: {
           "!type": "fn(from: number, to?: number) -> string",
           "!doc": "提取字符串的一部分并返回新的字符串.",
         },
-        "padStart": {
+        padStart: {
           "!type": "fn(targetLength: number, padString?: string) -> string",
-          "!doc": "用另一个字符串(如果需要,重复)填充当前字符串,以使结果字符串达到给定的长度.",
+          "!doc":
+            "用另一个字符串(如果需要,重复)填充当前字符串,以使结果字符串达到给定的长度.",
         },
-        "padEnd": {
+        padEnd: {
           "!type": "fn(targetLength: number, padString?: string) -> string",
-          "!doc": "用给定的字符串(如果需要,重复)填充当前字符串,以使结果字符串达到给定的长度.",
+          "!doc":
+            "用给定的字符串(如果需要,重复)填充当前字符串,以使结果字符串达到给定的长度.",
         },
-        "trim": {
+        trim: {
           "!type": "fn() -> string",
           "!doc": "从字符串的两端删除空格.",
         },
-        "trimStart": {
+        trimStart: {
           "!type": "fn() -> string",
           "!doc": "从字符串的开头删除空格.",
         },
-        "trimEnd": {
+        trimEnd: {
           "!type": "fn() -> string",
           "!doc": "从字符串末尾删除空格.",
         },
-        "toUpperCase": {
+        toUpperCase: {
           "!type": "fn() -> string",
-          "!doc": "返回转换为大写的调用字符串值."
+          "!doc": "返回转换为大写的调用字符串值.",
         },
-        "toLowerCase": {
+        toLowerCase: {
           "!type": "fn() -> string",
-          "!doc": "返回转换为小写的调用字符串值."
+          "!doc": "返回转换为小写的调用字符串值.",
         },
-        "split": {
+        split: {
           "!type": "fn(pattern?: string|+RegExp, limit?: number) -> [string]",
           "!doc": "通过将字符串分成子字符串,将String对象拆分为字符串数组.",
         },
-        "concat": {
+        concat: {
           "!type": "fn(other: string) -> string",
-          "!doc": "将两个或多个字符串的文本合并,并返回一个新字符串."
+          "!doc": "将两个或多个字符串的文本合并,并返回一个新字符串.",
         },
-        "match": {
+        match: {
           "!type": "fn(pattern: +RegExp) -> [string]",
           "!doc": "用于将字符串与正则表达式匹配时用于检索匹配.",
         },
-        "replace": {
+        replace: {
           "!type": "fn(pattern: string|+RegExp, replacement: string) -> string",
-          "!doc": "返回一个新字符串,该字符串的某个或所有匹配项都由替换项替换.该模式可以是字符串或RegExp,并且替换项可以是字符串或每个匹配项将调用的函数. "
+          "!doc":
+            "返回一个新字符串,该字符串的某个或所有匹配项都由替换项替换.该模式可以是字符串或RegExp,并且替换项可以是字符串或每个匹配项将调用的函数. ",
         },
-        "endsWith": {
+        endsWith: {
           "!type": "fn(searchString: string, position?: number) -> bool",
-          "!doc": " endsWith()方法确定一个字符串是否以另一个字符串的字符结尾,并根据需要返回true或false.,",
+          "!doc":
+            " endsWith()方法确定一个字符串是否以另一个字符串的字符结尾,并根据需要返回true或false.,",
         },
-        "startsWith": {
+        startsWith: {
           "!type": "fn(searchString: string, position?: number) -> bool",
-          "!doc": " startsWith()方法确定一个字符串是否以另一个字符串的字符开头,并根据需要返回true或false.,",
-        }
+          "!doc":
+            " startsWith()方法确定一个字符串是否以另一个字符串的字符开头,并根据需要返回true或false.,",
+        },
       },
     },
-    "Number": {
+    Number: {
       "!type": "fn(value: ?) -> number",
-      "MAX_VALUE": {
+      MAX_VALUE: {
         "!type": "number",
-        "!doc": " JavaScript中可表示的最大数值."
+        "!doc": " JavaScript中可表示的最大数值.",
       },
-      "MIN_VALUE": {
+      MIN_VALUE: {
         "!type": "number",
-        "!doc": " JavaScript中可表示的最小正数值."
+        "!doc": " JavaScript中可表示的最小正数值.",
       },
-      "POSITIVE_INFINITY": {
+      POSITIVE_INFINITY: {
         "!type": "number",
-        "!doc": "代表正无穷大值的值."
+        "!doc": "代表正无穷大值的值.",
       },
-      "NEGATIVE_INFINITY": {
+      NEGATIVE_INFINITY: {
         "!type": "number",
-        "!doc": "代表负无穷大值的值."
+        "!doc": "代表负无穷大值的值.",
       },
-      "prototype": {
+      prototype: {
         "!stdProto": "Number",
-        "toString": {
+        toString: {
           "!type": "fn(radix?: number) -> string",
-          "!doc": "返回代表指定Number对象的字符串"
+          "!doc": "返回代表指定Number对象的字符串",
         },
-        "toFixed": {
+        toFixed: {
           "!type": "fn(digits: number) -> string",
-          "!doc": "使用定点符号格式化数字"
+          "!doc": "使用定点符号格式化数字",
         },
-        "toExponential": {
+        toExponential: {
           "!type": "fn(digits: number) -> string",
-          "!doc": "返回以指数表示形式表示Number对象的字符串"
+          "!doc": "返回以指数表示形式表示Number对象的字符串",
         },
-        "toPrecision": {
+        toPrecision: {
           "!type": "fn(digits: number) -> string",
           "!doc": " toPrecision()方法返回一个字符串,该数字表示指定精度的数字.",
-        }
+        },
       },
-      "EPSILON": {
+      EPSILON: {
         "!type": "number",
-        "!doc": " Number.EPSILON属性表示一个数值与可以表示为Number的最小值之间的差异.,",
+        "!doc":
+          " Number.EPSILON属性表示一个数值与可以表示为Number的最小值之间的差异.,",
       },
-      "MAX_SAFE_INTEGER": {
+      MAX_SAFE_INTEGER: {
         "!type": "number",
-        "!doc": " Number.MAX_SAFE_INTEGER常量表示JavaScript中的最大安全整数(2 ^ 53-1).,",
+        "!doc":
+          " Number.MAX_SAFE_INTEGER常量表示JavaScript中的最大安全整数(2 ^ 53-1).,",
       },
-      "MIN_SAFE_INTEGER": {
+      MIN_SAFE_INTEGER: {
         "!type": "number",
-        "!doc": " Number.MIN_SAFE_INTEGER常量表示JavaScript(-(2 ^ 53-1))中的最小安全整数.,",
+        "!doc":
+          " Number.MIN_SAFE_INTEGER常量表示JavaScript(-(2 ^ 53-1))中的最小安全整数.,",
       },
-      "isFinite": {
+      isFinite: {
         "!type": "fn(testValue: ?) -> bool",
         "!doc": " Number.isFinite()方法确定传递的值是否为有限值.,",
       },
-      "isInteger": {
+      isInteger: {
         "!type": "fn(testValue: ?) -> bool",
         "!doc": " Number.isInteger()方法确定传递的值是否为整数.,",
       },
-      "isNaN": {
+      isNaN: {
         "!type": "fn(testValue: ?) -> bool",
-        "!doc": " Number.isNaN()方法确定传递的值是否为NaN.原始全局isNaN()的更可靠的版本.,",
+        "!doc":
+          " Number.isNaN()方法确定传递的值是否为NaN.原始全局isNaN()的更可靠的版本.,",
       },
-      "isSafeInteger": {
+      isSafeInteger: {
         "!type": "fn(testValue: ?) -> bool",
-        "!doc": " Number.isSafeInteger()方法确定所提供的值是否是一个安全整数的数字.安全整数是该数字的整数.",
+        "!doc":
+          " Number.isSafeInteger()方法确定所提供的值是否是一个安全整数的数字.安全整数是该数字的整数.",
       },
-      "parseFloat": {
+      parseFloat: {
         "!type": "fn(string: string) -> number",
         "!doc": " Number.parseFloat()方法解析字符串参数并返回浮点数.,",
       },
-      "parseInt": {
+      parseInt: {
         "!type": "fn(string: string, radix?: number) -> number",
-        "!doc": " Number.parseInt()方法解析字符串参数并返回指定基数或基数的整数.,",
+        "!doc":
+          " Number.parseInt()方法解析字符串参数并返回指定基数或基数的整数.,",
       },
     },
-    "Boolean": {
+    Boolean: {
       "!type": "fn(value: ?) -> bool",
-      "prototype": {
-        "!stdProto": "Boolean"
+      prototype: {
+        "!stdProto": "Boolean",
       },
     },
-    "abstract": "?",
-    "arguments": "?",
-    "boolean": "?",
-    "break": "?",
-    "byte": "?",
-    "case": "?",
-    "catch": "?",
-    "char": "?",
-    "const": "?",
-    "continue": "?",
-    "debugger": "?",
-    "default": "?",
-    "delete": "?",
-    "do": "?",
-    "double": "?",
-    "else": "?",
-    "eval": "?",
-    "false": "bool",
-    "final": "?",
-    "finally": "?",
-    "float": "?",
-    "for": "?",
-    "function": "?",
-    "goto": "?",
-    "if": "?",
-    "implements": "?",
-    "in": "?",
-    "instanceof": "?",
-    "int": "?",
-    "interface": "?",
-    "long": "?",
-    "native": "?",
-    "new": "?",
-    "null": "?",
-    "package": "?",
-    "private": "?",
-    "protected": "?",
-    "public": "?",
-    "return": "?",
-    "short": "?",
-    "static": "?",
-    "switch": "?",
-    "synchronized": "?",
-    "this": "?",
-    "throw": "?",
-    "throws": "?",
-    "transient": "?",
-    "true": "bool",
-    "try": "?",
-    "typeof": "?",
-    "var": "?",
-    "void": "?",
-    "volatile": "?",
-    "while": "?",
-    "with": "?",
-    "yield": "?",
-    "RegExp": {
+    abstract: "?",
+    arguments: "?",
+    boolean: "?",
+    break: "?",
+    byte: "?",
+    case: "?",
+    catch: "?",
+    char: "?",
+    const: "?",
+    continue: "?",
+    debugger: "?",
+    default: "?",
+    delete: "?",
+    do: "?",
+    double: "?",
+    else: "?",
+    eval: "?",
+    false: "bool",
+    final: "?",
+    finally: "?",
+    float: "?",
+    for: "?",
+    function: "?",
+    goto: "?",
+    if: "?",
+    implements: "?",
+    in: "?",
+    instanceof: "?",
+    int: "?",
+    interface: "?",
+    long: "?",
+    native: "?",
+    new: "?",
+    null: "?",
+    package: "?",
+    private: "?",
+    protected: "?",
+    public: "?",
+    return: "?",
+    short: "?",
+    static: "?",
+    switch: "?",
+    synchronized: "?",
+    this: "?",
+    throw: "?",
+    throws: "?",
+    transient: "?",
+    true: "bool",
+    try: "?",
+    typeof: "?",
+    var: "?",
+    void: "?",
+    volatile: "?",
+    while: "?",
+    with: "?",
+    yield: "?",
+    RegExp: {
       "!type": "fn(source: string, flags?: string)",
-      "prototype": {
+      prototype: {
         "!stdProto": "RegExp",
-        "exec": {
+        exec: {
           "!type": "fn(input: string) -> [string]",
           "!doc": "搜索指定字符串中的匹配项.返回结果数组,或者为null.",
         },
-        "test": {
+        test: {
           "!type": "fn(input: string) -> bool",
           "!doc": "执行正则表达式和指定字符串之间的匹配搜索.返回true或false.",
-        }
+        },
       },
       "!doc": "创建正则表达式对象以将文本与模式匹配.",
     },
-    "parseInt": {
+    parseInt: {
       "!type": "fn(string: string, radix?: number) -> number",
-      "!doc": "解析字符串参数并返回指定基数或基数的整数."
+      "!doc": "解析字符串参数并返回指定基数或基数的整数.",
     },
-    "parseFloat": {
+    parseFloat: {
       "!type": "fn(string: string) -> number",
-      "!doc": "解析字符串参数并返回浮点数."
+      "!doc": "解析字符串参数并返回浮点数.",
     },
-    "isNaN": {
+    isNaN: {
       "!type": "fn(value: number) -> bool",
-      "!doc": "确定值是否为NaN.请注意,此函数已损坏.您可能对ECMAScript 6 Number.isNaN感兴趣.",
+      "!doc":
+        "确定值是否为NaN.请注意,此函数已损坏.您可能对ECMAScript 6 Number.isNaN感兴趣.",
     },
-    "isFinite": {
+    isFinite: {
       "!type": "fn(value: number) -> bool",
-      "!doc": "确定传递的值是否为有限数字."
+      "!doc": "确定传递的值是否为有限数字.",
     },
-    "eval": {
+    eval: {
       "!type": "fn(code: string) -> ?",
-      "!doc": "评估以字符串形式表示的JavaScript代码."
+      "!doc": "评估以字符串形式表示的JavaScript代码.",
     },
-    "encodeURI": {
+    encodeURI: {
       "!type": "fn(uri: string) -> string",
-      "!doc": "通过用表示字符的UTF-8编码的一个,两个,三个或四个转义序列替换某些字符的每个实例来编码统一资源标识符(URI)(对于字符而言将仅是四个转义序列由两个\"代理\"字符组成).",
+      "!doc":
+        '通过用表示字符的UTF-8编码的一个,两个,三个或四个转义序列替换某些字符的每个实例来编码统一资源标识符(URI)(对于字符而言将仅是四个转义序列由两个"代理"字符组成).',
     },
-    "encodeURIComponent": {
+    encodeURIComponent: {
       "!type": "fn(uri: string) -> string",
-      "!doc": "通过用表示字符的UTF-8编码的一个,两个,三个或四个转义序列替换某些字符的每个实例来编码统一资源标识符(URI)组件(对于由两个\"代理\"字符组成的字符).",
+      "!doc":
+        '通过用表示字符的UTF-8编码的一个,两个,三个或四个转义序列替换某些字符的每个实例来编码统一资源标识符(URI)组件(对于由两个"代理"字符组成的字符).',
     },
-    "decodeURI": {
+    decodeURI: {
       "!type": "fn(uri: string) -> string",
       "!doc": "解码以前由encodeURI或类似例程创建的统一资源标识符(URI).",
     },
-    "decodeURIComponent": {
+    decodeURIComponent: {
       "!type": "fn(uri: string) -> string",
-      "!doc": "解码以前由encodeURIComponent或类似例程创建的统一资源标识符(URI)组件.",
+      "!doc":
+        "解码以前由encodeURIComponent或类似例程创建的统一资源标识符(URI)组件.",
     },
-    "Math": {
-      "E": {
+    Math: {
+      E: {
         "!type": "number",
-        "!doc": "自然对数的底数,e约为2.718."
+        "!doc": "自然对数的底数,e约为2.718.",
       },
-      "LN2": {
+      LN2: {
         "!type": "number",
-        "!doc": " 2的自然对数,大约为0.693."
+        "!doc": " 2的自然对数,大约为0.693.",
       },
-      "LN10": {
+      LN10: {
         "!type": "number",
-        "!doc": " 10的自然对数,大约为2.302."
+        "!doc": " 10的自然对数,大约为2.302.",
       },
-      "LOG2E": {
+      LOG2E: {
         "!type": "number",
         "!doc": " E的以2为底的对数(大约1.442).",
       },
-      "LOG10E": {
+      LOG10E: {
         "!type": "number",
-        "!doc": " E的以10为底的对数(约0.434)."
+        "!doc": " E的以10为底的对数(约0.434).",
       },
-      "SQRT1_2": {
+      SQRT1_2: {
         "!type": "number",
-        "!doc": " 1/2的平方根;等效于2的平方根上的1,大约为0.707."
+        "!doc": " 1/2的平方根;等效于2的平方根上的1,大约为0.707.",
       },
-      "SQRT2": {
+      SQRT2: {
         "!type": "number",
-        "!doc": " 2的平方根,大约为1.414."
+        "!doc": " 2的平方根,大约为1.414.",
       },
-      "PI": {
+      PI: {
         "!type": "number",
-        "!doc": "圆的周长与其直径之比,大约为3.14159."
+        "!doc": "圆的周长与其直径之比,大约为3.14159.",
       },
-      "abs": {
+      abs: {
         "!type": "fn(number) -> number",
-        "!doc": "返回数字的绝对值."
+        "!doc": "返回数字的绝对值.",
       },
-      "cos": {
+      cos: {
         "!type": "fn(number) -> number",
-        "!doc": "返回数字的余弦."
+        "!doc": "返回数字的余弦.",
       },
-      "sin": {
+      sin: {
         "!type": "fn(number) -> number",
-        "!doc": "返回数字的正弦."
+        "!doc": "返回数字的正弦.",
       },
-      "tan": {
+      tan: {
         "!type": "fn(number) -> number",
-        "!doc": "返回数字的正切值."
+        "!doc": "返回数字的正切值.",
       },
-      "acos": {
+      acos: {
         "!type": "fn(number) -> number",
-        "!doc": "返回数字的反余弦(以弧度为单位)."
+        "!doc": "返回数字的反余弦(以弧度为单位).",
       },
-      "asin": {
+      asin: {
         "!type": "fn(number) -> number",
-        "!doc": "返回数字的反正弦(以弧度为单位)."
+        "!doc": "返回数字的反正弦(以弧度为单位).",
       },
-      "atan": {
+      atan: {
         "!type": "fn(number) -> number",
-        "!doc": "返回数字的反正切(以弧度为单位)."
+        "!doc": "返回数字的反正切(以弧度为单位).",
       },
-      "atan2": {
+      atan2: {
         "!type": "fn(y: number, x: number) -> number",
-        "!doc": "返回其参数商的反正切值."
+        "!doc": "返回其参数商的反正切值.",
       },
-      "ceil": {
+      ceil: {
         "!type": "fn(number) -> number",
-        "!doc": "返回大于或等于数字的最小整数."
+        "!doc": "返回大于或等于数字的最小整数.",
       },
-      "floor": {
+      floor: {
         "!type": "fn(number) -> number",
-        "!doc": "返回小于或等于数字的最大整数."
+        "!doc": "返回小于或等于数字的最大整数.",
       },
-      "round": {
+      round: {
         "!type": "fn(number) -> number",
-        "!doc": "返回四舍五入到最接近整数的数字的值."
+        "!doc": "返回四舍五入到最接近整数的数字的值.",
       },
-      "exp": {
+      exp: {
         "!type": "fn(number) -> number",
-        "!doc": "返回E ^ x,其中x是自变量,E是欧拉常数,自然对数的底."
+        "!doc": "返回E ^ x,其中x是自变量,E是欧拉常数,自然对数的底.",
       },
-      "log": {
+      log: {
         "!type": "fn(number) -> number",
         "!doc": "返回数字的自然对数(以E为底).",
       },
-      "sqrt": {
+      sqrt: {
         "!type": "fn(number) -> number",
-        "!doc": "返回数字的平方根."
+        "!doc": "返回数字的平方根.",
       },
-      "pow": {
+      pow: {
         "!type": "fn(number, number) -> number",
-        "!doc": "将基数返回指数幂,即baseexponent."
+        "!doc": "将基数返回指数幂,即baseexponent.",
       },
-      "max": {
+      max: {
         "!type": "fn(number, number) -> number",
-        "!doc": "返回零个或多个数字中的最大值."
+        "!doc": "返回零个或多个数字中的最大值.",
       },
-      "min": {
+      min: {
         "!type": "fn(number, number) -> number",
-        "!doc": "返回零个或多个数字中的最小值."
+        "!doc": "返回零个或多个数字中的最小值.",
       },
-      "random": {
+      random: {
         "!type": "fn() -> number",
-        "!doc": "返回一个浮点伪随机数,范围为[0,1),即从0(包括)到不包括1(排除),然后您可以缩放到所需的值范围."
+        "!doc":
+          "返回一个浮点伪随机数,范围为[0,1),即从0(包括)到不包括1(排除),然后您可以缩放到所需的值范围.",
       },
-      "log10": {
+      log10: {
         "!type": "fn(x: number) -> number",
         "!doc": " Math.log10()函数返回数字的以10为底的对数.",
       },
-      "log2": {
+      log2: {
         "!type": "fn(x: number) -> number",
         "!doc": " Math.log2()函数返回数字的以2为底的对数.",
       },
-      "sign": {
+      sign: {
         "!type": "fn(x: number) -> number",
         "!doc": " Math.sign()函数返回数字的符号,指示数字是正数,负数还是零.,",
       },
-      "trunc": {
+      trunc: {
         "!type": "fn(x: number) -> number",
-        "!doc": " Math.trunc()函数通过删除任何小数位来返回数字的整数部分.它不舍入任何数字.该函数可以用floor()和ceil()函数表示: ,",
+        "!doc":
+          " Math.trunc()函数通过删除任何小数位来返回数字的整数部分.它不舍入任何数字.该函数可以用floor()和ceil()函数表示: ,",
       },
       "!doc": "一个内置对象,具有用于数学常数和函数的属性和方法.",
     },
-    "JSON": {
-      "parse": {
-        "!type": "fn(json: string, reviver?: fn(key: string, value: ?) -> ?) -> ?",
+    JSON: {
+      parse: {
+        "!type":
+          "fn(json: string, reviver?: fn(key: string, value: ?) -> ?) -> ?",
         "!doc": "将字符串解析为JSON,可以选择转换解析产生的值.",
       },
-      "stringify": {
-        "!type": "fn(value: ?, replacer?: fn(key: string, value: ?) -> ?, space?: string|number) -> string",
-        "!doc": "将值转换为JSON,如果指定了replacer函数,则可以选择替换值,如果指定了replacer数组,则可以选择仅包括指定的属性.",
+      stringify: {
+        "!type":
+          "fn(value: ?, replacer?: fn(key: string, value: ?) -> ?, space?: string|number) -> string",
+        "!doc":
+          "将值转换为JSON,如果指定了replacer函数,则可以选择替换值,如果指定了replacer数组,则可以选择仅包括指定的属性.",
       },
-      "!doc": " JSON(JavaScript对象表示法)是一种数据交换格式.尽管它不是严格的子集,但它非常类似于JavaScript语法的子集.(有关详细信息,请参见JavaScript参考中的JSON.)在编写任何类型的基于JavaScript的应用程序(包括网站和浏览器扩展程序)时非常有用.例如,您可以将JSON格式的用户信息存储在cookie中,或者可以将扩展名首选项以JSON形式存储在字符串值的浏览器首选项中."
-    }
+      "!doc":
+        " JSON(JavaScript对象表示法)是一种数据交换格式.尽管它不是严格的子集,但它非常类似于JavaScript语法的子集.(有关详细信息,请参见JavaScript参考中的JSON.)在编写任何类型的基于JavaScript的应用程序(包括网站和浏览器扩展程序)时非常有用.例如,您可以将JSON格式的用户信息存储在cookie中,或者可以将扩展名首选项以JSON形式存储在字符串值的浏览器首选项中.",
+    },
   },
   {
     "!name": "core",
     "!define": {
-      "image": {
+      image: {
         "!doc": "图片信息",
-        "width": "number",
-        "height": "number",
-        "src": "string"
+        width: "number",
+        height: "number",
+        src: "string",
       },
-      "audio": {
+      audio: {
         "!doc": "音乐音效信息",
-        "currentTime": "number",
-        "play": "fn()",
-        "pause": "fn()",
-        "paused": "bool",
-        "duration": "number",
-        "volume": "number",
+        currentTime: "number",
+        play: "fn()",
+        pause: "fn()",
+        paused: "bool",
+        duration: "number",
+        volume: "number",
       },
-      "flag": {
+      flag: {
         "!doc": "当前变量",
-        "hard": {
+        hard: {
           "!type": "number",
-          "!doc": "当前难度编号"
+          "!doc": "当前难度编号",
         },
-        "hatred": {
+        hatred: {
           "!type": "number",
-          "!doc": "当前仇恨值"
+          "!doc": "当前仇恨值",
         },
-        "poison": {
+        poison: {
           "!type": "bool",
-          "!doc": "是否处于中毒状态"
+          "!doc": "是否处于中毒状态",
         },
-        "weak": {
+        weak: {
           "!type": "number",
-          "!doc": "是否处于衰弱状态"
+          "!doc": "是否处于衰弱状态",
         },
-        "curse": {
+        curse: {
           "!type": "number",
-          "!doc": "是否处于诅咒状态"
+          "!doc": "是否处于诅咒状态",
         },
-        "no_zone": {
+        no_zone: {
           "!type": "bool",
-          "!doc": "无视领域伤害"
+          "!doc": "无视领域伤害",
         },
-        "no_repulse": {
+        no_repulse: {
           "!type": "bool",
-          "!doc": "无视阻击伤害"
+          "!doc": "无视阻击伤害",
         },
-        "no_lasel": {
+        no_lasel: {
           "!type": "bool",
-          "!doc": "无视激光伤害"
+          "!doc": "无视激光伤害",
         },
-        "no_ambush": {
+        no_ambush: {
           "!type": "bool",
-          "!doc": "无视捕捉"
+          "!doc": "无视捕捉",
         },
-        "__bgm__": {
+        __bgm__: {
           "!type": "string",
-          "!doc": "背景音乐"
+          "!doc": "背景音乐",
         },
-        "__weather__": {
-          "!doc": "天气"
+        __weather__: {
+          "!doc": "天气",
         },
-        "__color__": {
-          "!doc": "色调"
+        __color__: {
+          "!doc": "色调",
         },
-        "__volume__": {
+        __volume__: {
           "!type": "number",
-          "!doc": "音量"
+          "!doc": "音量",
         },
-        "skill": {
+        skill: {
           "!type": "number",
-          "!doc": "当前开启的技能编号"
+          "!doc": "当前开启的技能编号",
         },
-        "skillName": {
+        skillName: {
           "!type": "string",
-          "!doc": "当前开启的技能名"
+          "!doc": "当前开启的技能名",
         },
-        "input": {
+        input: {
           "!type": "string|number",
-          "!doc": "等待用户输入后的存放值"
+          "!doc": "等待用户输入后的存放值",
         },
-        "type": {
+        type: {
           "!type": "number",
-          "!doc": "等待用户操作后获得的操作类型"
+          "!doc": "等待用户操作后获得的操作类型",
         },
-        "keycode": {
+        keycode: {
           "!type": "number",
-          "!doc": "等待用户操作后用户按键的键值"
+          "!doc": "等待用户操作后用户按键的键值",
         },
-        "x": {
+        x: {
           "!type": "number",
-          "!doc": "等待用户操作后用户点击的网格横坐标"
+          "!doc": "等待用户操作后用户点击的网格横坐标",
         },
-        "y": {
+        y: {
           "!type": "number",
-          "!doc": "等待用户操作后用户点击的网格纵坐标"
+          "!doc": "等待用户操作后用户点击的网格纵坐标",
         },
-        "px": {
+        px: {
           "!type": "number",
-          "!doc": "等待用户操作后用户点击的像素横坐标"
+          "!doc": "等待用户操作后用户点击的像素横坐标",
         },
-        "py": {
+        py: {
           "!type": "number",
-          "!doc": "等待用户操作后用户点击的像素纵坐标"
+          "!doc": "等待用户操作后用户点击的像素纵坐标",
         },
-        "__visited__": {
-          "!doc": "当前访问过的楼层"
+        __visited__: {
+          "!doc": "当前访问过的楼层",
         },
-        "__leaveLoc__": {
-          "!doc": "每个楼层的离开位置,用于楼传平面塔模式"
+        __leaveLoc__: {
+          "!doc": "每个楼层的离开位置,用于楼传平面塔模式",
         },
-        "cannotMoveDirectly": {
+        cannotMoveDirectly: {
           "!type": "bool",
-          "!doc": "当前是否全局不可瞬移"
+          "!doc": "当前是否全局不可瞬移",
         },
       },
-      "hero": {
+      hero: {
         "!doc": "勇士当前属性",
-        "image": {
+        image: {
           "!type": "string",
-          "!doc": "行走图"
+          "!doc": "行走图",
         },
-        "animate": {
+        animate: {
           "!type": "bool",
-          "!doc": "是否开启帧动画"
+          "!doc": "是否开启帧动画",
         },
-        "name": {
+        name: {
           "!type": "string",
-          "!doc": "勇士名"
+          "!doc": "勇士名",
         },
-        "lv": {
+        lv: {
           "!type": "number",
-          "!doc": "勇士等级"
+          "!doc": "勇士等级",
         },
-        "hpmax": {
+        hpmax: {
           "!type": "number",
-          "!doc": "勇士生命上限"
+          "!doc": "勇士生命上限",
         },
-        "hp": {
+        hp: {
           "!type": "number",
-          "!doc": "勇士当前生命值"
+          "!doc": "勇士当前生命值",
         },
-        "atk": {
+        atk: {
           "!type": "number",
-          "!doc": "勇士当前攻击力"
+          "!doc": "勇士当前攻击力",
         },
-        "def": {
+        def: {
           "!type": "number",
-          "!doc": "勇士当前防御力"
+          "!doc": "勇士当前防御力",
         },
-        "manamax": {
+        manamax: {
           "!type": "number",
-          "!doc": "勇士当前魔力上限,负数无效"
+          "!doc": "勇士当前魔力上限,负数无效",
         },
-        "mana": {
+        mana: {
           "!type": "number",
-          "!doc": "勇士当前魔力值"
+          "!doc": "勇士当前魔力值",
         },
-        "mdef": {
+        mdef: {
           "!type": "number",
-          "!doc": "勇士当前护盾值"
+          "!doc": "勇士当前护盾值",
         },
-        "money": {
+        money: {
           "!type": "number",
-          "!doc": "勇士当前金币"
+          "!doc": "勇士当前金币",
         },
-        "exp": {
+        exp: {
           "!type": "number",
-          "!doc": "勇士当前经验"
+          "!doc": "勇士当前经验",
         },
-        "equipment": {
+        equipment: {
           "!type": "[string]",
-          "!doc": "勇士当前装备"
+          "!doc": "勇士当前装备",
         },
-        "items": {
+        items: {
           "!doc": "勇士当前道具",
-          "constants": {
-            "!doc": "永久道具"
+          constants: {
+            "!doc": "永久道具",
           },
-          "tools": {
+          tools: {
             "!doc": "消耗道具",
-            "yellowKey": {
+            yellowKey: {
               "!type": "number",
-              "!doc": "黄钥匙个数"
+              "!doc": "黄钥匙个数",
             },
-            "blueKey": {
+            blueKey: {
               "!type": "number",
-              "!doc": "蓝钥匙个数"
+              "!doc": "蓝钥匙个数",
             },
-            "redKey": {
+            redKey: {
               "!type": "number",
-              "!doc": "红钥匙个数"
+              "!doc": "红钥匙个数",
             },
-            "greenKey": {
+            greenKey: {
               "!type": "number",
-              "!doc": "绿钥匙个数"
+              "!doc": "绿钥匙个数",
             },
-            "steelKey": {
+            steelKey: {
               "!type": "number",
-              "!doc": "铁门钥匙个数"
+              "!doc": "铁门钥匙个数",
             },
           },
-          "equips": {
-            "!doc": "在背包中未装备上的装备"
+          equips: {
+            "!doc": "在背包中未装备上的装备",
           },
         },
-        "loc": {
+        loc: {
           "!doc": "勇士当前坐标和朝向",
-          "x": "number",
-          "y": "number",
-          "direction": {
+          x: "number",
+          y: "number",
+          direction: {
             "!doc": "朝向,只能为 up,down,left,right 之一",
-            "!type": "string"
+            "!type": "string",
           },
         },
-        "flags": {
+        flags: {
           "!type": "flag",
-          "!doc": "当前游戏中用到的变量"
+          "!doc": "当前游戏中用到的变量",
         },
-        "followers": {
+        followers: {
           "!type": "[?]",
-          "!doc": "跟随者信息"
+          "!doc": "跟随者信息",
         },
-        "steps": {
+        steps: {
           "!type": "number",
-          "!doc": "当前步数"
-        }
+          "!doc": "当前步数",
+        },
       },
-      "block": {
+      block: {
         "!doc": "地图图块信息",
-        "x": {
+        x: {
           "!type": "number",
-          "!doc": "图块的x坐标"
+          "!doc": "图块的x坐标",
         },
-        "y": {
+        y: {
           "!type": "number",
-          "!doc": "图块的y坐标"
+          "!doc": "图块的y坐标",
         },
-        "id": {
+        id: {
           "!type": "number",
-          "!doc": "图块的数字"
+          "!doc": "图块的数字",
         },
-        "event": {
+        event: {
           "!doc": "图块上的事件信息",
-          "id": {
+          id: {
             "!type": "string",
-            "!doc": "图块的ID"
+            "!doc": "图块的ID",
           },
-          "cls": {
+          cls: {
             "!type": "string",
-            "!doc": "图块的类别,一般为所在图片名去掉后缀"
+            "!doc": "图块的类别,一般为所在图片名去掉后缀",
           },
-          "disabled": {
+          disabled: {
             "!type": "bool",
-            "!doc": "启用状态"
-          }
-        }
+            "!doc": "启用状态",
+          },
+        },
       },
-      "blockInfo": {
+      blockInfo: {
         "!doc": "图块的更多信息",
-        "animate": {
+        animate: {
           "!type": "number",
-          "!doc": "动画帧数"
+          "!doc": "动画帧数",
         },
-        "cls": {
+        cls: {
           "!type": "string",
-          "!doc": "图块类别"
+          "!doc": "图块类别",
         },
-        "faceIds": {
+        faceIds: {
           "!doc": "行走图朝向",
-          "up": "string",
-          "down": "string",
-          "left": "string",
-          "right": "string"
+          up: "string",
+          down: "string",
+          left: "string",
+          right: "string",
         },
-        "height": {
+        height: {
           "!type": "number",
-          "!doc": "图块高度"
+          "!doc": "图块高度",
         },
-        "id": {
+        id: {
           "!type": "string",
-          "!doc": "图块ID"
+          "!doc": "图块ID",
         },
-        "image": {
+        image: {
           "!type": "image",
-          "!doc": "图块所在的图片"
+          "!doc": "图块所在的图片",
         },
-        "name": {
+        name: {
           "!type": "string",
-          "!doc": "图块名称"
+          "!doc": "图块名称",
         },
-        "number": {
+        number: {
           "!type": "number",
-          "!doc": "图块使用的数字"
+          "!doc": "图块使用的数字",
         },
-        "posX": {
+        posX: {
           "!type": "number",
-          "!doc": "图块在图片上的横坐标"
+          "!doc": "图块在图片上的横坐标",
         },
-        "posY": {
+        posY: {
           "!type": "number",
-          "!doc": "图块在图片上的纵坐标"
+          "!doc": "图块在图片上的纵坐标",
         },
       },
-      "enemy": {
+      enemy: {
         "!doc": "怪物信息",
-        "id": {
+        id: {
           "!type": "string",
-          "!doc": "怪物ID"
+          "!doc": "怪物ID",
         },
-        "name": {
+        name: {
           "!type": "string",
-          "!doc": "怪物名称"
+          "!doc": "怪物名称",
         },
-        "displayIdInBook": {
+        displayIdInBook: {
           "!type": "string",
-          "!doc": "在怪物手册映射ID"
+          "!doc": "在怪物手册映射ID",
         },
-        "hp": {
+        hp: {
           "!type": "number",
-          "!doc": "怪物生命值"
+          "!doc": "怪物生命值",
         },
-        "atk": {
+        atk: {
           "!type": "number",
-          "!doc": "怪物攻击"
+          "!doc": "怪物攻击",
         },
-        "def": {
+        def: {
           "!type": "number",
-          "!doc": "怪物防御"
+          "!doc": "怪物防御",
         },
-        "money": {
+        money: {
           "!type": "number",
-          "!doc": "怪物金币"
+          "!doc": "怪物金币",
         },
-        "exp": {
+        exp: {
           "!type": "number",
-          "!doc": "怪物经验"
+          "!doc": "怪物经验",
         },
-        "special": {
+        special: {
           "!type": "[number]",
-          "!doc": "怪物特殊属性"
+          "!doc": "怪物特殊属性",
         },
-        "point": {
+        point: {
           "!type": "number",
-          "!doc": "怪物加点"
+          "!doc": "怪物加点",
         },
-        "value": {
+        value: {
           "!type": "number",
-          "!doc": "怪物特殊属性值:阻激夹域伤害值;吸血比例;光环增加生命比例"
+          "!doc": "怪物特殊属性值:阻激夹域伤害值;吸血比例;光环增加生命比例",
         },
-        "zoneSquare": {
+        zoneSquare: {
           "!type": "bool",
-          "!doc": "领域怪是否九宫格伤害;区域光环是否九宫格范围"
+          "!doc": "领域怪是否九宫格伤害;区域光环是否九宫格范围",
         },
-        "range": {
+        range: {
           "!type": "number",
-          "!doc": "领域伤害的范围;区域光环范围"
+          "!doc": "领域伤害的范围;区域光环范围",
         },
-        "notBomb": {
+        notBomb: {
           "!type": "bool",
-          "!doc": "怪物不可炸"
+          "!doc": "怪物不可炸",
         },
-        "n": {
+        n: {
           "!type": "number",
-          "!doc": "多连击的连击数;净化比例"
+          "!doc": "多连击的连击数;净化比例",
         },
-        "add": {
+        add: {
           "!type": "bool",
-          "!doc": "吸血是否加到自身;光环是否叠加"
+          "!doc": "吸血是否加到自身;光环是否叠加",
         },
-        "atkValue": {
+        atkValue: {
           "!type": "number",
-          "!doc": "反击比例;退化扣除攻击;光环增加攻击;"
+          "!doc": "反击比例;退化扣除攻击;光环增加攻击;",
         },
-        "defValue": {
+        defValue: {
           "!type": "number",
-          "!doc": "破甲比例;退化扣除防御;光环增加防御"
+          "!doc": "破甲比例;退化扣除防御;光环增加防御",
         },
-        "damage": {
+        damage: {
           "!type": "number",
-          "!doc": "固伤值"
+          "!doc": "固伤值",
         },
       },
-      "item": {
+      item: {
         "!doc": "道具信息",
-        "id": {
+        id: {
           "!type": "string",
-          "!doc": "道具ID"
+          "!doc": "道具ID",
         },
-        "cls": {
+        cls: {
           "!type": "string",
-          "!doc": "道具类型"
+          "!doc": "道具类型",
         },
-        "name": {
+        name: {
           "!type": "string",
-          "!doc": "道具名称"
+          "!doc": "道具名称",
         },
-        "text": {
+        text: {
           "!type": "string",
-          "!doc": "道具描述"
+          "!doc": "道具描述",
         },
-        "hideInToolbox": {
+        hideInToolbox: {
           "!type": "bool",
-          "!doc": "不显示在道具栏"
+          "!doc": "不显示在道具栏",
         },
-        "equip": {
+        equip: {
           "!doc": "装备属性",
-          "type": {
+          type: {
             "!type": "number|string",
-            "!doc": "装备类型"
+            "!doc": "装备类型",
           },
-          "animate": {
+          animate: {
             "!type": "string",
-            "!doc": "装备动画"
+            "!doc": "装备动画",
           },
-          "value": {
-            "!doc": "数值加成"
+          value: {
+            "!doc": "数值加成",
+          },
+          percentage: {
+            "!doc": "比例加成",
           },
-          "percentage": {
-            "!doc": "比例加成"
-          }
         },
-        "hideInReplay": {
+        hideInReplay: {
           "!type": "bool",
-          "!doc": "回放不绘制道具栏"
+          "!doc": "回放不绘制道具栏",
         },
       },
-      "floor": {
+      floor: {
         "!doc": "楼层信息",
-        "floorId": {
+        floorId: {
           "!type": "string",
-          "!doc": "楼层ID"
+          "!doc": "楼层ID",
         },
-        "title": {
+        title: {
           "!type": "string",
-          "!doc": "楼层中文名"
+          "!doc": "楼层中文名",
         },
-        "name": {
+        name: {
           "!type": "string",
-          "!doc": "状态栏显示值"
+          "!doc": "状态栏显示值",
         },
-        "width": {
+        width: {
           "!type": "number",
-          "!doc": "地图宽"
+          "!doc": "地图宽",
         },
-        "height": {
+        height: {
           "!type": "number",
-          "!doc": "地图高"
+          "!doc": "地图高",
         },
-        "canFlyTo": {
+        canFlyTo: {
           "!type": "bool",
-          "!doc": "该楼是否可以楼传飞到"
+          "!doc": "该楼是否可以楼传飞到",
         },
-        "canFlyFrom": {
+        canFlyFrom: {
           "!type": "bool",
-          "!doc": "该楼是否可以楼传飞出"
+          "!doc": "该楼是否可以楼传飞出",
         },
-        "canUseQuickShop": {
+        canUseQuickShop: {
           "!type": "bool",
-          "!doc": "该楼是否可快捷商店"
+          "!doc": "该楼是否可快捷商店",
         },
-        "cannotViewMap": {
+        cannotViewMap: {
           "!type": "bool",
-          "!doc": "该层是否不允许被浏览地图看到,也不统计"
+          "!doc": "该层是否不允许被浏览地图看到,也不统计",
         },
-        "cannotMoveDirectly": {
+        cannotMoveDirectly: {
           "!type": "bool",
-          "!doc": "该层是否不允许瞬间移动"
+          "!doc": "该层是否不允许瞬间移动",
         },
-        "upFloor": {
+        upFloor: {
           "!type": "[number]",
-          "!doc": "上楼点"
+          "!doc": "上楼点",
         },
-        "downFloor": {
+        downFloor: {
           "!type": "[number]",
-          "!doc": "下楼点"
+          "!doc": "下楼点",
         },
-        "flyPoint": {
+        flyPoint: {
           "!type": "[number]",
-          "!doc": "楼传落点"
+          "!doc": "楼传落点",
         },
-        "color": {
-          "!doc": "楼层色调"
+        color: {
+          "!doc": "楼层色调",
         },
-        "weather": {
-          "!doc": "楼层天气"
+        weather: {
+          "!doc": "楼层天气",
         },
-        "bgm": {
+        bgm: {
           "!type": "string",
-          "!doc": "楼层背景音乐"
+          "!doc": "楼层背景音乐",
         },
-        "ratio": {
+        ratio: {
           "!type": "number",
-          "!doc": "宝石/血瓶效果"
+          "!doc": "宝石/血瓶效果",
         },
-        "map": {
+        map: {
           "!type": "[[number]]",
-          "!doc": "地图数据"
+          "!doc": "地图数据",
         },
-        "blocks": {
+        blocks: {
           "!type": "[block]",
-          "!doc": "本层图块信息"
-        }
+          "!doc": "本层图块信息",
+        },
       },
-      "animate": {
+      animate: {
         "!doc": "动画信息",
-        "se": {
+        se: {
           "!type": "string",
-          "!doc": "动画音效"
-        }
-      }
+          "!doc": "动画音效",
+        },
+      },
     },
-    "core": {
+    core: {
       "!doc": "核心游戏控制",
-      "__SIZE__": {
+      __SIZE__: {
         "!type": "number",
-        "!doc": "窗口宽度,为13或15"
+        "!doc": "窗口宽度,为13或15",
       },
-      "__PIXELS__": {
+      __PIXELS__: {
         "!type": "number",
-        "!doc": "窗口像素宽度,为416或480"
+        "!doc": "窗口像素宽度,为416或480",
       },
-      "__HALF_SIZE__": {
+      __HALF_SIZE__: {
         "!type": "number",
-        "!doc": "窗口宽度的一半,为6或7"
+        "!doc": "窗口宽度的一半,为6或7",
       },
-      "floorIds": {
+      floorIds: {
         "!type": "[string]",
-        "!doc": "全部楼层ID列表"
+        "!doc": "全部楼层ID列表",
       },
-      "floors": {
-        "!doc": "全部楼层信息"
+      floors: {
+        "!doc": "全部楼层信息",
       },
-      "floorPartitions": {
+      floorPartitions: {
         "!type": "[[string]]",
-        "!doc": "楼层分区信息"
+        "!doc": "楼层分区信息",
       },
-      "material": {
+      material: {
         "!doc": "游戏所用到的资源",
-        "animates": {
-          "!doc": "注册的动画"
+        animates: {
+          "!doc": "注册的动画",
         },
-        "images": {
-          "!doc": "注册的图片"
+        images: {
+          "!doc": "注册的图片",
         },
-        "bgms": {
-          "!doc": "注册的背景音乐"
+        bgms: {
+          "!doc": "注册的背景音乐",
         },
-        "sounds": {
-          "!doc": "注册的音效"
+        sounds: {
+          "!doc": "注册的音效",
         },
-        "enemys": {
+        enemys: {
           "!doc": "怪物定义",
         },
-        "items": {
-          "!doc": "道具定义"
-        }
+        items: {
+          "!doc": "道具定义",
+        },
       },
-      "timeout": {
-        "!doc": "当前异步事件句柄"
+      timeout: {
+        "!doc": "当前异步事件句柄",
       },
-      "interval": {
-        "!doc": "当前异步事件延时"
+      interval: {
+        "!doc": "当前异步事件延时",
       },
-      "animateFrame": {
-        "!doc": "当前各个帧动画"
+      animateFrame: {
+        "!doc": "当前各个帧动画",
       },
-      "musicStatus": {
+      musicStatus: {
         "!doc": "音乐音效状态",
-        "bgmStatus": {
+        bgmStatus: {
           "!type": "bool",
-          "!doc": "是否播放BGM"
+          "!doc": "是否播放BGM",
         },
-        "soundStatus": {
+        soundStatus: {
           "!type": "bool",
-          "!doc": "是否播放SE"
+          "!doc": "是否播放SE",
         },
-        "playingBgm": {
+        playingBgm: {
           "!type": "string",
-          "!doc": "正在播放的bgm"
+          "!doc": "正在播放的bgm",
         },
-        "lastBgm": {
+        lastBgm: {
           "!type": "string",
-          "!doc": "上次播放的bgm"
+          "!doc": "上次播放的bgm",
         },
-        "playingSounds": {
-          "!doc": "正在播放的SE"
+        playingSounds: {
+          "!doc": "正在播放的SE",
         },
-        "volume": {
+        volume: {
           "!type": "number",
-          "!doc": "当前bgm音量"
-        }
+          "!doc": "当前bgm音量",
+        },
       },
-      "platform": {
+      platform: {
         "!doc": "平台信息",
-        "isPC": "bool",
-        "isAndroid": "bool",
-        "isIOS": "bool",
+        isPC: "bool",
+        isAndroid: "bool",
+        isIOS: "bool",
       },
-      "domStyle": {
+      domStyle: {
         "!doc": "界面样式",
-        "scale": {
+        scale: {
           "!type": "number",
           "!doc": "当前界面放缩比例",
         },
-        "ratio": {
+        ratio: {
           "!type": "number",
-          "!doc": "高清UI放缩比例"
+          "!doc": "高清UI放缩比例",
         },
-        "hdCanvas": {
+        hdCanvas: {
           "!type": "[string]",
-          "!doc": "高清UI的系统画布"
+          "!doc": "高清UI的系统画布",
         },
-        "availableScale": {
+        availableScale: {
           "!type": "[number]",
-          "!doc": "当前界面支持的放缩比例"
+          "!doc": "当前界面支持的放缩比例",
         },
-        "isVertical": {
+        isVertical: {
           "!type": "bool",
-          "!doc": "当前是否是竖屏"
+          "!doc": "当前是否是竖屏",
         },
-        "showStatusBar": {
+        showStatusBar: {
           "!type": "bool",
-          "!doc": "当前是否显示状态栏"
+          "!doc": "当前是否显示状态栏",
         },
-        "toolbarBtn": {
+        toolbarBtn: {
           "!type": "bool",
-          "!doc": "当前工具栏是否是1-8的按钮"
+          "!doc": "当前工具栏是否是1-8的按钮",
         },
       },
-      "bigmap": {
+      bigmap: {
         "!doc": "大地图信息",
-        "canvas": {
+        canvas: {
           "!type": "[string]",
-          "!doc": "大地图的画布"
+          "!doc": "大地图的画布",
         },
-        "width": {
+        width: {
           "!type": "number",
-          "!doc": "大地图高度"
+          "!doc": "大地图高度",
         },
-        "height": {
+        height: {
           "!type": "number",
-          "!doc": "大地图宽度"
+          "!doc": "大地图宽度",
         },
-        "offsetX": {
+        offsetX: {
           "!type": "number",
-          "!doc": "大地图视角横向偏移量"
+          "!doc": "大地图视角横向偏移量",
         },
-        "offsetY": {
+        offsetY: {
           "!type": "number",
-          "!doc": "大地图视角纵向偏移量"
+          "!doc": "大地图视角纵向偏移量",
         },
-        "posX": {
+        posX: {
           "!type": "number",
-          "!doc": "大地图视角横向基准格"
+          "!doc": "大地图视角横向基准格",
         },
-        "posY": {
+        posY: {
           "!type": "number",
-          "!doc": "大地图视角纵向基准格"
+          "!doc": "大地图视角纵向基准格",
         },
-        "v2": {
+        v2: {
           "!type": "bool",
-          "!doc": "是否是新版大地图绘制方式"
+          "!doc": "是否是新版大地图绘制方式",
         },
-        "threshold": {
+        threshold: {
           "!type": "number",
-          "!doc": "新版大地图绘制方式的分界线"
+          "!doc": "新版大地图绘制方式的分界线",
         },
-        "extend": {
+        extend: {
           "!type": "number",
-          "!doc": "新版大地图模式下向每一侧额外计算的数量"
+          "!doc": "新版大地图模式下向每一侧额外计算的数量",
         },
-        "scale": {
+        scale: {
           "!type": "number",
-          "!doc": "缩略图的比例放缩"
+          "!doc": "缩略图的比例放缩",
         },
-        "tempCanvas": {
+        tempCanvas: {
           "!type": "CanvasRenderingContext2D",
-          "!doc": "临时画布"
-        }
+          "!doc": "临时画布",
+        },
       },
-      "saves": {
-        "!doc": "当前存档信息"
+      saves: {
+        "!doc": "当前存档信息",
       },
-      "dymCanvas": {
-        "!doc": "各个自定义画布"
+      dymCanvas: {
+        "!doc": "各个自定义画布",
       },
-      "statusBar": {
-        "!doc": "状态栏信息"
+      statusBar: {
+        "!doc": "状态栏信息",
       },
-      "canvas": {
-        "!doc": "系统画布"
+      canvas: {
+        "!doc": "系统画布",
       },
-      "flags": {
-        "!doc": "系统开关"
+      flags: {
+        "!doc": "系统开关",
       },
-      "values": {
-        "!doc": "全局数值,如毒衰效果"
+      values: {
+        "!doc": "全局数值,如毒衰效果",
       },
-      "firstData": {
-        "!doc": "初始属性,如出生点"
+      firstData: {
+        "!doc": "初始属性,如出生点",
       },
-      "status": {
+      status: {
         "!doc": "状态信息",
-        "hero": {
+        hero: {
           "!type": "hero",
-          "!doc": "勇士信息"
+          "!doc": "勇士信息",
         },
-        "automaticRoute": {
-          "!doc": "自动寻路信息"
+        automaticRoute: {
+          "!doc": "自动寻路信息",
         },
-        "bgmaps": {
-          "!doc": "各地图背景层"
+        bgmaps: {
+          "!doc": "各地图背景层",
         },
-        "fgmaps": {
-          "!doc": "各地图前景层"
+        fgmaps: {
+          "!doc": "各地图前景层",
         },
-        "mapBlockObjs": {
-          "!doc": "以<位置,block>存放的各地图图块信息"
+        mapBlockObjs: {
+          "!doc": "以<位置,block>存放的各地图图块信息",
         },
-        "boxAnimateObjs": {
-          "!doc": "(手册和剧情文本的)帧动画对象"
+        boxAnimateObjs: {
+          "!doc": "(手册和剧情文本的)帧动画对象",
         },
-        "checkBlock": {
+        checkBlock: {
           "!doc": "阻激夹域捕捉信息",
-          "damage": {
-            "!doc": "每个点的伤害信息"
+          damage: {
+            "!doc": "每个点的伤害信息",
           },
-          "type": {
-            "!doc": "每个点的伤害类型"
+          type: {
+            "!doc": "每个点的伤害类型",
           },
-          "repluse": {
-            "!doc": "每个点的阻击信息"
+          repluse: {
+            "!doc": "每个点的阻击信息",
           },
-          "ambush": {
-            "!doc": "每个点的捕捉信息"
+          ambush: {
+            "!doc": "每个点的捕捉信息",
           },
-          "needCache": {
+          needCache: {
             "!type": "bool",
-            "!doc": "该楼层是否需要计算缓存"
+            "!doc": "该楼层是否需要计算缓存",
           },
-          "cache": {
-            "!doc": "每个点的光环缓存"
+          cache: {
+            "!doc": "每个点的光环缓存",
           },
         },
-        "damage": {
+        damage: {
           "!doc": "每个点的显伤信息",
         },
-        "ctrlDown": {
+        ctrlDown: {
           "!type": "bool",
-          "!doc": "Ctrl键是否被按下"
+          "!doc": "Ctrl键是否被按下",
         },
-        "curtainColor": {
-          "!doc": "当前画面色调"
+        curtainColor: {
+          "!doc": "当前画面色调",
         },
-        "event": {
+        event: {
           "!doc": "当前事件",
-          "data": {
-            "!doc": "事件信息,如坐标等"
+          data: {
+            "!doc": "事件信息,如坐标等",
           },
-          "id": {
+          id: {
             "!type": "string",
-            "!doc": "事件类型,如选择项/确认框"
+            "!doc": "事件类型,如选择项/确认框",
           },
-          "interval": {
+          interval: {
             "!type": "number",
-            "!doc": "打字机效果的定时器"
+            "!doc": "打字机效果的定时器",
           },
-          "selection": {
+          selection: {
             "!type": "number",
-            "!doc": "选择项和确认框的当前选中项"
+            "!doc": "选择项和确认框的当前选中项",
+          },
+          ui: {
+            "!doc": "当前事件的界面信息,如楼传/手册/SL",
           },
-          "ui": {
-            "!doc": "当前事件的界面信息,如楼传/手册/SL"
-          }
         },
-        "floorAnimateObjs": {
-          "!doc": "楼层贴图的帧动画"
+        floorAnimateObjs: {
+          "!doc": "楼层贴图的帧动画",
         },
-        "floorId": {
+        floorId: {
           "!type": "string",
-          "!doc": "当前楼层ID"
+          "!doc": "当前楼层ID",
         },
-        "gameOver": {
+        gameOver: {
           "!type": "bool",
-          "!doc": "游戏是否已结束"
+          "!doc": "游戏是否已结束",
         },
-        "globalAnimateObjs": {
-          "!doc": "各全局动画"
+        globalAnimateObjs: {
+          "!doc": "各全局动画",
         },
-        "globalAnimateStatus": {
+        globalAnimateStatus: {
           "!type": "number",
-          "!doc": "全局动画的帧状态"
+          "!doc": "全局动画的帧状态",
         },
-        "globalAttribute": {
-          "!doc": "全局css属性"
+        globalAttribute: {
+          "!doc": "全局css属性",
         },
-        "hard": {
+        hard: {
           "!type": "string",
-          "!doc": "状态栏一角的难度名"
+          "!doc": "状态栏一角的难度名",
         },
-        "downTime": {
+        downTime: {
           "!type": "number",
-          "!doc": "方向键已按下的时间"
+          "!doc": "方向键已按下的时间",
         },
-        "heroCenter": {
+        heroCenter: {
           "!doc": "勇士中心像素坐标",
-          "px": {
+          px: {
             "!type": "number",
-            "!doc": "勇士中心的横坐标"
+            "!doc": "勇士中心的横坐标",
           },
-          "py": {
+          py: {
             "!type": "number",
-            "!doc": "勇士中心的纵坐标"
+            "!doc": "勇士中心的纵坐标",
           },
         },
-        "heroMoving": {
+        heroMoving: {
           "!type": "number",
-          "!doc": "勇士行走的状态值"
+          "!doc": "勇士行走的状态值",
         },
-        "heroStop": {
+        heroStop: {
           "!type": "bool",
-          "!doc": "勇士是否已停下"
+          "!doc": "勇士是否已停下",
         },
-        "holdingKeys": {
+        holdingKeys: {
           "!type": "[number]",
-          "!doc": "当前按下的键"
+          "!doc": "当前按下的键",
         },
-        "id2number": {
-          "!doc": "图块ID到数字的对应关系"
+        id2number: {
+          "!doc": "图块ID到数字的对应关系",
         },
-        "lockControl": {
+        lockControl: {
           "!type": "bool",
-          "!doc": "当前是否是锁定操作状态"
+          "!doc": "当前是否是锁定操作状态",
         },
-        "maps": {
-          "!doc": "当前各地图信息"
+        maps: {
+          "!doc": "当前各地图信息",
         },
-        "number2Block": {
-          "!doc": "数字到图块对象的对应关系"
+        number2Block: {
+          "!doc": "数字到图块对象的对应关系",
         },
-        "played": {
+        played: {
           "!type": "bool",
-          "!doc": "当前是否游戏中(不包括标题画面和录像回放)"
+          "!doc": "当前是否游戏中(不包括标题画面和录像回放)",
         },
-        "replay": {
+        replay: {
           "!doc": "当前录像回放信息",
-          "animate": {
+          animate: {
             "!type": "bool",
-            "!doc": "回放是否正处于动画中"
+            "!doc": "回放是否正处于动画中",
           },
-          "pausing": {
+          pausing: {
             "!type": "bool",
-            "!doc": "回放是否暂停中"
+            "!doc": "回放是否暂停中",
           },
-          "replaying": {
+          replaying: {
             "!type": "bool",
-            "!doc": "当前是否回放中"
+            "!doc": "当前是否回放中",
           },
-          "save": {
+          save: {
             "!type": "[]",
-            "!doc": "录像中的存档"
+            "!doc": "录像中的存档",
           },
-          "speed": {
+          speed: {
             "!type": "number",
-            "!doc": "回放速度"
+            "!doc": "回放速度",
           },
-          "steps": {
+          steps: {
             "!type": "number",
-            "!doc": "回放步数"
+            "!doc": "回放步数",
           },
-          "toReplay": {
+          toReplay: {
             "!type": "[string]",
-            "!doc": "待回放的列表"
+            "!doc": "待回放的列表",
           },
-          "totalList": {
+          totalList: {
             "!type": "[string]",
-            "!doc": "回放总列表"
-          }
+            "!doc": "回放总列表",
+          },
         },
-        "route": {
+        route: {
           "!type": "[string]",
-          "!doc": "当前录像内容"
+          "!doc": "当前录像内容",
         },
-        "shops": {
-          "!doc": "全局商店列表"
+        shops: {
+          "!doc": "全局商店列表",
         },
-        "textAttribute": {
-          "!doc": "当前剧情文本属性"
+        textAttribute: {
+          "!doc": "当前剧情文本属性",
         },
-        "thisMap": {
+        thisMap: {
           "!type": "floor",
-          "!doc": "当前地图信息"
-        }
+          "!doc": "当前地图信息",
+        },
       },
-      "init": {
+      init: {
         "!doc": "初始化core",
-        "!type": "fn(coreData: ?, callback: fn())"
+        "!type": "fn(coreData: ?, callback: fn())",
       },
-      "doFunc": {
+      doFunc: {
         "!doc": "执行一个函数;如果函数名是字符串则转发到插件中",
-        "!type": "fn(func: name|fn(), _this?: ?)"
+        "!type": "fn(func: name|fn(), _this?: ?)",
       },
-      "control": {
-        "!doc": "负责整个游戏的核心控制系统,分为如下几个部分:<br/>- requestAnimationFrame相关<br/>- 标题界面,开始和重新开始游戏<br/>- 自动寻路和人物行走相关<br/>- 画布、位置、阻激夹域、显伤等相关<br/>- 录像的回放相关<br/>- 存读档,自动存档,同步存档等相关<br/>- 人物属性和状态、位置、变量等相关<br/>- 天气、色调、音乐和音效的播放<br/>- 状态栏和工具栏相关<br/>- 界面resize相关",
-        "showStatusBar": {
+      control: {
+        "!doc":
+          "负责整个游戏的核心控制系统,分为如下几个部分:<br/>- requestAnimationFrame相关<br/>- 标题界面,开始和重新开始游戏<br/>- 自动寻路和人物行走相关<br/>- 画布、位置、阻激夹域、显伤等相关<br/>- 录像的回放相关<br/>- 存读档,自动存档,同步存档等相关<br/>- 人物属性和状态、位置、变量等相关<br/>- 天气、色调、音乐和音效的播放<br/>- 状态栏和工具栏相关<br/>- 界面resize相关",
+        showStatusBar: {
           "!doc": "显示状态栏",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "startReplay": {
+        startReplay: {
           "!doc": "开始播放录像",
-          "!type": "fn(list: [string])"
+          "!type": "fn(list: [string])",
         },
-        "triggerReplay": {
+        triggerReplay: {
           "!doc": "播放或暂停录像回放",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "screenFlash": {
-          "!doc": "画面闪烁<br/>例如:core.screenFlash([255, 0, 0, 1], 3); // 红屏一闪而过<br/>color: 一行三列(第四列视为1)或一行四列(第四列若大于1则会被视为1,第四列若填负数则会被视为0)的颜色数组,必填<br/>time: 单次闪烁时长,实际闪烁效果为先花其三分之一的时间渐变到目标色调,再花剩余三分之二的时间渐变回去<br/>times: 闪烁的总次数,不填或填0都视为1<br/>moveMode: 渐变方式<br/>callback: 闪烁全部完毕后的回调函数,可选",
-          "!type": "fn(color: [number], time: number, times?: number, moveMode?: string, callback?: fn())"
+        screenFlash: {
+          "!doc":
+            "画面闪烁<br/>例如:core.screenFlash([255, 0, 0, 1], 3); // 红屏一闪而过<br/>color: 一行三列(第四列视为1)或一行四列(第四列若大于1则会被视为1,第四列若填负数则会被视为0)的颜色数组,必填<br/>time: 单次闪烁时长,实际闪烁效果为先花其三分之一的时间渐变到目标色调,再花剩余三分之二的时间渐变回去<br/>times: 闪烁的总次数,不填或填0都视为1<br/>moveMode: 渐变方式<br/>callback: 闪烁全部完毕后的回调函数,可选",
+          "!type":
+            "fn(color: [number], time: number, times?: number, moveMode?: string, callback?: fn())",
         },
-        "setCurtain": {
-          "!doc": "更改画面色调,不计入存档。如需长期生效请使用core.events._action_setCurtain()函数<br/>例如:core.setCurtain(); // 恢复画面色调,用时四分之三秒<br/>color: 一行三列(第四列视为1)或一行四列(第四列若大于1则会被视为1,第四列若为负数则会被视为0)的颜色数组,不填视为[0, 0, 0, 0]<br/>time: 渐变时间,单位为毫秒。不填视为750ms,负数视为0(无渐变,立即更改)<br/>moveMode: 渐变方式<br/>callback: 更改完毕后的回调函数,可选。事件流中常取core.doAction",
-          "!type": "fn(color?: [number], time?: number, moveMode?: string, callback?: fn())"
+        setCurtain: {
+          "!doc":
+            "更改画面色调,不计入存档。如需长期生效请使用core.events._action_setCurtain()函数<br/>例如:core.setCurtain(); // 恢复画面色调,用时四分之三秒<br/>color: 一行三列(第四列视为1)或一行四列(第四列若大于1则会被视为1,第四列若为负数则会被视为0)的颜色数组,不填视为[0, 0, 0, 0]<br/>time: 渐变时间,单位为毫秒。不填视为750ms,负数视为0(无渐变,立即更改)<br/>moveMode: 渐变方式<br/>callback: 更改完毕后的回调函数,可选。事件流中常取core.doAction",
+          "!type":
+            "fn(color?: [number], time?: number, moveMode?: string, callback?: fn())",
         },
-        "updateDamage": {
-          "!doc": "注意!请勿使用该函数!请使用core.updateStatusBar()代替!!重算并绘制地图显伤<br/>例如:core.updateDamage(); // 更新当前地图的显伤,绘制在显伤层(废话)<br/>floorId: 地图id,不填视为当前地图。预览地图时填写<br/>ctx: 绘制到的画布,如果填写了就会画在该画布而不是显伤层",
-          "!type": "fn(floorId?: string, ctx?: string|CanvasRenderingContext2D)"
+        updateDamage: {
+          "!doc":
+            "注意!请勿使用该函数!请使用core.updateStatusBar()代替!!重算并绘制地图显伤<br/>例如:core.updateDamage(); // 更新当前地图的显伤,绘制在显伤层(废话)<br/>floorId: 地图id,不填视为当前地图。预览地图时填写<br/>ctx: 绘制到的画布,如果填写了就会画在该画布而不是显伤层",
+          "!type":
+            "fn(floorId?: string, ctx?: string|CanvasRenderingContext2D)",
         },
-        "drawDamage": {
+        drawDamage: {
           "!doc": "仅绘制地图显伤",
-          "!type": "fn(string|CanvasRenderingContext2D)"
+          "!type": "fn(string|CanvasRenderingContext2D)",
         },
-        "nextX": {
-          "!doc": "获取主角面前第n格的横坐标<br/>例如:core.closeDoor(core.nextX(), core.nextY(), 'yellowDoor', core.turnHero); // 在主角面前关上一扇黄门,然后主角顺时针旋转90°<br/>n: 目标格与主角的距离,面前为正数,背后为负数,脚下为0,不填视为1",
-          "!type": "fn(n?: number) -> number"
+        nextX: {
+          "!doc":
+            "获取主角面前第n格的横坐标<br/>例如:core.closeDoor(core.nextX(), core.nextY(), 'yellowDoor', core.turnHero); // 在主角面前关上一扇黄门,然后主角顺时针旋转90°<br/>n: 目标格与主角的距离,面前为正数,背后为负数,脚下为0,不填视为1",
+          "!type": "fn(n?: number) -> number",
         },
-        "nextY": {
-          "!doc": "获取主角面前第n格的纵坐标<br/>例如:core.jumpHero(core.nextX(2), core.nextY(2)); // 主角向前跃过一格,即跳跃靴道具的使用效果<br/>n: 目标格与主角的距离,面前为正数,背后为负数,脚下为0,不填视为1",
-          "!type": "fn(n?: number) -> number"
+        nextY: {
+          "!doc":
+            "获取主角面前第n格的纵坐标<br/>例如:core.jumpHero(core.nextX(2), core.nextY(2)); // 主角向前跃过一格,即跳跃靴道具的使用效果<br/>n: 目标格与主角的距离,面前为正数,背后为负数,脚下为0,不填视为1",
+          "!type": "fn(n?: number) -> number",
         },
-        "clearContinueAutomaticRoute": {
+        clearContinueAutomaticRoute: {
           "!doc": "清空剩下的自动寻路列表",
-          "!type": "fn(callback?: fn())"
+          "!type": "fn(callback?: fn())",
         },
-        "updateViewport": {
+        updateViewport: {
           "!doc": "更新大地图的可见区域",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "getMappedName": {
+        getMappedName: {
           "!doc": "获得映射文件名",
-          "!type": "fn(name: string) -> string"
+          "!type": "fn(name: string) -> string",
         },
-        "addFlag": {
-          "!doc": "增减一个flag变量,等价于 core.setFlag(name, core.getFlag(name, 0) + value)<br/>例如:core.addFlag('hatred', 1); // 增加1点仇恨值<br/>name: 变量名,支持中文<br/>value: 变量的增量",
-          "!type": "fn(name: string, value: number)"
+        addFlag: {
+          "!doc":
+            "增减一个flag变量,等价于 core.setFlag(name, core.getFlag(name, 0) + value)<br/>例如:core.addFlag('hatred', 1); // 增加1点仇恨值<br/>name: 变量名,支持中文<br/>value: 变量的增量",
+          "!type": "fn(name: string, value: number)",
         },
-        "setFlag": {
-          "!doc": "设置一个flag变量<br/>例如:core.setFlag('poison', true); // 令主角中毒<br/>name: 变量名,支持中文<br/>value: 变量的新值,不填或填null视为删除",
-          "!type": "fn(name: string, value: ?)"
+        setFlag: {
+          "!doc":
+            "设置一个flag变量<br/>例如:core.setFlag('poison', true); // 令主角中毒<br/>name: 变量名,支持中文<br/>value: 变量的新值,不填或填null视为删除",
+          "!type": "fn(name: string, value: ?)",
         },
-        "playSound": {
-          "!doc": "播放一个音效<br/>sound: 音效名;可以使用文件别名。<br/>pitch: 播放的音调;可选,如果设置则为30-300之间的数值。<br/>callback: 可选,播放完毕后执行的回调函数。<br/>返回:一个数字,可用于core.stopSound的参数来只停止该音效。",
-          "!type": "fn(sound: string, pitch?: number, callback?: fn()) -> number"
+        playSound: {
+          "!doc":
+            "播放一个音效<br/>sound: 音效名;可以使用文件别名。<br/>pitch: 播放的音调;可选,如果设置则为30-300之间的数值。<br/>callback: 可选,播放完毕后执行的回调函数。<br/>返回:一个数字,可用于core.stopSound的参数来只停止该音效。",
+          "!type":
+            "fn(sound: string, pitch?: number, callback?: fn()) -> number",
         },
-        "stopSound": {
-          "!doc": "停止播放音效。如果未指定id则停止所有音效,否则只停止指定的音效。",
-          "!type": "fn(id?: number)"
+        stopSound: {
+          "!doc":
+            "停止播放音效。如果未指定id则停止所有音效,否则只停止指定的音效。",
+          "!type": "fn(id?: number)",
         },
-        "getPlayingSounds": {
-          "!doc": "获得当前正在播放的所有(指定)音效的id列表<br/>name: 音效名,可用别名;不填代表返回正在播放的全部音效<br/>返回值: 一个列表,每一项为一个正在播放的音效id;可用core.stopSound立刻停止播放",
-          "!type": "fn(name?: string) -> [number]"
+        getPlayingSounds: {
+          "!doc":
+            "获得当前正在播放的所有(指定)音效的id列表<br/>name: 音效名,可用别名;不填代表返回正在播放的全部音效<br/>返回值: 一个列表,每一项为一个正在播放的音效id;可用core.stopSound立刻停止播放",
+          "!type": "fn(name?: string) -> [number]",
         },
-        "addGameCanvasTranslate": {
+        addGameCanvasTranslate: {
           "!doc": "加减画布偏移",
-          "!type": "fn(x?: number, y?: number)"
+          "!type": "fn(x?: number, y?: number)",
         },
-        "addBuff": {
-          "!doc": "增减主角某个属性的百分比修正倍率,加减法叠加和抵消。等价于 core.setBuff(name, core.getBuff(name) + value)<br/>例如:core.addBuff('atk', -0.1); // 主角获得一层“攻击力减一成”的负面效果<br/>name: 属性的英文名,请注意只能用于数值类属性哦,否则随后的乘法会得到NaN<br/>value: 倍率的增量",
-          "!type": "fn(name: string, value: number)"
+        addBuff: {
+          "!doc":
+            "增减主角某个属性的百分比修正倍率,加减法叠加和抵消。等价于 core.setBuff(name, core.getBuff(name) + value)<br/>例如:core.addBuff('atk', -0.1); // 主角获得一层“攻击力减一成”的负面效果<br/>name: 属性的英文名,请注意只能用于数值类属性哦,否则随后的乘法会得到NaN<br/>value: 倍率的增量",
+          "!type": "fn(name: string, value: number)",
         },
-        "drawHero": {
-          "!doc": "绘制主角和跟随者并重置视野到以主角为中心<br/>例如:core.drawHero(); // 原地绘制主角的静止帧并重置视野野<br/>status: 只能为 stop, leftFoot 和 rightFoot,不填用stop。<br/>offset: 相对主角逻辑位置的偏移量,不填视为无偏移。<br/>frame: 绘制的第几帧",
-          "!type": "fn(status?: string, offset?: number, frame?: number)"
+        drawHero: {
+          "!doc":
+            "绘制主角和跟随者并重置视野到以主角为中心<br/>例如:core.drawHero(); // 原地绘制主角的静止帧并重置视野野<br/>status: 只能为 stop, leftFoot 和 rightFoot,不填用stop。<br/>offset: 相对主角逻辑位置的偏移量,不填视为无偏移。<br/>frame: 绘制的第几帧",
+          "!type": "fn(status?: string, offset?: number, frame?: number)",
         },
-        "pauseBgm": {
+        pauseBgm: {
           "!doc": "暂停背景音乐的播放",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "setBgmSpeed": {
-          "!doc": "设置背景音乐的播放速度和音调<br/>speed: 播放速度,必须为30-300中间的值。100为正常速度。<br/>usePitch: 是否同时改变音调(部分设备可能不支持)",
-          "!type": "fn(speed: number, usePitch?: bool)"
+        setBgmSpeed: {
+          "!doc":
+            "设置背景音乐的播放速度和音调<br/>speed: 播放速度,必须为30-300中间的值。100为正常速度。<br/>usePitch: 是否同时改变音调(部分设备可能不支持)",
+          "!type": "fn(speed: number, usePitch?: bool)",
         },
-        "setReplaySpeed": {
+        setReplaySpeed: {
           "!doc": "设置播放速度",
-          "!type": "fn(speed: number)"
+          "!type": "fn(speed: number)",
         },
-        "pauseReplay": {
+        pauseReplay: {
           "!doc": "暂停播放",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "doSL": {
+        doSL: {
           "!doc": "实际进行存读档事件",
-          "!type": "fn(id?: string, type?: string)"
+          "!type": "fn(id?: string, type?: string)",
         },
-        "setStatus": {
-          "!doc": "设置主角的某个属性<br/>例如:core.setStatus('atk', 100); // 设置攻击力为100<br/>name: 属性的英文名,其中'x'、'y'和'direction'会被特殊处理为 core.setHeroLoc(name, value),其他的会直接对 core.status.hero[name] 赋值<br/>value: 属性的新值",
-          "!type": "fn(name: string, value: number)"
+        setStatus: {
+          "!doc":
+            "设置主角的某个属性<br/>例如:core.setStatus('atk', 100); // 设置攻击力为100<br/>name: 属性的英文名,其中'x'、'y'和'direction'会被特殊处理为 core.setHeroLoc(name, value),其他的会直接对 core.status.hero[name] 赋值<br/>value: 属性的新值",
+          "!type": "fn(name: string, value: number)",
         },
-        "setAutomaticRoute": {
-          "!doc": "半自动寻路,用于鼠标或手指拖动<br/>例如:core.setAutomaticRoute(0, 0, [{direction: \"right\", x: 4, y: 9}, {direction: \"right\", x: 5, y: 9}]);<br/>destX: 鼠标或手指的起拖点横坐标<br/>destY: 鼠标或手指的起拖点纵坐标<br/>stepPostfix: 拖动轨迹的数组表示,每项为一步的方向和目标点。",
-          "!type": "fn(destX: number, destY: number, stepPostfix: [{x: number, y: number, direction: string}])"
+        setAutomaticRoute: {
+          "!doc":
+            '半自动寻路,用于鼠标或手指拖动<br/>例如:core.setAutomaticRoute(0, 0, [{direction: "right", x: 4, y: 9}, {direction: "right", x: 5, y: 9}]);<br/>destX: 鼠标或手指的起拖点横坐标<br/>destY: 鼠标或手指的起拖点纵坐标<br/>stepPostfix: 拖动轨迹的数组表示,每项为一步的方向和目标点。',
+          "!type":
+            "fn(destX: number, destY: number, stepPostfix: [{x: number, y: number, direction: string}])",
         },
-        "setHeroOpacity": {
+        setHeroOpacity: {
           "!doc": "改变勇士的不透明度",
-          "!type": "fn(opacity?: number, moveMode?: string, time?: number, callback?: fn())"
+          "!type":
+            "fn(opacity?: number, moveMode?: string, time?: number, callback?: fn())",
         },
-        "gatherFollowers": {
+        gatherFollowers: {
           "!doc": "立刻聚集所有的跟随者",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "getStatus": {
-          "!doc": "读取主角的某个属性,不包括百分比修正<br/>例如:core.getStatus('atk'); // 读取主角的攻击力<br/>name: 属性的英文名,其中'x'、'y'和'direction'会被特殊处理为 core.getHeroLoc(name),其他的会直接读取 core.status.hero[name]",
-          "!type": "fn(name: string) -> number"
+        getStatus: {
+          "!doc":
+            "读取主角的某个属性,不包括百分比修正<br/>例如:core.getStatus('atk'); // 读取主角的攻击力<br/>name: 属性的英文名,其中'x'、'y'和'direction'会被特殊处理为 core.getHeroLoc(name),其他的会直接读取 core.status.hero[name]",
+          "!type": "fn(name: string) -> number",
         },
-        "setHeroLoc": {
-          "!doc": "设置勇士位置<br/>值得注意的是,这句话虽然会使勇士改变位置,但并不会使界面重新绘制;<br/>如需立刻重新绘制地图还需调用:core.clearMap('hero'); core.drawHero(); 来对界面进行更新。<br/>例如:core.setHeroLoc('x', 5) // 将勇士当前位置的横坐标设置为5。<br/>name: 要设置的坐标属性<br/>value: 新值<br/>noGather: 是否聚集跟随者",
-          "!type": "fn(name: string, value: string|number, noGather?: bool)"
+        setHeroLoc: {
+          "!doc":
+            "设置勇士位置<br/>值得注意的是,这句话虽然会使勇士改变位置,但并不会使界面重新绘制;<br/>如需立刻重新绘制地图还需调用:core.clearMap('hero'); core.drawHero(); 来对界面进行更新。<br/>例如:core.setHeroLoc('x', 5) // 将勇士当前位置的横坐标设置为5。<br/>name: 要设置的坐标属性<br/>value: 新值<br/>noGather: 是否聚集跟随者",
+          "!type": "fn(name: string, value: string|number, noGather?: bool)",
         },
-        "getLvName": {
-          "!doc": "根据级别的数字获取对应的名称,后者定义在全塔属性<br/>例如:core.getLvName(); // 获取主角当前级别的名称,如“下级佣兵”<br/>lv: 级别的数字,不填则视为主角当前的级别<br/>返回值:级别的名称,如果不存在就还是返回数字",
-          "!type": "fn(lv?: number) -> string|number"
+        getLvName: {
+          "!doc":
+            "根据级别的数字获取对应的名称,后者定义在全塔属性<br/>例如:core.getLvName(); // 获取主角当前级别的名称,如“下级佣兵”<br/>lv: 级别的数字,不填则视为主角当前的级别<br/>返回值:级别的名称,如果不存在就还是返回数字",
+          "!type": "fn(lv?: number) -> string|number",
         },
-        "getNextLvUpNeed": {
-          "!doc": "获得下次升级需要的经验值。<br/>升级扣除模式下会返回经验差值;非扣除模式下会返回总共需要的经验值。<br/>如果无法进行下次升级,返回null。",
-          "!type": "fn() -> number"
+        getNextLvUpNeed: {
+          "!doc":
+            "获得下次升级需要的经验值。<br/>升级扣除模式下会返回经验差值;非扣除模式下会返回总共需要的经验值。<br/>如果无法进行下次升级,返回null。",
+          "!type": "fn() -> number",
         },
-        "addStatus": {
-          "!doc": "增减主角的某个属性,等价于core.setStatus(name, core.getStatus(name) + value)<br/>例如:core.addStatus('atk', 100'); // 给主角攻击力加100<br/>name: 属性的英文名<br/>value: 属性的增量",
-          "!type": "fn(name: string, value: number)"
+        addStatus: {
+          "!doc":
+            "增减主角的某个属性,等价于core.setStatus(name, core.getStatus(name) + value)<br/>例如:core.addStatus('atk', 100'); // 给主角攻击力加100<br/>name: 属性的英文名<br/>value: 属性的增量",
+          "!type": "fn(name: string, value: number)",
         },
-        "speedUpReplay": {
+        speedUpReplay: {
           "!doc": "加速播放",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "loadData": {
+        loadData: {
           "!doc": "从本地读档",
-          "!type": "fn(data?: ?, callback?: fn())"
+          "!type": "fn(data?: ?, callback?: fn())",
         },
-        "debug": {
-          "!doc": "开启调试模式, 此模式下可以按Ctrl键进行穿墙, 并忽略一切事件。<br/>此模式下不可回放录像和上传成绩。",
-          "!type": "fn()"
+        debug: {
+          "!doc":
+            "开启调试模式, 此模式下可以按Ctrl键进行穿墙, 并忽略一切事件。<br/>此模式下不可回放录像和上传成绩。",
+          "!type": "fn()",
         },
-        "moveOneStep": {
-          "!doc": "每移动一格后执行的事件<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
-          "!type": "fn(callback?: fn())"
+        moveOneStep: {
+          "!doc":
+            "每移动一格后执行的事件<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
+          "!type": "fn(callback?: fn())",
         },
-        "clearStatus": {
+        clearStatus: {
           "!doc": "清除游戏状态和数据",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "updateFollowers": {
+        updateFollowers: {
           "!doc": "更新跟随者坐标",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "waitHeroToStop": {
-          "!doc": "等待主角停下<br/>例如:core.waitHeroToStop(core.vibrate); // 等待主角停下,然后视野左右抖动1秒<br/>callback: 主角停止后的回调函数",
-          "!type": "fn(callback?: fn())"
+        waitHeroToStop: {
+          "!doc":
+            "等待主角停下<br/>例如:core.waitHeroToStop(core.vibrate); // 等待主角停下,然后视野左右抖动1秒<br/>callback: 主角停止后的回调函数",
+          "!type": "fn(callback?: fn())",
         },
-        "hideStatusBar": {
+        hideStatusBar: {
           "!doc": "隐藏状态栏<br/>showToolbox: 是否不隐藏竖屏工具栏",
-          "!type": "fn(showToolbox?: bool)"
+          "!type": "fn(showToolbox?: bool)",
         },
-        "getBuff": {
-          "!doc": "读取主角某个属性的百分比修正倍率,初始值为1<br/>例如:core.getBuff('atk'); // 主角当前能发挥出多大比例的攻击力<br/>name: 属性的英文名",
-          "!type": "fn(name: string) -> number"
+        getBuff: {
+          "!doc":
+            "读取主角某个属性的百分比修正倍率,初始值为1<br/>例如:core.getBuff('atk'); // 主角当前能发挥出多大比例的攻击力<br/>name: 属性的英文名",
+          "!type": "fn(name: string) -> number",
         },
-        "triggerDebuff": {
-          "!doc": "获得或移除毒衰咒效果<br/>action: 要获得还是移除,'get'为获得,'remove'为移除<br/>type: 获得或移除的内容(poison/weak/curse),可以为字符串或数组",
-          "!type": "fn(action: string, type: string|[string])"
+        triggerDebuff: {
+          "!doc":
+            "获得或移除毒衰咒效果<br/>action: 要获得还是移除,'get'为获得,'remove'为移除<br/>type: 获得或移除的内容(poison/weak/curse),可以为字符串或数组",
+          "!type": "fn(action: string, type: string|[string])",
         },
-        "setToolbarButton": {
+        setToolbarButton: {
           "!doc": "改变工具栏为按钮1-8",
-          "!type": "fn(useButton?: bool)"
+          "!type": "fn(useButton?: bool)",
         },
-        "getSaves": {
+        getSaves: {
           "!doc": "获得某些存档内容",
-          "!type": "fn(ids?: ?, callback?: fn())"
+          "!type": "fn(ids?: ?, callback?: fn())",
         },
-        "replay": {
+        replay: {
           "!doc": "回放下一个操作",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "getStatusOrDefault": {
+        getStatusOrDefault: {
           "!doc": "从status中获得属性,如果不存在则从勇士属性中获取",
-          "!type": "fn(status?: ?, name?: string)"
+          "!type": "fn(status?: ?, name?: string)",
         },
-        "unregisterReplayAction": {
+        unregisterReplayAction: {
           "!doc": "注销一个录像行为",
-          "!type": "fn(name: string)"
+          "!type": "fn(name: string)",
         },
-        "unregisterWeather": {
+        unregisterWeather: {
           "!doc": "注销一个天气",
-          "!type": "fn(name: string)"
+          "!type": "fn(name: string)",
         },
-        "setBuff": {
-          "!doc": "设置主角某个属性的百分比修正倍率,初始值为1,<br/>倍率存放在flag: '__'+name+'_buff__' 中<br/>例如:core.setBuff('atk', 0.5); // 主角能发挥出的攻击力减半<br/>name: 属性的英文名,请注意只能用于数值类属性哦,否则随后的乘法会得到NaN<br/>value: 新的百分比修正倍率,不填(效果上)视为1",
-          "!type": "fn(name: string, value: number)"
+        setBuff: {
+          "!doc":
+            "设置主角某个属性的百分比修正倍率,初始值为1,<br/>倍率存放在flag: '__'+name+'_buff__' 中<br/>例如:core.setBuff('atk', 0.5); // 主角能发挥出的攻击力减半<br/>name: 属性的英文名,请注意只能用于数值类属性哦,否则随后的乘法会得到NaN<br/>value: 新的百分比修正倍率,不填(效果上)视为1",
+          "!type": "fn(name: string, value: number)",
         },
-        "continueAutomaticRoute": {
+        continueAutomaticRoute: {
           "!doc": "继续剩下的自动寻路操作",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "setAutoHeroMove": {
-          "!doc": "连续行走<br/>例如:core.setAutoHeroMove([{direction: \"up\", step: 1}, {direction: \"left\", step: 3}]); // 上左左左<br/>steps: 压缩的步伐数组,每项表示朝某方向走多少步",
-          "!type": "fn(steps: [?])"
+        setAutoHeroMove: {
+          "!doc":
+            '连续行走<br/>例如:core.setAutoHeroMove([{direction: "up", step: 1}, {direction: "left", step: 3}]); // 上左左左<br/>steps: 压缩的步伐数组,每项表示朝某方向走多少步',
+          "!type": "fn(steps: [?])",
         },
-        "unregisterResize": {
+        unregisterResize: {
           "!doc": "注销一个resize函数",
-          "!type": "fn(name: string)"
+          "!type": "fn(name: string)",
         },
-        "saveAndStopAutomaticRoute": {
+        saveAndStopAutomaticRoute: {
           "!doc": "保存剩下的寻路,并停止",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "hideStartAnimate": {
-          "!doc": "淡出标题画面<br/>例如:core.hideStartAnimate(core.startGame); // 淡出标题画面并开始新游戏,跳过难度选择<br/>callback: 标题画面完全淡出后的回调函数",
-          "!type": "fn(callback?: fn())"
+        hideStartAnimate: {
+          "!doc":
+            "淡出标题画面<br/>例如:core.hideStartAnimate(core.startGame); // 淡出标题画面并开始新游戏,跳过难度选择<br/>callback: 标题画面完全淡出后的回调函数",
+          "!type": "fn(callback?: fn())",
         },
-        "getAllSaves": {
+        getAllSaves: {
           "!doc": "获得所有存档内容",
-          "!type": "fn(callback?: fn())"
+          "!type": "fn(callback?: fn())",
         },
-        "updateHeroIcon": {
+        updateHeroIcon: {
           "!doc": "更新状态栏的勇士图标",
-          "!type": "fn(name: string)"
+          "!type": "fn(name: string)",
         },
-        "setMusicBtn": {
+        setMusicBtn: {
           "!doc": "设置音乐图标的显隐状态",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "isPlaying": {
+        isPlaying: {
           "!doc": "游戏是否已经开始",
-          "!type": "fn() -> bool"
+          "!type": "fn() -> bool",
         },
-        "triggerBgm": {
+        triggerBgm: {
           "!doc": "开启或关闭背景音乐的播放",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "moveHero": {
-          "!doc": "连续前进,不撞南墙不回头<br/>例如:core.moveHero(); // 连续前进<br/>direction: 可选,如果设置了就会先转身到该方向<br/>callback: 可选,如果设置了就只走一步<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
-          "!type": "fn(direction?: string, callback?: fn())"
+        moveHero: {
+          "!doc":
+            "连续前进,不撞南墙不回头<br/>例如:core.moveHero(); // 连续前进<br/>direction: 可选,如果设置了就会先转身到该方向<br/>callback: 可选,如果设置了就只走一步<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
+          "!type": "fn(direction?: string, callback?: fn())",
         },
-        "getRealStatusOrDefault": {
-          "!doc": "从status中获得实际属性(增幅后的),如果不存在则从勇士属性中获取",
-          "!type": "fn(status?: ?, name?: string)"
+        getRealStatusOrDefault: {
+          "!doc":
+            "从status中获得实际属性(增幅后的),如果不存在则从勇士属性中获取",
+          "!type": "fn(status?: ?, name?: string)",
         },
-        "getStatusLabel": {
+        getStatusLabel: {
           "!doc": "获得某个状态的名字,如atk->攻击,def->防御等",
-          "!type": "fn(name: string) -> string"
+          "!type": "fn(name: string) -> string",
         },
-        "removeSave": {
+        removeSave: {
           "!doc": "删除某个存档",
-          "!type": "fn(index?: number, callback?: fn())"
+          "!type": "fn(index?: number, callback?: fn())",
         },
-        "registerAnimationFrame": {
-          "!doc": "注册一个 animationFrame<br/>name: 名称,可用来作为注销使用<br/>needPlaying: 是否只在游戏运行时才执行(在标题界面不执行)<br/>func: 要执行的函数,或插件中的函数名;可接受timestamp(从页面加载完毕到当前所经过的时间)作为参数",
-          "!type": "fn(name: string, needPlaying: bool, func?: fn(timestamp: number))"
+        registerAnimationFrame: {
+          "!doc":
+            "注册一个 animationFrame<br/>name: 名称,可用来作为注销使用<br/>needPlaying: 是否只在游戏运行时才执行(在标题界面不执行)<br/>func: 要执行的函数,或插件中的函数名;可接受timestamp(从页面加载完毕到当前所经过的时间)作为参数",
+          "!type":
+            "fn(name: string, needPlaying: bool, func?: fn(timestamp: number))",
         },
-        "getHeroLoc": {
-          "!doc": "读取主角的位置和/或朝向<br/>例如:core.getHeroLoc(); // 读取主角的位置和朝向<br/>name: 要读取横坐标还是纵坐标还是朝向还是都读取<br/>返回值:name ? core.status.hero.loc[name] : core.status.hero.loc",
-          "!type": "fn(name: string) -> string|number"
+        getHeroLoc: {
+          "!doc":
+            "读取主角的位置和/或朝向<br/>例如:core.getHeroLoc(); // 读取主角的位置和朝向<br/>name: 要读取横坐标还是纵坐标还是朝向还是都读取<br/>返回值:name ? core.status.hero.loc[name] : core.status.hero.loc",
+          "!type": "fn(name: string) -> string|number",
         },
-        "stopAutomaticRoute": {
+        stopAutomaticRoute: {
           "!doc": "停止自动寻路操作",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "setWeather": {
-          "!doc": "设置天气,不计入存档。如需长期生效请使用core.events._action_setWeather()函数<br/>例如:core.setWeather('fog', 10); // 设置十级大雾天<br/>type: 新天气的类型,不填视为晴天<br/>level: 新天气(晴天除外)的级别,必须为不大于10的正整数,不填视为5",
-          "!type": "fn(type?: string, level?: number)"
+        setWeather: {
+          "!doc":
+            "设置天气,不计入存档。如需长期生效请使用core.events._action_setWeather()函数<br/>例如:core.setWeather('fog', 10); // 设置十级大雾天<br/>type: 新天气的类型,不填视为晴天<br/>level: 新天气(晴天除外)的级别,必须为不大于10的正整数,不填视为5",
+          "!type": "fn(type?: string, level?: number)",
         },
-        "updateStatusBar": {
-          "!doc": "刷新状态栏和地图显伤<br/>doNotCheckAutoEvents: 是否不检查自动事件",
-          "!type": "fn(doNotCheckAutoEvents?: bool, immediate?: bool)"
+        updateStatusBar: {
+          "!doc":
+            "刷新状态栏和地图显伤<br/>doNotCheckAutoEvents: 是否不检查自动事件",
+          "!type": "fn(doNotCheckAutoEvents?: bool, immediate?: bool)",
         },
-        "autosave": {
+        autosave: {
           "!doc": "自动存档",
-          "!type": "fn(removeLast?: bool)"
+          "!type": "fn(removeLast?: bool)",
         },
-        "clearStatusBar": {
+        clearStatusBar: {
           "!doc": "清空状态栏",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "moveAction": {
-          "!doc": "尝试前进一步,如果面前不可被踏入就会直接触发该点事件<br/>请勿直接使用此函数,如有需要请使用「勇士前进一步或撞击」事件<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
-          "!type": "fn(callback?: fn())"
+        moveAction: {
+          "!doc":
+            "尝试前进一步,如果面前不可被踏入就会直接触发该点事件<br/>请勿直接使用此函数,如有需要请使用「勇士前进一步或撞击」事件<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
+          "!type": "fn(callback?: fn())",
         },
-        "hasFlag": {
-          "!doc": "判定一个flag变量是否存在且不为false、0、''、null、undefined和NaN<br/>例如:core.hasFlag('poison'); // 判断主角当前是否中毒<br/>name: 变量名,支持中文<br/>此函数等价于 !!core.getFlag(name)",
-          "!type": "fn(name: string) -> bool"
+        hasFlag: {
+          "!doc":
+            "判定一个flag变量是否存在且不为false、0、''、null、undefined和NaN<br/>例如:core.hasFlag('poison'); // 判断主角当前是否中毒<br/>name: 变量名,支持中文<br/>此函数等价于 !!core.getFlag(name)",
+          "!type": "fn(name: string) -> bool",
         },
-        "rewindReplay": {
+        rewindReplay: {
           "!doc": "回退到上一个录像节点",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "playBgm": {
-          "!doc": "播放背景音乐,中途开播但不计入存档且只会持续到下次场景切换。如需长期生效请将背景音乐的文件名赋值给flags.__bgm__<br/>例如:core.playBgm('bgm.mp3', 30); // 播放bgm.mp3,并跳过前半分钟<br/>bgm: 背景音乐的文件名,支持全塔属性中映射前的中文名<br/>startTime: 跳过前多少秒,不填则不跳过",
-          "!type": "fn(bgm: string, startTime?: number)"
+        playBgm: {
+          "!doc":
+            "播放背景音乐,中途开播但不计入存档且只会持续到下次场景切换。如需长期生效请将背景音乐的文件名赋值给flags.__bgm__<br/>例如:core.playBgm('bgm.mp3', 30); // 播放bgm.mp3,并跳过前半分钟<br/>bgm: 背景音乐的文件名,支持全塔属性中映射前的中文名<br/>startTime: 跳过前多少秒,不填则不跳过",
+          "!type": "fn(bgm: string, startTime?: number)",
         },
-        "isReplaying": {
+        isReplaying: {
           "!doc": "是否正在播放录像",
-          "!type": "fn() -> bool"
+          "!type": "fn() -> bool",
         },
-        "isMoving": {
+        isMoving: {
           "!doc": "当前是否正在移动",
-          "!type": "fn() -> bool"
+          "!type": "fn() -> bool",
         },
-        "getSaveIndexes": {
+        getSaveIndexes: {
           "!doc": "获得所有存在存档的存档位",
-          "!type": "fn(callback?: fn())"
+          "!type": "fn(callback?: fn())",
         },
-        "unlockControl": {
+        unlockControl: {
           "!doc": "解锁用户控制行为",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "syncSave": {
+        syncSave: {
           "!doc": "同步存档到服务器",
-          "!type": "fn(type?: string)"
+          "!type": "fn(type?: string)",
         },
-        "removeFlag": {
+        removeFlag: {
           "!doc": "删除某个flag/变量",
-          "!type": "fn(name: string)"
+          "!type": "fn(name: string)",
         },
-        "registerResize": {
-          "!doc": "注册一个resize函数<br/>name: 名称,可供注销使用<br/>func: 可以是一个函数,或者是插件中的函数名;可以接受obj参数,详见resize函数。",
-          "!type": "fn(name: string, func: fn(obj: ?))"
+        registerResize: {
+          "!doc":
+            "注册一个resize函数<br/>name: 名称,可供注销使用<br/>func: 可以是一个函数,或者是插件中的函数名;可以接受obj参数,详见resize函数。",
+          "!type": "fn(name: string, func: fn(obj: ?))",
         },
-        "registerWeather": {
-          "!doc": "注册一个天气<br/>name: 要注册的天气名<br/>initFunc: 当切换到此天气时的初始化;接受level(天气等级)为参数;可用于创建多个节点(如初始化雪花)<br/>frameFunc: 每帧的天气效果变化;可接受timestamp(从页面加载完毕到当前所经过的时间)和level(天气等级)作为参数<br/>天气应当仅在weather层进行绘制,推荐使用core.animateFrame.weather.nodes用于节点信息。",
-          "!type": "fn(name: string, initFunc: fn(level: number), frameFunc?: fn(timestamp: number, level: number))"
+        registerWeather: {
+          "!doc":
+            "注册一个天气<br/>name: 要注册的天气名<br/>initFunc: 当切换到此天气时的初始化;接受level(天气等级)为参数;可用于创建多个节点(如初始化雪花)<br/>frameFunc: 每帧的天气效果变化;可接受timestamp(从页面加载完毕到当前所经过的时间)和level(天气等级)作为参数<br/>天气应当仅在weather层进行绘制,推荐使用core.animateFrame.weather.nodes用于节点信息。",
+          "!type":
+            "fn(name: string, initFunc: fn(level: number), frameFunc?: fn(timestamp: number, level: number))",
         },
-        "stopReplay": {
+        stopReplay: {
           "!doc": "停止播放",
-          "!type": "fn(force?: bool)"
+          "!type": "fn(force?: bool)",
         },
-        "turnHero": {
-          "!doc": "主角转向并计入录像,不会导致跟随者聚集,会导致视野重置到以主角为中心<br/>例如:core.turnHero(); // 主角顺时针旋转90°,即单击主角或按下Z键的效果<br/>direction: 主角的新朝向,可为 up, down, left, right, :left, :right, :back 七种之一",
-          "!type": "fn(direction?: string)"
+        turnHero: {
+          "!doc":
+            "主角转向并计入录像,不会导致跟随者聚集,会导致视野重置到以主角为中心<br/>例如:core.turnHero(); // 主角顺时针旋转90°,即单击主角或按下Z键的效果<br/>direction: 主角的新朝向,可为 up, down, left, right, :left, :right, :back 七种之一",
+          "!type": "fn(direction?: string)",
         },
-        "resumeReplay": {
+        resumeReplay: {
           "!doc": "恢复播放",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "resize": {
+        resize: {
           "!doc": "屏幕分辨率改变后重新自适应",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "getSave": {
+        getSave: {
           "!doc": "获得某个存档内容",
-          "!type": "fn(index?: number, callback?: fn(data: ?))"
+          "!type": "fn(index?: number, callback?: fn(data: ?))",
         },
-        "setViewport": {
-          "!doc": "设置视野范围<br/>px,py: 左上角相对大地图的像素坐标,不需要为32倍数",
-          "!type": "fn(px?: number, py?: number)"
+        setViewport: {
+          "!doc":
+            "设置视野范围<br/>px,py: 左上角相对大地图的像素坐标,不需要为32倍数",
+          "!type": "fn(px?: number, py?: number)",
         },
-        "chooseReplayFile": {
+        chooseReplayFile: {
           "!doc": "选择录像文件",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "lockControl": {
+        lockControl: {
           "!doc": "锁定用户控制,常常用于事件处理",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "updateCheckBlock": {
+        updateCheckBlock: {
           "!doc": "更新领域、夹击、阻击的伤害地图",
-          "!type": "fn(floorId?: string)"
+          "!type": "fn(floorId?: string)",
         },
-        "checkBlock": {
+        checkBlock: {
           "!doc": "检查并执行领域、夹击、阻击事件",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "clearAutomaticRouteNode": {
+        clearAutomaticRouteNode: {
           "!doc": "清除自动寻路路线",
-          "!type": "fn(x?: number, y?: number)"
+          "!type": "fn(x?: number, y?: number)",
         },
-        "getFlag": {
-          "!doc": "读取一个flag变量<br/>name: 变量名,支持中文<br/>defaultValue: 当变量不存在时的返回值,可选(事件流中默认填0)。",
-          "!type": "fn(name: string, defaultValue?: ?)"
+        getFlag: {
+          "!doc":
+            "读取一个flag变量<br/>name: 变量名,支持中文<br/>defaultValue: 当变量不存在时的返回值,可选(事件流中默认填0)。",
+          "!type": "fn(name: string, defaultValue?: ?)",
         },
-        "getNakedStatus": {
+        getNakedStatus: {
           "!doc": "获得勇士原始属性(无装备和衰弱影响)",
-          "!type": "fn(name: string)"
+          "!type": "fn(name: string)",
         },
-        "nearHero": {
-          "!doc": "判定主角是否身处某个点的锯齿领域(取曼哈顿距离)<br/>例如:core.nearHero(6, 6, 6); // 判定主角是否身处点(6,6)的半径为6的锯齿领域<br/>x: 领域的中心横坐标<br/>y: 领域的中心纵坐标<br/>n: 领域的半径,不填视为1",
-          "!type": "fn(x: number, y: number, n?: number) -> bool"
+        nearHero: {
+          "!doc":
+            "判定主角是否身处某个点的锯齿领域(取曼哈顿距离)<br/>例如:core.nearHero(6, 6, 6); // 判定主角是否身处点(6,6)的半径为6的锯齿领域<br/>x: 领域的中心横坐标<br/>y: 领域的中心纵坐标<br/>n: 领域的半径,不填视为1",
+          "!type": "fn(x: number, y: number, n?: number) -> bool",
         },
-        "stepReplay": {
+        stepReplay: {
           "!doc": "单步播放",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "hasSave": {
+        hasSave: {
           "!doc": "判断某个存档位是否存在存档",
-          "!type": "fn(index?: number) -> bool"
+          "!type": "fn(index?: number) -> bool",
         },
-        "showStartAnimate": {
-          "!doc": "进入标题画面<br/>例如:core.showStartAnimate(); // 重启游戏但不重置bgm<br/>noAnimate: 可选,true表示不由黑屏淡入而是立即亮屏<br/>callback: 可选,完全亮屏后的回调函数",
-          "!type": "fn(noAnimate?: bool, callback?: fn())"
+        showStartAnimate: {
+          "!doc":
+            "进入标题画面<br/>例如:core.showStartAnimate(); // 重启游戏但不重置bgm<br/>noAnimate: 可选,true表示不由黑屏淡入而是立即亮屏<br/>callback: 可选,完全亮屏后的回调函数",
+          "!type": "fn(noAnimate?: bool, callback?: fn())",
         },
-        "moveViewport": {
+        moveViewport: {
           "!doc": "移动视野范围",
-          "!type": "fn(x: number, y: number, moveMode?: string, time?: number, callback?: fn())"
+          "!type":
+            "fn(x: number, y: number, moveMode?: string, time?: number, callback?: fn())",
         },
-        "syncLoad": {
+        syncLoad: {
           "!doc": "从服务器加载存档",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "setHeroMoveInterval": {
+        setHeroMoveInterval: {
           "!doc": "设置行走的效果动画",
-          "!type": "fn(callback?: fn())"
+          "!type": "fn(callback?: fn())",
         },
-        "registerReplayAction": {
-          "!doc": "注册一个录像行为<br/>name: 自定义名称,可用于注销使用<br/>func: 具体执行录像的函数,可为一个函数或插件中的函数名;<br/>需要接受一个action参数,代表录像回放时的下一个操作<br/>func返回true代表成功处理了此录像行为,false代表没有处理此录像行为。",
-          "!type": "fn(name: string, func: fn(action?: string) -> bool)"
+        registerReplayAction: {
+          "!doc":
+            "注册一个录像行为<br/>name: 自定义名称,可用于注销使用<br/>func: 具体执行录像的函数,可为一个函数或插件中的函数名;<br/>需要接受一个action参数,代表录像回放时的下一个操作<br/>func返回true代表成功处理了此录像行为,false代表没有处理此录像行为。",
+          "!type": "fn(name: string, func: fn(action?: string) -> bool)",
         },
-        "checkAutosave": {
+        checkAutosave: {
           "!doc": "实际将自动存档写入存储",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "resumeBgm": {
+        resumeBgm: {
           "!doc": "恢复背景音乐的播放<br/>resumeTime: 从哪一秒开始恢复播放",
-          "!type": "fn(resumeTime?: number)"
+          "!type": "fn(resumeTime?: number)",
         },
-        "setGameCanvasTranslate": {
+        setGameCanvasTranslate: {
           "!doc": "设置大地图的偏移量",
-          "!type": "fn(ctx: string|CanvasRenderingContext2D, x: number, y: number)"
+          "!type":
+            "fn(ctx: string|CanvasRenderingContext2D, x: number, y: number)",
         },
-        "checkBgm": {
+        checkBgm: {
           "!doc": "检查bgm状态",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "setDisplayScale": {
+        setDisplayScale: {
           "!doc": "设置屏幕放缩",
-          "!type": "fn(delta: number)"
+          "!type": "fn(delta: number)",
         },
-        "speedDownReplay": {
+        speedDownReplay: {
           "!doc": "减速播放",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "getRealStatus": {
-          "!doc": "计算主角的某个属性,包括百分比修正<br/>例如:core.getRealStatus('atk'); // 计算主角的攻击力,包括百分比修正。战斗使用的就是这个值<br/>name: 属性的英文名,请注意只能用于数值类属性哦,否则乘法会得到NaN",
-          "!type": "fn(name: string)"
+        getRealStatus: {
+          "!doc":
+            "计算主角的某个属性,包括百分比修正<br/>例如:core.getRealStatus('atk'); // 计算主角的攻击力,包括百分比修正。战斗使用的就是这个值<br/>name: 属性的英文名,请注意只能用于数值类属性哦,否则乘法会得到NaN",
+          "!type": "fn(name: string)",
         },
-        "saveData": {
+        saveData: {
           "!doc": "存档到本地",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "unregisterAnimationFrame": {
+        unregisterAnimationFrame: {
           "!doc": "注销一个animationFrame",
-          "!type": "fn(name: string)"
+          "!type": "fn(name: string)",
         },
-        "tryMoveDirectly": {
-          "!doc": "尝试瞬移,如果该点有图块/事件/阻激夹域捕则会瞬移到它旁边再走一步(不可踏入的话当然还是触发该点事件),这一步的方向优先和瞬移前主角的朝向一致<br/>例如:core.tryMoveDirectly(6, 0); // 尝试瞬移到地图顶部的正中央,以样板0层为例,实际效果是瞬移到了上楼梯下面一格然后向上走一步并触发上楼事件<br/>destX: 目标点的横坐标<br/>destY: 目标点的纵坐标",
-          "!type": "fn(destX: number, destY: number)"
+        tryMoveDirectly: {
+          "!doc":
+            "尝试瞬移,如果该点有图块/事件/阻激夹域捕则会瞬移到它旁边再走一步(不可踏入的话当然还是触发该点事件),这一步的方向优先和瞬移前主角的朝向一致<br/>例如:core.tryMoveDirectly(6, 0); // 尝试瞬移到地图顶部的正中央,以样板0层为例,实际效果是瞬移到了上楼梯下面一格然后向上走一步并触发上楼事件<br/>destX: 目标点的横坐标<br/>destY: 目标点的纵坐标",
+          "!type": "fn(destX: number, destY: number)",
         },
-        "moveDirectly": {
+        moveDirectly: {
           "!doc": "瞬间移动",
-          "!type": "fn(destX?: number, destY?: number, ignoreSteps?: number)"
+          "!type": "fn(destX?: number, destY?: number, ignoreSteps?: number)",
         },
-        "clearRouteFolding": {
+        clearRouteFolding: {
           "!doc": "清空录像折叠信息",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "checkRouteFolding": {
+        checkRouteFolding: {
           "!doc": "检查录像折叠信息",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "setSwitch": {
+        setSwitch: {
           "!doc": "设置某个独立开关",
-          "!type": "fn(x: number, y: number, floorId: string, name: string, value: ?)"
+          "!type":
+            "fn(x: number, y: number, floorId: string, name: string, value: ?)",
         },
-        "getSwitch": {
+        getSwitch: {
           "!doc": "获得某个独立开关",
-          "!type": "fn(x: number, y: number, floorId: string, name: string, defaultValue?: ?)"
+          "!type":
+            "fn(x: number, y: number, floorId: string, name: string, defaultValue?: ?)",
         },
-        "addSwitch": {
+        addSwitch: {
           "!doc": "增加某个独立开关",
-          "!type": "fn(x: number, y: number, floorId: string, name: string, value: number)"
+          "!type":
+            "fn(x: number, y: number, floorId: string, name: string, value: number)",
         },
-        "removeSwitch": {
+        removeSwitch: {
           "!doc": "删除某个独立开关",
-          "!type": "fn(x: number, y: number, floorId: string, name: string)"
+          "!type": "fn(x: number, y: number, floorId: string, name: string)",
         },
-        "removeSwitch": {
+        removeSwitch: {
           "!doc": "判定某个独立开关",
-          "!type": "fn(x: number, y: number, floorId: string, name: string) -> bool"
-        }
+          "!type":
+            "fn(x: number, y: number, floorId: string, name: string) -> bool",
+        },
       },
-      "icons": {
+      icons: {
         "!doc": "图标信息",
-        "getTilesetOffset": {
+        getTilesetOffset: {
           "!doc": "根据图块数字或ID获得所在的tileset和坐标信息",
-          "!type": "fn(id?: string) -> {image: ?, x: number, y: number}"
+          "!type": "fn(id?: string) -> {image: ?, x: number, y: number}",
         },
-        "getClsFromId": {
+        getClsFromId: {
           "!doc": "根据ID获得其图标类型",
-          "!type": "fn(id?: string) -> string"
+          "!type": "fn(id?: string) -> string",
         },
-        "getAllIconIds": {
+        getAllIconIds: {
           "!doc": "获得所有图标的ID",
-          "!type": "fn() -> [string]"
+          "!type": "fn() -> [string]",
         },
-        "getIcons": {
+        getIcons: {
           "!doc": "获得所有图标类型",
-          "!type": "fn()"
-        }
+          "!type": "fn()",
+        },
       },
-      "items": {
+      items: {
         "!doc": "道具相关的函数",
-        "getEquip": {
-          "!doc": "检查主角某种类型的装备目前是什么<br/>例如:core.getEquip(1) // 主角目前装备了什么盾牌<br/>equipType: 装备类型,自然数<br/>返回值:装备id,null表示未穿戴",
-          "!type": "fn(equipType: number) -> string"
+        getEquip: {
+          "!doc":
+            "检查主角某种类型的装备目前是什么<br/>例如:core.getEquip(1) // 主角目前装备了什么盾牌<br/>equipType: 装备类型,自然数<br/>返回值:装备id,null表示未穿戴",
+          "!type": "fn(equipType: number) -> string",
         },
-        "loadEquip": {
-          "!doc": "尝试穿上某件背包里面的装备并提示<br/>例如:core.loadEquip('sword5') // 尝试装备上背包里面的神圣剑,无回调<br/>equipId: 装备id<br/>callback: 穿戴成功或失败后的回调函数",
-          "!type": "fn(equipId: string, callback?: fn())"
+        loadEquip: {
+          "!doc":
+            "尝试穿上某件背包里面的装备并提示<br/>例如:core.loadEquip('sword5') // 尝试装备上背包里面的神圣剑,无回调<br/>equipId: 装备id<br/>callback: 穿戴成功或失败后的回调函数",
+          "!type": "fn(equipId: string, callback?: fn())",
         },
-        "itemCount": {
-          "!doc": "统计某种道具的持有量<br/>例如:core.itemCount('yellowKey') // 持有多少把黄钥匙<br/>itemId: 道具id<br/>返回值:该种道具的持有量,不包括已穿戴的装备",
-          "!type": "fn(itemId: string) -> number"
+        itemCount: {
+          "!doc":
+            "统计某种道具的持有量<br/>例如:core.itemCount('yellowKey') // 持有多少把黄钥匙<br/>itemId: 道具id<br/>返回值:该种道具的持有量,不包括已穿戴的装备",
+          "!type": "fn(itemId: string) -> number",
         },
-        "getItems": {
+        getItems: {
           "!doc": "获得所有道具",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "canUseItem": {
-          "!doc": "检查能否使用某种道具<br/>例如:core.canUseItem('pickaxe') // 能否使用破墙镐<br/>itemId: 道具id<br/>返回值:true表示可以使用",
-          "!type": "fn(itemId: string) -> bool"
+        canUseItem: {
+          "!doc":
+            "检查能否使用某种道具<br/>例如:core.canUseItem('pickaxe') // 能否使用破墙镐<br/>itemId: 道具id<br/>返回值:true表示可以使用",
+          "!type": "fn(itemId: string) -> bool",
         },
-        "hasItem": {
-          "!doc": "检查主角是否持有某种道具(不包括已穿戴的装备)<br/>例如:core.hasItem('yellowKey') // 主角是否持有黄钥匙<br/>itemId: 道具id<br/>返回值:true表示持有",
-          "!type": "fn(itemId: string) -> bool"
+        hasItem: {
+          "!doc":
+            "检查主角是否持有某种道具(不包括已穿戴的装备)<br/>例如:core.hasItem('yellowKey') // 主角是否持有黄钥匙<br/>itemId: 道具id<br/>返回值:true表示持有",
+          "!type": "fn(itemId: string) -> bool",
         },
-        "addItem": {
-          "!doc": "静默增减某种道具的持有量 不会更新游戏画面或是显示提示<br/>例如:core.addItem('yellowKey', -2) // 没收两把黄钥匙<br/>itemId: 道具id<br/>itemNum: 增加量,负数表示没收",
-          "!type": "fn(itemId: string, itemNum?: number)"
+        addItem: {
+          "!doc":
+            "静默增减某种道具的持有量 不会更新游戏画面或是显示提示<br/>例如:core.addItem('yellowKey', -2) // 没收两把黄钥匙<br/>itemId: 道具id<br/>itemNum: 增加量,负数表示没收",
+          "!type": "fn(itemId: string, itemNum?: number)",
         },
-        "unloadEquip": {
-          "!doc": "脱下某个类型的装备<br/>例如:core.unloadEquip(1) // 卸下盾牌,无回调<br/>equipType: 装备类型编号,自然数<br/>callback: 卸下装备后的回调函数",
-          "!type": "fn(equipType: number, callback?: fn())"
+        unloadEquip: {
+          "!doc":
+            "脱下某个类型的装备<br/>例如:core.unloadEquip(1) // 卸下盾牌,无回调<br/>equipType: 装备类型编号,自然数<br/>callback: 卸下装备后的回调函数",
+          "!type": "fn(equipType: number, callback?: fn())",
         },
-        "quickLoadEquip": {
-          "!doc": "快速换装<br/>例如:core.quickLoadEquip(1) // 快速换上1号套装<br/>index: 套装编号,自然数",
-          "!type": "fn(index: number)"
+        quickLoadEquip: {
+          "!doc":
+            "快速换装<br/>例如:core.quickLoadEquip(1) // 快速换上1号套装<br/>index: 套装编号,自然数",
+          "!type": "fn(index: number)",
         },
-        "getItemEffect": {
-          "!doc": "即捡即用类的道具获得时的效果<br/>例如:core.getItemEffect('redPotion', 10) // 执行获得10瓶红血的效果<br/>itemId: 道具id<br/>itemNum: 道具数量,可选,默认为1",
-          "!type": "fn(itemId: string, itemNum?: number)"
+        getItemEffect: {
+          "!doc":
+            "即捡即用类的道具获得时的效果<br/>例如:core.getItemEffect('redPotion', 10) // 执行获得10瓶红血的效果<br/>itemId: 道具id<br/>itemNum: 道具数量,可选,默认为1",
+          "!type": "fn(itemId: string, itemNum?: number)",
         },
-        "quickSaveEquip": {
-          "!doc": "保存当前套装<br/>例如:core.quickSaveEquip(1) // 将当前套装保存为1号套装<br/>index: 套装编号,自然数",
-          "!type": "fn(index: number)"
+        quickSaveEquip: {
+          "!doc":
+            "保存当前套装<br/>例如:core.quickSaveEquip(1) // 将当前套装保存为1号套装<br/>index: 套装编号,自然数",
+          "!type": "fn(index: number)",
         },
-        "setItem": {
-          "!doc": "设置某种道具的持有量<br/>例如:core.setItem('yellowKey', 3) // 设置黄钥匙为3把<br/>itemId: 道具id<br/>itemNum: 新的持有量,可选,自然数,默认为0",
-          "!type": "fn(itemId: string, itemNum?: number)"
+        setItem: {
+          "!doc":
+            "设置某种道具的持有量<br/>例如:core.setItem('yellowKey', 3) // 设置黄钥匙为3把<br/>itemId: 道具id<br/>itemNum: 新的持有量,可选,自然数,默认为0",
+          "!type": "fn(itemId: string, itemNum?: number)",
         },
-        "compareEquipment": {
-          "!doc": "比较两件(类型可不同)装备的优劣<br/>例如:core.compareEquipment('sword5', 'shield5') // 比较神圣剑和神圣盾的优劣<br/>compareEquipId: 装备甲的id<br/>beComparedEquipId: 装备乙的id<br/>返回值:两装备的各属性差,甲减乙,0省略",
-          "!type": "fn(compareEquipId: string, beComparedEquipId: string) -> {value: ?, percentage: ?}"
+        compareEquipment: {
+          "!doc":
+            "比较两件(类型可不同)装备的优劣<br/>例如:core.compareEquipment('sword5', 'shield5') // 比较神圣剑和神圣盾的优劣<br/>compareEquipId: 装备甲的id<br/>beComparedEquipId: 装备乙的id<br/>返回值:两装备的各属性差,甲减乙,0省略",
+          "!type":
+            "fn(compareEquipId: string, beComparedEquipId: string) -> {value: ?, percentage: ?}",
         },
-        "removeItem": {
+        removeItem: {
           "!doc": "删除某个物品",
-          "!type": "fn(itemId?: string, itemNum?: number)"
+          "!type": "fn(itemId?: string, itemNum?: number)",
         },
-        "getEquipTypeById": {
-          "!doc": "判定某件装备的类型<br/>例如:core.getEquipTypeById('shield5') // 1(盾牌)<br/>equipId: 装备id<br/>返回值:类型编号,自然数",
-          "!type": "fn(equipId: string) -> number"
+        getEquipTypeById: {
+          "!doc":
+            "判定某件装备的类型<br/>例如:core.getEquipTypeById('shield5') // 1(盾牌)<br/>equipId: 装备id<br/>返回值:类型编号,自然数",
+          "!type": "fn(equipId: string) -> number",
         },
-        "getEquipTypeByName": {
+        getEquipTypeByName: {
           "!doc": "根据类型获得一个可用的装备孔",
-          "!type": "fn(name?: string)"
+          "!type": "fn(name?: string)",
         },
-        "useItem": {
-          "!doc": "使用一个道具<br/>例如:core.useItem('pickaxe', true) // 使用破墙镐,不计入录像,无回调<br/>itemId: 道具id<br/>noRoute: 是否不计入录像,快捷键使用的请填true,否则可省略<br/>callback: 道具使用完毕或使用失败后的回调函数",
-          "!type": "fn(itemId: string, noRoute?: bool, callback?: fn())"
+        useItem: {
+          "!doc":
+            "使用一个道具<br/>例如:core.useItem('pickaxe', true) // 使用破墙镐,不计入录像,无回调<br/>itemId: 道具id<br/>noRoute: 是否不计入录像,快捷键使用的请填true,否则可省略<br/>callback: 道具使用完毕或使用失败后的回调函数",
+          "!type": "fn(itemId: string, noRoute?: bool, callback?: fn())",
         },
-        "hasEquip": {
-          "!doc": "检查主角是否穿戴着某件装备<br/>例如:core.hasEquip('sword5') // 主角是否装备了神圣剑<br/>itemId: 装备id<br/>返回值:true表示已装备",
-          "!type": "fn(itemId: string) -> bool"
+        hasEquip: {
+          "!doc":
+            "检查主角是否穿戴着某件装备<br/>例如:core.hasEquip('sword5') // 主角是否装备了神圣剑<br/>itemId: 装备id<br/>返回值:true表示已装备",
+          "!type": "fn(itemId: string) -> bool",
         },
-        "getItemEffectTip": {
-          "!doc": "即捡即用类的道具获得时的额外提示<br/>例如:core.getItemEffectTip(redPotion) // (获得 红血瓶)',生命+100'<br/>itemId: 道具id<br/>返回值:图块属性itemEffectTip的内容",
-          "!type": "fn(itemId: string) -> string"
+        getItemEffectTip: {
+          "!doc":
+            "即捡即用类的道具获得时的额外提示<br/>例如:core.getItemEffectTip(redPotion) // (获得 红血瓶)',生命+100'<br/>itemId: 道具id<br/>返回值:图块属性itemEffectTip的内容",
+          "!type": "fn(itemId: string) -> string",
         },
-        "canEquip": {
-          "!doc": "检查能否穿上某件装备<br/>例如:core.canEquip('sword5', true) // 主角可以装备神圣剑吗,如果不能会有提示<br/>equipId: 装备id<br/>hint: 无法穿上时是否提示(比如是因为未持有还是别的什么原因)<br/>返回值:true表示可以穿上,false表示无法穿上",
-          "!type": "fn(equipId: string, hint?: bool) -> bool"
+        canEquip: {
+          "!doc":
+            "检查能否穿上某件装备<br/>例如:core.canEquip('sword5', true) // 主角可以装备神圣剑吗,如果不能会有提示<br/>equipId: 装备id<br/>hint: 无法穿上时是否提示(比如是因为未持有还是别的什么原因)<br/>返回值:true表示可以穿上,false表示无法穿上",
+          "!type": "fn(equipId: string, hint?: bool) -> bool",
+        },
+        setEquip: {
+          "!doc":
+            "设置某个装备的属性并计入存档<br/>例如:core.setEquip('sword1', 'value', 'atk', 300, '+='); // 设置铁剑的攻击力数值再加300<br/>equipId: 装备id<br/>valueType: 增幅类型,只能是value(数值)或percentage(百分比)<br/>name: 要修改的属性名称,如atk<br/>value: 要修改到的属性数值<br/>operator: 操作符,可选,如+=表示在原始值上增加<br/>prefix: 独立开关前缀,一般不需要",
+          "!type":
+            "fn(equipId: string, valueType: string, name: string, value: ?, operator?: string, prefix?: string)",
         },
-        "setEquip": {
-          "!doc": "设置某个装备的属性并计入存档<br/>例如:core.setEquip('sword1', 'value', 'atk', 300, '+='); // 设置铁剑的攻击力数值再加300<br/>equipId: 装备id<br/>valueType: 增幅类型,只能是value(数值)或percentage(百分比)<br/>name: 要修改的属性名称,如atk<br/>value: 要修改到的属性数值<br/>operator: 操作符,可选,如+=表示在原始值上增加<br/>prefix: 独立开关前缀,一般不需要",
-          "!type": "fn(equipId: string, valueType: string, name: string, value: ?, operator?: string, prefix?: string)"
-        }
       },
-      "utils": {
+      utils: {
         "!doc": "工具函数库,里面有各个样板中使用到的工具函数。",
-        "scan": {
+        scan: {
           "!doc": "朝向到x,y映射",
-          "up": {
-            "x": "number",
-            "y": "number"
+          up: {
+            x: "number",
+            y: "number",
           },
-          "down": {
-            "x": "number",
-            "y": "number"
+          down: {
+            x: "number",
+            y: "number",
           },
-          "left": {
-            "x": "number",
-            "y": "number"
+          left: {
+            x: "number",
+            y: "number",
+          },
+          right: {
+            x: "number",
+            y: "number",
           },
-          "right": {
-            "x": "number",
-            "y": "number"
-          }
         },
-        "applyEasing": {
+        applyEasing: {
           "!doc": "获得变速移动曲线",
-          "!type": "fn(mode?: string) -> fn(t: number) -> number"
+          "!type": "fn(mode?: string) -> fn(t: number) -> number",
         },
-        "clamp": {
-          "!doc": "将x限定在[a,b]区间内,注意a和b可交换<br/>例如:core.clamp(1200, 1, 1000); // 1000<br/>x: 原始值,!x为true时x一律视为0<br/>a: 下限值,大于b将导致与b交换<br/>b: 上限值,小于a将导致与a交换",
-          "!type": "fn(x: number, a: number, b: number) -> number"
+        clamp: {
+          "!doc":
+            "将x限定在[a,b]区间内,注意a和b可交换<br/>例如:core.clamp(1200, 1, 1000); // 1000<br/>x: 原始值,!x为true时x一律视为0<br/>a: 下限值,大于b将导致与b交换<br/>b: 上限值,小于a将导致与a交换",
+          "!type": "fn(x: number, a: number, b: number) -> number",
         },
-        "rand": {
-          "!doc": "不支持SL的随机数<br/>例如:1 + core.rand(6); // 随机生成一个小于7的正整数,模拟骰子的效果<br/>num: 填正数表示生成小于num的随机自然数,否则生成小于1的随机正数<br/>返回值:随机数,即使读档也不会改变结果",
-          "!type": "fn(num?: number) -> number"
+        rand: {
+          "!doc":
+            "不支持SL的随机数<br/>例如:1 + core.rand(6); // 随机生成一个小于7的正整数,模拟骰子的效果<br/>num: 填正数表示生成小于num的随机自然数,否则生成小于1的随机正数<br/>返回值:随机数,即使读档也不会改变结果",
+          "!type": "fn(num?: number) -> number",
         },
-        "clone": {
-          "!doc": "深拷贝一个对象(函数将原样返回)<br/>例如:core.clone(core.status.hero, (name, value) => (name == 'items' || typeof value == 'number'), false); // 深拷贝主角的属性和道具<br/>data: 待拷贝对象<br/>filter: 过滤器,可选,表示data为数组或对象时拷贝哪些项或属性,true表示拷贝<br/>recursion: 过滤器是否递归,可选。true表示过滤器也被递归<br/>返回值:拷贝的结果,注意函数将原样返回",
-          "!type": "fn(data?: ?, filter?: fn(name: string, value: ?) -> bool, recursion?: bool)"
+        clone: {
+          "!doc":
+            "深拷贝一个对象(函数将原样返回)<br/>例如:core.clone(core.status.hero, (name, value) => (name == 'items' || typeof value == 'number'), false); // 深拷贝主角的属性和道具<br/>data: 待拷贝对象<br/>filter: 过滤器,可选,表示data为数组或对象时拷贝哪些项或属性,true表示拷贝<br/>recursion: 过滤器是否递归,可选。true表示过滤器也被递归<br/>返回值:拷贝的结果,注意函数将原样返回",
+          "!type":
+            "fn(data?: ?, filter?: fn(name: string, value: ?) -> bool, recursion?: bool)",
         },
-        "cloneArray": {
-          "!doc": "深拷贝一个1D或2D数组对象<br/>例如:core.cloneArray(core.status.thisMap.map)",
-          "!type": "fn(data?: [number]|[[number]]) -> [number]|[[number]]"
+        cloneArray: {
+          "!doc":
+            "深拷贝一个1D或2D数组对象<br/>例如:core.cloneArray(core.status.thisMap.map)",
+          "!type": "fn(data?: [number]|[[number]]) -> [number]|[[number]]",
         },
-        "setLocalForage": {
+        setLocalForage: {
           "!doc": "往数据库写入一段数据",
-          "!type": "fn(key: string, value?: ?, successCallback?: fn(), errorCallback?: fn())"
+          "!type":
+            "fn(key: string, value?: ?, successCallback?: fn(), errorCallback?: fn())",
         },
-        "getGlobal": {
-          "!doc": "读取一个全局存储,适用于global:xxx,支持录像。<br/>例如:if (core.getGlobal('一周目已通关', false) === true) core.getItem('dagger'); // 二周目游戏进行到此处时会获得一把屠龙匕首<br/>key: 全局变量名称,支持中文<br/>defaultValue: 可选,当此全局变量不存在或值为null、undefined时,用此值代替<br/>返回值:全局变量的值",
-          "!type": "fn(key: string, defaultValue?: ?)"
+        getGlobal: {
+          "!doc":
+            "读取一个全局存储,适用于global:xxx,支持录像。<br/>例如:if (core.getGlobal('一周目已通关', false) === true) core.getItem('dagger'); // 二周目游戏进行到此处时会获得一把屠龙匕首<br/>key: 全局变量名称,支持中文<br/>defaultValue: 可选,当此全局变量不存在或值为null、undefined时,用此值代替<br/>返回值:全局变量的值",
+          "!type": "fn(key: string, defaultValue?: ?)",
         },
-        "replaceText": {
-          "!doc": "将一段文字中的${}(表达式)进行替换。<br/>例如:core.replaceText('衬衫的价格是${status:hp}镑${item:yellowKey}便士。'); // 把主角的生命值和持有的黄钥匙数量代入这句话<br/>text: 模板字符串,可以使用${}计算js表达式,支持“状态、物品、变量、独立开关、全局存储、图块id、图块类型、敌人数据、装备id”等量参与运算<br/>返回值:替换完毕后的字符串",
-          "!type": "fn(text: string, prefix?: string) -> string"
+        replaceText: {
+          "!doc":
+            "将一段文字中的${}(表达式)进行替换。<br/>例如:core.replaceText('衬衫的价格是${status:hp}镑${item:yellowKey}便士。'); // 把主角的生命值和持有的黄钥匙数量代入这句话<br/>text: 模板字符串,可以使用${}计算js表达式,支持“状态、物品、变量、独立开关、全局存储、图块id、图块类型、敌人数据、装备id”等量参与运算<br/>返回值:替换完毕后的字符串",
+          "!type": "fn(text: string, prefix?: string) -> string",
         },
-        "removeLocalStorage": {
+        removeLocalStorage: {
           "!doc": "移除本地存储",
-          "!type": "fn(key: string)"
+          "!type": "fn(key: string)",
         },
-        "unzip": {
+        unzip: {
           "!doc": "解压一段内容",
-          "!type": "fn(blobOrUrl?: ?, success?: fn(data: ?), error?: fn(error: string), convertToText?: bool, onprogress?: fn(loaded: number, total: number))"
+          "!type":
+            "fn(blobOrUrl?: ?, success?: fn(data: ?), error?: fn(error: string), convertToText?: bool, onprogress?: fn(loaded: number, total: number))",
         },
-        "formatTime": {
+        formatTime: {
           "!doc": "格式化时间",
-          "!type": "fn(time: number) -> string"
+          "!type": "fn(time: number) -> string",
         },
-        "readFile": {
-          "!doc": "尝试请求读取一个本地文件内容 [异步]<br/>success: 成功后的回调<br/>error: 失败后的回调<br/>readType: 不设置则以文本读取,否则以DataUrl形式读取",
-          "!type": "fn(success?: fn(data: string), error?: fn(message: string), readType?: bool)"
+        readFile: {
+          "!doc":
+            "尝试请求读取一个本地文件内容 [异步]<br/>success: 成功后的回调<br/>error: 失败后的回调<br/>readType: 不设置则以文本读取,否则以DataUrl形式读取",
+          "!type":
+            "fn(success?: fn(data: string), error?: fn(message: string), readType?: bool)",
         },
-        "readFileContent": {
+        readFileContent: {
           "!doc": "文件读取完毕后的内容处理 [异步]",
-          "!type": "fn(content: string)"
+          "!type": "fn(content: string)",
         },
-        "formatDate": {
+        formatDate: {
           "!doc": "格式化日期为字符串",
-          "!type": "fn(date: ?) -> string"
+          "!type": "fn(date: ?) -> string",
         },
-        "download": {
-          "!doc": "弹窗请求下载一个文本文件<br/>例如:core.download('route.txt', JSON.stringify(core.status.route)); // 弹窗请求下载录像<br/>filename: 文件名<br/>content: 文件内容",
-          "!type": "fn(filename: string, content: string)"
+        download: {
+          "!doc":
+            "弹窗请求下载一个文本文件<br/>例如:core.download('route.txt', JSON.stringify(core.status.route)); // 弹窗请求下载录像<br/>filename: 文件名<br/>content: 文件内容",
+          "!type": "fn(filename: string, content: string)",
         },
-        "encodeBase64": {
-          "!doc": "base64加密<br/>例如:core.encodeBase64('abcd'); // 'YWJjZA=='<br/>str: 明文<br/>返回值:密文",
-          "!type": "fn(str: string) -> string"
+        encodeBase64: {
+          "!doc":
+            "base64加密<br/>例如:core.encodeBase64('abcd'); // 'YWJjZA=='<br/>str: 明文<br/>返回值:密文",
+          "!type": "fn(str: string) -> string",
         },
-        "strlen": {
-          "!doc": "求字符串的国标码字节数,也可用于等宽字体下文本的宽度测算。请注意样板的默认字体Verdana不是等宽字体<br/>例如:core.strlen('无敌ad'); // 6<br/>str: 待测字符串<br/>返回值:字符串的国标码字节数,每个汉字为2,每个ASCII字符为1",
-          "!type": "fn(str: string) -> number"
+        strlen: {
+          "!doc":
+            "求字符串的国标码字节数,也可用于等宽字体下文本的宽度测算。请注意样板的默认字体Verdana不是等宽字体<br/>例如:core.strlen('无敌ad'); // 6<br/>str: 待测字符串<br/>返回值:字符串的国标码字节数,每个汉字为2,每个ASCII字符为1",
+          "!type": "fn(str: string) -> number",
         },
-        "myprompt": {
+        myprompt: {
           "!doc": "让用户输入一段文字",
-          "!type": "fn(hint: string, value: string, callback?: fn(data?: string))"
+          "!type":
+            "fn(hint: string, value: string, callback?: fn(data?: string))",
         },
-        "getCookie": {
+        getCookie: {
           "!doc": "访问浏览器cookie",
-          "!type": "fn(name: string) -> string"
+          "!type": "fn(name: string) -> string",
         },
-        "decodeRoute": {
-          "!doc": "录像解压的最后一步,即一压的逆过程<br/>例如:core.decodeRoute(core.encodeRoute(core.status.route)); // 一压当前录像再解压-_-|<br/>route: 录像解压倒数第二步的结果,即一压的结果<br/>返回值:原始录像",
-          "!type": "fn(route: string) -> [string]"
+        decodeRoute: {
+          "!doc":
+            "录像解压的最后一步,即一压的逆过程<br/>例如:core.decodeRoute(core.encodeRoute(core.status.route)); // 一压当前录像再解压-_-|<br/>route: 录像解压倒数第二步的结果,即一压的结果<br/>返回值:原始录像",
+          "!type": "fn(route: string) -> [string]",
         },
-        "formatDate2": {
+        formatDate2: {
           "!doc": "格式化日期为最简字符串",
-          "!type": "fn(date: ?) -> string"
+          "!type": "fn(date: ?) -> string",
         },
-        "unshift": {
-          "!doc": "将b(可以是另一个数组)插入数组a的开头,此函数用于弥补a.unshift(b)中b只能是单项的不足。<br/>例如:core.unshift(todo, {type: 'unfollow'}); // 在事件指令数组todo的开头插入“取消所有跟随者”指令<br/>a: 原数组<br/>b: 待插入的新首项或前缀数组<br/>返回值:插入完毕后的新数组,它是改变原数组a本身得到的",
-          "!type": "fn(a: [?], b: ?) -> [?]"
+        unshift: {
+          "!doc":
+            "将b(可以是另一个数组)插入数组a的开头,此函数用于弥补a.unshift(b)中b只能是单项的不足。<br/>例如:core.unshift(todo, {type: 'unfollow'}); // 在事件指令数组todo的开头插入“取消所有跟随者”指令<br/>a: 原数组<br/>b: 待插入的新首项或前缀数组<br/>返回值:插入完毕后的新数组,它是改变原数组a本身得到的",
+          "!type": "fn(a: [?], b: ?) -> [?]",
         },
-        "same": {
-          "!doc": "判定深层相等, 会逐层比较每个元素<br/>例如:core.same(['1', 2], ['1', 2]); // true",
-          "!type": "fn(a?: ?, b?: ?) -> bool"
+        same: {
+          "!doc":
+            "判定深层相等, 会逐层比较每个元素<br/>例如:core.same(['1', 2], ['1', 2]); // true",
+          "!type": "fn(a?: ?, b?: ?) -> bool",
         },
-        "setTwoDigits": {
+        setTwoDigits: {
           "!doc": "两位数显示",
-          "!type": "fn(x: number) -> string"
+          "!type": "fn(x: number) -> string",
         },
-        "splitImage": {
-          "!doc": "等比例切分一张图片<br/>例如:core.splitImage(core.material.images.images['npc48.png'], 32, 48); // 把npc48.png切分成若干32×48px的小人<br/>image: 图片名(支持映射前的中文名)或图片对象(参见上面的例子),获取不到时返回[]<br/>width: 子图的宽度,单位为像素。原图总宽度必须是其倍数,不填视为32<br/>height: 子图的高度,单位为像素。原图总高度必须是其倍数,不填视为正方形<br/>返回值:子图组成的数组,在原图中呈先行后列,从左到右、从上到下排列。",
-          "!type": "fn(image?: string|image, width?: number, height?: number) -> [image]"
+        splitImage: {
+          "!doc":
+            "等比例切分一张图片<br/>例如:core.splitImage(core.material.images.images['npc48.png'], 32, 48); // 把npc48.png切分成若干32×48px的小人<br/>image: 图片名(支持映射前的中文名)或图片对象(参见上面的例子),获取不到时返回[]<br/>width: 子图的宽度,单位为像素。原图总宽度必须是其倍数,不填视为32<br/>height: 子图的高度,单位为像素。原图总高度必须是其倍数,不填视为正方形<br/>返回值:子图组成的数组,在原图中呈先行后列,从左到右、从上到下排列。",
+          "!type":
+            "fn(image?: string|image, width?: number, height?: number) -> [image]",
         },
-        "decompress": {
+        decompress: {
           "!doc": "解压缩一个数据",
-          "!type": "fn(value: ?)"
+          "!type": "fn(value: ?)",
         },
-        "showWithAnimate": {
+        showWithAnimate: {
           "!doc": "动画显示某对象",
-          "!type": "fn(obj?: ?, speed?: number, callback?: fn())"
+          "!type": "fn(obj?: ?, speed?: number, callback?: fn())",
         },
-        "subarray": {
-          "!doc": "判定一个数组是否为另一个数组的前缀,用于录像接续播放。请注意函数名没有大写字母<br/>例如:core.subarray(['ad', '米库', '小精灵', '小破草', '小艾'], ['ad', '米库', '小精灵']); // ['小破草', '小艾']<br/>a: 可能的母数组,不填或比b短将返回null<br/>b: 可能的前缀,不填或比a长将返回null<br/>返回值:如果b不是a的前缀将返回null,否则将返回a去掉此前缀后的剩余数组",
-          "!type": "fn(a?: [?], b?: [?]) -> [?]|null"
+        subarray: {
+          "!doc":
+            "判定一个数组是否为另一个数组的前缀,用于录像接续播放。请注意函数名没有大写字母<br/>例如:core.subarray(['ad', '米库', '小精灵', '小破草', '小艾'], ['ad', '米库', '小精灵']); // ['小破草', '小艾']<br/>a: 可能的母数组,不填或比b短将返回null<br/>b: 可能的前缀,不填或比a长将返回null<br/>返回值:如果b不是a的前缀将返回null,否则将返回a去掉此前缀后的剩余数组",
+          "!type": "fn(a?: [?], b?: [?]) -> [?]|null",
         },
-        "turnDirection": {
-          "!doc": "计算应当转向某个方向<br/>turn: 转向的方向,可为 up,down,left,right,:left,:right,:back 七种<br/>direction: 当前方向",
-          "!type": "fn(turn: string, direction?: string) -> string"
+        turnDirection: {
+          "!doc":
+            "计算应当转向某个方向<br/>turn: 转向的方向,可为 up,down,left,right,:left,:right,:back 七种<br/>direction: 当前方向",
+          "!type": "fn(turn: string, direction?: string) -> string",
         },
-        "myconfirm": {
-          "!doc": "显示确认框,类似core.drawConfirmBox(),但不打断事件流<br/>例如:core.myconfirm('重启游戏?', core.restart); // 弹窗询问玩家是否重启游戏<br/>hint: 弹窗的内容,支持 ${} 语法<br/>yesCallback: 确定后的回调函数<br/>noCallback: 取消后的回调函数,可选",
-          "!type": "fn(hint: string, yesCallback?: fn(), noCallback?: fn())"
+        myconfirm: {
+          "!doc":
+            "显示确认框,类似core.drawConfirmBox(),但不打断事件流<br/>例如:core.myconfirm('重启游戏?', core.restart); // 弹窗询问玩家是否重启游戏<br/>hint: 弹窗的内容,支持 ${} 语法<br/>yesCallback: 确定后的回调函数<br/>noCallback: 取消后的回调函数,可选",
+          "!type": "fn(hint: string, yesCallback?: fn(), noCallback?: fn())",
         },
-        "calValue": {
-          "!doc": "计算一个表达式的值,支持status:xxx等的计算。<br/>例如:core.calValue('status:hp + status:def'); // 计算主角的生命值加防御力<br/>value: 待求值的表达式<br/>prefix: 独立开关前缀,一般可省略<br/>返回值:求出的值",
-          "!type": "fn(value: string, prefix?: string)"
+        calValue: {
+          "!doc":
+            "计算一个表达式的值,支持status:xxx等的计算。<br/>例如:core.calValue('status:hp + status:def'); // 计算主角的生命值加防御力<br/>value: 待求值的表达式<br/>prefix: 独立开关前缀,一般可省略<br/>返回值:求出的值",
+          "!type": "fn(value: string, prefix?: string)",
         },
-        "encodeRoute": {
-          "!doc": "录像压缩缩<br/>例如:core.encodeRoute(core.status.route); // 压缩当前录像<br/>route: 原始录像,自定义内容(不予压缩,原样写入)必须由0-9A-Za-z和下划线、冒号组成,所以中文和数组需要用JSON.stringify预处理再base64压缩才能交由一压<br/>返回值:一压的结果",
-          "!type": "fn(route: [string]) -> string"
+        encodeRoute: {
+          "!doc":
+            "录像压缩缩<br/>例如:core.encodeRoute(core.status.route); // 压缩当前录像<br/>route: 原始录像,自定义内容(不予压缩,原样写入)必须由0-9A-Za-z和下划线、冒号组成,所以中文和数组需要用JSON.stringify预处理再base64压缩才能交由一压<br/>返回值:一压的结果",
+          "!type": "fn(route: [string]) -> string",
         },
-        "decodeBase64": {
-          "!doc": "base64解密<br/>例如:core.decodeBase64('YWJjZA=='); // \"abcd\"<br/>str: 密文<br/>返回值:明文",
-          "!type": "fn(str: string) -> string"
+        decodeBase64: {
+          "!doc":
+            "base64解密<br/>例如:core.decodeBase64('YWJjZA=='); // \"abcd\"<br/>str: 密文<br/>返回值:明文",
+          "!type": "fn(str: string) -> string",
         },
-        "http": {
-          "!doc": "发送一个HTTP请求 [异步]<br/>type: 请求类型,只能为GET或POST<br/>url: 目标地址<br/>formData: 如果是POST请求则为表单数据<br/>success: 成功后的回调<br/>error: 失败后的回调",
-          "!type": "fn(type: string, url: string, formData: ?, success?: fn(data: string), error?: fn(message: string), mimeType?: string, responseType?: string, onprogress?: fn(loaded: number, total: number))"
+        http: {
+          "!doc":
+            "发送一个HTTP请求 [异步]<br/>type: 请求类型,只能为GET或POST<br/>url: 目标地址<br/>formData: 如果是POST请求则为表单数据<br/>success: 成功后的回调<br/>error: 失败后的回调",
+          "!type":
+            "fn(type: string, url: string, formData: ?, success?: fn(data: string), error?: fn(message: string), mimeType?: string, responseType?: string, onprogress?: fn(loaded: number, total: number))",
         },
-        "getGuid": {
+        getGuid: {
           "!doc": "获得或生成浏览器唯一的guid",
-          "!type": "fn() -> string"
+          "!type": "fn() -> string",
         },
-        "getLocalStorage": {
+        getLocalStorage: {
           "!doc": "获得本地存储",
-          "!type": "fn(key: string, defaultValue?: ?)"
+          "!type": "fn(key: string, defaultValue?: ?)",
         },
-        "arrayToRGB": {
-          "!doc": "颜色数组转字符串<br/>例如:core.arrayToRGB([102, 204, 255]); // \"#66ccff\"<br/>color: 一行三列的数组,必须为不大于255的自然数<br/>返回值:该颜色的#xxxxxx字符串表示",
-          "!type": "fn(color: [number]) -> string"
+        arrayToRGB: {
+          "!doc":
+            '颜色数组转字符串<br/>例如:core.arrayToRGB([102, 204, 255]); // "#66ccff"<br/>color: 一行三列的数组,必须为不大于255的自然数<br/>返回值:该颜色的#xxxxxx字符串表示',
+          "!type": "fn(color: [number]) -> string",
         },
-        "arrayToRGBA": {
-          "!doc": "颜色数组转字符串<br/>例如:core.arrayToRGBA([102, 204, 255, 0.3]); // \"rgba(102,204,255,0.3)\"<br/>color: 一行三列或一行四列的数组,前三个元素必须为不大于255的自然数。第四个元素(如果有)必须为0或不大于1的数字,第四个元素不填视为1<br/>返回值:该颜色的rgba(...)字符串表示",
-          "!type": "fn(color: [number]) -> string"
+        arrayToRGBA: {
+          "!doc":
+            '颜色数组转字符串<br/>例如:core.arrayToRGBA([102, 204, 255, 0.3]); // "rgba(102,204,255,0.3)"<br/>color: 一行三列或一行四列的数组,前三个元素必须为不大于255的自然数。第四个元素(如果有)必须为0或不大于1的数字,第四个元素不填视为1<br/>返回值:该颜色的rgba(...)字符串表示',
+          "!type": "fn(color: [number]) -> string",
         },
-        "formatBigNumber": {
-          "!doc": "大数字格式化,单位为10000的倍数(w,e,z,j,g),末尾四舍五入<br/>例如:core.formatBigNumber(123456789, false); // \"12346w\"<br/>x: 原数字<br/>onMap: 可选,true表示用于地图显伤,结果总字符数最多为5,否则最多为6<br/>返回值:格式化结果",
-          "!type": "fn(x: number, onMap?: bool) -> string"
+        formatBigNumber: {
+          "!doc":
+            '大数字格式化,单位为10000的倍数(w,e,z,j,g),末尾四舍五入<br/>例如:core.formatBigNumber(123456789, false); // "12346w"<br/>x: 原数字<br/>onMap: 可选,true表示用于地图显伤,结果总字符数最多为5,否则最多为6<br/>返回值:格式化结果',
+          "!type": "fn(x: number, onMap?: bool) -> string",
         },
-        "removeLocalForage": {
+        removeLocalForage: {
           "!doc": "移除本地数据库的数据",
-          "!type": "fn(key: string, successCallback?: fn(), errorCallback?: fn())"
+          "!type":
+            "fn(key: string, successCallback?: fn(), errorCallback?: fn())",
         },
-        "matchWildcard": {
-          "!doc": "通配符匹配,用于搜索图块等批量处理。<br/>例如:core.playSound(core.matchWildcard('*Key', itemId) ? 'item.mp3' : 'door.mp3'); // 判断捡到的是钥匙还是别的道具,从而播放不同的音效<br/>pattern: 模式串,每个星号表示任意多个(0个起)字符<br/>string: 待测串<br/>返回值:true表示匹配成功,false表示匹配失败",
-          "!type": "fn(pattern: string, string: string) -> bool"
+        matchWildcard: {
+          "!doc":
+            "通配符匹配,用于搜索图块等批量处理。<br/>例如:core.playSound(core.matchWildcard('*Key', itemId) ? 'item.opus' : 'door.opus'); // 判断捡到的是钥匙还是别的道具,从而播放不同的音效<br/>pattern: 模式串,每个星号表示任意多个(0个起)字符<br/>string: 待测串<br/>返回值:true表示匹配成功,false表示匹配失败",
+          "!type": "fn(pattern: string, string: string) -> bool",
         },
-        "setLocalStorage": {
+        setLocalStorage: {
           "!doc": "设置本地存储",
-          "!type": "fn(key: string, value?: ?)"
+          "!type": "fn(key: string, value?: ?)",
         },
-        "hideWithAnimate": {
+        hideWithAnimate: {
           "!doc": "动画使某对象消失",
-          "!type": "fn(obj?: ?, speed?: number, callback?: fn())"
+          "!type": "fn(obj?: ?, speed?: number, callback?: fn())",
         },
-        "copy": {
+        copy: {
           "!doc": "尝试复制一段文本到剪切板。",
-          "!type": "fn(data: string) -> bool"
+          "!type": "fn(data: string) -> bool",
         },
-        "isset": {
-          "!doc": "判断一个值是否不为null,undefined和NaN<br/>例如:core.isset(0/0); // false,因为0/0等于NaN<br/>v: 待测值,可选<br/>返回值:false表示待测值为null、undefined、NaN或未填写,true表示为其他值。",
-          "!type": "fn(v?: ?) -> bool"
+        isset: {
+          "!doc":
+            "判断一个值是否不为null,undefined和NaN<br/>例如:core.isset(0/0); // false,因为0/0等于NaN<br/>v: 待测值,可选<br/>返回值:false表示待测值为null、undefined、NaN或未填写,true表示为其他值。",
+          "!type": "fn(v?: ?) -> bool",
         },
-        "replaceValue": {
-          "!doc": "对一个表达式中的特殊规则进行替换,如status:xxx等。<br/>例如:core.replaceValue('status:atk+item:yellowKey'); // 把这两个冒号表达式替换为core.getStatus('hp')和core.itemCount('yellowKey')这样的函数调用<br/>value: 模板字符串,注意独立开关不会被替换<br/>返回值:替换完毕后的字符串",
-          "!type": "fn(value: string) -> string"
+        replaceValue: {
+          "!doc":
+            "对一个表达式中的特殊规则进行替换,如status:xxx等。<br/>例如:core.replaceValue('status:atk+item:yellowKey'); // 把这两个冒号表达式替换为core.getStatus('hp')和core.itemCount('yellowKey')这样的函数调用<br/>value: 模板字符串,注意独立开关不会被替换<br/>返回值:替换完毕后的字符串",
+          "!type": "fn(value: string) -> string",
         },
-        "getLocalForage": {
+        getLocalForage: {
           "!doc": "从本地数据库读出一段数据",
-          "!type": "fn(key: string, defaultValue?: ?, successCallback?: fn(data: ?), errorCallback?: fn())"
+          "!type":
+            "fn(key: string, defaultValue?: ?, successCallback?: fn(data: ?), errorCallback?: fn())",
         },
-        "inArray": {
-          "!doc": "判定array是不是一个数组,以及element是否在该数组中。<br/>array: 可能的数组,不为数组或不填将导致返回值为false<br/>element: 待查找的元素<br/>返回值:如果array为数组且具有element这项,就返回true,否则返回false",
-          "!type": "fn(array?: ?, element?: ?) -> bool"
+        inArray: {
+          "!doc":
+            "判定array是不是一个数组,以及element是否在该数组中。<br/>array: 可能的数组,不为数组或不填将导致返回值为false<br/>element: 待查找的元素<br/>返回值:如果array为数组且具有element这项,就返回true,否则返回false",
+          "!type": "fn(array?: ?, element?: ?) -> bool",
         },
-        "setGlobal": {
-          "!doc": "设置一个全局存储,适用于global:xxx,录像播放时将忽略此函数。<br/>例如:core.setBlobal('一周目已通关', true); // 设置全局存储“一周目已通关”为true,方便二周目游戏中的新要素。<br/>key: 全局变量名称,支持中文<br/>value: 全局变量的新值,不填或null表示清除此全局存储",
-          "!type": "fn(key: string, value?: ?)"
+        setGlobal: {
+          "!doc":
+            "设置一个全局存储,适用于global:xxx,录像播放时将忽略此函数。<br/>例如:core.setBlobal('一周目已通关', true); // 设置全局存储“一周目已通关”为true,方便二周目游戏中的新要素。<br/>key: 全局变量名称,支持中文<br/>value: 全局变量的新值,不填或null表示清除此全局存储",
+          "!type": "fn(key: string, value?: ?)",
         },
-        "rand2": {
-          "!doc": "支持SL的随机数,并计入录像<br/>例如:1 + core.rand2(6); // 随机生成一个小于7的正整数,模拟骰子的效果<br/>num: 正整数,0或不填会被视为2147483648<br/>返回值:属于 [0, num) 的随机数",
-          "!type": "fn(num?: number) -> number"
+        rand2: {
+          "!doc":
+            "支持SL的随机数,并计入录像<br/>例如:1 + core.rand2(6); // 随机生成一个小于7的正整数,模拟骰子的效果<br/>num: 正整数,0或不填会被视为2147483648<br/>返回值:属于 [0, num) 的随机数",
+          "!type": "fn(num?: number) -> number",
         },
-        "setStatusBarInnerHTML": {
-          "!doc": "填写非自绘状态栏<br/>例如:core.setStatusBarInnerHTML('hp', core.status.hero.hp, 'color: #66CCFF'); // 更新状态栏中的主角生命,使用加载画面的宣传色<br/>name: 状态栏项的名称,如'hp', 'atk', 'def'等。必须是core.statusBar中的一个合法项<br/>value: 要填写的内容,大数字会被格式化为至多6个字符,无中文的内容会被自动设为斜体<br/>css: 额外的css样式,可选。如更改颜色等",
-          "!type": "fn(name: string, value: ?, css?: string)"
+        setStatusBarInnerHTML: {
+          "!doc":
+            "填写非自绘状态栏<br/>例如:core.setStatusBarInnerHTML('hp', core.status.hero.hp, 'color: #66CCFF'); // 更新状态栏中的主角生命,使用加载画面的宣传色<br/>name: 状态栏项的名称,如'hp', 'atk', 'def'等。必须是core.statusBar中的一个合法项<br/>value: 要填写的内容,大数字会被格式化为至多6个字符,无中文的内容会被自动设为斜体<br/>css: 额外的css样式,可选。如更改颜色等",
+          "!type": "fn(name: string, value: ?, css?: string)",
         },
-        "matchRegex": {
+        matchRegex: {
           "!doc": "是否满足正则表达式",
-          "!type": "fn(pattern: string, string: string) -> string"
+          "!type": "fn(pattern: string, string: string) -> string",
         },
-        "push": {
-          "!doc": "将b(可以是另一个数组)插入数组a的末尾,此函数用于弥补a.push(b)中b只能是单项的不足。<br/>例如:core.push(todo, {type: 'unfollow'}); // 在事件指令数组todo的末尾插入“取消所有跟随者”指令<br/>a: 原数组<br/>b: 待插入的新末项或后缀数组<br/>返回值:插入完毕后的新数组,它是改变原数组a本身得到的",
-          "!type": "fn(a: [?], b: ?) -> [?]"
+        push: {
+          "!doc":
+            "将b(可以是另一个数组)插入数组a的末尾,此函数用于弥补a.push(b)中b只能是单项的不足。<br/>例如:core.push(todo, {type: 'unfollow'}); // 在事件指令数组todo的末尾插入“取消所有跟随者”指令<br/>a: 原数组<br/>b: 待插入的新末项或后缀数组<br/>返回值:插入完毕后的新数组,它是改变原数组a本身得到的",
+          "!type": "fn(a: [?], b: ?) -> [?]",
         },
-        "formatSize": {
+        formatSize: {
           "!doc": "格式化文件大小",
-          "!type": "fn(size: number) -> string"
-        }
+          "!type": "fn(size: number) -> string",
+        },
       },
-      "actions": {
+      actions: {
         "!doc": "主要是处理一些和用户交互相关的内容。",
-        "onup": {
+        onup: {
           "!doc": "当点击(触摸)事件放开时",
-          "!type": "fn(loc: {x: number, y: number, size: number})"
+          "!type": "fn(loc: {x: number, y: number, size: number})",
         },
-        "pressKey": {
+        pressKey: {
           "!doc": "按住某个键时",
-          "!type": "fn(keyCode: number)"
+          "!type": "fn(keyCode: number)",
         },
-        "keyUp": {
+        keyUp: {
           "!doc": "根据放开键的code来执行一系列操作",
-          "!type": "fn(keyCode: number, altKey?: bool, fromReplay?: bool)"
+          "!type": "fn(keyCode: number, altKey?: bool, fromReplay?: bool)",
         },
-        "ondown": {
+        ondown: {
           "!doc": "点击(触摸)事件按下时",
-          "!type": "fn(loc: {x: number, y: number, size: number})"
+          "!type": "fn(loc: {x: number, y: number, size: number})",
         },
-        "registerAction": {
-          "!doc": "此函数将注册一个用户交互行为。<br/>action: 要注册的交互类型,如 ondown, onclick, keyDown 等等。<br/>name: 你的自定义名称,可被注销使用;同名重复注册将后者覆盖前者。<br/>func: 执行函数。<br/>如果func返回true,则不会再继续执行其他的交互函数;否则会继续执行其他的交互函数。<br/>priority: 优先级;优先级高的将会被执行。此项可不填,默认为0",
-          "!type": "fn(action: string, name: string, func: string|fn(params: ?), priority?: number)"
+        registerAction: {
+          "!doc":
+            "此函数将注册一个用户交互行为。<br/>action: 要注册的交互类型,如 ondown, onclick, keyDown 等等。<br/>name: 你的自定义名称,可被注销使用;同名重复注册将后者覆盖前者。<br/>func: 执行函数。<br/>如果func返回true,则不会再继续执行其他的交互函数;否则会继续执行其他的交互函数。<br/>priority: 优先级;优先级高的将会被执行。此项可不填,默认为0",
+          "!type":
+            "fn(action: string, name: string, func: string|fn(params: ?), priority?: number)",
         },
-        "onkeyDown": {
+        onkeyDown: {
           "!doc": "按下某个键时",
-          "!type": "fn(e: Event)"
+          "!type": "fn(e: Event)",
         },
-        "keyDown": {
+        keyDown: {
           "!doc": "根据按下键的code来执行一系列操作",
-          "!type": "fn(keyCode: number)"
+          "!type": "fn(keyCode: number)",
         },
-        "onStatusBarClick": {
+        onStatusBarClick: {
           "!doc": "点击自绘状态栏时",
-          "!type": "fn(e?: Event)"
+          "!type": "fn(e?: Event)",
         },
-        "longClick": {
+        longClick: {
           "!doc": "长按",
-          "!type": "fn(x: number, y: number, px: number, py: number, fromEvent?: bool)"
+          "!type":
+            "fn(x: number, y: number, px: number, py: number, fromEvent?: bool)",
         },
-        "unregisterAction": {
+        unregisterAction: {
           "!doc": "注销一个用户交互行为",
-          "!type": "fn(action: string, name: string)"
+          "!type": "fn(action: string, name: string)",
         },
-        "keyDownCtrl": {
+        keyDownCtrl: {
           "!doc": "长按Ctrl键时",
-          "!type": "fn() -> bool"
+          "!type": "fn() -> bool",
         },
-        "onclick": {
+        onclick: {
           "!doc": "具体点击屏幕上(x,y)点时,执行的操作",
-          "!type": "fn(x: number, y: number, px: number, py: number, stepPostfix?: [?])"
+          "!type":
+            "fn(x: number, y: number, px: number, py: number, stepPostfix?: [?])",
         },
-        "doRegisteredAction": {
+        doRegisteredAction: {
           "!doc": "执行一个用户交互行为",
-          "!type": "fn(action: string, params: ?)"
+          "!type": "fn(action: string, params: ?)",
         },
-        "onkeyUp": {
+        onkeyUp: {
           "!doc": "放开某个键时",
-          "!type": "fn(e: Event)"
+          "!type": "fn(e: Event)",
         },
-        "onmousewheel": {
+        onmousewheel: {
           "!doc": "滑动鼠标滚轮时的操作",
-          "!type": "fn(direct: number)"
+          "!type": "fn(direct: number)",
         },
-        "onmove": {
+        onmove: {
           "!doc": "当在触摸屏上滑动时",
-          "!type": "fn(loc: {x: number, y: number, size: number})"
-        }
+          "!type": "fn(loc: {x: number, y: number, size: number})",
+        },
       },
-      "loader": {
+      loader: {
         "!doc": "资源加载相关的函数",
-        "loadImages": {
+        loadImages: {
           "!doc": "加载一系列图片",
-          "!type": "fn(dir: string, names: [string], toSave: ?, callback?: fn()) "
+          "!type":
+            "fn(dir: string, names: [string], toSave: ?, callback?: fn()) ",
         },
-        "loadImagesFromZip": {
+        loadImagesFromZip: {
           "!doc": "从zip中加载一系列图片",
-          "!type": "fn(url: string, names: [string], toSave?: ?, onprogress?: ?, onfinished?: ?)"
+          "!type":
+            "fn(url: string, names: [string], toSave?: ?, onprogress?: ?, onfinished?: ?)",
         },
-        "loadBgm": {
+        loadBgm: {
           "!doc": "加载一个bgm",
-          "!type": "fn(name: string)"
+          "!type": "fn(name: string)",
         },
-        "loadOneMusic": {
+        loadOneMusic: {
           "!doc": "加载一个音乐或音效",
-          "!type": "fn(name: string)"
+          "!type": "fn(name: string)",
         },
-        "freeBgm": {
+        freeBgm: {
           "!doc": "释放一个bgm的缓存",
-          "!type": "fn(name: string)"
+          "!type": "fn(name: string)",
         },
-        "loadOneSound": {
+        loadOneSound: {
           "!doc": "加载一个音效",
-          "!type": "fn(name: string)"
+          "!type": "fn(name: string)",
         },
-        "loadImage": {
+        loadImage: {
           "!doc": "加载某一张图片",
-          "!type": "fn(dir: name, imgName: name, callback?: fn())"
-        }
+          "!type": "fn(dir: name, imgName: name, callback?: fn())",
+        },
       },
-      "maps": {
-        "!doc": "负责一切和地图相关的处理内容,包括如下几个方面:<br/>- 地图的初始化,保存和读取,地图数组的生成<br/>- 是否可移动或瞬间移动的判定<br/>- 地图的绘制<br/>- 获得某个点的图块信息<br/>- 启用和禁用图块,改变图块	<br/>- 移动/跳跃图块,淡入淡出图块<br/>- 全局动画控制,动画的绘制",
-        "noPass": {
-          "!doc": "判定某个点是否不可被踏入(不基于主角生命值和图块cannotIn属性)<br/>例如:core.noPass(0, 0); // 判断地图左上角能否被踏入<br/>x: 目标点的横坐标<br/>y: 目标点的纵坐标<br/>floorId: 目标点所在的地图id,不填视为当前地图<br/>返回值:true表示可踏入",
-          "!type": "fn(x: number, y: number, floorId?: string) -> bool"
+      maps: {
+        "!doc":
+          "负责一切和地图相关的处理内容,包括如下几个方面:<br/>- 地图的初始化,保存和读取,地图数组的生成<br/>- 是否可移动或瞬间移动的判定<br/>- 地图的绘制<br/>- 获得某个点的图块信息<br/>- 启用和禁用图块,改变图块	<br/>- 移动/跳跃图块,淡入淡出图块<br/>- 全局动画控制,动画的绘制",
+        noPass: {
+          "!doc":
+            "判定某个点是否不可被踏入(不基于主角生命值和图块cannotIn属性)<br/>例如:core.noPass(0, 0); // 判断地图左上角能否被踏入<br/>x: 目标点的横坐标<br/>y: 目标点的纵坐标<br/>floorId: 目标点所在的地图id,不填视为当前地图<br/>返回值:true表示可踏入",
+          "!type": "fn(x: number, y: number, floorId?: string) -> bool",
         },
-        "drawAnimate": {
-          "!doc": "播放动画,注意即使指定了主角的坐标也不会跟随主角移动,如有需要请使用core.drawHeroAnimate(name, callback)函数<br/>例如:core.drawAnimate('attack', core.nextX(), core.nextY(), false, core.vibrate); // 在主角面前一格播放普攻动画,动画停止后视野左右抖动1秒<br/>name: 动画文件名,不含后缀<br/>x: 横坐标<br/>y: 纵坐标<br/>alignWindow: 是否是相对窗口的坐标<br/>callback: 动画停止后的回调函数,可选<br/>返回值:一个数字,可作为core.stopAnimate()的参数来立即停止播放(届时还可选择是否执行此次播放的回调函数)",
-          "!type": "fn(name: string, x: number, y: number, alignWindow: bool, callback?: fn()) -> number"
+        drawAnimate: {
+          "!doc":
+            "播放动画,注意即使指定了主角的坐标也不会跟随主角移动,如有需要请使用core.drawHeroAnimate(name, callback)函数<br/>例如:core.drawAnimate('attack', core.nextX(), core.nextY(), false, core.vibrate); // 在主角面前一格播放普攻动画,动画停止后视野左右抖动1秒<br/>name: 动画文件名,不含后缀<br/>x: 横坐标<br/>y: 纵坐标<br/>alignWindow: 是否是相对窗口的坐标<br/>callback: 动画停止后的回调函数,可选<br/>返回值:一个数字,可作为core.stopAnimate()的参数来立即停止播放(届时还可选择是否执行此次播放的回调函数)",
+          "!type":
+            "fn(name: string, x: number, y: number, alignWindow: bool, callback?: fn()) -> number",
         },
-        "drawHeroAnimate": {
-          "!doc": "播放跟随勇士的动画<br/>name: 动画名<br/>callback: 动画停止后的回调函数,可选<br/>返回值:一个数字,可作为core.stopAnimate()的参数来立即停止播放(届时还可选择是否执行此次播放的回调函数)",
-          "!type": "fn(name: string, callback?: fn()) -> number"
+        drawHeroAnimate: {
+          "!doc":
+            "播放跟随勇士的动画<br/>name: 动画名<br/>callback: 动画停止后的回调函数,可选<br/>返回值:一个数字,可作为core.stopAnimate()的参数来立即停止播放(届时还可选择是否执行此次播放的回调函数)",
+          "!type": "fn(name: string, callback?: fn()) -> number",
         },
-        "stopAnimate": {
-          "!doc": "立刻停止一个动画播放<br/>id: 播放动画的编号,即drawAnimate或drawHeroAnimate的返回值;不填视为所有动画br/>doCallback: 是否执行该动画的回调函数",
-          "!type": "fn(id?: number, doCallback?: bool)"
+        stopAnimate: {
+          "!doc":
+            "立刻停止一个动画播放<br/>id: 播放动画的编号,即drawAnimate或drawHeroAnimate的返回值;不填视为所有动画br/>doCallback: 是否执行该动画的回调函数",
+          "!type": "fn(id?: number, doCallback?: bool)",
         },
-        "getPlayingAnimates": {
-          "!doc": "获得当前正在播放的所有(指定)动画的id列表<br/>name: 动画名;不填代表返回全部正在播放的动画<br/>返回值: 一个数组,每一项为一个正在播放的动画;可用core.stopAnimate停止播放。",
-          "!type": "fn(name?: string) -> [number]"
+        getPlayingAnimates: {
+          "!doc":
+            "获得当前正在播放的所有(指定)动画的id列表<br/>name: 动画名;不填代表返回全部正在播放的动画<br/>返回值: 一个数组,每一项为一个正在播放的动画;可用core.stopAnimate停止播放。",
+          "!type": "fn(name?: string) -> [number]",
         },
-        "getBlockCls": {
-          "!doc": "判定某个点的图块类型<br/>例如:if(core.getBlockCls(x1, y1) != 'enemys' && core.getBlockCls(x2, y2) != 'enemy48') core.openDoor(x3, y3); // 另一个简单的机关门事件,打败或炸掉这一对不同身高的敌人就开门<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图<br/>showDisable: 隐藏点是否不返回null,true表示不返回null<br/>返回值:图块类型,即“地形、四帧动画、矮敌人、高敌人、道具、矮npc、高npc、自动元件、额外地形”之一",
-          "!type": "fn(x: number, y: number, floorId?: string, showDisable?: bool) -> string"
+        getBlockCls: {
+          "!doc":
+            "判定某个点的图块类型<br/>例如:if(core.getBlockCls(x1, y1) != 'enemys' && core.getBlockCls(x2, y2) != 'enemy48') core.openDoor(x3, y3); // 另一个简单的机关门事件,打败或炸掉这一对不同身高的敌人就开门<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图<br/>showDisable: 隐藏点是否不返回null,true表示不返回null<br/>返回值:图块类型,即“地形、四帧动画、矮敌人、高敌人、道具、矮npc、高npc、自动元件、额外地形”之一",
+          "!type":
+            "fn(x: number, y: number, floorId?: string, showDisable?: bool) -> string",
         },
-        "drawMap": {
-          "!doc": "地图重绘<br/>例如:core.drawMap(); // 重绘当前地图,常用于更改贴图或改变自动元件后的刷新<br/>floorId: 地图id,可省略表示当前楼层<br/>callback: 重绘完毕后的回调函数,可选",
-          "!type": "fn(floorId?: string)"
+        drawMap: {
+          "!doc":
+            "地图重绘<br/>例如:core.drawMap(); // 重绘当前地图,常用于更改贴图或改变自动元件后的刷新<br/>floorId: 地图id,可省略表示当前楼层<br/>callback: 重绘完毕后的回调函数,可选",
+          "!type": "fn(floorId?: string)",
         },
-        "nearStair": {
+        nearStair: {
           "!doc": "当前位置是否在楼梯边;在楼传平面塔模式下对箭头也有效",
-          "!type": "fn() -> bool"
+          "!type": "fn() -> bool",
         },
-        "turnBlock": {
+        turnBlock: {
           "!doc": "事件转向",
-          "!type": "fn(direction?: string, x?: number, y?: number, floorId?: string)"
+          "!type":
+            "fn(direction?: string, x?: number, y?: number, floorId?: string)",
         },
-        "getMapArray": {
-          "!doc": "生成事件层矩阵<br/>例如:core.getMapArray('MT0'); // 生成主塔0层的事件层矩阵,隐藏的图块视为0<br/>floorId: 地图id,不填视为当前地图<br/>showDisable: 可选,true表示隐藏的图块也会被表示出来<br/>返回值:事件层矩阵,注意对其阵元的访问是[y][x]",
-          "!type": "fn(floorId?: string, noCache?: bool) -> [[number]]"
+        getMapArray: {
+          "!doc":
+            "生成事件层矩阵<br/>例如:core.getMapArray('MT0'); // 生成主塔0层的事件层矩阵,隐藏的图块视为0<br/>floorId: 地图id,不填视为当前地图<br/>showDisable: 可选,true表示隐藏的图块也会被表示出来<br/>返回值:事件层矩阵,注意对其阵元的访问是[y][x]",
+          "!type": "fn(floorId?: string, noCache?: bool) -> [[number]]",
         },
-        "getMapNumber": {
+        getMapNumber: {
           "!doc": "获得事件层某个点的数字",
-          "!type": "fn(x: number, y: number, floorId?: string, noCache?: bool) -> number"
+          "!type":
+            "fn(x: number, y: number, floorId?: string, noCache?: bool) -> number",
         },
-        "jumpBlock": {
-          "!doc": "跳跃图块;从V2.7开始不再有音效<br/>例如:core.jumpBlock(0, 0, 0, 0); // 令地图左上角的图块原地跳跃半秒,再花半秒淡出<br/>sx: 起点的横坐标<br/>sy: 起点的纵坐标<br/>ex: 终点的横坐标<br/>ey: 终点的纵坐标<br/>time: 单步和淡出用时,单位为毫秒。不填视为半秒<br/>keep: 是否不淡出,true表示不淡出<br/>callback: 落地或淡出后的回调函数,可选",
-          "!type": "fn(sx: number, sy: number, ex: number, ey: number, time?: number, keep?: bool, callback?: fn())"
+        jumpBlock: {
+          "!doc":
+            "跳跃图块;从V2.7开始不再有音效<br/>例如:core.jumpBlock(0, 0, 0, 0); // 令地图左上角的图块原地跳跃半秒,再花半秒淡出<br/>sx: 起点的横坐标<br/>sy: 起点的纵坐标<br/>ex: 终点的横坐标<br/>ey: 终点的纵坐标<br/>time: 单步和淡出用时,单位为毫秒。不填视为半秒<br/>keep: 是否不淡出,true表示不淡出<br/>callback: 落地或淡出后的回调函数,可选",
+          "!type":
+            "fn(sx: number, sy: number, ex: number, ey: number, time?: number, keep?: bool, callback?: fn())",
         },
-        "replaceBlock": {
-          "!doc": "批量替换图块<br/>例如:core.replaceBlock(21, 22, core.floorIds); // 把游戏中地上当前所有的黄钥匙都变成蓝钥匙<br/>fromNumber: 旧图块的数字<br/>toNumber: 新图块的数字<br/>floorId: 地图id或其数组,不填视为当前地图",
-          "!type": "fn(fromNumber: number, toNumber: number, floorId?: string|[string])"
+        replaceBlock: {
+          "!doc":
+            "批量替换图块<br/>例如:core.replaceBlock(21, 22, core.floorIds); // 把游戏中地上当前所有的黄钥匙都变成蓝钥匙<br/>fromNumber: 旧图块的数字<br/>toNumber: 新图块的数字<br/>floorId: 地图id或其数组,不填视为当前地图",
+          "!type":
+            "fn(fromNumber: number, toNumber: number, floorId?: string|[string])",
         },
-        "drawBlock": {
+        drawBlock: {
           "!doc": "绘制一个图块",
-          "!type": "fn(block?: block, animate?: number)"
+          "!type": "fn(block?: block, animate?: number)",
         },
-        "resetMap": {
+        resetMap: {
           "!doc": "重置地图",
-          "!type": "fn(floorId?: string|[string])"
+          "!type": "fn(floorId?: string|[string])",
         },
-        "animateSetBlock": {
+        animateSetBlock: {
           "!doc": "动画形式转变某点图块",
-          "!type": "fn(number: number|string, x: number, y: number, floorId?: string, time?: number, callback?: fn())"
+          "!type":
+            "fn(number: number|string, x: number, y: number, floorId?: string, time?: number, callback?: fn())",
         },
-        "animateSetBlocks": {
+        animateSetBlocks: {
           "!doc": "动画形式同时转变若干点图块",
-          "!type": "fn(number: number|string, locs: [?], floorId?: string, time?: number, callback?: fn())"
+          "!type":
+            "fn(number: number|string, locs: [?], floorId?: string, time?: number, callback?: fn())",
         },
-        "compressMap": {
+        compressMap: {
           "!doc": "压缩地图",
-          "!type": "fn(mapArr: [[number]], floorId?: string) -> [[number]]"
+          "!type": "fn(mapArr: [[number]], floorId?: string) -> [[number]]",
         },
-        "enemyExists": {
+        enemyExists: {
           "!doc": "某个点是否存在(指定的)怪物",
-          "!type": "fn(x: number, y: number, id?: string, floorId?: string) -> bool"
+          "!type":
+            "fn(x: number, y: number, id?: string, floorId?: string) -> bool",
         },
-        "npcExists": {
+        npcExists: {
           "!doc": "某个点是否存在NPC",
-          "!type": "fn(x: number, y: number, floorId?: string) -> bool"
+          "!type": "fn(x: number, y: number, floorId?: string) -> bool",
         },
-        "getBlockByNumber": {
+        getBlockByNumber: {
           "!doc": "根据数字获得图块",
-          "!type": "fn(number: number) -> block"
+          "!type": "fn(number: number) -> block",
         },
-        "removeBlock": {
-          "!doc": "删除一个图块,对应于「隐藏事件」并同时删除<br/>例如:core.removeBlock(0, 0); // 尝试删除地图左上角的图块<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图",
-          "!type": "fn(x: number, y: number, floorId?: string)"
+        removeBlock: {
+          "!doc":
+            "删除一个图块,对应于「隐藏事件」并同时删除<br/>例如:core.removeBlock(0, 0); // 尝试删除地图左上角的图块<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图",
+          "!type": "fn(x: number, y: number, floorId?: string)",
         },
-        "hideBlock": {
-          "!doc": "隐藏一个图块,对应于「隐藏事件」且不删除<br/>例如:core.hideBlock(0, 0); // 隐藏地图左上角的图块<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图",
-          "!type": "fn(x: number, y: number, floorId?: string)"
+        hideBlock: {
+          "!doc":
+            "隐藏一个图块,对应于「隐藏事件」且不删除<br/>例如:core.hideBlock(0, 0); // 隐藏地图左上角的图块<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图",
+          "!type": "fn(x: number, y: number, floorId?: string)",
         },
-        "removeBlockByIndex": {
+        removeBlockByIndex: {
           "!doc": "根据block的索引删除该块",
-          "!type": "fn(index: number, floorId?: string)"
+          "!type": "fn(index: number, floorId?: string)",
         },
-        "stairExists": {
+        stairExists: {
           "!doc": "某个点是否存在楼梯",
-          "!type": "fn(x: number, y: number, floorId?: string) -> bool"
+          "!type": "fn(x: number, y: number, floorId?: string) -> bool",
         },
-        "isMapBlockDisabled": {
+        isMapBlockDisabled: {
           "!doc": "某个点图块是否被强制启用或禁用",
-          "!type": "fn(floorId?: string, x?: number, y?: number, flags?: ?) -> bool"
+          "!type":
+            "fn(floorId?: string, x?: number, y?: number, flags?: ?) -> bool",
         },
-        "setMapBlockDisabled": {
+        setMapBlockDisabled: {
           "!doc": "设置某个点图块的强制启用或禁用状态",
-          "!type": "fn(floorId?: string, x?: number, y?: number, disabled?: bool)"
+          "!type":
+            "fn(floorId?: string, x?: number, y?: number, disabled?: bool)",
         },
-        "setBlockOpacity": {
+        setBlockOpacity: {
           "!doc": "设置某个点图块的不透明度",
-          "!type": "fn(opacity?: number, x?: number, y?: number, floorId?: string)"
+          "!type":
+            "fn(opacity?: number, x?: number, y?: number, floorId?: string)",
         },
-        "setBlockFilter": {
+        setBlockFilter: {
           "!doc": "设置某个点图块的特效",
-          "!type": "fn(filter?: ?, x?: number, y?: number, floorId?: string)"
+          "!type": "fn(filter?: ?, x?: number, y?: number, floorId?: string)",
         },
-        "decompressMap": {
+        decompressMap: {
           "!doc": "解压缩地图",
-          "!type": "fn(mapArr: [[number]], floorId?: string) -> [[number]]"
+          "!type": "fn(mapArr: [[number]], floorId?: string) -> [[number]]",
         },
-        "automaticRoute": {
-          "!doc": "自动寻路<br/>例如:core.automaticRoute(0, 0); // 自动寻路到地图左上角<br/>destX: 目标点的横坐标<br/>destY: 目标点的纵坐标<br/>返回值:每步走完后主角的loc属性组成的一维数组",
-          "!type": "fn(destX: number, destY: number) -> [{x: number, y: number, direction: string}]"
+        automaticRoute: {
+          "!doc":
+            "自动寻路<br/>例如:core.automaticRoute(0, 0); // 自动寻路到地图左上角<br/>destX: 目标点的横坐标<br/>destY: 目标点的纵坐标<br/>返回值:每步走完后主角的loc属性组成的一维数组",
+          "!type":
+            "fn(destX: number, destY: number) -> [{x: number, y: number, direction: string}]",
         },
-        "resizeMap": {
+        resizeMap: {
           "!doc": "更改地图画布的尺寸",
-          "!type": "fn(floorId?: string)"
+          "!type": "fn(floorId?: string)",
         },
-        "getFgNumber": {
-          "!doc": "判定某点的前景层的数字<br/>例如:core.getFgNumber(); // 判断主角脚下的前景层图块的数字<br/>x: 横坐标,不填为勇士坐标<br/>y: 纵坐标,不填为勇士坐标floorId: 地图id,不填视为当前地图<br/>noCache: 可选,true表示不使用缓存而强制重算",
-          "!type": "fn(x: number, y: number, floorId?: string, noCache?: bool) -> number"
+        getFgNumber: {
+          "!doc":
+            "判定某点的前景层的数字<br/>例如:core.getFgNumber(); // 判断主角脚下的前景层图块的数字<br/>x: 横坐标,不填为勇士坐标<br/>y: 纵坐标,不填为勇士坐标floorId: 地图id,不填视为当前地图<br/>noCache: 可选,true表示不使用缓存而强制重算",
+          "!type":
+            "fn(x: number, y: number, floorId?: string, noCache?: bool) -> number",
         },
-        "moveBlock": {
-          "!doc": "移动图块<br/>例如:core.moveBlock(0, 0, ['down']); // 令地图左上角的图块下移一格<br/>x: 起点的横坐标<br/>y: 起点的纵坐标<br/>steps: 步伐数组<br/>time: 单步和淡出用时,单位为毫秒。不填视为半秒<br/>keep: 是否不淡出,true表示不淡出<br/>callback: 移动或淡出后的回调函数,可选",
-          "!type": "fn(x: number, y: number, steps: [string], time?: number, keep?: bool, callback?: fn())"
+        moveBlock: {
+          "!doc":
+            "移动图块<br/>例如:core.moveBlock(0, 0, ['down']); // 令地图左上角的图块下移一格<br/>x: 起点的横坐标<br/>y: 起点的纵坐标<br/>steps: 步伐数组<br/>time: 单步和淡出用时,单位为毫秒。不填视为半秒<br/>keep: 是否不淡出,true表示不淡出<br/>callback: 移动或淡出后的回调函数,可选",
+          "!type":
+            "fn(x: number, y: number, steps: [string], time?: number, keep?: bool, callback?: fn())",
         },
-        "getBgNumber": {
-          "!doc": "判定某点的背景层的数字<br/>例如:core.getBgNumber(); // 判断主角脚下的背景层图块的数字<br/>x: 横坐标,不填为勇士坐标<br/>y: 纵坐标,不填为勇士坐标<br/>floorId: 地图id,不填视为当前地图<br/>noCache: 可选,true表示不使用缓存而强制重算",
-          "!type": "fn(x?: number, y?: number, floorId?: string, noCache?: bool) -> number"
+        getBgNumber: {
+          "!doc":
+            "判定某点的背景层的数字<br/>例如:core.getBgNumber(); // 判断主角脚下的背景层图块的数字<br/>x: 横坐标,不填为勇士坐标<br/>y: 纵坐标,不填为勇士坐标<br/>floorId: 地图id,不填视为当前地图<br/>noCache: 可选,true表示不使用缓存而强制重算",
+          "!type":
+            "fn(x?: number, y?: number, floorId?: string, noCache?: bool) -> number",
         },
-        "getIdOfThis": {
+        getIdOfThis: {
           "!doc": "获得当前事件点的ID",
-          "!type": "fn(id?: string) -> string"
+          "!type": "fn(id?: string) -> string",
         },
-        "searchBlock": {
-          "!doc": "搜索图块, 支持通配符和正则表达式<br/>例如:core.searchBlock('*Door'); // 搜索当前地图的所有门<br/>id: 图块id,支持星号表示任意多个(0个起)字符<br/>floorId: 地图id或数组,不填视为当前地图<br/>showDisable: 隐藏点是否计入,true表示计入<br/>返回值:一个详尽的数组,一般只用到其长度",
-          "!type": "fn(id: string, floorId?: string|[string], showDisable?: bool) -> [{floorId: string, index: number, x: number, y: number, block: block}]"
+        searchBlock: {
+          "!doc":
+            "搜索图块, 支持通配符和正则表达式<br/>例如:core.searchBlock('*Door'); // 搜索当前地图的所有门<br/>id: 图块id,支持星号表示任意多个(0个起)字符<br/>floorId: 地图id或数组,不填视为当前地图<br/>showDisable: 隐藏点是否计入,true表示计入<br/>返回值:一个详尽的数组,一般只用到其长度",
+          "!type":
+            "fn(id: string, floorId?: string|[string], showDisable?: bool) -> [{floorId: string, index: number, x: number, y: number, block: block}]",
         },
-        "searchBlockWithFilter": {
-          "!doc": "根据给定的筛选函数搜索全部满足条件的图块<br/>例如:core.searchBlockWithFilter(function (block) { return block.event.id.endsWith('Door'); }); // 搜索当前地图的所有门<br/>blockFilter: 筛选函数,可接受block输入,应当返回一个boolean值<br/>floorId: 地图id或数组,不填视为当前地图<br/>showDisable: 隐藏点是否计入,true表示计入<br/>返回值:一个详尽的数组",
-          "!type": "fn(blockFilter: fn(block: block) -> bool, floorId?: string|[string], showDisable?: bool): [{floorId: string, index: number, x: number, y: number, block: block}]"
+        searchBlockWithFilter: {
+          "!doc":
+            "根据给定的筛选函数搜索全部满足条件的图块<br/>例如:core.searchBlockWithFilter(function (block) { return block.event.id.endsWith('Door'); }); // 搜索当前地图的所有门<br/>blockFilter: 筛选函数,可接受block输入,应当返回一个boolean值<br/>floorId: 地图id或数组,不填视为当前地图<br/>showDisable: 隐藏点是否计入,true表示计入<br/>返回值:一个详尽的数组",
+          "!type":
+            "fn(blockFilter: fn(block: block) -> bool, floorId?: string|[string], showDisable?: bool): [{floorId: string, index: number, x: number, y: number, block: block}]",
         },
-        "hideBgFgMap": {
+        hideBgFgMap: {
           "!doc": "隐藏前景/背景地图",
-          "!type": "fn(name?: string, loc?: [number]|[[number]], floorId?: string, callback?: fn())"
+          "!type":
+            "fn(name?: string, loc?: [number]|[[number]], floorId?: string, callback?: fn())",
         },
-        "getBlockInfo": {
-          "!doc": "获得某个图块或素材的信息,包括ID,cls,图片,坐标,faceIds等等",
-          "!type": "fn(block?: number|string|block) -> blockInfo"
+        getBlockInfo: {
+          "!doc":
+            "获得某个图块或素材的信息,包括ID,cls,图片,坐标,faceIds等等",
+          "!type": "fn(block?: number|string|block) -> blockInfo",
         },
-        "getFaceDownId": {
-          "!doc": "获得某个图块对应行走图朝向向下的那一项的id;如果不存在行走图绑定则返回自身id。",
-          "!type": "fn(block?: string|number|block) -> string"
+        getFaceDownId: {
+          "!doc":
+            "获得某个图块对应行走图朝向向下的那一项的id;如果不存在行走图绑定则返回自身id。",
+          "!type": "fn(block?: string|number|block) -> string",
         },
-        "canMoveDirectlyArray": {
+        canMoveDirectlyArray: {
           "!doc": "获得某些点可否通行的信息",
-          "!type": "fn(locs?: [[number]])"
+          "!type": "fn(locs?: [[number]])",
         },
-        "hideFloorImage": {
+        hideFloorImage: {
           "!doc": "隐藏一个楼层贴图",
-          "!type": "fn(loc?: [number]|[[number]], floorId?: string, callback?: fn())"
+          "!type":
+            "fn(loc?: [number]|[[number]], floorId?: string, callback?: fn())",
         },
-        "extractBlocks": {
+        extractBlocks: {
           "!doc": "根据需求解析出blocks",
-          "!type": "fn(map?: ?)"
+          "!type": "fn(map?: ?)",
         },
-        "extractBlocksForUI": {
+        extractBlocksForUI: {
           "!doc": "根据需求为UI解析出blocks",
-          "!type": "fn(map?: ?, flags?: ?)"
+          "!type": "fn(map?: ?, flags?: ?)",
         },
-        "getBlockId": {
-          "!doc": "判定某个点的图块id<br/>例如:if(core.getBlockId(x1, y1) != 'greenSlime' && core.getBlockId(x2, y2) != 'redSlime') core.openDoor(x3, y3); // 一个简单的机关门事件,打败或炸掉这一对绿头怪和红头怪就开门<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图<br/>showDisable: 隐藏点是否不返回null,true表示不返回null<br/>返回值:图块id,该点无图块则返回null",
-          "!type": "fn(x: number, y: number, floorId?: string, showDisable?: bool) -> string"
+        getBlockId: {
+          "!doc":
+            "判定某个点的图块id<br/>例如:if(core.getBlockId(x1, y1) != 'greenSlime' && core.getBlockId(x2, y2) != 'redSlime') core.openDoor(x3, y3); // 一个简单的机关门事件,打败或炸掉这一对绿头怪和红头怪就开门<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图<br/>showDisable: 隐藏点是否不返回null,true表示不返回null<br/>返回值:图块id,该点无图块则返回null",
+          "!type":
+            "fn(x: number, y: number, floorId?: string, showDisable?: bool) -> string",
         },
-        "getBlockNumber": {
-          "!doc": "判定某个点的图块数字<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图<br/>showDisable: 隐藏点是否不返回null,true表示不返回null<br/>返回值:图块数字,该点无图块则返回null",
-          "!type": "fn(x: number, y: number, floorId?: string, showDisable?: bool) -> number"
+        getBlockNumber: {
+          "!doc":
+            "判定某个点的图块数字<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图<br/>showDisable: 隐藏点是否不返回null,true表示不返回null<br/>返回值:图块数字,该点无图块则返回null",
+          "!type":
+            "fn(x: number, y: number, floorId?: string, showDisable?: bool) -> number",
         },
-        "getBlockOpacity": {
+        getBlockOpacity: {
           "!doc": "获得某个点图块的不透明度",
-          "!type": "fn(x?: number, y?: number, floorId?: string, showDisable?: bool) -> number"
+          "!type":
+            "fn(x?: number, y?: number, floorId?: string, showDisable?: bool) -> number",
         },
-        "getBlockFilter": {
+        getBlockFilter: {
           "!doc": "获得某个点图块的特效",
-          "!type": "fn(x?: number, y?: number, floorId?: string, showDisable?: bool) -> ?"
+          "!type":
+            "fn(x?: number, y?: number, floorId?: string, showDisable?: bool) -> ?",
         },
-        "loadFloor": {
+        loadFloor: {
           "!doc": "从文件或存档中加载某个楼层",
-          "!type": "fn(floorId?: string, map?: ?)"
+          "!type": "fn(floorId?: string, map?: ?)",
         },
-        "generateMovableArray": {
-          "!doc": "可通行性判定<br/>例如:core.generateMovableArray(); // 判断当前地图主角从各点能向何方向移动<br/>floorId: 地图id,不填视为当前地图<br/>返回值:从各点可移动方向的三维数组",
-          "!type": "fn(floorId?: string) -> [[[string]]]"
+        generateMovableArray: {
+          "!doc":
+            "可通行性判定<br/>例如:core.generateMovableArray(); // 判断当前地图主角从各点能向何方向移动<br/>floorId: 地图id,不填视为当前地图<br/>返回值:从各点可移动方向的三维数组",
+          "!type": "fn(floorId?: string) -> [[[string]]]",
         },
-        "terrainExists": {
+        terrainExists: {
           "!doc": "某个点是否存在(指定的)地形",
-          "!type": "fn(x: number, y: number, id?: string, floorId?: string) -> bool"
+          "!type":
+            "fn(x: number, y: number, id?: string, floorId?: string) -> bool",
         },
-        "getBlockById": {
+        getBlockById: {
           "!doc": "根据ID获得图块",
-          "!type": "fn(id: string) -> block"
+          "!type": "fn(id: string) -> block",
         },
-        "drawBg": {
-          "!doc": "绘制背景层(含贴图,其与背景层矩阵的绘制顺序可通过复写此函数来改变)<br/>例如:core.drawBg(); // 绘制当前地图的背景层<br/>floorId: 地图id,不填视为当前地图<br/>ctx: 某画布的ctx,用于绘制缩略图,一般不需要",
-          "!type": "fn(floorId?: string, ctx?: CanvasRenderingContext2D)"
+        drawBg: {
+          "!doc":
+            "绘制背景层(含贴图,其与背景层矩阵的绘制顺序可通过复写此函数来改变)<br/>例如:core.drawBg(); // 绘制当前地图的背景层<br/>floorId: 地图id,不填视为当前地图<br/>ctx: 某画布的ctx,用于绘制缩略图,一般不需要",
+          "!type": "fn(floorId?: string, ctx?: CanvasRenderingContext2D)",
         },
-        "showBlock": {
-          "!doc": "显示(隐藏或显示的)图块,此函数将被“显示事件”指令和勾选了“不消失”的“移动/跳跃事件”指令(如阻击怪)的终点调用<br/>例如:core.showBlock(0, 0); // 显示地图左上角的图块<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图",
-          "!type": "fn(x: number, y: number, floorId?: string)"
+        showBlock: {
+          "!doc":
+            "显示(隐藏或显示的)图块,此函数将被“显示事件”指令和勾选了“不消失”的“移动/跳跃事件”指令(如阻击怪)的终点调用<br/>例如:core.showBlock(0, 0); // 显示地图左上角的图块<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图",
+          "!type": "fn(x: number, y: number, floorId?: string)",
         },
-        "getMapBlocksObj": {
+        getMapBlocksObj: {
           "!doc": "以x,y的形式返回每个点的事件",
-          "!type": "fn(floorId?: string, noCache?: bool)"
+          "!type": "fn(floorId?: string, noCache?: bool)",
         },
-        "removeGlobalAnimate": {
+        removeGlobalAnimate: {
           "!doc": "删除一个或所有全局动画",
-          "!type": "fn(x?: number, y?: number, name?: string)"
+          "!type": "fn(x?: number, y?: number, name?: string)",
         },
-        "drawEvents": {
-          "!doc": "绘制事件层<br/>例如:core.drawEvents(); // 绘制当前地图的事件层<br/>floorId: 地图id,不填视为当前地图<br/>blocks: 一般不需要<br/>ctx: 某画布的ctx,用于绘制缩略图,一般不需要",
-          "!type": "fn(floorId?: string, blocks?: [block], ctx?: CanvasRenderingContext2D)"
+        drawEvents: {
+          "!doc":
+            "绘制事件层<br/>例如:core.drawEvents(); // 绘制当前地图的事件层<br/>floorId: 地图id,不填视为当前地图<br/>blocks: 一般不需要<br/>ctx: 某画布的ctx,用于绘制缩略图,一般不需要",
+          "!type":
+            "fn(floorId?: string, blocks?: [block], ctx?: CanvasRenderingContext2D)",
         },
-        "canMoveDirectly": {
-          "!doc": "能否瞬移到某点,并求出节约的步数。<br/>例如:core.canMoveDirectly(0, 0); // 能否瞬移到地图左上角<br/>destX: 目标点的横坐标<br/>destY: 目标点的纵坐标<br/>返回值:正数表示节约的步数,-1表示不可瞬移",
-          "!type": "fn(destX: number, destY: number) -> number"
+        canMoveDirectly: {
+          "!doc":
+            "能否瞬移到某点,并求出节约的步数。<br/>例如:core.canMoveDirectly(0, 0); // 能否瞬移到地图左上角<br/>destX: 目标点的横坐标<br/>destY: 目标点的纵坐标<br/>返回值:正数表示节约的步数,-1表示不可瞬移",
+          "!type": "fn(destX: number, destY: number) -> number",
         },
-        "saveMap": {
+        saveMap: {
           "!doc": "将当前地图重新变成数字,以便于存档",
-          "!type": "fn(floorId?: string)"
+          "!type": "fn(floorId?: string)",
         },
-        "drawBoxAnimate": {
+        drawBoxAnimate: {
           "!doc": "绘制UI层的box动画",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "setBgFgBlock": {
-          "!doc": "转变图层块<br/>例如:core.setBgFgBlock('bg', 167, 6, 6); // 把当前地图背景层的中心块改为滑冰<br/>name: 背景还是前景<br/>number: 新图层块的数字(也支持纯数字字符串如'1')或id<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图",
-          "!type": "fn(name: string, number: number|string, x: number, y: number, floorId?: string)"
+        setBgFgBlock: {
+          "!doc":
+            "转变图层块<br/>例如:core.setBgFgBlock('bg', 167, 6, 6); // 把当前地图背景层的中心块改为滑冰<br/>name: 背景还是前景<br/>number: 新图层块的数字(也支持纯数字字符串如'1')或id<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图",
+          "!type":
+            "fn(name: string, number: number|string, x: number, y: number, floorId?: string)",
         },
-        "drawFg": {
-          "!doc": "绘制前景层(含贴图,其与前景层矩阵的绘制顺序可通过复写此函数来改变)<br/>例如:core.drawFg(); // 绘制当前地图的前景层<br/>floorId: 地图id,不填视为当前地图<br/>ctx: 某画布的ctx,用于绘制缩略图,一般不需要",
-          "!type": "fn(floorId?: string, ctx?: CanvasRenderingContext2D)"
+        drawFg: {
+          "!doc":
+            "绘制前景层(含贴图,其与前景层矩阵的绘制顺序可通过复写此函数来改变)<br/>例如:core.drawFg(); // 绘制当前地图的前景层<br/>floorId: 地图id,不填视为当前地图<br/>ctx: 某画布的ctx,用于绘制缩略图,一般不需要",
+          "!type": "fn(floorId?: string, ctx?: CanvasRenderingContext2D)",
         },
-        "getBlock": {
+        getBlock: {
           "!doc": "获得某个点的block",
-          "!type": "fn(x: number, y: number, floorId?: string, showDisable?: bool) -> block"
+          "!type":
+            "fn(x: number, y: number, floorId?: string, showDisable?: bool) -> block",
         },
-        "initBlock": {
+        initBlock: {
           "!doc": "初始化一个图块",
-          "!type": "fn(x: number, y: number, id: string|number, addInfo?: bool, eventFloor?: ?) -> block"
+          "!type":
+            "fn(x: number, y: number, id: string|number, addInfo?: bool, eventFloor?: ?) -> block",
         },
-        "addGlobalAnimate": {
+        addGlobalAnimate: {
           "!doc": "添加一个全局动画",
-          "!type": "fn(block?: block)"
+          "!type": "fn(block?: block)",
         },
-        "animateBlock": {
+        animateBlock: {
           "!doc": "显示/隐藏某个块时的动画效果",
-          "!type": "fn(loc?: [number]|[[number]], type?: string|number, time?: number, callback?: fn())"
+          "!type":
+            "fn(loc?: [number]|[[number]], type?: string|number, time?: number, callback?: fn())",
         },
-        "loadMap": {
+        loadMap: {
           "!doc": "将存档中的地图信息重新读取出来",
-          "!type": "fn(data?: ?, floorId?: string, flags?: ?)"
+          "!type": "fn(data?: ?, floorId?: string, flags?: ?)",
         },
-        "setBlock": {
-          "!doc": "转变图块<br/>例如:core.setBlock(1, 0, 0); // 把地图左上角变成黄墙<br/>number: 新图块的数字(也支持纯数字字符串如'1')或id<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图",
-          "!type": "fn(number: number|string, x: number, y: number, floorId?: string)"
+        setBlock: {
+          "!doc":
+            "转变图块<br/>例如:core.setBlock(1, 0, 0); // 把地图左上角变成黄墙<br/>number: 新图块的数字(也支持纯数字字符串如'1')或id<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id,不填视为当前地图",
+          "!type":
+            "fn(number: number|string, x: number, y: number, floorId?: string)",
         },
-        "getFgMapArray": {
-          "!doc": "生成前景层矩阵<br/>例如:core.getFgMapArray('MT0'); // 生成主塔0层的前景层矩阵,使用缓存<br/>floorId: 地图id,不填视为当前地图<br/>noCache: 可选,true表示不使用缓存<br/>返回值:前景层矩阵,注意对其阵元的访问是[y][x]",
-          "!type": "fn(floorId?: string, noCache?: bool) -> [[number]]"
+        getFgMapArray: {
+          "!doc":
+            "生成前景层矩阵<br/>例如:core.getFgMapArray('MT0'); // 生成主塔0层的前景层矩阵,使用缓存<br/>floorId: 地图id,不填视为当前地图<br/>noCache: 可选,true表示不使用缓存<br/>返回值:前景层矩阵,注意对其阵元的访问是[y][x]",
+          "!type": "fn(floorId?: string, noCache?: bool) -> [[number]]",
         },
-        "getBgMapArray": {
-          "!doc": "生成背景层矩阵<br/>例如:core.getBgMapArray('MT0'); // 生成主塔0层的背景层矩阵,使用缓存<br/>floorId: 地图id,不填视为当前地图<br/>noCache: 可选,true表示不使用缓存<br/>返回值:背景层矩阵,注意对其阵元的访问是[y][x]",
-          "!type": "fn(floorId?: string, noCache?: bool) -> [[number]]"
+        getBgMapArray: {
+          "!doc":
+            "生成背景层矩阵<br/>例如:core.getBgMapArray('MT0'); // 生成主塔0层的背景层矩阵,使用缓存<br/>floorId: 地图id,不填视为当前地图<br/>noCache: 可选,true表示不使用缓存<br/>返回值:背景层矩阵,注意对其阵元的访问是[y][x]",
+          "!type": "fn(floorId?: string, noCache?: bool) -> [[number]]",
         },
-        "canMoveHero": {
-          "!doc": "单点单朝向的可通行性判定;受各图层cannotInOut、起点cannotMove和canGoDeadZone影响,不受canPass和noPass影响<br/>x: 起点横坐标,不填视为主角当前的<br/>y: 起点纵坐标,不填视为主角当前的<br/>direction: 移动的方向,不填视为主角面对的方向<br/>floorId: 地图id,不填视为当前地图",
-          "!type": "fn(x?: number, y?: number, direction?: string, floorId?: string) -> bool"
+        canMoveHero: {
+          "!doc":
+            "单点单朝向的可通行性判定;受各图层cannotInOut、起点cannotMove和canGoDeadZone影响,不受canPass和noPass影响<br/>x: 起点横坐标,不填视为主角当前的<br/>y: 起点纵坐标,不填视为主角当前的<br/>direction: 移动的方向,不填视为主角面对的方向<br/>floorId: 地图id,不填视为当前地图",
+          "!type":
+            "fn(x?: number, y?: number, direction?: string, floorId?: string) -> bool",
         },
-        "drawThumbnail": {
-          "!doc": "绘制缩略图<br/>例如:core.drawThumbnail(); // 绘制当前地图的缩略图<br/>floorId: 地图id,不填视为当前地图<br/>blocks: 一般不需要<br/>options: 绘制信息,可选。可以增绘主角位置和朝向、采用不同于游戏中的主角行走图、增绘显伤、提供flags用于存读档,同时包含要绘制到的画布名或画布的ctx或还有其他信息,如起绘坐标、绘制大小、是否绘制全图、截取中心",
-          "!type": "fn(floorId?: string, blocks?: [block], options?: ?)"
+        drawThumbnail: {
+          "!doc":
+            "绘制缩略图<br/>例如:core.drawThumbnail(); // 绘制当前地图的缩略图<br/>floorId: 地图id,不填视为当前地图<br/>blocks: 一般不需要<br/>options: 绘制信息,可选。可以增绘主角位置和朝向、采用不同于游戏中的主角行走图、增绘显伤、提供flags用于存读档,同时包含要绘制到的画布名或画布的ctx或还有其他信息,如起绘坐标、绘制大小、是否绘制全图、截取中心",
+          "!type": "fn(floorId?: string, blocks?: [block], options?: ?)",
         },
-        "hideBlockByIndex": {
+        hideBlockByIndex: {
           "!doc": "根据图块的索引来隐藏图块",
-          "!type": "fn(index?: number, floorId?: string)"
+          "!type": "fn(index?: number, floorId?: string)",
         },
-        "getNumberById": {
-          "!doc": "根据图块id得到数字(地图矩阵中的值)<br/>例如:core.getNumberById('yellowWall'); // 1<br/>id: 图块id<br/>返回值:图块的数字,定义在project\\maps.js(请注意和project\\icons.js中的“图块索引”相区分!)",
-          "!type": "fn(id: string) -> number"
+        getNumberById: {
+          "!doc":
+            "根据图块id得到数字(地图矩阵中的值)<br/>例如:core.getNumberById('yellowWall'); // 1<br/>id: 图块id<br/>返回值:图块的数字,定义在project\\maps.js(请注意和project\\icons.js中的“图块索引”相区分!)",
+          "!type": "fn(id: string) -> number",
         },
-        "removeBlockByIndexes": {
+        removeBlockByIndexes: {
           "!doc": "一次性删除多个block",
-          "!type": "fn(indexes?: [number], floorId?: string)"
+          "!type": "fn(indexes?: [number], floorId?: string)",
         },
-        "hideBlockByIndexes": {
+        hideBlockByIndexes: {
           "!doc": "一次性隐藏多个block",
-          "!type": "fn(indexes?: [number], floorId?: string)"
+          "!type": "fn(indexes?: [number], floorId?: string)",
         },
-        "generateGroundPattern": {
+        generateGroundPattern: {
           "!doc": "生成groundPattern",
-          "!type": "fn(floorId?: string)"
+          "!type": "fn(floorId?: string)",
         },
-        "showBgFgMap": {
+        showBgFgMap: {
           "!doc": "显示前景/背景地图",
-          "!type": "fn(name?: string, loc?: [number]|[[number]], floorId?: string, callback?: fn())"
+          "!type":
+            "fn(name?: string, loc?: [number]|[[number]], floorId?: string, callback?: fn())",
         },
-        "showFloorImage": {
+        showFloorImage: {
           "!doc": "显示一个楼层贴图",
-          "!type": "fn(loc?: [number]|[[number]], floorId?: string, callback?: fn())"
-        }
+          "!type":
+            "fn(loc?: [number]|[[number]], floorId?: string, callback?: fn())",
+        },
       },
-      "ui": {
-        "!doc": "负责一切UI界面的绘制。主要包括三个部分:<br/>- 设置某个画布的属性与在某个画布上绘制的相关API<br/>- 具体的某个UI界面的绘制<br/>- 动态创建画布相关的API",
-        "resizeCanvas": {
+      ui: {
+        "!doc":
+          "负责一切UI界面的绘制。主要包括三个部分:<br/>- 设置某个画布的属性与在某个画布上绘制的相关API<br/>- 具体的某个UI界面的绘制<br/>- 动态创建画布相关的API",
+        resizeCanvas: {
           "!doc": "重新设置一个自定义画布的大小",
-          "!type": "fn(name: string, x?: number, y?: number, styleOnly?: bool, isTempCanvas?: bool)"
+          "!type":
+            "fn(name: string, x?: number, y?: number, styleOnly?: bool, isTempCanvas?: bool)",
         },
-        "deleteCanvas": {
-          "!doc": "删除一个自定义画布<br/>name: 画布名,也可以传入一个函数对所有画布进行筛选",
-          "!type": "fn(name: string|fn(name: string) -> bool)"
+        deleteCanvas: {
+          "!doc":
+            "删除一个自定义画布<br/>name: 画布名,也可以传入一个函数对所有画布进行筛选",
+          "!type": "fn(name: string|fn(name: string) -> bool)",
         },
-        "deleteAllCanvas": {
+        deleteAllCanvas: {
           "!doc": "清空所有的自定义画布",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "drawIcon": {
+        drawIcon: {
           "!doc": "在某个canvas上绘制一个图标",
-          "!type": "fn(name: string|CanvasRenderingContext2D, id: string, x: number, y: number, w?: number, h?: number, frame?: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, id: string, x: number, y: number, w?: number, h?: number, frame?: number)",
         },
-        "drawFly": {
+        drawFly: {
           "!doc": "绘制楼层传送器",
-          "!type": "fn(page?: ?)"
+          "!type": "fn(page?: ?)",
         },
-        "setOpacity": {
-          "!doc": "设置某个canvas整体的透明度;此函数直接改变画布本身,对已经绘制的内容也生效<br/>如果仅想对接下来的绘制生效请使用setAlpha",
-          "!type": "fn(name: string|CanvasRenderingContext2D, opacity: number)"
+        setOpacity: {
+          "!doc":
+            "设置某个canvas整体的透明度;此函数直接改变画布本身,对已经绘制的内容也生效<br/>如果仅想对接下来的绘制生效请使用setAlpha",
+          "!type": "fn(name: string|CanvasRenderingContext2D, opacity: number)",
         },
-        "getTextContentHeight": {
+        getTextContentHeight: {
           "!doc": "获得某段文字的预计绘制高度;参数说明详见 drawTextContent",
-          "!type": "fn(content: string, config?: ?)"
+          "!type": "fn(content: string, config?: ?)",
         },
-        "drawArrow": {
+        drawArrow: {
           "!doc": "在某个canvas上绘制一个箭头",
-          "!type": "fn(name: string|CanvasRenderingContext2D, x1: number, y1: number, x2: number, y2: number, style?: string, lineWidth?: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, x1: number, y1: number, x2: number, y2: number, style?: string, lineWidth?: number)",
         },
-        "strokeEllipse": {
+        strokeEllipse: {
           "!doc": "在某个canvas上绘制一个椭圆的边框",
-          "!type": "fn(name: string|CanvasRenderingContext2D, x: number, y: number, a: number, b: number, angle?: number, style?: string, lineWidth?: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, x: number, y: number, a: number, b: number, angle?: number, style?: string, lineWidth?: number)",
         },
-        "fillCircle": {
+        fillCircle: {
           "!doc": "在某个canvas上绘制一个圆",
           "!url": "https://www.w3school.com.cn/tags/canvas_arc.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, x: number, y: number, r: number, style?: string)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, x: number, y: number, r: number, style?: string)",
         },
-        "strokeRoundRect": {
+        strokeRoundRect: {
           "!doc": "在某个canvas上绘制一个圆角矩形的边框",
-          "!type": "fn(name: string|CanvasRenderingContext2D, x: number, y: number, width: number, height: number, radius: number, style?: string, lineWidth?: number, angle?: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, x: number, y: number, width: number, height: number, radius: number, style?: string, lineWidth?: number, angle?: number)",
         },
-        "getContextByName": {
-          "!doc": "根据画布名找到一个画布的context;支持系统画布和自定义画布。如果不存在画布返回null。<br/>也可以传画布的context自身,则返回自己。",
-          "!type": "fn(canvas: string|CanvasRenderingContext2D) -> CanvasRenderingContext2D"
+        getContextByName: {
+          "!doc":
+            "根据画布名找到一个画布的context;支持系统画布和自定义画布。如果不存在画布返回null。<br/>也可以传画布的context自身,则返回自己。",
+          "!type":
+            "fn(canvas: string|CanvasRenderingContext2D) -> CanvasRenderingContext2D",
         },
-        "drawImage": {
-          "!doc": "在一个画布上绘制图片<br/>后面的8个坐标参数与canvas的drawImage的八个参数完全相同。<br/>name: 可以是系统画布之一,也可以是任意自定义动态创建的画布名 画布名称或者画布的context<br/>image: 要绘制的图片,可以是一个全塔属性中定义的图片名(会从images中去获取;支持加':x',':y',':o'翻转),图片本身,或者一个画布。<br/>angle:旋转角度",
+        drawImage: {
+          "!doc":
+            "在一个画布上绘制图片<br/>后面的8个坐标参数与canvas的drawImage的八个参数完全相同。<br/>name: 可以是系统画布之一,也可以是任意自定义动态创建的画布名 画布名称或者画布的context<br/>image: 要绘制的图片,可以是一个全塔属性中定义的图片名(会从images中去获取;支持加':x',':y',':o'翻转),图片本身,或者一个画布。<br/>angle:旋转角度",
           "!url": "http://www.w3school.com.cn/html5/canvas_drawimage.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, image: string|image, x: number, y: number, w?: number, h?: number, x1?: number, y1?: number, w1?: number, h1?: number, angle?: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, image: string|image, x: number, y: number, w?: number, h?: number, x1?: number, y1?: number, w1?: number, h1?: number, angle?: number)",
         },
-        "drawTip": {
-          "!doc": "左上角绘制一段提示<br/>text: 要提示的字符串,支持${}语法<br/>id: 要绘制的图标ID<br/>frame: 要绘制该图标的第几帧",
-          "!type": "fn(text: string, id?: string, frame?: number)"
+        drawTip: {
+          "!doc":
+            "左上角绘制一段提示<br/>text: 要提示的字符串,支持${}语法<br/>id: 要绘制的图标ID<br/>frame: 要绘制该图标的第几帧",
+          "!type": "fn(text: string, id?: string, frame?: number)",
         },
-        "drawBackground": {
+        drawBackground: {
           "!doc": "绘制一个背景图,可绘制winskin或纯色背景;支持小箭头绘制",
-          "!type": "fn(left: string, top: string, right: string, bottom: string, posInfo?: {px: number, py: number, direction: string})"
+          "!type":
+            "fn(left: string, top: string, right: string, bottom: string, posInfo?: {px: number, py: number, direction: string})",
         },
-        "fillEllipse": {
+        fillEllipse: {
           "!doc": "在某个canvas上绘制一个椭圆",
-          "!type": "fn(name: string|CanvasRenderingContext2D, x: number, y: number, a: number, b: number, angle?: number, style?: string)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, x: number, y: number, a: number, b: number, angle?: number, style?: string)",
         },
-        "setFillStyle": {
+        setFillStyle: {
           "!doc": "设置某个canvas的绘制属性(如颜色等)",
           "!url": "https://www.w3school.com.cn/tags/canvas_fillstyle.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, style: string)"
+          "!type": "fn(name: string|CanvasRenderingContext2D, style: string)",
         },
-        "drawText": {
+        drawText: {
           "!doc": "地图中间绘制一段文字",
-          "!type": "fn(contents: string, callback?: fn())"
+          "!type": "fn(contents: string, callback?: fn())",
         },
-        "drawConfirmBox": {
-          "!doc": "绘制一个确认框<br/>此项会打断事件流,如需不打断版本的请使用core.myconfirm()<br/>text: 要绘制的内容,支持 ${} 语法<br/>yesCallback: 点击确认后的回调<br/>noCallback: 点击取消后的回调",
-          "!type": "fn(text: string, yesCallback?: fn(), noCallback?: fn())"
+        drawConfirmBox: {
+          "!doc":
+            "绘制一个确认框<br/>此项会打断事件流,如需不打断版本的请使用core.myconfirm()<br/>text: 要绘制的内容,支持 ${} 语法<br/>yesCallback: 点击确认后的回调<br/>noCallback: 点击取消后的回调",
+          "!type": "fn(text: string, yesCallback?: fn(), noCallback?: fn())",
         },
-        "drawUIEventSelector": {
-          "!doc": "自绘一个闪烁的选择光标<br/>code: 选择光标的编号,必填<br/>background: 要绘制的光标背景,必须是一个合法的WindowSkin<br/>x, y, w, h: 绘制的坐标和长宽<br/>z: 可选,光标的的z值",
-          "!type": "fn(code: number, background: string, x: number, y: number, w: number, h: number, z?: number)"
+        drawUIEventSelector: {
+          "!doc":
+            "自绘一个闪烁的选择光标<br/>code: 选择光标的编号,必填<br/>background: 要绘制的光标背景,必须是一个合法的WindowSkin<br/>x, y, w, h: 绘制的坐标和长宽<br/>z: 可选,光标的的z值",
+          "!type":
+            "fn(code: number, background: string, x: number, y: number, w: number, h: number, z?: number)",
         },
-        "clearUIEventSelector": {
-          "!doc": "清除若干个自绘的选择光标<br/>codes: 清除的光标编号;可以是单个编号或编号数组;不填则清除所有光标",
-          "!type": "fn(codes?: number|[number])"
+        clearUIEventSelector: {
+          "!doc":
+            "清除若干个自绘的选择光标<br/>codes: 清除的光标编号;可以是单个编号或编号数组;不填则清除所有光标",
+          "!type": "fn(codes?: number|[number])",
         },
-        "fillPolygon": {
+        fillPolygon: {
           "!doc": "在某个canvas上绘制一个多边形",
-          "!type": "fn(name: string|CanvasRenderingContext2D, nodes?: [[number]], style?: string)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, nodes?: [[number]], style?: string)",
         },
-        "fillText": {
-          "!doc": "在某个画布上绘制一段文字<br/>text: 要绘制的文本<br/>style: 绘制的样式<br/>font: 绘制的字体<br/>最大宽度,超过此宽度会自动放缩",
+        fillText: {
+          "!doc":
+            "在某个画布上绘制一段文字<br/>text: 要绘制的文本<br/>style: 绘制的样式<br/>font: 绘制的字体<br/>最大宽度,超过此宽度会自动放缩",
           "!url": "https://www.w3school.com.cn/tags/canvas_filltext.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, text: string, x: number, y: number, style?: string, font?: string, maxWidth?: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, text: string, x: number, y: number, style?: string, font?: string, maxWidth?: number)",
         },
-        "setTextBaseline": {
-          "!doc": "设置某个canvas的基准线<br/>baseline: 可为alphabetic, top, hanging, middle, ideographic, bottom",
+        setTextBaseline: {
+          "!doc":
+            "设置某个canvas的基准线<br/>baseline: 可为alphabetic, top, hanging, middle, ideographic, bottom",
           "!url": "https://www.w3school.com.cn/tags/canvas_textbaseline.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, baseline: string)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, baseline: string)",
         },
-        "loadCanvas": {
+        loadCanvas: {
           "!doc": "加载某个canvas状态",
-          "!type": "fn(name: string|CanvasRenderingContext2D)"
+          "!type": "fn(name: string|CanvasRenderingContext2D)",
         },
-        "splitLines": {
+        splitLines: {
           "!doc": "字符串自动换行的分割",
-          "!type": "fn(name: string|CanvasRenderingContext2D, text: string, maxWidth?: number, font?: string)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, text: string, maxWidth?: number, font?: string)",
         },
-        "setAlpha": {
-          "!doc": "设置某个canvas接下来绘制的不透明度;不会影响已经绘制的内容<br/>返回设置之前画布的不透明度<br/>如果需要修改画布本身的不透明度请使用setOpacity",
+        setAlpha: {
+          "!doc":
+            "设置某个canvas接下来绘制的不透明度;不会影响已经绘制的内容<br/>返回设置之前画布的不透明度<br/>如果需要修改画布本身的不透明度请使用setOpacity",
           "!url": "https://www.w3school.com.cn/tags/canvas_globalalpha.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, alpha: number) -> number"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, alpha: number) -> number",
         },
-        "setFilter": {
+        setFilter: {
           "!doc": "设置某个canvas接下来绘制的filter",
-          "!type": "fn(name: string|CanvasRenderingContext2D, style: string)"
+          "!type": "fn(name: string|CanvasRenderingContext2D, style: string)",
         },
-        "setLineWidth": {
+        setLineWidth: {
           "!doc": "设置某个canvas的线宽度",
           "!url": "https://www.w3school.com.cn/tags/canvas_linewidth.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, lineWidth: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, lineWidth: number)",
         },
-        "drawTextBox": {
+        drawTextBox: {
           "!doc": "绘制一个对话框",
-          "!type": "fn(content: string, showAll?: bool)"
+          "!type": "fn(content: string, showAll?: bool)",
         },
-        "relocateCanvas": {
+        relocateCanvas: {
           "!doc": "重新定位一个自定义画布",
-          "!type": "fn(name: string, x: number, y: number, useDelta: bool)"
+          "!type": "fn(name: string, x: number, y: number, useDelta: bool)",
         },
-        "rotateCanvas": {
-          "!doc": "设置一个自定义画布的旋转角度<br/>centerX, centerY: 旋转中心(以屏幕像素为基准);不填视为图片正中心。",
-          "!type": "fn(name: string, angle: number, centerX?: number, centerY?: number)"
+        rotateCanvas: {
+          "!doc":
+            "设置一个自定义画布的旋转角度<br/>centerX, centerY: 旋转中心(以屏幕像素为基准);不填视为图片正中心。",
+          "!type":
+            "fn(name: string, angle: number, centerX?: number, centerY?: number)",
         },
-        "closePanel": {
+        closePanel: {
           "!doc": "结束一切事件和绘制,关闭UI窗口,返回游戏进程",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "textImage": {
+        textImage: {
           "!doc": "文本图片化",
-          "!type": "fn(content: string, lineHeight?: number) -> image"
+          "!type": "fn(content: string, lineHeight?: number) -> image",
         },
-        "drawStatusBar": {
+        drawStatusBar: {
           "!doc": "绘制状态栏",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "setStrokeStyle": {
+        setStrokeStyle: {
           "!doc": "设置某个canvas边框属性",
           "!url": "https://www.w3school.com.cn/tags/canvas_strokestyle.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, style: string)"
+          "!type": "fn(name: string|CanvasRenderingContext2D, style: string)",
         },
-        "clearUI": {
+        clearUI: {
           "!doc": "清空UI层内容",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "drawWindowSkin": {
+        drawWindowSkin: {
           "!doc": "绘制WindowSkin",
-          "!type": "fn(background: string, ctx: string|CanvasRenderingContext2D, x: number, y: number, w: string, h: string, direction?: string, px?: number, py?: number)"
+          "!type":
+            "fn(background: string, ctx: string|CanvasRenderingContext2D, x: number, y: number, w: string, h: string, direction?: string, px?: number, py?: number)",
         },
-        "fillRect": {
-          "!doc": "绘制一个矩形。<br/>x,y: 绘制的坐标<br/>width,height: 绘制的长宽<br/>style: 绘制的样式<br/>angle: 旋转的角度,弧度制,如Math.PI/2代表90度",
+        fillRect: {
+          "!doc":
+            "绘制一个矩形。<br/>x,y: 绘制的坐标<br/>width,height: 绘制的长宽<br/>style: 绘制的样式<br/>angle: 旋转的角度,弧度制,如Math.PI/2代表90度",
           "!url": "https://www.w3school.com.cn/tags/canvas_fillrect.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, x: number, y: number, width: number, height: number, style?: string, angle?: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, x: number, y: number, width: number, height: number, style?: string, angle?: number)",
         },
-        "drawScrollText": {
+        drawScrollText: {
           "!doc": "绘制滚动字幕",
-          "!type": "fn(content: string, time: number, lineHeight?: number, callback?: fn())"
+          "!type":
+            "fn(content: string, time: number, lineHeight?: number, callback?: fn())",
         },
-        "strokePolygon": {
+        strokePolygon: {
           "!doc": "在某个canvas上绘制一个多边形的边框",
-          "!type": "fn(name: string|CanvasRenderingContext2D, nodes?: [[number]], style?: string, lineWidth?: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, nodes?: [[number]], style?: string, lineWidth?: number)",
         },
-        "strokeCircle": {
+        strokeCircle: {
           "!doc": "在某个canvas上绘制一个圆的边框",
           "!url": "https://www.w3school.com.cn/tags/canvas_arc.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, x: number, y: number, r: ?, style?: string, lineWidth?: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, x: number, y: number, r: ?, style?: string, lineWidth?: number)",
         },
-        "drawWaiting": {
+        drawWaiting: {
           "!doc": "绘制等待界面",
-          "!type": "fn(text: string)"
+          "!type": "fn(text: string)",
         },
-        "setFont": {
+        setFont: {
           "!doc": "设置某个canvas的文字字体",
           "!url": "https://www.w3school.com.cn/tags/canvas_font.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, font: string)"
+          "!type": "fn(name: string|CanvasRenderingContext2D, font: string)",
         },
-        "drawChoices": {
+        drawChoices: {
           "!doc": "绘制一个选项界面",
-          "!type": "fn(content?: string, choices?: [?], width?: number, ctx?: string|CanvasRenderingContext2D)"
+          "!type":
+            "fn(content?: string, choices?: [?], width?: number, ctx?: string|CanvasRenderingContext2D)",
         },
-        "setFontForMaxWidth": {
+        setFontForMaxWidth: {
           "!doc": "根据最大宽度自动缩小字体",
-          "!type": "fn(name: string|CanvasRenderingContext2D, text: string, maxWidth: number, font?: ?) -> string"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, text: string, maxWidth: number, font?: ?) -> string",
         },
-        "clearMap": {
-          "!doc": "清空某个画布图层<br/>name为画布名,可以是系统画布之一,也可以是任意自定义动态创建的画布名;还可以直接传画布的context本身。<br/>如果name也可以是'all',若为all则为清空所有系统画布。",
+        clearMap: {
+          "!doc":
+            "清空某个画布图层<br/>name为画布名,可以是系统画布之一,也可以是任意自定义动态创建的画布名;还可以直接传画布的context本身。<br/>如果name也可以是'all',若为all则为清空所有系统画布。",
           "!url": "https://www.w3school.com.cn/tags/canvas_clearrect.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, x?: number, y?: number, width?: number, height?: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, x?: number, y?: number, width?: number, height?: number)",
         },
-        "drawTextContent": {
-          "!doc": "绘制一段文字到某个画布上面<br/>ctx: 要绘制到的画布<br/>content: 要绘制的内容;转义字符不允许保留 \\t, \\b 和 \\f<br/>config: 绘制配置项,目前暂时包含如下内容(均为可选)<br/>left, top:起始点位置;maxWidth:单行最大宽度;color:默认颜色;align:左中右<br/>fontSize:字体大小;lineHeight:行高;time:打字机间隔;font:字体名<br/>返回值:绘制信息",
-          "!type": "fn(ctx: string|CanvasRenderingContext2D, content: string, config: ?)"
+        drawTextContent: {
+          "!doc":
+            "绘制一段文字到某个画布上面<br/>ctx: 要绘制到的画布<br/>content: 要绘制的内容;转义字符不允许保留 \\t, \\b 和 \\f<br/>config: 绘制配置项,目前暂时包含如下内容(均为可选)<br/>left, top:起始点位置;maxWidth:单行最大宽度;color:默认颜色;align:左中右<br/>fontSize:字体大小;lineHeight:行高;time:打字机间隔;font:字体名<br/>返回值:绘制信息",
+          "!type":
+            "fn(ctx: string|CanvasRenderingContext2D, content: string, config: ?)",
         },
-        "calWidth": {
+        calWidth: {
           "!doc": "计算某段文字的宽度",
           "!url": "https://www.w3school.com.cn/tags/canvas_measuretext.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, text: string, font?: string) -> number"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, text: string, font?: string) -> number",
         },
-        "fillArc": {
+        fillArc: {
           "!doc": "在某个canvas上绘制一个扇形",
           "!url": "https://www.w3school.com.cn/tags/canvas_arc.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, x: number, y: number, r: number, start: number, end: number, style?: string)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, x: number, y: number, r: number, start: number, end: number, style?: string)",
         },
-        "strokeArc": {
+        strokeArc: {
           "!doc": "在某个canvas上绘制一段弧",
           "!url": "https://www.w3school.com.cn/tags/canvas_arc.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, x: number, y: number, r: number, start: number, end: number, style?: string, lineWidth?: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, x: number, y: number, r: number, start: number, end: number, style?: string, lineWidth?: number)",
         },
-        "drawLine": {
+        drawLine: {
           "!doc": "在某个canvas上绘制一条线",
           "!url": "https://www.w3school.com.cn/tags/canvas_lineto.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, x1: number, y1: number, x2: number, y2: number, style?: string, lineWidth?: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, x1: number, y1: number, x2: number, y2: number, style?: string, lineWidth?: number)",
         },
-        "drawPagination": {
+        drawPagination: {
           "!doc": "绘制分页",
-          "!type": "fn(page?: ?, totalPage?: ?, y?: number)"
+          "!type": "fn(page?: ?, totalPage?: ?, y?: number)",
         },
-        "getToolboxItems": {
+        getToolboxItems: {
           "!doc": "获得所有应该在道具栏显示的某个类型道具",
-          "!type": "fn(cls: string) -> [string]"
+          "!type": "fn(cls: string) -> [string]",
         },
-        "strokeRect": {
-          "!doc": "绘制一个矩形的边框<br/>style: 绘制的样式<br/>lineWidth: 线宽<br/>angle: 旋转角度,弧度制,如Math.PI/2为90度",
+        strokeRect: {
+          "!doc":
+            "绘制一个矩形的边框<br/>style: 绘制的样式<br/>lineWidth: 线宽<br/>angle: 旋转角度,弧度制,如Math.PI/2为90度",
           "!url": "https://www.w3school.com.cn/tags/canvas_strokerect.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, x: number, y: number, width: number, height: number, style?: string, lineWidth?: number, angle?: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, x: number, y: number, width: number, height: number, style?: string, lineWidth?: number, angle?: number)",
         },
-        "drawBook": {
+        drawBook: {
           "!doc": "绘制怪物手册",
-          "!type": "fn(index?: ?)"
+          "!type": "fn(index?: ?)",
         },
-        "fillRoundRect": {
+        fillRoundRect: {
           "!doc": "在某个canvas上绘制一个圆角矩形",
-          "!type": "fn(name: string|CanvasRenderingContext2D, x: number, y: number, width: number, height: number, radius: number, style?: string, angle?: number)"
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, x: number, y: number, width: number, height: number, radius: number, style?: string, angle?: number)",
         },
-        "fillBoldText": {
-          "!doc": "在某个画布上绘制一个描边文字<br/>text: 要绘制的文本<br/>style: 绘制的样式<br/>strokeStyle: 要绘制的描边颜色<br/>font: 绘制的字体<br/>maxWidth: 最大宽度,超过此宽度会自动放缩",
-          "!type": "fn(name: string|CanvasRenderingContext2D, text: string, x: number, y: number, style?: string, strokeStyle?: string, font?: string, maxWidth?: number)"
+        fillBoldText: {
+          "!doc":
+            "在某个画布上绘制一个描边文字<br/>text: 要绘制的文本<br/>style: 绘制的样式<br/>strokeStyle: 要绘制的描边颜色<br/>font: 绘制的字体<br/>maxWidth: 最大宽度,超过此宽度会自动放缩",
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, text: string, x: number, y: number, style?: string, strokeStyle?: string, font?: string, maxWidth?: number)",
         },
-        "saveCanvas": {
+        saveCanvas: {
           "!doc": "保存某个canvas状态",
-          "!type": "fn(name: string|CanvasRenderingContext2D)"
+          "!type": "fn(name: string|CanvasRenderingContext2D)",
         },
-        "createCanvas": {
-          "!doc": "动态创建一个画布。<br/>name: 要创建的画布名,如果已存在则会直接取用当前存在的。<br/>x,y: 创建的画布相对窗口左上角的像素坐标<br/>width,height: 创建的长宽。<br/>zIndex: 创建的纵向高度(关系到画布之间的覆盖),z值高的将覆盖z值低的;系统画布的z值可在个性化中查看。<br/>返回创建的画布的context,也可以通过core.dymCanvas[name]调用。",
-          "!type": "fn(name: string, x: number, y: number, width: number, height: number, zIndex: number) -> CanvasRenderingContext2D"
+        createCanvas: {
+          "!doc":
+            "动态创建一个画布。<br/>name: 要创建的画布名,如果已存在则会直接取用当前存在的。<br/>x,y: 创建的画布相对窗口左上角的像素坐标<br/>width,height: 创建的长宽。<br/>zIndex: 创建的纵向高度(关系到画布之间的覆盖),z值高的将覆盖z值低的;系统画布的z值可在个性化中查看。<br/>返回创建的画布的context,也可以通过core.dymCanvas[name]调用。",
+          "!type":
+            "fn(name: string, x: number, y: number, width: number, height: number, zIndex: number) -> CanvasRenderingContext2D",
         },
-        "setTextAlign": {
+        setTextAlign: {
           "!doc": "设置某个canvas的对齐",
           "!url": "https://www.w3school.com.cn/tags/canvas_textalign.asp",
-          "!type": "fn(name: string|CanvasRenderingContext2D, align: string)"
+          "!type": "fn(name: string|CanvasRenderingContext2D, align: string)",
         },
       },
-      "enemys": {
+      enemys: {
         "!doc": "定义了一系列和怪物相关的API函数。",
-        "getEnemys": {
-          "!doc": "获得所有怪物原始数据的一个副本。<br/>请使用core.material.enemys获得当前各项怪物属性。",
-          "!type": "fn()"
+        getEnemys: {
+          "!doc":
+            "获得所有怪物原始数据的一个副本。<br/>请使用core.material.enemys获得当前各项怪物属性。",
+          "!type": "fn()",
         },
-        "getEnemyValue": {
+        getEnemyValue: {
           "!doc": "获得某个点上怪物的某个属性值",
-          "!type": "fn(enemy?: string|enemy, name: string, x?: number, y?: number, floorId?: string)"
+          "!type":
+            "fn(enemy?: string|enemy, name: string, x?: number, y?: number, floorId?: string)",
         },
-        "getSpecials": {
+        getSpecials: {
           "!doc": "获得所有特殊属性的定义",
-          "!type": "fn() -> [[?]]"
+          "!type": "fn() -> [[?]]",
         },
-        "getSpecialColor": {
+        getSpecialColor: {
           "!doc": "获得某个怪物所有特殊属性的颜色",
-          "!type": "fn(enemy: string|enemy) -> [string]"
+          "!type": "fn(enemy: string|enemy) -> [string]",
         },
-        "getSpecialFlag": {
-          "!doc": "获得某个怪物所有特殊属性的额外标记。<br/><br/>例如,1为全图性技能,需要进行遍历全图(光环/支援等)",
-          "!type": "fn(enemy: string|enemy) -> number"
+        getSpecialFlag: {
+          "!doc":
+            "获得某个怪物所有特殊属性的额外标记。<br/><br/>例如,1为全图性技能,需要进行遍历全图(光环/支援等)",
+          "!type": "fn(enemy: string|enemy) -> number",
         },
-        "getSpecialHint": {
-          "!doc": "获得某种敌人的某种特殊属性的介绍<br/>例如:core.getSpecialHint('bat', 1) // '先攻:怪物首先攻击'<br/>enemy: 敌人id或敌人对象,用于确定属性的具体数值,否则可选<br/>special: 属性编号,可以是该敌人没有的属性<br/>返回值:属性的介绍,以属性名加中文冒号开头",
-          "!type": "fn(enemy: string|enemy, special: number) -> string"
+        getSpecialHint: {
+          "!doc":
+            "获得某种敌人的某种特殊属性的介绍<br/>例如:core.getSpecialHint('bat', 1) // '先攻:怪物首先攻击'<br/>enemy: 敌人id或敌人对象,用于确定属性的具体数值,否则可选<br/>special: 属性编号,可以是该敌人没有的属性<br/>返回值:属性的介绍,以属性名加中文冒号开头",
+          "!type": "fn(enemy: string|enemy, special: number) -> string",
         },
-        "getSpecialText": {
-          "!doc": "获得某种敌人的全部特殊属性名称<br/>例如:core.getSpecialText('greenSlime') // ['先攻', '3连击', '破甲', '反击']<br/>enemy: 敌人id或敌人对象,如core.material.enemys.greenSlime<br/>返回值:字符串数组",
-          "!type": "fn(enemy: string|enemy) -> [string]"
+        getSpecialText: {
+          "!doc":
+            "获得某种敌人的全部特殊属性名称<br/>例如:core.getSpecialText('greenSlime') // ['先攻', '3连击', '破甲', '反击']<br/>enemy: 敌人id或敌人对象,如core.material.enemys.greenSlime<br/>返回值:字符串数组",
+          "!type": "fn(enemy: string|enemy) -> [string]",
         },
-        "hasSpecial": {
-          "!doc": "判定某种特殊属性的有无<br/>例如:core.hasSpecial('greenSlime', 1) // 判定绿头怪有无先攻属性<br/>special: 敌人id或敌人对象或正整数数组或自然数<br/>test: 待检查的属性编号<br/>",
-          "!type": "fn(special: number|[number]|string|number, test: number) -> bool"
+        hasSpecial: {
+          "!doc":
+            "判定某种特殊属性的有无<br/>例如:core.hasSpecial('greenSlime', 1) // 判定绿头怪有无先攻属性<br/>special: 敌人id或敌人对象或正整数数组或自然数<br/>test: 待检查的属性编号<br/>",
+          "!type":
+            "fn(special: number|[number]|string|number, test: number) -> bool",
         },
-        "nextCriticals": {
-          "!doc": "获得某只敌人接下来的若干个临界及其减伤,算法基于useLoop开关选择回合法或二分法<br/>例如:core.nextCriticals('greenSlime', 9, 0, 0, 'MT0') // 绿头怪接下来的9个临界<br/>enemy: 敌人id或敌人对象<br/>number: 要计算的临界数量,可选,默认为1<br/>x: 敌人的横坐标,可选<br/>y: 敌人的纵坐标,可选<br/>floorId: 敌人所在的地图,可选<br/>返回:两列的二维数组,每行表示一个临界及其减伤",
-          "!type": "fn(enemy: string|enemy, number?: number, x?: number, y?: number, floorId?: string) -> [[number]]"
+        nextCriticals: {
+          "!doc":
+            "获得某只敌人接下来的若干个临界及其减伤,算法基于useLoop开关选择回合法或二分法<br/>例如:core.nextCriticals('greenSlime', 9, 0, 0, 'MT0') // 绿头怪接下来的9个临界<br/>enemy: 敌人id或敌人对象<br/>number: 要计算的临界数量,可选,默认为1<br/>x: 敌人的横坐标,可选<br/>y: 敌人的纵坐标,可选<br/>floorId: 敌人所在的地图,可选<br/>返回:两列的二维数组,每行表示一个临界及其减伤",
+          "!type":
+            "fn(enemy: string|enemy, number?: number, x?: number, y?: number, floorId?: string) -> [[number]]",
         },
-        "getDefDamage": {
-          "!doc": "计算再加若干点防御能使某只敌人对主角的总伤害降低多少<br/>例如:core.getDefDamage('greenSlime', 10, 0, 0, 'MT0') // 再加10点防御能使绿头怪的伤害降低多少<br/>enemy: 敌人id或敌人对象<br/>k: 假设主角增加的防御力,可选,默认为1<br/>x: 敌人的横坐标,可选<br/>y: 敌人的纵坐标,可选<br/>floorId: 敌人所在的地图,可选",
-          "!type": "fn(enemy: string|enemy, k?: number, x?: number, y?: number, floorId?: string) -> number"
+        getDefDamage: {
+          "!doc":
+            "计算再加若干点防御能使某只敌人对主角的总伤害降低多少<br/>例如:core.getDefDamage('greenSlime', 10, 0, 0, 'MT0') // 再加10点防御能使绿头怪的伤害降低多少<br/>enemy: 敌人id或敌人对象<br/>k: 假设主角增加的防御力,可选,默认为1<br/>x: 敌人的横坐标,可选<br/>y: 敌人的纵坐标,可选<br/>floorId: 敌人所在的地图,可选",
+          "!type":
+            "fn(enemy: string|enemy, k?: number, x?: number, y?: number, floorId?: string) -> number",
         },
-        "canBattle": {
-          "!doc": "判定主角当前能否打败某只敌人<br/>例如:core.canBattle('greenSlime',0,0,'MT0') // 能否打败主塔0层左上角的绿头怪(假设有)<br/>enemy: 敌人id或敌人对象<br/>x: 敌人的横坐标,可选<br/>y: 敌人的纵坐标,可选<br/>floorId: 敌人所在的地图,可选<br/>返回值:true表示可以打败,false表示无法打败",
-          "!type": "fn(enemy: string|enemy, x?: number, y?: number, floorId?: string) -> bool"
+        canBattle: {
+          "!doc":
+            "判定主角当前能否打败某只敌人<br/>例如:core.canBattle('greenSlime',0,0,'MT0') // 能否打败主塔0层左上角的绿头怪(假设有)<br/>enemy: 敌人id或敌人对象<br/>x: 敌人的横坐标,可选<br/>y: 敌人的纵坐标,可选<br/>floorId: 敌人所在的地图,可选<br/>返回值:true表示可以打败,false表示无法打败",
+          "!type":
+            "fn(enemy: string|enemy, x?: number, y?: number, floorId?: string) -> bool",
         },
-        "getEnemyInfo": {
-          "!doc": "获得怪物真实属性<br/>hero: 可选,此时的勇士属性<br/>此函数将会计算包括坚固、模仿、光环等若干效果,将同时被怪物手册和伤害计算调用",
-          "!type": "fn(enemy: string|enemy, hero?: ?, x?: number, y?: number, floorId?: string) -> {hp: number, atk: number, def: number, money: number, exp: number, special: [number], point: number, guards: [?]}"
+        getEnemyInfo: {
+          "!doc":
+            "获得怪物真实属性<br/>hero: 可选,此时的勇士属性<br/>此函数将会计算包括坚固、模仿、光环等若干效果,将同时被怪物手册和伤害计算调用",
+          "!type":
+            "fn(enemy: string|enemy, hero?: ?, x?: number, y?: number, floorId?: string) -> {hp: number, atk: number, def: number, money: number, exp: number, special: [number], point: number, guards: [?]}",
         },
-        "getDamageInfo": {
-          "!doc": "获得战斗伤害信息<br/>例如:core.getDamage('greenSlime',0,0,'MT0') // 绿头怪的总伤害<br/>enemy: 敌人id或敌人对象<br/>hero: 可选,此时的勇士属性<br/>x: 敌人的横坐标,可选<br/>y: 敌人的纵坐标,可选<br/>floorId: 敌人所在的地图,可选<br/>返回值:伤害计算信息,如果因为没有破防或无敌怪等其他原因无法战斗,则返回null",
-          "!type": "fn(enemy: string|enemy, hero?: ?, x?: number, y?: number, floorId?: string) -> {damage: number, per_damage: number, hero_per_damage: number, init_damage: number, mon_hp: number, mon_atk: number, mon_def: number, turn: number}"
+        getDamageInfo: {
+          "!doc":
+            "获得战斗伤害信息<br/>例如:core.getDamage('greenSlime',0,0,'MT0') // 绿头怪的总伤害<br/>enemy: 敌人id或敌人对象<br/>hero: 可选,此时的勇士属性<br/>x: 敌人的横坐标,可选<br/>y: 敌人的纵坐标,可选<br/>floorId: 敌人所在的地图,可选<br/>返回值:伤害计算信息,如果因为没有破防或无敌怪等其他原因无法战斗,则返回null",
+          "!type":
+            "fn(enemy: string|enemy, hero?: ?, x?: number, y?: number, floorId?: string) -> {damage: number, per_damage: number, hero_per_damage: number, init_damage: number, mon_hp: number, mon_atk: number, mon_def: number, turn: number}",
         },
-        "getDamage": {
-          "!doc": "获得某只敌人对主角的总伤害<br/>例如:core.getDamage('greenSlime',0,0,'MT0') // 绿头怪的总伤害<br/>enemy: 敌人id或敌人对象<br/>x: 敌人的横坐标,可选<br/>y: 敌人的纵坐标,可选<br/>floorId: 敌人所在的地图,可选<br/>返回值:总伤害,如果因为没有破防或无敌怪等其他原因无法战斗,则返回null",
-          "!type": "fn(enemy: string|enemy, x?: number, y?: number, floorId?: string) -> number"
+        getDamage: {
+          "!doc":
+            "获得某只敌人对主角的总伤害<br/>例如:core.getDamage('greenSlime',0,0,'MT0') // 绿头怪的总伤害<br/>enemy: 敌人id或敌人对象<br/>x: 敌人的横坐标,可选<br/>y: 敌人的纵坐标,可选<br/>floorId: 敌人所在的地图,可选<br/>返回值:总伤害,如果因为没有破防或无敌怪等其他原因无法战斗,则返回null",
+          "!type":
+            "fn(enemy: string|enemy, x?: number, y?: number, floorId?: string) -> number",
         },
-        "getDamageString": {
-          "!doc": "获得某只敌人的地图显伤,包括颜色<br/>例如:core.getDamageString('greenSlime', 0, 0, 'MT0') // 绿头怪的地图显伤<br/>enemy: 敌人id或敌人对象<br/>x: 敌人的横坐标,可选<br/>y: 敌人的纵坐标,可选<br/>floorId: 敌人所在的地图,可选<br/>返回值:damage: 表示伤害值或为'???',color: 形如'#RrGgBb'",
-          "!type": "fn(enemy: string|enemy, x?: number, y?: number, floorId?: string) -> {color: string, damage: string}"
+        getDamageString: {
+          "!doc":
+            "获得某只敌人的地图显伤,包括颜色<br/>例如:core.getDamageString('greenSlime', 0, 0, 'MT0') // 绿头怪的地图显伤<br/>enemy: 敌人id或敌人对象<br/>x: 敌人的横坐标,可选<br/>y: 敌人的纵坐标,可选<br/>floorId: 敌人所在的地图,可选<br/>返回值:damage: 表示伤害值或为'???',color: 形如'#RrGgBb'",
+          "!type":
+            "fn(enemy: string|enemy, x?: number, y?: number, floorId?: string) -> {color: string, damage: string}",
         },
-        "getCurrentEnemys": {
-          "!doc": "获得某张地图的敌人集合,用于手册绘制<br/>例如:core.getCurrentEnemys('MT0') // 主塔0层的敌人集合<br/>floorId: 地图id,可选<br/>返回值:敌人集合,按伤害升序排列,支持多朝向怪合并",
-          "!type": "fn(floorId?: string) -> [enemy]"
+        getCurrentEnemys: {
+          "!doc":
+            "获得某张地图的敌人集合,用于手册绘制<br/>例如:core.getCurrentEnemys('MT0') // 主塔0层的敌人集合<br/>floorId: 地图id,可选<br/>返回值:敌人集合,按伤害升序排列,支持多朝向怪合并",
+          "!type": "fn(floorId?: string) -> [enemy]",
+        },
+        hasEnemyLeft: {
+          "!doc":
+            "检查某些楼层是否还有漏打的(某种)敌人<br/>例如:core.hasEnemyLeft('greenSlime', ['sample0', 'sample1']) // 样板0层和1层是否有漏打的绿头怪<br/>enemyId: 敌人id,可选,null表示任意敌人<br/>floorId: 地图id或其数组,可选,不填为当前地图<br/>返回值:地图中是否还存在该种敌人",
+          "!type": "fn(enemyId?: string, floorId?: string|[string]) -> bool",
         },
-        "hasEnemyLeft": {
-          "!doc": "检查某些楼层是否还有漏打的(某种)敌人<br/>例如:core.hasEnemyLeft('greenSlime', ['sample0', 'sample1']) // 样板0层和1层是否有漏打的绿头怪<br/>enemyId: 敌人id,可选,null表示任意敌人<br/>floorId: 地图id或其数组,可选,不填为当前地图<br/>返回值:地图中是否还存在该种敌人",
-          "!type": "fn(enemyId?: string, floorId?: string|[string]) -> bool"
-        }
       },
-      "events": {
-        "!doc": "events.js将处理所有和事件相关的操作,主要分为五个部分:<br/>- 游戏的开始和结束<br/>- 系统事件的处理<br/>- 自定义事件的处理<br/>- 点击状态栏图标所进行的操作<br/>- 一些具体事件的执行内容",
-        "afterChangeFloor": {
+      events: {
+        "!doc":
+          "events.js将处理所有和事件相关的操作,主要分为五个部分:<br/>- 游戏的开始和结束<br/>- 系统事件的处理<br/>- 自定义事件的处理<br/>- 点击状态栏图标所进行的操作<br/>- 一些具体事件的执行内容",
+        afterChangeFloor: {
           "!doc": "转换楼层结束的事件",
-          "!type": "fn(floorId?: string)"
+          "!type": "fn(floorId?: string)",
         },
-        "popEventLoc": {
+        popEventLoc: {
           "!doc": "将当前点坐标入栈",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "afterOpenDoor": {
+        afterOpenDoor: {
           "!doc": "开一个门后触发的事件",
-          "!type": "fn(doorId?: string, x?: number, y?: number)"
+          "!type": "fn(doorId?: string, x?: number, y?: number)",
         },
-        "checkLvUp": {
+        checkLvUp: {
           "!doc": "检查升级事件",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "insertAction": {
-          "!doc": "插入一段事件;此项不可插入公共事件,请用 core.insertCommonEvent<br/>例如:core.insertAction('一段文字'); // 插入一个显示文章<br/>action: 单个事件指令,或事件指令数组<br/>x: 新的当前点横坐标,可选<br/>y: 新的当前点纵坐标,可选<br/>callback: 新的回调函数,可选<br/>addToLast: 插入的位置,true表示插入到末尾,否则插入到开头",
-          "!type": "fn(action: string|?|[?], x?: number, y?: number, callback?: fn(), addToLast?: bool)"
+        insertAction: {
+          "!doc":
+            "插入一段事件;此项不可插入公共事件,请用 core.insertCommonEvent<br/>例如:core.insertAction('一段文字'); // 插入一个显示文章<br/>action: 单个事件指令,或事件指令数组<br/>x: 新的当前点横坐标,可选<br/>y: 新的当前点纵坐标,可选<br/>callback: 新的回调函数,可选<br/>addToLast: 插入的位置,true表示插入到末尾,否则插入到开头",
+          "!type":
+            "fn(action: string|?|[?], x?: number, y?: number, callback?: fn(), addToLast?: bool)",
         },
-        "unfollow": {
+        unfollow: {
           "!doc": "取消跟随<br/>name: 取消跟随的行走图,不填则取消全部跟随者",
-          "!type": "fn(name?: string)"
+          "!type": "fn(name?: string)",
         },
-        "hasVisitedFloor": {
+        hasVisitedFloor: {
           "!doc": "是否到达过某个楼层",
-          "!type": "fn(floorId?: string) -> bool"
+          "!type": "fn(floorId?: string) -> bool",
         },
-        "startEvents": {
+        startEvents: {
           "!doc": "开始执行一系列自定义事件",
-          "!type": "fn(list?: [?], x?: number, y?: number, callback?: fn())"
+          "!type": "fn(list?: [?], x?: number, y?: number, callback?: fn())",
         },
-        "setHeroIcon": {
-          "!doc": "更改主角行走图<br/>例如:core.setHeroIcon('npc48.png', true); // 把主角从阳光变成样板0层左下角的小姐姐,但不立即刷新<br/>name: 新的行走图文件名,可以是全塔属性中映射前的中文名。映射后会被存入core.status.hero.image<br/>noDraw: true表示不立即刷新(刷新会导致大地图下视野重置到以主角为中心)",
-          "!type": "fn(name: string, noDraw?: bool)"
+        setHeroIcon: {
+          "!doc":
+            "更改主角行走图<br/>例如:core.setHeroIcon('npc48.png', true); // 把主角从阳光变成样板0层左下角的小姐姐,但不立即刷新<br/>name: 新的行走图文件名,可以是全塔属性中映射前的中文名。映射后会被存入core.status.hero.image<br/>noDraw: true表示不立即刷新(刷新会导致大地图下视野重置到以主角为中心)",
+          "!type": "fn(name: string, noDraw?: bool)",
         },
-        "changingFloor": {
+        changingFloor: {
           "!doc": "楼层转换中",
-          "!type": "fn(floorId?: string, heroLoc?: {x: number, y: number, direction: string})"
+          "!type":
+            "fn(floorId?: string, heroLoc?: {x: number, y: number, direction: string})",
         },
-        "setEvents": {
+        setEvents: {
           "!doc": "直接设置事件列表",
-          "!type": "fn(list?: [?], x?: number, y?: number, callback?: fn())"
+          "!type": "fn(list?: [?], x?: number, y?: number, callback?: fn())",
         },
-        "setValue": {
+        setValue: {
           "!doc": "数值操作",
-          "!type": "fn(name: string, operator: string, value: ?, prefix?: string)"
+          "!type":
+            "fn(name: string, operator: string, value: ?, prefix?: string)",
         },
-        "precompile": {
+        precompile: {
           "!doc": "预编辑事件",
-          "!type": "fn(data?: ?)"
+          "!type": "fn(data?: ?)",
         },
-        "vibrate": {
-          "!doc": "视野抖动<br/>例如:core.vibrate(); // 视野抖动1秒<br/>direction: 抖动方向;可填 horizontal(左右),vertical(上下),diagonal1(左上右下),diagonal2(左下右上)<br/>time: 抖动时长<br/>speed: 抖动速度<br/>power: 抖动幅度<br/>callback: 抖动平息后的回调函数,可选",
-          "!type": "fn(direction?: string, time?: number, speed?: number, power?: number, callback?: fn())"
+        vibrate: {
+          "!doc":
+            "视野抖动<br/>例如:core.vibrate(); // 视野抖动1秒<br/>direction: 抖动方向;可填 horizontal(左右),vertical(上下),diagonal1(左上右下),diagonal2(左下右上)<br/>time: 抖动时长<br/>speed: 抖动速度<br/>power: 抖动幅度<br/>callback: 抖动平息后的回调函数,可选",
+          "!type":
+            "fn(direction?: string, time?: number, speed?: number, power?: number, callback?: fn())",
         },
-        "confirmRestart": {
+        confirmRestart: {
           "!doc": "询问是否需要重新开始",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "battle": {
-          "!doc": "战斗,如果填写了坐标就会删除该点的敌人并触发战后事件<br/>例如:core.battle('greenSlime'); // 和从天而降的绿头怪战斗(如果打得过)<br/>id: 敌人id,必填<br/>x: 敌人的横坐标,可选<br/>y: 敌人的纵坐标,可选<br/>force: true表示强制战斗,可选<br/>callback: 回调函数,可选",
-          "!type": "fn(id: string, x?: number, y?: number, force?: bool, callback?: fn())"
+        battle: {
+          "!doc":
+            "战斗,如果填写了坐标就会删除该点的敌人并触发战后事件<br/>例如:core.battle('greenSlime'); // 和从天而降的绿头怪战斗(如果打得过)<br/>id: 敌人id,必填<br/>x: 敌人的横坐标,可选<br/>y: 敌人的纵坐标,可选<br/>force: true表示强制战斗,可选<br/>callback: 回调函数,可选",
+          "!type":
+            "fn(id: string, x?: number, y?: number, force?: bool, callback?: fn())",
         },
-        "follow": {
-          "!doc": "跟随<br/>name: 要跟随的一个合法的4x4的行走图名称,需要在全塔属性注册",
-          "!type": "fn(name: string)"
+        follow: {
+          "!doc":
+            "跟随<br/>name: 要跟随的一个合法的4x4的行走图名称,需要在全塔属性注册",
+          "!type": "fn(name: string)",
         },
-        "beforeBattle": {
+        beforeBattle: {
           "!doc": "战斗前触发的事件;返回false代表不进行战斗",
-          "!type": "fn(enemyId?: string, x?: number, y?: number) -> bool"
+          "!type": "fn(enemyId?: string, x?: number, y?: number) -> bool",
         },
-        "registerEvent": {
-          "!doc": "注册一个自定义事件<br/>type: 事件类型<br/>func: 事件的处理函数,可接受(data, x, y, prefix)参数<br/>data为事件内容,x和y为当前点坐标(可为null),prefix为当前点前缀",
-          "!type": "fn(type: string, func: fn(data: ?, x?: number, y?: number, prefix?: string))"
+        registerEvent: {
+          "!doc":
+            "注册一个自定义事件<br/>type: 事件类型<br/>func: 事件的处理函数,可接受(data, x, y, prefix)参数<br/>data为事件内容,x和y为当前点坐标(可为null),prefix为当前点前缀",
+          "!type":
+            "fn(type: string, func: fn(data: ?, x?: number, y?: number, prefix?: string))",
         },
-        "flyTo": {
+        flyTo: {
           "!doc": "飞往某一层",
-          "!type": "fn(toId?: string, callback?: fn()) -> bool"
+          "!type": "fn(toId?: string, callback?: fn()) -> bool",
         },
-        "afterGetItem": {
+        afterGetItem: {
           "!doc": "获得一个道具后的事件",
-          "!type": "fn(id?: string, x?: number, y?: number, isGentleClick?: bool)"
+          "!type":
+            "fn(id?: string, x?: number, y?: number, isGentleClick?: bool)",
         },
-        "doAction": {
-          "!doc": "执行下一个事件指令,常作为回调<br/>例如:core.setCurtain([0,0,0,1], null, null, core.doAction); // 事件中的原生脚本,配合勾选“不自动执行下一个事件”来达到此改变色调只持续到下次场景切换的效果",
-          "!type": "fn()"
+        doAction: {
+          "!doc":
+            "执行下一个事件指令,常作为回调<br/>例如:core.setCurtain([0,0,0,1], null, null, core.doAction); // 事件中的原生脚本,配合勾选“不自动执行下一个事件”来达到此改变色调只持续到下次场景切换的效果",
+          "!type": "fn()",
         },
-        "openBook": {
+        openBook: {
           "!doc": "点击怪物手册时的打开操作",
-          "!type": "fn(fromUserAction?: bool)"
+          "!type": "fn(fromUserAction?: bool)",
         },
-        "save": {
+        save: {
           "!doc": "点击存档按钮时的打开操作",
-          "!type": "fn(fromUserAction?: bool)"
+          "!type": "fn(fromUserAction?: bool)",
         },
-        "load": {
+        load: {
           "!doc": "点击读档按钮时的打开操作",
-          "!type": "fn(fromUserAction?: bool)"
+          "!type": "fn(fromUserAction?: bool)",
         },
-        "getNextItem": {
-          "!doc": "轻按获得面前的物品或周围唯一物品<br/>noRoute: 若为true则不计入录像",
-          "!type": "fn(noRoute?: bool)"
+        getNextItem: {
+          "!doc":
+            "轻按获得面前的物品或周围唯一物品<br/>noRoute: 若为true则不计入录像",
+          "!type": "fn(noRoute?: bool)",
         },
-        "hasAsync": {
+        hasAsync: {
           "!doc": "当前是否有未处理完毕的异步事件(不包含动画和音效)",
-          "!type": "fn() -> bool"
+          "!type": "fn() -> bool",
         },
-        "stopAsync": {
+        stopAsync: {
           "!doc": "立刻停止所有正在进行的异步事件",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "openEquipbox": {
+        openEquipbox: {
           "!doc": "点击装备栏时的打开操作",
-          "!type": "fn(fromUserAction?: bool)"
+          "!type": "fn(fromUserAction?: bool)",
         },
-        "recoverEvents": {
+        recoverEvents: {
           "!doc": "恢复一个事件",
-          "!type": "fn(data?: ?)"
+          "!type": "fn(data?: ?)",
         },
-        "setGlobalFlag": {
-          "!doc": "设置一个系统开关<br/>例如:core.setGlobalFlag('steelDoorWithoutKey', true); // 使全塔的所有铁门都不再需要钥匙就能打开<br/>name: 系统开关的英文名<br/>value: 开关的新值,您可以用!core.flags[name]简单地表示将此开关反转",
-          "!type": "fn(name: string, value: bool)"
+        setGlobalFlag: {
+          "!doc":
+            "设置一个系统开关<br/>例如:core.setGlobalFlag('steelDoorWithoutKey', true); // 使全塔的所有铁门都不再需要钥匙就能打开<br/>name: 系统开关的英文名<br/>value: 开关的新值,您可以用!core.flags[name]简单地表示将此开关反转",
+          "!type": "fn(name: string, value: bool)",
         },
-        "moveImage": {
-          "!doc": "移动一张图片并/或改变其透明度<br/>例如:core.moveImage(1, null, 0.5); // 1秒内把1号图片变为50%透明<br/>code: 图片编号<br/>to: 新的左上角坐标,省略表示原地改变透明度<br/>opacityVal: 新的透明度,省略表示不变<br/>time: 移动用时,单位为毫秒。不填视为1秒<br/>callback: 图片移动完毕后的回调函数,可选",
-          "!type": "fn(code: number, to?: [number], opacityVal?: number, moveMode?: string, time?: number, callback?: fn())"
+        moveImage: {
+          "!doc":
+            "移动一张图片并/或改变其透明度<br/>例如:core.moveImage(1, null, 0.5); // 1秒内把1号图片变为50%透明<br/>code: 图片编号<br/>to: 新的左上角坐标,省略表示原地改变透明度<br/>opacityVal: 新的透明度,省略表示不变<br/>time: 移动用时,单位为毫秒。不填视为1秒<br/>callback: 图片移动完毕后的回调函数,可选",
+          "!type":
+            "fn(code: number, to?: [number], opacityVal?: number, moveMode?: string, time?: number, callback?: fn())",
         },
-        "rotateImage": {
-          "!doc": "旋转一张图片<br/>code: 图片编号<br/>center: 旋转中心像素坐标(以屏幕为基准);不填视为图片本身中心<br/>angle: 旋转角度;正数为顺时针,负数为逆时针<br/>moveMode: 旋转模式<br/>time: 旋转用时,单位为毫秒。不填视为1秒<br/>callback: 图片旋转完毕后的回调函数,可选",
-          "!type": "fn(code: number, center?: [number], angle?: number, moveMode?: string, time?: number, callback?: fn())"
+        rotateImage: {
+          "!doc":
+            "旋转一张图片<br/>code: 图片编号<br/>center: 旋转中心像素坐标(以屏幕为基准);不填视为图片本身中心<br/>angle: 旋转角度;正数为顺时针,负数为逆时针<br/>moveMode: 旋转模式<br/>time: 旋转用时,单位为毫秒。不填视为1秒<br/>callback: 图片旋转完毕后的回调函数,可选",
+          "!type":
+            "fn(code: number, center?: [number], angle?: number, moveMode?: string, time?: number, callback?: fn())",
         },
-        "scaleImage": {
+        scaleImage: {
           "!doc": "放缩一张图片",
-          "!type": "fn(code: number, center?: [number], scale?: number, moveMode?: string, time?: number, callback?: fn())"
+          "!type":
+            "fn(code: number, center?: [number], scale?: number, moveMode?: string, time?: number, callback?: fn())",
         },
-        "moveTextBox": {
+        moveTextBox: {
           "!doc": "移动对话框",
-          "!type": "fn(code: number, loc: [number], relative?: bool, moveMode?: string, time?: number, callback?: fn())"
+          "!type":
+            "fn(code: number, loc: [number], relative?: bool, moveMode?: string, time?: number, callback?: fn())",
         },
-        "clearTextBox": {
+        clearTextBox: {
           "!doc": "清除对话框",
-          "!type": "fn(code: number)"
+          "!type": "fn(code: number)",
         },
-        "openSettings": {
+        openSettings: {
           "!doc": "点击设置按钮时的操作",
-          "!type": "fn(fromUserAction?: bool)"
+          "!type": "fn(fromUserAction?: bool)",
         },
-        "afterPushBox": {
+        afterPushBox: {
           "!doc": "推箱子后的事件",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "unregisterSystemEvent": {
+        unregisterSystemEvent: {
           "!doc": "注销一个系统事件",
-          "!type": "fn(type: string)"
+          "!type": "fn(type: string)",
         },
-        "trigger": {
-          "!doc": "触发(x,y)点的系统事件;会执行该点图块的script属性,同时支持战斗(会触发战后)、道具(会触发道具后)、楼层切换等等<br/>callback: 执行完毕的回调函数<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
-          "!type": "fn(x?: number, y?: number, callback?: fn())"
+        trigger: {
+          "!doc":
+            "触发(x,y)点的系统事件;会执行该点图块的script属性,同时支持战斗(会触发战后)、道具(会触发道具后)、楼层切换等等<br/>callback: 执行完毕的回调函数<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
+          "!type": "fn(x?: number, y?: number, callback?: fn())",
         },
-        "restart": {
+        restart: {
           "!doc": "重新开始游戏;此函数将回到标题页面",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "doEvent": {
+        doEvent: {
           "!doc": "执行一个自定义事件",
-          "!type": "fn(data?: ?, x?: number, y?: number, prefix?: string)"
+          "!type": "fn(data?: ?, x?: number, y?: number, prefix?: string)",
         },
-        "win": {
+        win: {
           "!doc": "游戏获胜事件",
-          "!type": "fn(reason?: string, norank?: bool, noexit?: bool)"
+          "!type": "fn(reason?: string, norank?: bool, noexit?: bool)",
         },
-        "setGlobalAttribute": {
+        setGlobalAttribute: {
           "!doc": "设置全塔属性",
-          "!type": "fn(name: string, value: string)"
+          "!type": "fn(name: string, value: string)",
         },
-        "setNameMap": {
+        setNameMap: {
           "!doc": "设置文件别名",
-          "!type": "fn(name: string, value?: string)"
+          "!type": "fn(name: string, value?: string)",
         },
-        "setTextAttribute": {
+        setTextAttribute: {
           "!doc": "设置剧情文本的属性",
-          "!type": "fn(data: ?)"
+          "!type": "fn(data: ?)",
         },
-        "openToolbox": {
+        openToolbox: {
           "!doc": "点击工具栏时的打开操作",
-          "!type": "fn(fromUserAction?: bool)"
+          "!type": "fn(fromUserAction?: bool)",
         },
-        "setVolume": {
-          "!doc": "调节bgm的音量<br/>例如:core.setVolume(0, 100, core.jumpHero); // 0.1秒内淡出bgm,然后主角原地跳跃半秒<br/>value: 新的音量,为0或不大于1的正数。注意系统设置中是这个值的平方根的十倍<br/>time: 渐变用时,单位为毫秒。不填或小于100毫秒都视为0<br/>callback: 渐变完成后的回调函数,可选",
-          "!type": "fn(value: number, time?: number, callback?: fn())"
+        setVolume: {
+          "!doc":
+            "调节bgm的音量<br/>例如:core.setVolume(0, 100, core.jumpHero); // 0.1秒内淡出bgm,然后主角原地跳跃半秒<br/>value: 新的音量,为0或不大于1的正数。注意系统设置中是这个值的平方根的十倍<br/>time: 渐变用时,单位为毫秒。不填或小于100毫秒都视为0<br/>callback: 渐变完成后的回调函数,可选",
+          "!type": "fn(value: number, time?: number, callback?: fn())",
         },
-        "pushEventLoc": {
+        pushEventLoc: {
           "!doc": "将当前点坐标入栈",
-          "!type": "fn(x?: number, y?: number, floorId?: string) -> bool"
+          "!type": "fn(x?: number, y?: number, floorId?: string) -> bool",
         },
-        "openKeyBoard": {
+        openKeyBoard: {
           "!doc": "点击虚拟键盘时的打开操作",
-          "!type": "fn(fromUserAction?: bool)"
+          "!type": "fn(fromUserAction?: bool)",
         },
-        "insertCommonEvent": {
-          "!doc": "插入一个公共事件<br/>例如:core.insertCommonEvent('加点事件', [3]);<br/>name: 公共事件名;如果公共事件不存在则直接忽略<br/>args: 参数列表,为一个数组,将依次赋值给 flag:arg1, flag:arg2, ...<br/>x: 新的当前点横坐标,可选<br/>y: 新的当前点纵坐标,可选<br/>callback: 新的回调函数,可选<br/>addToLast: 插入的位置,true表示插入到末尾,否则插入到开头",
-          "!type": "fn(name?: string, args?: [?], x?: number, y?: number, callback?: fn(), addToLast?: bool)"
+        insertCommonEvent: {
+          "!doc":
+            "插入一个公共事件<br/>例如:core.insertCommonEvent('加点事件', [3]);<br/>name: 公共事件名;如果公共事件不存在则直接忽略<br/>args: 参数列表,为一个数组,将依次赋值给 flag:arg1, flag:arg2, ...<br/>x: 新的当前点横坐标,可选<br/>y: 新的当前点纵坐标,可选<br/>callback: 新的回调函数,可选<br/>addToLast: 插入的位置,true表示插入到末尾,否则插入到开头",
+          "!type":
+            "fn(name?: string, args?: [?], x?: number, y?: number, callback?: fn(), addToLast?: bool)",
         },
-        "hideImage": {
-          "!doc": "隐藏一张图片<br/>例如:core.hideImage(1, 1000, core.jumpHero); // 1秒内淡出1号图片,然后主角原地跳跃半秒<br/>code: 图片编号<br/>time: 淡出时间,单位为毫秒<br/>callback: 图片完全消失后的回调函数,可选",
-          "!type": "fn(code: number, time?: number, callback?: fn())"
+        hideImage: {
+          "!doc":
+            "隐藏一张图片<br/>例如:core.hideImage(1, 1000, core.jumpHero); // 1秒内淡出1号图片,然后主角原地跳跃半秒<br/>code: 图片编号<br/>time: 淡出时间,单位为毫秒<br/>callback: 图片完全消失后的回调函数,可选",
+          "!type": "fn(code: number, time?: number, callback?: fn())",
         },
-        "visitFloor": {
+        visitFloor: {
           "!doc": "到达某楼层",
-          "!type": "fn(floorId?: string)"
+          "!type": "fn(floorId?: string)",
         },
-        "openQuickShop": {
+        openQuickShop: {
           "!doc": "点击快捷商店按钮时的打开操作",
-          "!type": "fn(fromUserAction?: bool)"
+          "!type": "fn(fromUserAction?: bool)",
         },
-        "afterBattle": {
+        afterBattle: {
           "!doc": "战斗结束后触发的事件",
-          "!type": "fn(enemyId?: string, x?: number, y?: number)"
+          "!type": "fn(enemyId?: string, x?: number, y?: number)",
         },
-        "pushBox": {
+        pushBox: {
           "!doc": "推箱子",
-          "!type": "fn(data?: ?)"
+          "!type": "fn(data?: ?)",
         },
-        "autoEventExecuted": {
+        autoEventExecuted: {
           "!doc": "当前是否执行过某个自动事件",
-          "!type": "fn(symbol?: string, value?: ?) -> bool"
+          "!type": "fn(symbol?: string, value?: ?) -> bool",
         },
-        "onSki": {
+        onSki: {
           "!doc": "当前是否在冰上",
-          "!type": "fn(number?: number) -> bool"
+          "!type": "fn(number?: number) -> bool",
         },
-        "showImage": {
-          "!doc": "显示一张图片<br/>例如:core.showImage(1, core.material.images.images['winskin.png'], [0,0,128,128], [0,0,416,416], 0.5, 1000); // 裁剪winskin.png的最左边128×128px,放大到铺满整个视野,1秒内淡入到50%透明,编号为1<br/>code: 图片编号,为不大于50的正整数,加上100后就是对应画布层的z值,较大的会遮罩较小的,注意色调层的z值为125,UI层为140<br/>image: 图片文件名(可以是全塔属性中映射前的中文名)或图片对象(见上面的例子)<br/>sloc: 一行且至多四列的数组,表示从原图裁剪的左上角坐标和宽高,可选<br/>loc: 一行且至多四列的数组,表示图片在视野中的左上角坐标和宽高,可选<br/>opacityVal: 不透明度,为小于1的正数。不填视为1<br/>time: 淡入时间,单位为毫秒。不填视为0<br/>callback: 图片完全显示出来后的回调函数,可选",
-          "!type": "fn(code: number, image: string|image, sloc?: [number], loc?: [number], opacityVal?: number, time?: number, callback?: fn())"
+        showImage: {
+          "!doc":
+            "显示一张图片<br/>例如:core.showImage(1, core.material.images.images['winskin.png'], [0,0,128,128], [0,0,416,416], 0.5, 1000); // 裁剪winskin.png的最左边128×128px,放大到铺满整个视野,1秒内淡入到50%透明,编号为1<br/>code: 图片编号,为不大于50的正整数,加上100后就是对应画布层的z值,较大的会遮罩较小的,注意色调层的z值为125,UI层为140<br/>image: 图片文件名(可以是全塔属性中映射前的中文名)或图片对象(见上面的例子)<br/>sloc: 一行且至多四列的数组,表示从原图裁剪的左上角坐标和宽高,可选<br/>loc: 一行且至多四列的数组,表示图片在视野中的左上角坐标和宽高,可选<br/>opacityVal: 不透明度,为小于1的正数。不填视为1<br/>time: 淡入时间,单位为毫秒。不填视为0<br/>callback: 图片完全显示出来后的回调函数,可选",
+          "!type":
+            "fn(code: number, image: string|image, sloc?: [number], loc?: [number], opacityVal?: number, time?: number, callback?: fn())",
         },
-        "getItem": {
-          "!doc": "获得道具并提示,如果填写了坐标就会删除该点的该道具<br/>例如:core.getItem('book'); // 获得敌人手册并提示<br/>id: 道具id,必填<br/>num: 获得的数量,不填视为1,填了就别填坐标了<br/>x: 道具的横坐标,可选<br/>y: 道具的纵坐标,可选<br/>callback: 回调函数,可选",
-          "!type": "fn(id: string, num?: number, x?: number, y?: number, callback?: fn())"
+        getItem: {
+          "!doc":
+            "获得道具并提示,如果填写了坐标就会删除该点的该道具<br/>例如:core.getItem('book'); // 获得敌人手册并提示<br/>id: 道具id,必填<br/>num: 获得的数量,不填视为1,填了就别填坐标了<br/>x: 道具的横坐标,可选<br/>y: 道具的纵坐标,可选<br/>callback: 回调函数,可选",
+          "!type":
+            "fn(id: string, num?: number, x?: number, y?: number, callback?: fn())",
         },
-        "registerSystemEvent": {
-          "!doc": "注册一个系统事件<br/>type: 事件名<br/>func: 为事件的处理函数,可接受(data,callback)参数",
-          "!type": "fn(type: string, func: fn(data?: ?, callback?: fn()))"
+        registerSystemEvent: {
+          "!doc":
+            "注册一个系统事件<br/>type: 事件名<br/>func: 为事件的处理函数,可接受(data,callback)参数",
+          "!type": "fn(type: string, func: fn(data?: ?, callback?: fn()))",
         },
-        "startGame": {
-          "!doc": "开始新游戏<br/>例如:core.startGame('咸鱼乱撞', 0, ''); // 开始一局咸鱼乱撞难度的新游戏,随机种子为0<br/>hard: 难度名,会显示在左下角(横屏)或右下角(竖屏)<br/>seed: 随机种子,相同的种子保证了录像的可重复性<br/>route: 经由base64压缩后的录像,用于从头开始的录像回放<br/>callback: 回调函数,可选",
-          "!type": "fn(hard: string, seed: number, route: string, callback?: fn())"
+        startGame: {
+          "!doc":
+            "开始新游戏<br/>例如:core.startGame('咸鱼乱撞', 0, ''); // 开始一局咸鱼乱撞难度的新游戏,随机种子为0<br/>hard: 难度名,会显示在左下角(横屏)或右下角(竖屏)<br/>seed: 随机种子,相同的种子保证了录像的可重复性<br/>route: 经由base64压缩后的录像,用于从头开始的录像回放<br/>callback: 回调函数,可选",
+          "!type":
+            "fn(hard: string, seed: number, route: string, callback?: fn())",
         },
-        "doSystemEvent": {
+        doSystemEvent: {
           "!doc": "执行一个系统事件",
-          "!type": "fn(type: string, data?: ?, callback?: fn())"
+          "!type": "fn(type: string, data?: ?, callback?: fn())",
         },
-        "resetGame": {
+        resetGame: {
           "!doc": "初始化游戏",
-          "!type": "fn(hero?: ?, hard?: ?, floorId?: string, maps?: ?, values?: ?)"
+          "!type":
+            "fn(hero?: ?, hard?: ?, floorId?: string, maps?: ?, values?: ?)",
         },
-        "setFloorInfo": {
-          "!doc": "设置一项楼层属性并刷新状态栏<br/>例如:core.setFloorInfo('ratio', 2, 'MT0'); // 把主塔0层的血瓶和宝石变为双倍效果<br/>name: 要修改的属性名<br/>values: 属性的新值。<br/>floorId: 楼层id,不填视为当前层<br/>prefix: 独立开关前缀,一般不需要",
-          "!type": "fn(name: string, values: ?, floorId?: string, prefix?: string)"
+        setFloorInfo: {
+          "!doc":
+            "设置一项楼层属性并刷新状态栏<br/>例如:core.setFloorInfo('ratio', 2, 'MT0'); // 把主塔0层的血瓶和宝石变为双倍效果<br/>name: 要修改的属性名<br/>values: 属性的新值。<br/>floorId: 楼层id,不填视为当前层<br/>prefix: 独立开关前缀,一般不需要",
+          "!type":
+            "fn(name: string, values: ?, floorId?: string, prefix?: string)",
         },
-        "openDoor": {
-          "!doc": "开门(包括三种基础墙)<br/>例如:core.openDoor(0, 0, true, core.jumpHero); // 打开左上角的门,需要钥匙,然后主角原地跳跃半秒<br/>x: 门的横坐标<br/>y: 门的纵坐标<br/>needKey: true表示需要钥匙,会导致机关门打不开<br/>callback: 门完全打开后或打不开时的回调函数,可选<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
-          "!type": "fn(x: number, y: number, needKey?: bool, callback?: fn())"
+        openDoor: {
+          "!doc":
+            "开门(包括三种基础墙)<br/>例如:core.openDoor(0, 0, true, core.jumpHero); // 打开左上角的门,需要钥匙,然后主角原地跳跃半秒<br/>x: 门的横坐标<br/>y: 门的纵坐标<br/>needKey: true表示需要钥匙,会导致机关门打不开<br/>callback: 门完全打开后或打不开时的回调函数,可选<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
+          "!type": "fn(x: number, y: number, needKey?: bool, callback?: fn())",
         },
-        "setEnemy": {
-          "!doc": "设置一项敌人属性并计入存档<br/>例如:core.setEnemy('greenSlime', 'def', 0); // 把绿头怪的防御设为0<br/>id: 敌人id<br/>name: 属性的英文缩写<br/>value: 属性的新值,可选<br/>operator: 运算操作符如+=,可选<br/>prefix: 独立开关前缀,一般不需要,下同",
-          "!type": "fn(id: string, name: string, value: ?, operator?: string, prefix?: string)"
+        setEnemy: {
+          "!doc":
+            "设置一项敌人属性并计入存档<br/>例如:core.setEnemy('greenSlime', 'def', 0); // 把绿头怪的防御设为0<br/>id: 敌人id<br/>name: 属性的英文缩写<br/>value: 属性的新值,可选<br/>operator: 运算操作符如+=,可选<br/>prefix: 独立开关前缀,一般不需要,下同",
+          "!type":
+            "fn(id: string, name: string, value: ?, operator?: string, prefix?: string)",
         },
-        "setEnemyOnPoint": {
-          "!doc": "设置某个点的敌人属性。如果该点不是怪物,则忽略此函数。<br/>例如:core.setEnemyOnPoint(3, 5, null, 'atk', 100, '+='); // 仅将(3,5)点怪物的攻击力加100。",
-          "!type": "fn(x: number, y: number, floorId?: string, name: string, value: ?, operator?: string, prefix?: string)"
+        setEnemyOnPoint: {
+          "!doc":
+            "设置某个点的敌人属性。如果该点不是怪物,则忽略此函数。<br/>例如:core.setEnemyOnPoint(3, 5, null, 'atk', 100, '+='); // 仅将(3,5)点怪物的攻击力加100。",
+          "!type":
+            "fn(x: number, y: number, floorId?: string, name: string, value: ?, operator?: string, prefix?: string)",
         },
-        "resetEnemyOnPoint": {
+        resetEnemyOnPoint: {
           "!doc": "重置某个点的怪物属性",
-          "!type": "fn(x: number, y: number, floorId?: string)"
+          "!type": "fn(x: number, y: number, floorId?: string)",
         },
-        "moveEnemyOnPoint": {
+        moveEnemyOnPoint: {
           "!doc": "将某个点已经设置的敌人属性移动到其他点",
-          "!type": "fn(fromX: number, fromY: number, toX: number, toY: number, floorId?: string)"
+          "!type":
+            "fn(fromX: number, fromY: number, toX: number, toY: number, floorId?: string)",
         },
-        "autoEventExecuting": {
+        autoEventExecuting: {
           "!doc": "当前是否在执行某个自动事件",
-          "!type": "fn(symbol?: string, value?: ?) -> bool"
+          "!type": "fn(symbol?: string, value?: ?) -> bool",
         },
-        "checkAutoEvents": {
+        checkAutoEvents: {
           "!doc": "检测自动事件",
-          "!type": "fn()"
+          "!type": "fn()",
         },
-        "showGif": {
-          "!doc": "绘制一张动图或擦除所有动图<br/>例如:core.showGif(); // 擦除所有动图<br/>name: 动图文件名,可以是全塔属性中映射前的中文名<br/>x: 动图在视野中的左上角横坐标<br/>y: 动图在视野中的左上角纵坐标",
-          "!type": "fn(name?: string, x?: number, y?: number)"
+        showGif: {
+          "!doc":
+            "绘制一张动图或擦除所有动图<br/>例如:core.showGif(); // 擦除所有动图<br/>name: 动图文件名,可以是全塔属性中映射前的中文名<br/>x: 动图在视野中的左上角横坐标<br/>y: 动图在视野中的左上角纵坐标",
+          "!type": "fn(name?: string, x?: number, y?: number)",
         },
-        "unregisterEvent": {
+        unregisterEvent: {
           "!doc": "注销一个自定义事件",
-          "!type": "fn(type: string)"
+          "!type": "fn(type: string)",
         },
-        "jumpHero": {
-          "!doc": "主角跳跃,跳跃勇士。ex和ey为目标点的坐标,可以为null表示原地跳跃。time为总跳跃时间。<br/>例如:core.jumpHero(); // 主角原地跳跃半秒<br/>ex: 跳跃后的横坐标<br/>ey: 跳跃后的纵坐标<br/>time: 跳跃时长,单位为毫秒。不填视为半秒<br/>callback: 跳跃完毕后的回调函数,可选<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
-          "!type": "fn(ex?: number, ey?: number, time?: number, callback?: fn())"
+        jumpHero: {
+          "!doc":
+            "主角跳跃,跳跃勇士。ex和ey为目标点的坐标,可以为null表示原地跳跃。time为总跳跃时间。<br/>例如:core.jumpHero(); // 主角原地跳跃半秒<br/>ex: 跳跃后的横坐标<br/>ey: 跳跃后的纵坐标<br/>time: 跳跃时长,单位为毫秒。不填视为半秒<br/>callback: 跳跃完毕后的回调函数,可选<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
+          "!type":
+            "fn(ex?: number, ey?: number, time?: number, callback?: fn())",
         },
-        "closeDoor": {
-          "!doc": "关门,目标点必须为空地<br/>例如:core.closeDoor(0, 0, 'yellowWall', core.jumpHero); // 在左上角关掉一堵黄墙,然后主角原地跳跃半秒<br/>x: 横坐标<br/>y: 纵坐标<br/>id: 门的id,也可以用三种基础墙<br/>callback: 门完全关上后的回调函数,可选<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
-          "!type": "fn(x: number, y: number, id: string, callback?: fn())"
+        closeDoor: {
+          "!doc":
+            "关门,目标点必须为空地<br/>例如:core.closeDoor(0, 0, 'yellowWall', core.jumpHero); // 在左上角关掉一堵黄墙,然后主角原地跳跃半秒<br/>x: 横坐标<br/>y: 纵坐标<br/>id: 门的id,也可以用三种基础墙<br/>callback: 门完全关上后的回调函数,可选<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
+          "!type": "fn(x: number, y: number, id: string, callback?: fn())",
         },
-        "eventMoveHero": {
-          "!doc": "强制移动主角(包括后退),这个函数的作者已经看不懂这个函数了<br/>例如:core.eventMoveHero(['forward'], 125, core.jumpHero); // 主角强制前进一步,用时1/8秒,然后主角原地跳跃半秒<br/>steps: 步伐数组,注意后退时跟随者的行为会很难看<br/>time: 每步的用时,单位为毫秒。0或不填则取主角的移速,如果后者也不存在就取0.1秒<br/>callback: 移动完毕后的回调函数,可选<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
-          "!type": "fn(steps: [step], time?: number, callback?: fn())"
+        eventMoveHero: {
+          "!doc":
+            "强制移动主角(包括后退),这个函数的作者已经看不懂这个函数了<br/>例如:core.eventMoveHero(['forward'], 125, core.jumpHero); // 主角强制前进一步,用时1/8秒,然后主角原地跳跃半秒<br/>steps: 步伐数组,注意后退时跟随者的行为会很难看<br/>time: 每步的用时,单位为毫秒。0或不填则取主角的移速,如果后者也不存在就取0.1秒<br/>callback: 移动完毕后的回调函数,可选<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
+          "!type": "fn(steps: [step], time?: number, callback?: fn())",
         },
-        "changeFloor": {
-          "!doc": "场景切换<br/>例如:core.changeFloor('MT0'); // 传送到主塔0层,主角坐标和朝向不变,黑屏时间取用户定义的值<br/>floorId: 传送的目标地图id,可以填':before'和':next'分别表示楼下或楼上<br/>stair: 传送的位置<br/>heroLoc: 传送的坐标;会覆盖stair<br/>time: 传送的黑屏时间,单位为毫秒;不填为用户设置值<br/>callback: 传送的回调函数<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
-          "!type": "fn(floorId: string, stair?: string, heroLoc?: {x?: number, y?: number, direction?: string}, time?: number, callback?: fn())"
+        changeFloor: {
+          "!doc":
+            "场景切换<br/>例如:core.changeFloor('MT0'); // 传送到主塔0层,主角坐标和朝向不变,黑屏时间取用户定义的值<br/>floorId: 传送的目标地图id,可以填':before'和':next'分别表示楼下或楼上<br/>stair: 传送的位置<br/>heroLoc: 传送的坐标;会覆盖stair<br/>time: 传送的黑屏时间,单位为毫秒;不填为用户设置值<br/>callback: 传送的回调函数<br/>【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】",
+          "!type":
+            "fn(floorId: string, stair?: string, heroLoc?: {x?: number, y?: number, direction?: string}, time?: number, callback?: fn())",
         },
-        "getCommonEvent": {
+        getCommonEvent: {
           "!doc": "获得一个公共事件",
-          "!type": "fn(name: string) -> [?]"
+          "!type": "fn(name: string) -> [?]",
         },
-        "lose": {
+        lose: {
           "!doc": "游戏失败事件",
-          "!type": "fn(reason?: string)"
+          "!type": "fn(reason?: string)",
         },
-        "gameOver": {
-          "!doc": "游戏结束<br/>例如:core.gameOver(); // 游戏失败<br/>ending: 结局名,省略表示失败<br/>fromReplay: true表示在播放录像,可选<br/>norank: true表示不计入榜单,可选",
-          "!type": "fn(ending?: string, fromReplay?: bool, norank?: bool)"
+        gameOver: {
+          "!doc":
+            "游戏结束<br/>例如:core.gameOver(); // 游戏失败<br/>ending: 结局名,省略表示失败<br/>fromReplay: true表示在播放录像,可选<br/>norank: true表示不计入榜单,可选",
+          "!type": "fn(ending?: string, fromReplay?: bool, norank?: bool)",
         },
-        "useFly": {
+        useFly: {
           "!doc": "点击楼层传送器时的打开操作",
-          "!type": "fn(fromUserAction?: bool)"
+          "!type": "fn(fromUserAction?: bool)",
+        },
+        tryUseItem: {
+          "!doc":
+            "尝试使用一个道具<br/>例如:core.tryUseItem('pickaxe'); // 尝试使用破墙镐<br/>itemId: 道具id,其中敌人手册、传送器和飞行器会被特殊处理",
+          "!type": "fn(itemId: string)",
         },
-        "tryUseItem": {
-          "!doc": "尝试使用一个道具<br/>例如:core.tryUseItem('pickaxe'); // 尝试使用破墙镐<br/>itemId: 道具id,其中敌人手册、传送器和飞行器会被特殊处理",
-          "!type": "fn(itemId: string)"
-        }
       },
-      "plugin": {
+      plugin: {
         "!doc": "插件编写中内置了一些常用的插件。",
-        "drawLight": {
-          "!doc": "绘制一段灯光效果<br/>name:必填,要绘制到的画布名;可以是一个系统画布,或者是个自定义画布;如果不存在则创建<br/>color:可选,只能是一个0~1之间的数,为不透明度的值。不填则默认为0.9。<br/>lights:可选,一个数组,定义了每个独立的灯光。其中每一项是三元组 [x,y,r] x和y分别为该灯光的横纵坐标,r为该灯光的半径。<br/>lightDec:可选,0到1之间,光从多少百分比才开始衰减(在此范围内保持全亮),不设置默认为0。比如lightDec为0.5代表,每个灯光部分内圈50%的范围全亮,50%以后才开始快速衰减。<br/>例如:core.plugin.drawLight('test', 0.2, [[25,11,46,0.1]]); // 创建一个test图层,不透明度0.2,其中在(25,11)点存在一个半径为46的灯光效果,灯光中心不透明度0.1。<br/>core.plugin.drawLight('test2', 0.9, [[25,11,46],[105,121,88],[301,221,106]]); // 创建test2图层,且存在三个灯光效果,分别是中心(25,11)半径46,中心(105,121)半径88,中心(301,221)半径106。",
-          "!type": "fn(name: string|CanvasRenderingContext2D, color?: number, lights?: [[number]], lightDec?: number)"
+        drawLight: {
+          "!doc":
+            "绘制一段灯光效果<br/>name:必填,要绘制到的画布名;可以是一个系统画布,或者是个自定义画布;如果不存在则创建<br/>color:可选,只能是一个0~1之间的数,为不透明度的值。不填则默认为0.9。<br/>lights:可选,一个数组,定义了每个独立的灯光。其中每一项是三元组 [x,y,r] x和y分别为该灯光的横纵坐标,r为该灯光的半径。<br/>lightDec:可选,0到1之间,光从多少百分比才开始衰减(在此范围内保持全亮),不设置默认为0。比如lightDec为0.5代表,每个灯光部分内圈50%的范围全亮,50%以后才开始快速衰减。<br/>例如:core.plugin.drawLight('test', 0.2, [[25,11,46,0.1]]); // 创建一个test图层,不透明度0.2,其中在(25,11)点存在一个半径为46的灯光效果,灯光中心不透明度0.1。<br/>core.plugin.drawLight('test2', 0.9, [[25,11,46],[105,121,88],[301,221,106]]); // 创建test2图层,且存在三个灯光效果,分别是中心(25,11)半径46,中心(105,121)半径88,中心(301,221)半径106。",
+          "!type":
+            "fn(name: string|CanvasRenderingContext2D, color?: number, lights?: [[number]], lightDec?: number)",
         },
-        "openShop": {
-          "!doc": "打开一个全局商店<br/>shopId: 要开启的商店ID<br/>noRoute: 打开行为是否不计入录像",
-          "!type": "fn(shopId: string, noRoute?: bool)"
+        openShop: {
+          "!doc":
+            "打开一个全局商店<br/>shopId: 要开启的商店ID<br/>noRoute: 打开行为是否不计入录像",
+          "!type": "fn(shopId: string, noRoute?: bool)",
         },
-        "isShopVisited": {
+        isShopVisited: {
           "!doc": "某个全局商店是否被访问过",
-          "!type": "fn(id: string) -> bool"
+          "!type": "fn(id: string) -> bool",
         },
-        "listShopIds": {
+        listShopIds: {
           "!doc": "列出所有应当显示的快捷商店列表",
-          "!type": "fn() -> [string]"
+          "!type": "fn() -> [string]",
         },
-        "canOpenShop": {
+        canOpenShop: {
           "!doc": "当前能否打开某个商店",
-          "!type": "fn(id: string) -> bool"
+          "!type": "fn(id: string) -> bool",
         },
-        "setShopVisited": {
+        setShopVisited: {
           "!doc": "设置某个商店的访问状态",
-          "!type": "fn(id: string, visited?: bool)"
+          "!type": "fn(id: string, visited?: bool)",
         },
-        "canUseQuickShop": {
-          "!doc": "当前能否使用某个快捷商店<br/>如果返回一个字符串,则代表不能,返回的字符串作为不能的提示;返回null表示可以使用",
-          "!type": "fn(id: string) -> string"
+        canUseQuickShop: {
+          "!doc":
+            "当前能否使用某个快捷商店<br/>如果返回一个字符串,则代表不能,返回的字符串作为不能的提示;返回null表示可以使用",
+          "!type": "fn(id: string) -> string",
         },
-        "removeMaps": {
-          "!doc": "删除某一些楼层;删除后不会存入存档,不可浏览地图也不可飞到。<br/>fromId: 开始删除的楼层ID<br/>toId: 删除到的楼层编号;可选,不填则视为fromId<br/>例如:core.removeMaps(\"MT1\", \"MT300\") 删除MT1~MT300之间的全部层<br/>core.removeMaps(\"MT10\") 只删除MT10层",
-          "!type": "fn(fromId: string, toId?: string)"
+        removeMaps: {
+          "!doc":
+            '删除某一些楼层;删除后不会存入存档,不可浏览地图也不可飞到。<br/>fromId: 开始删除的楼层ID<br/>toId: 删除到的楼层编号;可选,不填则视为fromId<br/>例如:core.removeMaps("MT1", "MT300") 删除MT1~MT300之间的全部层<br/>core.removeMaps("MT10") 只删除MT10层',
+          "!type": "fn(fromId: string, toId?: string)",
         },
-        "resumeMaps": {
-          "!doc": "恢复某一些被删除楼层。<br/>fromId: 开始恢复的楼层ID<br/>toId: 恢复到的楼层编号;可选,不填则视为fromId<br/>例如:core.resumeMaps(\"MT1\", \"MT300\") 恢复MT1~MT300之间的全部层<br/>core.resumeMaps(\"MT10\") 只删恢复MT10层",
-          "!type": "fn(fromId: string, toId?: string)"
+        resumeMaps: {
+          "!doc":
+            '恢复某一些被删除楼层。<br/>fromId: 开始恢复的楼层ID<br/>toId: 恢复到的楼层编号;可选,不填则视为fromId<br/>例如:core.resumeMaps("MT1", "MT300") 恢复MT1~MT300之间的全部层<br/>core.resumeMaps("MT10") 只删恢复MT10层',
+          "!type": "fn(fromId: string, toId?: string)",
         },
-        "autoRemoveMaps": {
+        autoRemoveMaps: {
           "!doc": "根据楼层分区信息自动砍层与恢复",
-          "!type": "fn(floorId: string)"
+          "!type": "fn(floorId: string)",
         },
-        "openItemShop": {
+        openItemShop: {
           "!doc": "打开一个道具商店",
-          "!type": "fn(itemShopId: string)"
-        }
-      }
+          "!type": "fn(itemShopId: string)",
+        },
+      },
     },
-    "lzw_encode": {
+    lzw_encode: {
       "!doc": "LZW压缩算法",
       "!url": "https://gist.github.com/revolunet/843889",
-      "!type": "fn(s: string) -> string"
+      "!type": "fn(s: string) -> string",
     },
-    "lzw_decode": {
+    lzw_decode: {
       "!doc": "LZW解压缩算法",
       "!url": "https://gist.github.com/revolunet/843889",
-      "!type": "fn(s: string) -> string"
+      "!type": "fn(s: string) -> string",
     },
-    "hero": {
+    hero: {
       "!type": "heroStatus",
       "!doc": "勇士信息,为 core.status.hero 的简写",
     },
-    "flags": {
+    flags: {
       "!type": "flag",
       "!doc": "游戏中用到的变量,为 core.status.hero.flags 的简写",
-    }
-  }
-];
\ No newline at end of file
+    },
+  },
+];
diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4
index 10b3ad5..b4a2a2f 100644
--- a/_server/MotaAction.g4
+++ b/_server/MotaAction.g4
@@ -567,7 +567,7 @@ doorInfo_m
 
 /* doorInfo_m
 tooltip : 开门信息
-default : [160, 'door.mp3', 'door.mp3']
+default : [160, 'door.opus', 'door.opus']
 helpUrl : /_docs/#/instruction
 EvalString_0 = EvalString_0 && (', "openSound": "' + EvalString_0 + '"');
 EvalString_1 = EvalString_1 && (', "closeSound": "' + EvalString_1 + '"');
@@ -837,6 +837,14 @@ action
     |   insert_1_s
     |   insert_2_s
     |   exit_s
+    |   setanimate_s
+    |   deleteanimate_s
+    |   playanimate_s
+    |   clearanimate_s
+    |   animateloop_s
+    |   animatemove_s
+    |   animatereverse_s
+    |   animatepause_s
     |   setBlock_s
     |   turnBlock_s
     |   showFloorImg_s
@@ -854,6 +862,8 @@ action
     |   waitAsync_s
     |   stopAsync_s
     |   op_s
+    |   setmusics_s
+    |   introAndLoop_s
     |   battle_s
     |   battle_1_s
     |   openDoor_s
@@ -871,11 +881,11 @@ action
     |   disableShop_s
     |   follow_s
     |   unfollow_s
-    |   setanimate_s
-    |   deleteanimate_s
-    |   playanimate_s
-    |   clearanimate_s
     |   animate_s
+    |   moveAnimate_s
+    |   animateResize_s
+    |   pauseAnimate_s
+    |   remuseAnimate_s
     |   animate_1_s
     |   stopAnimate_s
     |   vibrate_s
@@ -903,6 +913,8 @@ action
     |   resumeBgm_s
     |   loadBgm_s
     |   freeBgm_s
+    |   drawbackground_s
+    |   clearbackground_s
     |   playSound_s
     |   playSound_1_s
     |   stopSound_s
@@ -963,8 +975,7 @@ action
     |   animationDrawable_s
     |   over_s
     |   overlist_s
-    |   playStereo_s
-    |   moveStereo_s
+    |   cgtextList_s
     |   pass_s
     ;
 
@@ -1071,6 +1082,98 @@ if (block.isCollapsed() || !block.isEnabled() || pos || Int_0 || Bool_0) {
 return code+',\n';
 */;
 
+
+animationDrawable_s
+    :   '帧动画(剧情画面)' '总显示帧数' IntString '底色' ColorString? Colour '底色不透明度' IntString? BGNL?Newline
+        '图片序列(同一帧后面覆盖先前的,默认起始帧为0,结束帧为最后一帧)'BGNL?Newline
+        '(剪裁区域不填写为全图,绘制区域不填写为全画面)'BGNL?Newline
+        '(不透明度100为不透明,默认为不透明,结束不透明度默认与开始透明度相同)'BGNL?Newline
+        animationDrawableimage+? Newline
+        '音频序列(到达对应帧进行播放)'BGNL?Newline
+        animationDrawablesound+? Newline
+    
+
+/* animationDrawable_s
+tooltip : animationDrawable:帧动画图片叠加
+helpUrl : /_docs/#/instruction
+default : [30,"0, 0, 0",'rgb(0, 0, 0)',""]
+allImages : ['EvalString_0']
+colour : this.imageColor
+if (IntString_1&&(IntString_1 < 0||IntString_1>100)) throw new Error('透明度范围为0-100,0为透明,100为不透明,不填默认为不透明')
+
+ColorString_0 = ColorString_0 ? (', "color": ['+ColorString_0+']') : '';
+IntString_1 = IntString_1 ? (', "globalAlpha": '+IntString_1+'') : '';
+var imageList=animationDrawableimage_0?',"imageList": [\n'+animationDrawableimage_0.slice(0,-1)+'\n]':''
+var soundList=animationDrawablesound_0?',"soundList": [\n'+animationDrawablesound_0.slice(0,-1)+'\n]':''
+var code = '{"type": "animationDrawable", "allFarme": '+IntString_0+ColorString_0+IntString_1+imageList+soundList+'},\n';
+return code;
+*/;
+
+animationDrawableList
+    : animationDrawableimage
+    | animationDrawablesound
+    | animationDrawabletextEmpty;
+
+animationDrawableimage
+    : '图片' EvalString? '起始帧' IntString? '起始不透明度'  IntString? BGNL? Newline 
+    '剪裁坐标cx' IntString? 'cy' IntString? '宽' IntString? '高' IntString? '绘制坐标x'IntString? 'y' IntString? '宽' IntString? '高' IntString?'角度'IntString? BGNL? Newline
+    '结束帧' IntString? '结束不透明度'  IntString? '剪裁坐标cx' IntString? 'cy' IntString? '宽' IntString? '高' IntString? '绘制坐标x'IntString? 'y' IntString? '宽' IntString? '高' IntString?'角度'IntString? Newline
+/* animationDrawableimage
+tooltip : 帧动画图片列表
+helpUrl : /_docs/#/instruction
+default : ["","","","","","","","","","","","","","","","","","","","","","",""]
+colour : this.subColor
+allImages : ['EvalString_0']
+if (IntString_1&&(IntString_1 < 0||IntString_1>100)) throw new Error('不透明度范围为0-100,0为透明,100为不透明,不填默认为不透明')
+if (IntString_11&&(IntString_12 < 0||IntString_12>100)) throw new Error('不透明度范围为0-100,0为透明,100为不透明,不填默认为不透明')
+IntString_0 = IntString_0 ? (', "beforefarme": '+IntString_0+'') : '';
+IntString_1 = IntString_1 ? (', "globalAlpha": '+IntString_1+'') : '';
+IntString_2 = IntString_2 ? (', "cx": '+IntString_2+'') : '';
+IntString_3 = IntString_3 ? (', "cy": '+IntString_3+'') : '';
+IntString_4 = IntString_4 ? (', "cw": '+IntString_4+'') : '';
+IntString_5 = IntString_5 ? (', "ch": '+IntString_5+'') : '';
+IntString_6 = IntString_6 ? (', "x": '+IntString_6+'') : '';
+IntString_7 = IntString_7 ? (', "y": '+IntString_7+'') : '';
+IntString_8 = IntString_8 ? (', "w": '+IntString_8+'') : '';
+IntString_9 = IntString_9 ? (', "h": '+IntString_9+'') : '';
+
+IntString_10 = IntString_10 ? (', "angle": '+IntString_10+'') : '';
+IntString_11 = IntString_11 ? (', "afterfarme": '+IntString_11+'') : '';
+IntString_12 = IntString_12 ? (', "aglobalAlpha": '+IntString_12+'') : '';
+IntString_13 = IntString_13 ? (', "acx": '+IntString_13+'') : '';
+IntString_14 = IntString_14 ? (', "acy": '+IntString_14+'') : '';
+IntString_15 = IntString_15 ? (', "acw": '+IntString_15+'') : '';
+IntString_16 = IntString_16 ? (', "ach": '+IntString_16+'') : '';
+IntString_17 = IntString_17 ?  (', "ax": '+IntString_17+'')  : '';
+IntString_18 = IntString_18 ? (', "ay": '+IntString_18+'') : '';
+IntString_19 = IntString_19 ? (', "aw": '+IntString_19+'') : '';
+IntString_20 = IntString_20 ? (', "ah": '+IntString_20+'') : '';
+IntString_21 = IntString_21 ? (', "aangle": '+IntString_21+'') : '';
+return '{ "image":"'+EvalString_0+'"'+IntString_0+IntString_1+IntString_2+IntString_3+IntString_4+IntString_5+IntString_6+IntString_7+IntString_8+IntString_9+IntString_10+IntString_11+IntString_12+IntString_13+IntString_14+IntString_15+IntString_16+IntString_17+IntString_18+IntString_19+IntString_20+IntString_21+'},'
+*/;
+
+animationDrawablesound
+    : '音效' EvalString? '起始帧' IntString '是否停止其他音效'Bool?  Newline 
+ 
+/* animationDrawablesound
+tooltip : 帧动画配音
+helpUrl : /_docs/#/instruction
+default : ["",0,false]
+colour : this.subColor
+allSounds : ['EvalString_0']
+
+return '{ "sound":"'+EvalString_0+'","startfarme":'+IntString_0+',"stopbefore":'+Bool_0+'},'
+*/;
+
+animationDrawabletextEmpty
+    :   Newline
+    
+/* animationDrawabletextEmpty
+var code = [];
+return code;
+*/;
+
+
 over_s
     :   '旁白文字' ':' EvalString BGNL? Newline
     '背景' EvalString? '回忆滤镜' Bool? '持续帧数' Int? '渐入渐出帧数' Int? '音频文件' EvalString? BGNL? Newline
@@ -1123,22 +1226,32 @@ overtextEmpty
 var code = [];
 return code;
 */;
+cgtextList_s
+    :    '切换剧情文本库' EvalString  Newline
+    
+
+/* cgtextList_s
+tooltip : cgtextList:设置cg剧情文本库
+helpUrl : /_docs/#/instruction
+default : ["chapter0"]
+var code = '{"type": "cgtextList", "textList":"'+EvalString_0+'"},\n';
+return code;
+*/;
 
 cgtext_s
-    :    '背景' EvalString? '回忆滤镜' Bool? '移除对话框' Bool? '头像' EvalString?'名字' EvalString?'坐标PX' Number'打字间隔' Int? BGNL? Newline
-     '自动等待时长' Int '音频文件(需在全塔属性——使用音效注册)'EvalString? BGNL? Newline
-     EvalString? BGNL? Newline textcgDrawingList+? Newline
+    : '剧情cg文本 移除对话框' Bool? '剧情库序列' Int '头像' EvalString?'坐标PX' Number'打字间隔' Int? BGNL? Newline
+     '自动等待时长' Int  BGNL? Newline
+      textcgDrawingList+? Newline
     
 
 /* cgtext_s
 tooltip : cgtext:显示一段包含cg的文字(剧情)
 helpUrl : /_docs/#/instruction
-allImages : ['EvalString_0','EvalString_1']
-allSounds : ['EvalString_3']
-default : ["bg_5043.webp",false,"face_050445.webp",false,"菲奥奈",-300,0,2000,"","这句话显示在对话框内",[{ "name":"tati_050145a.webp" , "px": 100,"filter":false }]]
-var head ='{ "name": "'+EvalString_1+'", "px": '+Number_0+' }'
+allImages : ['EvalString_0']
+default : [false,0,"face_050445.webp",-300,0,2000,"","这句话显示在对话框内",[{ "name":"tati_050145a.webp" , "px": 100,"filter":false }]]
+var head ='{ "name": "'+EvalString_0+'", "px": '+Number_0+' }'
 var list=',"bodyList": [\n'+textcgDrawingList_0.slice(0,-1)+'\n]'
-var code = '{"type": "cgtext", "bg":"'+EvalString_0+'","memory":'+Bool_0+',"WindowSkin":'+Bool_1+',"head":'+head+' ,"name":"'+EvalString_2+'","time":'+Int_0+',"wait":'+Int_1+',"sound":"'+EvalString_3+'","text": "'+EvalString_4+'"'+list+' },\n';
+var code = '{"type": "cgtext","WindowSkin":'+Bool_0+',"head":'+head+' ,"index":"'+Int_0+'","time":'+Int_1+',"wait":'+Int_2+list+' },\n';
 return code;
 */;
 textcgDrawingList
@@ -1955,17 +2068,46 @@ var code = '{"type": "changebg", "img1": "'+EvalString_0+'","memory1":'+Bool_0+'
 return code;
 */;
 
+drawbackground_s
+    :   '绘制背景' EvalString? '回忆滤镜' Bool? Newline
+    
+
+/* drawbackground_s
+tooltip : drawbackground 绘制剧情背景
+helpUrl : /_docs/#/instruction
+default : ["",false]
+colour : this.soundColor
+allImages : ['EvalString_0']
+var code = '{"type": "drawbackground", "image": "'+EvalString_0+'","memory":'+Bool_0+'},\n';
+return code;
+*/;
+
+clearbackground_s
+    :   '清除cg背景' Newline
+    
+
+/* clearbackground_s
+tooltip : clearbackground: 剧情背景清除
+helpUrl : /_docs/#/instruction
+default : []
+colour : this.soundColor
+
+var code = '{"type": "clearbackground"},\n';
+return code;
+*/;
+
 drawWarning_s
-    :   '警告坐标x' PosString 'y' PosString '文字大小'Int '警告内容' EvalString? '副标题' EvalString? '不播放音效' Bool? Newline
+    :   '警告坐标x' PosString 'y' PosString '缩放倍率'EvalString '文字大小'Int '警告内容' EvalString? '副标题' EvalString? '不播放音效' Bool? Newline
     
 
 /* drawWarning_s
 tooltip : drawWarning: 绘制warning警告并拉进镜头,本事件为异步事件,下一事件将在3100ms后执行
 helpUrl : /_docs/#/instruction
-default : [0, 0,24,"这里是提示内容","绿色史莱姆",false]
+default : [0, 0,2,24,"这里是提示内容","绿色史莱姆",false]
 colour : this.soundColor
 selectPoint : ["PosString_0", "PosString_1"]
-var code = '{"type": "drawWarning", "x": '+PosString_0+', "y": '+PosString_1+',"size":'+Int_0+',"text": "'+EvalString_0+'", "text2": "'+EvalString_1+'", "warning": '+Bool_0+'},\n';
+if(!EvalString_1||!/^(0|([1-9][0-9]*))(\.[\d]+)?$/.test(EvalString_0))throw new Error("此项仅能填写小数或整数");
+var code = '{"type": "drawWarning", "x": '+PosString_0+', "y": '+PosString_1+',"large":'+EvalString_0+',"size":'+Int_0+',"text": "'+EvalString_1+'", "text2": "'+EvalString_2+'", "warning": '+Bool_0+'},\n';
 return code;
 */;
 
@@ -2230,6 +2372,69 @@ var code = '{"type": "vibrate", "direction": "'+Vibrate_List_0+'", "time": '+Int
 return code;
 */;
 
+animate_s
+    :   '显示动画' EvalString '位置' 'x' PosString? 'y' PosString? '相对窗口坐标' Bool '不等待执行完毕' Bool Newline
+    
+
+/* animate_s
+tooltip : animate:显示动画,位置填hero或者1,2形式的位置,或者不填代表当前事件点
+helpUrl : /_docs/#/instruction
+default : ["zone","","",false,false]
+allAnimates : ['EvalString_0']
+material : ["./project/animates/", "EvalString_0"]
+menu : [['选择位置', 'editor_blockly.selectPoint(block, ["PosString_0", "PosString_1"])']]
+colour : this.soundColor
+var loc = PosString_0&&PosString_1?(', "loc": ['+PosString_0+','+PosString_1+']'):'';
+Bool_0 = Bool_0?', "alignWindow": true':'';
+Bool_1 = Bool_1?', "async": true':'';
+var code = '{"type": "animate", "name": "'+EvalString_0+'"'+loc+Bool_0+Bool_1+'},\n';
+return code;
+*/;
+
+animate_1_s
+    :   '显示动画并跟随角色' EvalString '不等待执行完毕' Bool Newline
+    
+
+/* animate_1_s
+tooltip : animate:显示动画并跟随角色
+helpUrl : /_docs/#/instruction
+default : ["zone",false]
+allAnimates : ['EvalString_0']
+material : ["./project/animates/", "EvalString_0"]
+colour : this.soundColor
+Bool_0 = Bool_0?', "async": true':'';
+var code = '{"type": "animate", "name": "'+EvalString_0+'", "loc": "hero"'+Bool_0+'},\n';
+return code;
+*/;
+
+
+animatereverse_s
+    :   '调整正在播放的帧动画/特效  编号'IntString?'倒放'Bool'(不填编号为对所有正在进行的帧动画/特效进行操作)'
+
+/* animatereverse_s
+tooltip : animatereverse:调整正在播放的帧动画(倒放)
+helpUrl : /_docs/#/instruction
+default : ["",false]
+colour : this.imageColor
+IntString_0 = IntString_0 ? (', "id": '+IntString_0+'') : ''
+var code = '{"type": "animatereverse"'+IntString_0+',"reverse":'+Bool_0+'},\n';
+return code;
+*/;
+
+animatepause_s
+    :   '调整正在播放的帧动画/特效  编号'IntString?'暂停'Bool'(不填编号为对所有正在进行的帧动画/特效进行操作)'
+
+/* animatepause_s
+tooltip :  animatereverse:调整正在播放的帧动画(暂停)
+helpUrl : /_docs/#/instruction
+default : ["",false]
+colour : this.imageColor
+IntString_0 = IntString_0 ? (', "id": '+IntString_0+'') : ''
+var code = '{"type": "animatepause"'+IntString_0+',"pause":'+Bool_0+'},\n';
+return code;
+*/;
+
+
 setanimate_s
     :   '新建 帧动画/特效' '名称' EvalString '参照点偏移像素x' IntString? 'y' IntString? '动画大小 宽' IntString '高' IntString '总帧数' IntString BGNL?Newline
         '图片序列(同一帧后面覆盖先前的,默认起始帧为0,结束帧为最后一帧)'BGNL?Newline
@@ -2331,82 +2536,148 @@ return code;
 */;
 
 playanimate_s
-    :   '播放 帧动画/特效' '名称' EvalString '像素x'  IntString? 'y' IntString? '跟随勇士' Bool 'x方向缩放' EvalString? 'y方向缩放'EvalString?  Newline
+    :   '播放 帧动画/特效' '名称' EvalString '编号'IntString?'像素x'  IntString? 'y' IntString? '跟随勇士' Bool 'x方向缩放' EvalString? 'y方向缩放'EvalString?'循环'Bool'倒放'Bool  Newline
 
 /* playanimate_s
 tooltip : playanimate:播放帧动画,选择跟随勇士后x、y将失效改为勇士中心坐标
 helpUrl : /_docs/#/instruction
-default : ["zone","","",false,"",""]
-
+default : ["zone","","","",false,1,1,false,false]
+previewBlock : true
 colour : this.imageColor
-IntString_0 = IntString_0 ? (', "x": '+IntString_0+'') : '';
-IntString_1 = IntString_1 ? (', "y": '+IntString_1+'') : '';
+IntString_0 = IntString_0 ? (', "id": '+IntString_0+'') : '';
+IntString_1 = IntString_1 ? (', "x": '+IntString_1+'') : '';
+IntString_2 = IntString_2 ? (', "y": '+IntString_2+'') : '';
 if(EvalString_1&&!/^(0|([1-9][0-9]*))(\.[\d]+)?$/.test(EvalString_1))throw new Error("此项仅能填写小数、整数或不填");
 if(EvalString_2&&!/^(0|([1-9][0-9]*))(\.[\d]+)?$/.test(EvalString_2))throw new Error("此项仅能填写小数、整数或不填");
 EvalString_1 = EvalString_1 ? (', "scalex": '+EvalString_1+'') : '';
 EvalString_2 = EvalString_2 ? (', "scaley": '+EvalString_2+'') : '';
-var code = '{"type": "playanimate", "name": "'+EvalString_0+'"'+IntString_0+IntString_1+',"hero":'+Bool_0+EvalString_1+EvalString_2+'},\n';
+var code = '{"type": "playanimate", "name": "'+EvalString_0+'"'+IntString_0+IntString_1+IntString_2+',"hero":'+Bool_0+EvalString_1+EvalString_2+',"loop":'+Bool_1+',"reverse":'+Bool_2+'},\n';
 return code;
 */;
 
 clearanimate_s
-    :   '清空正在播放的帧动画/特效'
+    :   '停止正在播放的帧动画/特效  编号'IntString?'(不填编号为对所有正在进行的帧动画/特效进行操作)'
 
 /* clearanimate_s
 tooltip : clearanimate:清空正在播放的帧动画
 helpUrl : /_docs/#/instruction
-
+default : [""]
 colour : this.imageColor
-
-var code = '{"type": "clearanimate"},\n';
+IntString_0 = IntString_0 ? (', "id": '+IntString_0+'') : '';
+var code = '{"type": "clearanimate"'+IntString_0+'},\n';
 return code;
 */;
 
-animate_s
-    :   '显示动画' EvalString '位置' 'x' PosString? 'y' PosString? '相对窗口坐标' Bool '不等待执行完毕' Bool Newline
-    
+animateloop_s
+    :   '调整正在播放的帧动画/特效  编号'IntString?'循环'Bool '(不填编号为对所有正在进行的帧动画/特效进行操作)'
 
-/* animate_s
-tooltip : animate:显示动画,位置填hero或者1,2形式的位置,或者不填代表当前事件点
+/* animateloop_s
+tooltip : animateloop:调整正在播放的帧动画(循环)
 helpUrl : /_docs/#/instruction
-default : ["zone","","",false,false]
-allAnimates : ['EvalString_0']
-material : ["./project/animates/", "EvalString_0"]
-menu : [['选择位置', 'editor_blockly.selectPoint(block, ["PosString_0", "PosString_1"])']]
-colour : this.soundColor
-var loc = PosString_0&&PosString_1?(', "loc": ['+PosString_0+','+PosString_1+']'):'';
-Bool_0 = Bool_0?', "alignWindow": true':'';
-Bool_1 = Bool_1?', "async": true':'';
-var code = '{"type": "animate", "name": "'+EvalString_0+'"'+loc+Bool_0+Bool_1+'},\n';
+default : ["",false]
+colour : this.imageColor
+IntString_0 = IntString_0 ? (', "id": '+IntString_0+'') : ''
+var code = '{"type": "animateloop"'+IntString_0+',"loop":'+Bool_0+'},\n';
 return code;
 */;
 
-animate_1_s
-    :   '显示动画并跟随角色' EvalString '不等待执行完毕' Bool Newline
+animatemove_s
+    :   '移动正在播放的帧动画/特效  编号'IntString'目标像素x'PosString'y'PosString Absolute_List'移动时长'PosString'移动模式'MoveMode2_List? '(仅可对有编号的非跟随勇士帧动画/特效使用)'
+
+/* animatemove_s
+tooltip : animateloop:调整正在播放的帧动画(循环)
+helpUrl : /_docs/#/instruction
+default : [0,0,0,false,1000,'']
+previewBlock : true
+colour : this.imageColor
+IntString_0 = IntString_0 ? (', "id": '+IntString_0+'') : ''
+MoveMode2_List_0=MoveMode2_List_0?(', "style": "'+MoveMode2_List_0+'"') : ''
+var code = '{"type": "animatemove"'+IntString_0+',"px":'+PosString_0+',"py":'+PosString_1+',"relative":'+Absolute_List_0+',"time":'+PosString_2+MoveMode2_List_0+'},\n';
+return code;
+*/;
+
+
+moveAnimate_s
+    :   '移动正在播放的帧动画/特效  编号'IntString'目标像素x'PosString'y'PosString Absolute_List'移动时长'PosString'移动模式'MoveMode2_List? '(仅可对有编号的非跟随勇士动画使用)'
+
+/* moveAnimate_s
+tooltip : animateloop:调整正在播放的帧动画(循环)
+helpUrl : /_docs/#/instruction
+default : [0,0,0,false,1000,'']
+previewBlock : true
+colour : this.soundColor
+IntString_0 = IntString_0 ? (', "id": '+IntString_0+'') : ''
+MoveMode2_List_0=MoveMode2_List_0?(', "style": "'+MoveMode2_List_0+'"') : ''
+var code = '{"type": "moveAnimate"'+IntString_0+',"px":'+PosString_0+',"py":'+PosString_1+',"relative":'+Absolute_List_0+',"time":'+PosString_2+MoveMode2_List_0+'},\n';
+return code;
+*/;
+
+
+animateResize_s
+ :   '显示动画(60Fps)' EvalString '编号'PosString? '中心像素' 'x' PosString? 'y' PosString?'以勇士为中心' Bool'倒放' Bool'循环'Bool'不等待执行完毕' Bool Newline
     
 
-/* animate_1_s
-tooltip : animate:显示动画并跟随角色
+/* animateResize_s
+tooltip : animateResize:显示动画并选择是否以勇士为中心及倒放(以勇士为中心时,中心像素坐标无效)
 helpUrl : /_docs/#/instruction
-default : ["zone",false]
+default : ["zone","","","",false,false,false,false]
 allAnimates : ['EvalString_0']
+previewBlock : true
 material : ["./project/animates/", "EvalString_0"]
 colour : this.soundColor
-Bool_0 = Bool_0?', "async": true':'';
-var code = '{"type": "animate", "name": "'+EvalString_0+'", "loc": "hero"'+Bool_0+'},\n';
+
+PosString_0 = PosString_0?', "id":'+PosString_0:'';
+Bool_0 = Bool_0?', "hero": true':'';
+if(!Bool_0){
+    if(PosString_1===""||PosString_2==="")throw new Error("中心像素坐标或以勇士为中心必须填写一项");
+    
+    Bool_0=',"centerX":'+PosString_1+', "centerY":'+PosString_2
+}
+if(Bool_2&&!Bool_3 )throw new Error("循环必须与不等待执行完毕同时开启,否则将陷入死循环")
+Bool_1 = Bool_1?', "reverse": true':'';
+Bool_2 = Bool_2?', "loop": true':'';
+Bool_3 = Bool_3?', "async": true':'';
+var code = '{"type": "animateResize", "name": "'+EvalString_0+'"'+PosString_0+Bool_0+Bool_1+Bool_2+Bool_3+'},\n';
+return code;
+*/;
+
+pauseAnimate_s
+ :   '暂停动画编号'PosString?'(不填写编号为暂停所有)' Newline
+
+/* pauseAnimate_s
+tooltip : pauseAnimate:暂停动画(不填写编号为暂停所有)
+helpUrl : /_docs/#/instruction
+default : ['']
+colour : this.soundColor
+PosString_0 = PosString_0?', "id":'+PosString_0:'';
+var code = '{"type": "pauseAnimate"'+PosString_0+'},\n';
+return code;
+*/;
+
+remuseAnimate_s
+ :   '继续动画编号'PosString?'(不填写编号为继续所有)'  Newline
+
+/* remuseAnimate_s
+tooltip : remuseAnimate:继续动画(不填写编号为继续所有)
+helpUrl : /_docs/#/instruction
+default : ['']
+colour : this.soundColor
+PosString_0 = PosString_0?', "id":'+PosString_0:'';
+var code = '{"type": "remuseAnimate"'+PosString_0+'},\n';
 return code;
 */;
 
 stopAnimate_s
-    :   '停止所有动画' '执行动画回调' Bool Newline
+    :   '停止动画编号'PosString?'(不填写编号为继续所有)' '执行动画回调' Bool Newline
 
 /* stopAnimate_s
-tooltip : stopAnimate:停止所有动画
+tooltip : stopAnimate:停止动画(不填写编号为继续所有)
 helpUrl : /_docs/#/instruction
-default : [false]
-colour : this.imageColor
+default : ["",false]
+colour : this.soundColor
+PosString_0 = PosString_0?', "id":'+PosString_0:'';
 Bool_0 = Bool_0?', "doCallback": true':'';
-var code = '{"type": "stopAnimate"'+Bool_0+'},\n';
+var code = '{"type": "stopAnimate"'+PosString_0+Bool_0+'},\n';
 return code;
 */;
 
@@ -2612,6 +2883,23 @@ var code = '{"type": "setq"'+IdString_0+'},\n';
 return code;
 */;
 
+introAndLoop_s
+    :   '前奏音乐文件'EvalString? '前奏音乐文件播放时长(可填小数,单位为秒)'EvalString'循环音乐文件'EvalString?  Newline
+
+/* introAndLoop_s
+tooltip : introAndLoop:设置任务目标楼层(显示在小地图)
+helpUrl : /_docs/#/instruction
+default : ["",1,""]
+allBgms : ['EvalString_0','EvalString_2']
+colour :this.imageColor
+if(EvalString_1&&!/^(0|([1-9][0-9]*))(\.[\d]+)?$/.test(EvalString_1))throw new Error("此项仅能填写小数或整数,单位为秒");
+EvalString_0 = EvalString_0 ? (', "intro": "'+EvalString_0+'"') : '';
+EvalString_1= EvalString_1 ? (', "time": '+EvalString_1+'') : '';
+EvalString_2 = EvalString_2 ? (', "loop": "'+EvalString_2+'"') : '';
+var code = '{"type": "introAndLoop"'+EvalString_0+EvalString_1+EvalString_2+'},\n';
+return code;
+*/;
+
 
 setcgs_s
     :   'cg回廊获取cg 文件名'EvalString?'不填为清空cg获取记录'  Newline
@@ -2621,12 +2909,26 @@ tooltip : setcgs:cg回廊中的cg获取
 helpUrl : /_docs/#/instruction
 default : [""]
 allImages : ['EvalString_0']
-colour : this.imageColor
+colour : this.soundColor
 EvalString_0 = EvalString_0 ? (', "img": "'+EvalString_0+'"') : '';
 var code = '{"type": "setcgs"'+EvalString_0+'},\n';
 return code;
 */;
 
+setmusics_s
+    :   '音乐鉴赏music 文件名'EvalString?'不填为清空music获取记录'  Newline
+
+/* setmusics_s
+tooltip : setmusics:音乐鉴赏中的隐藏music获取
+helpUrl : /_docs/#/instruction
+default : [""]
+allBgms : ['EvalString_0']
+colour : this.soundColor
+EvalString_0 = EvalString_0 ? (', "bgm": "'+EvalString_0+'"') : '';
+var code = '{"type": "setmusics"'+EvalString_0+'},\n';
+return code;
+*/;
+
 scaleImage_s
     :   '图片放缩' '图片编号' NInt '中心点像素' 'x' PosString? 'y' PosString? '移动方式' MoveMode_List BGNL? '放缩比例' Number '动画时间' Int '不等待执行完毕' Bool Newline
        
@@ -2647,95 +2949,6 @@ return code;
 */;
 
 
-animationDrawable_s
-    :   '帧动画' '总显示帧数' IntString '底色' ColorString? Colour '底色不透明度' IntString? BGNL?Newline
-        '图片序列(同一帧后面覆盖先前的,默认起始帧为0,结束帧为最后一帧)'BGNL?Newline
-        '(剪裁区域不填写为全图,绘制区域不填写为全画面)'BGNL?Newline
-        '(不透明度100为不透明,默认为不透明,结束不透明度默认与开始透明度相同)'BGNL?Newline
-        animationDrawableimage+? Newline
-        '音频序列(到达对应帧进行播放)'BGNL?Newline
-        animationDrawablesound+? Newline
-    
-
-/* animationDrawable_s
-tooltip : animationDrawable:帧动画图片叠加
-helpUrl : /_docs/#/instruction
-default : [30,"0, 0, 0",'rgb(0, 0, 0)',""]
-allImages : ['EvalString_0']
-colour : this.imageColor
-if (IntString_1&&(IntString_1 < 0||IntString_1>100)) throw new Error('透明度范围为0-100,0为透明,100为不透明,不填默认为不透明')
-
-ColorString_0 = ColorString_0 ? (', "color": ['+ColorString_0+']') : '';
-IntString_1 = IntString_1 ? (', "globalAlpha": '+IntString_1+'') : '';
-var imageList=animationDrawableimage_0?',"imageList": [\n'+animationDrawableimage_0.slice(0,-1)+'\n]':''
-var soundList=animationDrawablesound_0?',"soundList": [\n'+animationDrawablesound_0.slice(0,-1)+'\n]':''
-var code = '{"type": "animationDrawable", "allFarme": '+IntString_0+ColorString_0+IntString_1+imageList+soundList+'},\n';
-return code;
-*/;
-
-animationDrawableList
-    : animationDrawableimage
-    | animationDrawablesound
-    | animationDrawabletextEmpty;
-
-animationDrawableimage
-    : '图片' EvalString? '起始帧' IntString? '起始不透明度'  IntString? BGNL? Newline 
-    '剪裁坐标cx' IntString? 'cy' IntString? '宽' IntString? '高' IntString? '绘制坐标x'IntString? 'y' IntString? '宽' IntString? '高' IntString? BGNL? Newline
-    '结束帧' IntString? '结束不透明度'  IntString? '剪裁坐标cx' IntString? 'cy' IntString? '宽' IntString? '高' IntString? '绘制坐标x'IntString? 'y' IntString? '宽' IntString? '高' IntString? Newline
-/* animationDrawableimage
-tooltip : 帧动画图片列表
-helpUrl : /_docs/#/instruction
-default : ["","","","","","","","","","","","","","","","","","","","",""]
-colour : this.subColor
-allImages : ['EvalString_0']
-if (IntString_1&&(IntString_1 < 0||IntString_1>100)) throw new Error('不透明度范围为0-100,0为透明,100为不透明,不填默认为不透明')
-if (IntString_11&&(IntString_11 < 0||IntString_11>100)) throw new Error('不透明度范围为0-100,0为透明,100为不透明,不填默认为不透明')
-IntString_0 = IntString_0 ? (', "beforefarme": '+IntString_0+'') : '';
-IntString_1 = IntString_1 ? (', "globalAlpha": '+IntString_1+'') : '';
-IntString_2 = IntString_2 ? (', "cx": '+IntString_2+'') : '';
-IntString_3 = IntString_3 ? (', "cy": '+IntString_3+'') : '';
-IntString_4 = IntString_4 ? (', "cw": '+IntString_4+'') : '';
-IntString_5 = IntString_5 ? (', "ch": '+IntString_5+'') : '';
-IntString_6 = IntString_6 ? (', "x": '+IntString_6+'') : '';
-IntString_7 = IntString_7 ? (', "y": '+IntString_7+'') : '';
-IntString_8 = IntString_8 ? (', "w": '+IntString_8+'') : '';
-IntString_9 = IntString_9 ? (', "h": '+IntString_9+'') : '';
-
-IntString_10 = IntString_10 ? (', "afterfarme": '+IntString_10+'') : '';
-IntString_11 = IntString_11 ? (', "aglobalAlpha": '+IntString_11+'') : '';
-IntString_12 = IntString_12 ? (', "acx": '+IntString_12+'') : '';
-IntString_13 = IntString_13 ? (', "acy": '+IntString_13+'') : '';
-IntString_14 = IntString_14 ? (', "acw": '+IntString_14+'') : '';
-IntString_15 = IntString_15 ? (', "ach": '+IntString_15+'') : '';
-IntString_16 = IntString_16 ? (', "ax": '+IntString_16+'') : '';
-IntString_17 = IntString_17 ? (', "ay": '+IntString_17+'') : '';
-IntString_18 = IntString_18 ? (', "aw": '+IntString_18+'') : '';
-IntString_19 = IntString_19 ? (', "ah": '+IntString_19+'') : '';
-
-return '{ "image":"'+EvalString_0+'"'+IntString_0+IntString_1+IntString_2+IntString_3+IntString_4+IntString_5+IntString_6+IntString_7+IntString_8+IntString_9+IntString_10+IntString_11+IntString_12+IntString_13+IntString_14+IntString_15+IntString_16+IntString_17+IntString_18+IntString_19+'},'
-*/;
-
-animationDrawablesound
-    : '音效' EvalString? '起始帧' IntString '是否停止其他音效'Bool?  Newline 
- 
-/* animationDrawablesound
-tooltip : 帧动画配音
-helpUrl : /_docs/#/instruction
-default : ["",0,false]
-colour : this.subColor
-allSounds : ['EvalString_0']
-
-return '{ "sound":"'+EvalString_0+'","startfarme":'+IntString_0+',"stopbefore":'+Bool_0+'},'
-*/;
-
-animationDrawabletextEmpty
-    :   Newline
-    
-/* animationDrawabletextEmpty
-var code = [];
-return code;
-*/;
-
 setCurtain_0_s
     :   '更改画面色调' ColorString Colour '动画时间' IntString? BGNL? Newline '渐变方式' MoveMode_List '持续到下一个本事件' Bool '不等待执行完毕' Bool Newline
     
@@ -2787,7 +3000,7 @@ return code;
 */;
 
 setWeather_s
-    :   '更改天气' Weather_List '强度' Int '持续到下个本事件' Bool Newline
+    :   '更改天气' Weather_List '强度' Int  Newline
     
 
 /* setWeather_s
@@ -2796,8 +3009,8 @@ helpUrl : /_docs/#/instruction
 default : [null,1,true]
 colour : this.soundColor
 if(Int_0<1 || Int_0>10) throw new Error('天气的强度等级, 在1-10之间');
-Bool_0 = Bool_0 ? ', "keep": true' : ''
-var code = '{"type": "setWeather", "name": "'+Weather_List_0+'", "level": '+Int_0+Bool_0+'},\n';
+
+var code = '{"type": "setWeather", "name": "'+Weather_List_0+'", "level": '+Int_0+'},\n';
 if(Weather_List_0===''||Weather_List_0==='null'||Weather_List_0==null)code = '{"type": "setWeather"},\n';
 return code;
 */;
@@ -3045,38 +3258,7 @@ var code = '{"type": "playSound", "name": "'+EvalString_0+'"'+Bool_0+IntString_0
 return code;
 */;
 
-playStereo_s
-    :   '播放音效(立体音)' EvalString '左声道音量' Int '右声道音量' Int '启用立体音' Bool? Newline
-    
 
-/* playStereo_s
-tooltip : playSound: 播放音效(立体音)
-helpUrl : /_docs/#/instruction
-default : ["item.mp3",1,1,true]
-colour : this.imageColor
-allSounds : ['EvalString_0']
-material : ["./project/sounds/", "EvalString_0"]
-
-var code = '{"type": "playStereo", "name": "'+EvalString_0+'", "left": '+Int_0+', "right": '+Int_1+', "split": '+Bool_0+'},\n';
-return code;
-*/;
-
-moveStereo_s
-    :   '播放渐变音效(立体音)' EvalString '左声道音量' Int '右声道音量' Int '启用立体音' Bool? BGNL? Newline
-    '左声道目标音量' Int '右声道目标音量' Int '渐变时长'Int Newline
-    
-
-/* moveStereo_s
-tooltip : playSound: 播放渐变音效(立体音)
-helpUrl : /_docs/#/instruction
-default : ["item.mp3",1,1,true,10,10,1000]
-colour : this.imageColor
-allSounds : ['EvalString_0']
-material : ["./project/sounds/", "EvalString_0"]
-
-var code = '{"type": "moveStereo", "name": "'+EvalString_0+'", "left": '+Int_0+', "right": '+Int_1+', "split": '+Bool_0+', "leftTo": '+Int_2+', "rightTo": '+Int_3+', "time": '+Int_4+'},\n';
-return code;
-*/;
 
 playSound_1_s
     :   '播放系统音效' NameMap_List '停止之前音效' Bool? '音调' IntString? '等待播放完毕' Bool? Newline
@@ -4517,6 +4699,10 @@ B_0_List
 B_1_List
     :   '不改变'|'设为粗体'|'取消粗体'
     /*B_1_List ['null','true','false']*/;
+    
+Absolute_List
+    :'绝对模式'|'相对模式'
+    /*Absolute_List ['false','true']*/;
 
 Bg_Fg_List
     :   '背景层'|'前景层'
@@ -4612,8 +4798,8 @@ IdString
     ;
 
 FixedId_List
-    :   '生命'|'生命上限'|'攻击'|'防御'|'护盾'|'黄钥匙'|'蓝钥匙'|'红钥匙'|'金币'|'经验'|'魔力'|'魔力上限'|'当前横坐标'|'当前纵坐标'|'当前朝向'|'攻击增益'|'防御增益'|'护盾增益'
-    /*FixedId_List ['status:hp','status:hpmax','status:atk','status:def','status:mdef','item:yellowKey','item:blueKey','item:redKey','status:money','status:exp','status:mana','status:manamax','status:x','status:y','status:direction','buff:atk','buff:def','buff:mdef']*/;
+    :   '生命'|'生命上限'|'攻击'|'防御'|'法强'|'魔攻比例'|'护盾比例'|'法抗比例'|'黄钥匙'|'蓝钥匙'|'红钥匙'|'金币'|'经验'|'魔力'|'魔力上限'|'当前横坐标'|'当前纵坐标'|'当前朝向'|'攻击增益'|'防御增益'|'法强增益'|'魔攻增益'|'法抗增益'|'护盾增益'
+    /*FixedId_List ['status:hp','status:hpmax','status:atk','status:def','status:spell','status:matk','status:mhp','status:mdef','item:yellowKey','item:blueKey','item:redKey','status:money','status:exp','status:mana','status:manamax','status:x','status:y','status:direction','buff:atk','buff:def','buff:spell','buff:matk','buff:mdef','buff:mhp']*/;
 
 Id_List
     :   '变量' | '状态' | '物品' | '增益' | '独立开关' | '临时变量' |'全局存储'
@@ -4628,8 +4814,8 @@ EnemyPoint_List
     /*EnemyPoint_List ['hp','atk','def','money','exp','point','name']*/;
 
 Equip_List
-    :   '生命'|'生命上限'|'攻击'|'防御'|'法强'|'魔力'|'魔力上限'|'速度'
-    /*Equip_List ['hp','hpmax','atk','def','mdef','mana','manamax','speed']*/;
+    :   '生命'|'生命上限'|'攻击'|'防御'|'法强'|'魔攻比例'|'护盾比例'|'法抗百分比'|'魔力'|'魔力上限'|'速度'
+    /*Equip_List ['hp','hpmax','atk','def','spell','matk','mhp','mdef','mana','manamax','speed']*/;
 
 Key_List
     :   '黄钥匙'|'蓝钥匙'|'红钥匙'|'绿钥匙'|'铁门钥匙'
@@ -4647,6 +4833,10 @@ MoveMode_List
     :   '匀速移动'|'缓入快出'|'快入缓出'|'缓入缓出'|'随机'
     /*MoveMode_List ['', 'easeIn', 'easeOut', 'easeInOut', 'random']*/;
 
+MoveMode2_List
+    :   '匀速移动'|'慢-快'|'快-慢'|'慢-快-慢'|'快-慢-快'
+    /*MoveMode2_List ['', 'in', 'out', 'in-out', 'center']*/;
+
 NameMap_List
     :   '确定'|'取消'|'操作失败'|'光标移动'|'打开界面'|'读档'|'存档'|'获得道具'|'回血'|'宝石'|'炸弹'|'飞行器'|'开关门'|'上下楼'|'跳跃'|'破墙镐'|'破冰镐'|'阻激夹域'|'穿脱装备'|'商店'
     /*NameMap_List ['确定','取消','操作失败','光标移动','打开界面','读档','存档','获得道具','回血','宝石','炸弹','飞行器','开关门','上下楼','跳跃','破墙镐','破冰镐','阻激夹域','穿脱装备','商店']*/;
diff --git a/_server/MotaActionParser.js b/_server/MotaActionParser.js
index 06c2081..9c9fd92 100644
--- a/_server/MotaActionParser.js
+++ b/_server/MotaActionParser.js
@@ -542,6 +542,12 @@ MotaActionParser = function () {
           );
         }
         break;
+      case "cgtextList":
+        this.next = MotaActionBlocks["cgtextList_s"].xmlText([
+          data.textList,
+          this.next,
+        ]);
+        break;
       case "cgtext": // cg对话框
         var buildcgDrawing = function (obj) {
           obj = MotaActionFunctions.processcgDrawing(obj || []);
@@ -560,16 +566,12 @@ MotaActionParser = function () {
           return res;
         };
         this.next = MotaActionBlocks["cgtext_s"].xmlText([
-          data.bg,
-          data.memory,
           data.WindowSkin,
+          data.index,
           data.head.name,
-          data.name || "",
           data.head.px || -300,
           data.time,
           data.wait,
-          data.sound,
-          data.text,
           buildcgDrawing(data.bodyList),
           this.next,
         ]);
@@ -620,6 +622,20 @@ MotaActionParser = function () {
       case "setcgs":
         this.next = MotaActionBlocks["setcgs_s"].xmlText([data.img, this.next]);
         break;
+      case "setmusics":
+        this.next = MotaActionBlocks["setmusics_s"].xmlText([
+          data.bgm,
+          this.next,
+        ]);
+        break;
+      case "introAndLoop":
+        this.next = MotaActionBlocks["introAndLoop_s"].xmlText([
+          data.intro,
+          data.time,
+          data.loop,
+          this.next,
+        ]);
+        break;
       case "comment": // 注释
         this.next = MotaActionBlocks["comment_s"].xmlText([
           this.EvalString_Multi(data.text),
@@ -713,141 +729,7 @@ MotaActionParser = function () {
           this.next,
         ]);
         break;
-      case "setanimate":
-        var buildanimateDrawableimage = function (obj) {
-          obj = MotaActionFunctions.processanimateDrawableimage(obj || []);
-          var res = null;
-          for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) {
-            res = MotaActionBlocks["animateDrawableimage"].xmlText([
-              one[0],
-              one[1],
-              one[2],
-              one[3],
-              one[4],
-              one[5],
-              one[6],
-              one[7],
-              one[8],
-              one[9],
-              one[10],
-              one[11],
-              one[12],
-              one[13],
-              one[14],
-              one[15],
-              one[16],
-              one[17],
-              one[18],
-              one[19],
-              one[20],
-              one[21],
-              one[22],
-              res,
-            ]);
-          }
-          return res;
-        };
-        var buildanimateDrawablesound = function (obj) {
-          obj = MotaActionFunctions.processanimateDrawablesound(obj || []);
-          var res = null;
-          for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) {
-            res = MotaActionBlocks["animateDrawablesound"].xmlText([
-              one[0],
-              one[1],
-              one[2],
-              res,
-            ]);
-          }
-          return res;
-        };
-        this.next = MotaActionBlocks["setanimate_s"].xmlText([
-          data.name,
-          data.px,
-          data.py,
-          data.width,
-          data.height,
-          data.allFarme,
-          buildanimateDrawableimage(data.imageList),
-          buildanimateDrawablesound(data.soundList),
-          this.next,
-        ]);
-        break;
-      case "clearanimate":
-        this.next = MotaActionBlocks["clearanimate_s"].xmlText([this.next]);
-        break;
-      case "deleteanimate":
-        this.next = MotaActionBlocks["deleteanimate_s"].xmlText([
-          data.name,
-          this.next,
-        ]);
-        break;
-      case "playanimate":
-        this.next = MotaActionBlocks["playanimate_s"].xmlText([
-          data.name,
-          data.x,
-          data.y,
-          data.hero,
-          data.scalex,
-          data.scaley,
-          this.next,
-        ]);
-        break;
-      case "animationDrawable":
-        var buildanimationDrawableimage = function (obj) {
-          obj = MotaActionFunctions.processanimationDrawableimage(obj || []);
-          var res = null;
-          for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) {
-            res = MotaActionBlocks["animationDrawableimage"].xmlText([
-              one[0],
-              one[1],
-              one[2],
-              one[3],
-              one[4],
-              one[5],
-              one[6],
-              one[7],
-              one[8],
-              one[9],
-              one[10],
-              one[11],
-              one[12],
-              one[13],
-              one[14],
-              one[15],
-              one[16],
-              one[17],
-              one[18],
-              one[19],
-              one[20],
-              res,
-            ]);
-          }
-          return res;
-        };
-        var buildanimationDrawablesound = function (obj) {
-          obj = MotaActionFunctions.processanimationDrawablesound(obj || []);
-          var res = null;
-          for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) {
-            res = MotaActionBlocks["animationDrawablesound"].xmlText([
-              one[0],
-              one[1],
-              one[2],
-              res,
-            ]);
-          }
-          return res;
-        };
-        this.next = MotaActionBlocks["animationDrawable_s"].xmlText([
-          data.allFarme,
-          data.color,
-          "rgba(" + data.color + ")",
-          data.globalAlpha,
-          buildanimationDrawableimage(data.imageList),
-          buildanimationDrawablesound(data.soundList),
-          this.next,
-        ]);
-        break;
-
+     
       case "tip":
         this.next = MotaActionBlocks["tip_s"].xmlText([
           data.text,
@@ -1135,6 +1017,64 @@ MotaActionParser = function () {
           ]);
         }
         break;
+        case "animationDrawable":
+        var buildanimationDrawableimage = function (obj) {
+          obj = MotaActionFunctions.processanimationDrawableimage(obj || []);
+          var res = null;
+          for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) {
+            res = MotaActionBlocks["animationDrawableimage"].xmlText([
+              one[0],
+              one[1],
+              one[2],
+              one[3],
+              one[4],
+              one[5],
+              one[6],
+              one[7],
+              one[8],
+              one[9],
+              one[10],
+              one[11],
+              one[12],
+              one[13],
+              one[14],
+              one[15],
+              one[16],
+              one[17],
+              one[18],
+              one[19],
+              one[20],
+              one[21],
+              one[22],
+              res,
+            ]);
+          }
+          return res;
+        };
+        var buildanimationDrawablesound = function (obj) {
+          obj = MotaActionFunctions.processanimationDrawablesound(obj || []);
+          var res = null;
+          for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) {
+            res = MotaActionBlocks["animationDrawablesound"].xmlText([
+              one[0],
+              one[1],
+              one[2],
+              res,
+            ]);
+          }
+          return res;
+        };
+        this.next = MotaActionBlocks["animationDrawable_s"].xmlText([
+          data.allFarme,
+          data.color,
+          "rgba(" + data.color + ")",
+          data.globalAlpha,
+          buildanimationDrawableimage(data.imageList),
+          buildanimationDrawablesound(data.soundList),
+          this.next,
+        ]);
+        break;
+
       case "jumpHero": // 跳跃勇士
         if (data.dxy) {
           this.next = MotaActionBlocks["jumpHero_1_s"].xmlText([
@@ -1219,12 +1159,161 @@ MotaActionParser = function () {
           ]);
         }
         break;
+        case "animateResize": // 停止所有动画
+        this.next = MotaActionBlocks["animateResize_s"].xmlText([
+          data.name,
+          data.id||"",
+          data.centerX||"",
+          data.centerY||"",
+          data.hero||false,
+          data.reverse||false,
+          data.loop||false,
+          data.async || false,
+          this.next,
+        ]);
+        break;
+        case "pauseAnimate": // 暂停所有动画
+        this.next = MotaActionBlocks["pauseAnimate_s"].xmlText([
+          data.id||"",
+          this.next,
+        ]);
+        break;
+        case "remuseAnimate": // 继续所有动画
+        this.next = MotaActionBlocks["remuseAnimate_s"].xmlText([
+          data.id||"",
+          this.next,
+        ]);
+        break;
       case "stopAnimate": // 停止所有动画
         this.next = MotaActionBlocks["stopAnimate_s"].xmlText([
+          data.id||"",
           data.doCallback || false,
           this.next,
         ]);
         break;
+        case "setanimate":
+        var buildanimateDrawableimage = function (obj) {
+          obj = MotaActionFunctions.processanimateDrawableimage(obj || []);
+          var res = null;
+          for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) {
+            res = MotaActionBlocks["animateDrawableimage"].xmlText([
+              one[0],
+              one[1],
+              one[2],
+              one[3],
+              one[4],
+              one[5],
+              one[6],
+              one[7],
+              one[8],
+              one[9],
+              one[10],
+              one[11],
+              one[12],
+              one[13],
+              one[14],
+              one[15],
+              one[16],
+              one[17],
+              one[18],
+              one[19],
+              one[20],
+              one[21],
+              one[22],
+              res,
+            ]);
+          }
+          return res;
+        };
+        var buildanimateDrawablesound = function (obj) {
+          obj = MotaActionFunctions.processanimateDrawablesound(obj || []);
+          var res = null;
+          for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) {
+            res = MotaActionBlocks["animateDrawablesound"].xmlText([
+              one[0],
+              one[1],
+              one[2],
+              res,
+            ]);
+          }
+          return res;
+        };
+        this.next = MotaActionBlocks["setanimate_s"].xmlText([
+          data.name,
+          data.px,
+          data.py,
+          data.width,
+          data.height,
+          data.allFarme,
+          buildanimateDrawableimage(data.imageList),
+          buildanimateDrawablesound(data.soundList),
+          this.next,
+        ]);
+        break;
+      case "clearanimate":
+        this.next = MotaActionBlocks["clearanimate_s"].xmlText([
+          data.id||"",
+          this.next]);
+        break;
+        case "animateloop":
+        this.next = MotaActionBlocks["animateloop_s"].xmlText([
+          data.id||"",
+          data.loop,
+          this.next]);
+        break;
+        case "animatemove":
+        this.next = MotaActionBlocks["animatemove_s"].xmlText([
+          data.id||0,
+          data.px||0,
+          data.py||0,
+          data.relative,
+          data.time||0,
+          data.style||"",
+          this.next]);
+        break;
+        case "moveAnimate":
+          this.next = MotaActionBlocks["moveAnimate_s"].xmlText([
+            data.id||0,
+            data.px||0,
+            data.py||0,
+            data.time||0,
+            data.relative,
+            data.style||"",
+            this.next]);
+          break;
+       
+        case "animatereverse":
+        this.next = MotaActionBlocks["animatereverse_s"].xmlText([
+          data.id||"",
+          data.reverse,
+          this.next]);
+        break;
+        case "animatepause":
+        this.next = MotaActionBlocks["animatepause_s"].xmlText([
+          data.id||"",
+          data.pause,
+          this.next]);
+        break;
+      case "deleteanimate":
+        this.next = MotaActionBlocks["deleteanimate_s"].xmlText([
+          data.name,
+          this.next,
+        ]);
+        break;
+      case "playanimate":
+        this.next = MotaActionBlocks["playanimate_s"].xmlText([
+          data.name,
+          data.id||"",
+          data.x,
+          data.y,
+          data.hero,
+          data.scalex||1,
+          data.scaley||1,
+          data.loop||false,
+          data.reverse||false,
+          this.next,
+        ]);
+        break;
       case "setViewport": // 设置视角
         if (data.dxy) {
           this.next = MotaActionBlocks["setViewport_1_s"].xmlText([
@@ -1405,7 +1494,6 @@ MotaActionParser = function () {
         this.next = MotaActionBlocks["setWeather_s"].xmlText([
           data.name,
           data.level || 1,
-          data.keep || false,
           this.next,
         ]);
         break;
@@ -1506,27 +1594,6 @@ MotaActionParser = function () {
           ]);
         }
         break;
-      case "playStereo":
-        this.next = MotaActionBlocks["playStereo_s"].xmlText([
-          data.name,
-          data.left,
-          data.right,
-          data.split || true,
-          this.next,
-        ]);
-        break;
-      case "moveStereo":
-        this.next = MotaActionBlocks["moveStereo_s"].xmlText([
-          data.name,
-          data.left,
-          data.right,
-          data.split || true,
-          data.leftTo,
-          data.rightTo,
-          data.time,
-          this.next,
-        ]);
-        break;
       case "playSound":
         var knownItems = MotaActionBlocks["NameMap_List"].options.map(function (
           one
@@ -1996,7 +2063,7 @@ MotaActionParser = function () {
           this.next,
         ]);
         break;
-      case "changebg": // 等待多少毫秒
+      case "changebg": // 改变背景
         this.next = MotaActionBlocks["changebg_s"].xmlText([
           data.img1 ?? "",
           data.memory1 ?? false,
@@ -2007,6 +2074,18 @@ MotaActionParser = function () {
           this.next,
         ]);
         break;
+        case "drawbackground": // 绘制背景
+        this.next = MotaActionBlocks["drawbackground_s"].xmlText([
+          data.image ?? "",
+          data.memory ?? false,
+          this.next,
+        ]);
+        break;
+        case "clearbackground": // 清除背景
+        this.next = MotaActionBlocks["clearbackground_s"].xmlText([
+          this.next,
+        ]);
+        break;
       case "wait": // 等待用户操作
         var case_waitList = null;
         if (data.data) {
@@ -2107,6 +2186,7 @@ MotaActionParser = function () {
         this.next = MotaActionBlocks["drawWarning_s"].xmlText([
           data.x,
           data.y,
+          data.large,
           data.size,
           data?.text,
           data?.text2,
@@ -2916,56 +2996,7 @@ MotaActionParser = function () {
     });
     return list;
   };
-  MotaActionFunctions.processovertext = function (overList) {
-    var list = [];
-    overList.forEach(function (one) {
-      list.push([
-        one.text,
-        one.sound,
-        one.time,
-        one.textColor,
-        one.boldColor,
-        one.font,
-      ]);
-    });
-    return list;
-  };
-  MotaActionFunctions.processanimationDrawableimage = function (overList) {
-    var list = [];
-    overList.forEach(function (one) {
-      list.push([
-        one.image,
-        one.beforefarme,
-        one.globalAlpha,
-        one.cx,
-        one.cy,
-        one.cw,
-        one.ch,
-        one.x,
-        one.y,
-        one.w,
-        one.h,
-        one.afterfarme,
-        one.aglobalAlpha,
-        one.acx,
-        one.acy,
-        one.acw,
-        one.ach,
-        one.ax,
-        one.ay,
-        one.aw,
-        one.ah,
-      ]);
-    });
-    return list;
-  };
-  MotaActionFunctions.processanimationDrawablesound = function (overList) {
-    var list = [];
-    overList.forEach(function (one) {
-      list.push([one.sound, one.startfarme, one.stopbefore]);
-    });
-    return list;
-  };
+  
   MotaActionFunctions.processanimateDrawableimage = function (overList) {
     var list = [];
     overList.forEach(function (one) {
@@ -3004,6 +3035,21 @@ MotaActionParser = function () {
     });
     return list;
   };
+  MotaActionFunctions.processovertext = function (overList) {
+    var list = [];
+    overList.forEach(function (one) {
+      list.push([
+        one.text,
+        one.sound,
+        one.time,
+        one.textColor,
+        one.boldColor,
+        one.font,
+      ]);
+    });
+    return list;
+  };
+ 
   MotaActionFunctions.processMultiLoc = function (EvalString_0, EvalString_1) {
     var floorstr = "";
     if (EvalString_0 && EvalString_1) {
@@ -3277,6 +3323,45 @@ MotaActionParser = function () {
     return str;
   };
 
+  MotaActionFunctions.processanimationDrawableimage = function (overList) {
+    var list = [];
+    overList.forEach(function (one) {
+      list.push([
+        one.image,
+        one.beforefarme,
+        one.globalAlpha,
+        one.cx,
+        one.cy,
+        one.cw,
+        one.ch,
+        one.x,
+        one.y,
+        one.w,
+        one.h,
+        one.angle,
+        one.afterfarme,
+        one.aglobalAlpha,
+        one.acx,
+        one.acy,
+        one.acw,
+        one.ach,
+        one.ax,
+        one.ay,
+        one.aw,
+        one.ah,
+        one.aangle
+      ]);
+    });
+    return list;
+  };
+  MotaActionFunctions.processanimationDrawablesound = function (overList) {
+    var list = [];
+    overList.forEach(function (one) {
+      list.push([one.sound, one.startfarme, one.stopbefore]);
+    });
+    return list;
+  };
+
   MotaActionFunctions.replaceFromName = function (str) {
     if (!str || MotaActionFunctions.disableReplace) return str;
     var map = {},
diff --git a/_server/config.json b/_server/config.json
deleted file mode 100644
index bdcb574..0000000
--- a/_server/config.json
+++ /dev/null
@@ -1 +0,0 @@
-{"viewportLoc":[0,0],"editorLastFloorId":"jiedao"}
\ No newline at end of file
diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js
index 4f0f62d..a3433b1 100644
--- a/_server/editor_blockly.js
+++ b/_server/editor_blockly.js
@@ -354,6 +354,21 @@ editor_blockly = function () {
                         editor.uievent.previewUI([{ type: "drawImage", image: obj.name, x: obj.loc[0], y: obj.loc[1] }]);
                     }
                     break;
+                    case 'animateResize_s': // 显示动画
+                    if (obj.name && obj.centerX&&obj.centerY) {
+                        editor.uievent.previewUI([{ type: "fillRect", x:obj.centerX-5, y: obj.centerY-5, width:10, height: 10, style:"#FF0000"}]);
+                    }
+                    break;
+                    case 'playanimate_s': // 显示帧动画
+                    if (obj.name && obj.x&&obj.y) {
+                        editor.uievent.previewUI([{ type: "fillRect", x:obj.x-5, y: obj.y-5, width:10, height: 10, style:"#FF0000"}]);
+                    }
+                    break;
+                    case 'animatemove_s': // 移动帧动画
+                   
+                        editor.uievent.previewUI([{ type: "fillRect", x:obj.px-5, y: obj.py-5, width:10, height: 10, style:"#FF0000"}]);
+                    
+                    break;
                 case 'setCurtain_0_s': // 更改色调
                     if (obj.color) {
                         editor.uievent.previewUI([{ type: "fillRect", x: 0, y: 0, width: core.__PIXELS__, height: core.__PIXELS__, style: obj.color }]);
diff --git a/_server/editor_blocklyconfig.js b/_server/editor_blocklyconfig.js
index 6c99618..b0f038c 100644
--- a/_server/editor_blocklyconfig.js
+++ b/_server/editor_blocklyconfig.js
@@ -132,8 +132,8 @@ editor_blocklyconfig = function () {
         MotaActionFunctions.actionParser.parse(
           {
             time: 160,
-            openSound: "door.mp3",
-            closeSound: "door.mp3",
+            openSound: "door.opus",
+            closeSound: "door.opus",
             keys: { yellowKey: 1, orangeKey: 1 },
           },
           "doorInfo"
@@ -142,9 +142,9 @@ editor_blocklyconfig = function () {
         MotaActionBlocks["mainStyle_m"].xmlText(),
         MotaActionFunctions.actionParser.parse(
           {
-            背景音乐: "bgm.mp3",
-            确定: "confirm.mp3",
-            攻击: "attack.mp3",
+            背景音乐: "bgm.opus",
+            确定: "confirm.opus",
+            攻击: "attack.opus",
             背景图: "bg.jpg",
             领域: "zone",
             文件名: "file.jpg",
diff --git a/_server/table/comment.js b/_server/table/comment.js
index f8660c0..98f7d1a 100644
--- a/_server/table/comment.js
+++ b/_server/table/comment.js
@@ -116,6 +116,14 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
 					"_lint": true,
 					"_docs": "能否使用或装备",
 					"_data": "当前能否使用或装备该道具,仅对cls不为items有效。null表示始终不可使用但可装备"
+				},
+				"canBatchUse": {
+					"_leaf": true,
+					"_type": "textarea",
+					"_string": true,
+					"_lint": true,
+					"_docs": "能否批量使用",
+					"_data": "该道具是否允许批量使用,仅对cls为tools或constants有效,true表示可批量使用。建议同时勾选【回放不绘制道具栏】"
 				}
 			}
 		},
@@ -192,7 +200,14 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
 				"mdef": {
 					"_leaf": true,
 					"_type": "textarea",
-					"_data": "法抗(写为小数)"
+					"_docs": "法抗",
+					"_data": "百分数,如10为10%法抗,怪物受到勇士的法术伤害减免比例"
+
+				},
+				"spell": {
+					"_leaf": true,
+					"_type": "textarea",
+					"_data": "法强"
 				},
 				"speed": {
 					"_leaf": true,
@@ -389,7 +404,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
 				}
 			}
 		},
-		"enemys_template": { 'name': '新敌人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'exp': 0, 'point': 0, 'special': [] },
+		"enemys_template": { 'name': '新敌人', 'hp': 0, 'atk': 0, 'def': 0, 'mdef': 0, 'speed': 1, 'money': 0, 'exp': 0, 'point': 0, 'special': [] },
 
 
 		// --------------------------- 【图块属性】相关的表格配置 --------------------------- //
diff --git a/_server/table/data.comment.js b/_server/table/data.comment.js
index 3a76bd7..17faa7f 100644
--- a/_server/table/data.comment.js
+++ b/_server/table/data.comment.js
@@ -264,10 +264,27 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
 							"_type": "textarea",
 							"_data": "防御"
 						},
+						"spell": {
+							"_leaf": true,
+							"_type": "textarea",
+							"_data": "法强",
+						},
 						"mdef": {
 							"_leaf": true,
 							"_type": "textarea",
-							"_data": "法强"
+							"_data": "法抗百分比",
+						},
+						"matk": {
+							"_leaf": true,
+							"_type": "textarea",
+							"_data": "100为法强转化为等值魔攻",
+							"_docs": "魔攻比例"
+						},
+						"mhp": {
+							"_leaf": true,
+							"_type": "textarea",
+							"_data": "100为法强转化为等值护盾",
+							"_docs": "护盾比例"
 						},
 						"speed": {
 							"_leaf": true,
@@ -435,6 +452,12 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
 					"_type": "textarea",
 					"_docs": "绿宝石值",
 				},
+				"yellowGem": {
+					"_leaf": true,
+					"_type": "textarea",
+					"_docs": "黄宝石值",
+				},
+
 				"redPotion": {
 					"_leaf": true,
 					"_type": "textarea",
diff --git a/_server/table/plugins.comment.js b/_server/table/plugins.comment.js
index a02e298..a9cb7a1 100644
--- a/_server/table/plugins.comment.js
+++ b/_server/table/plugins.comment.js
@@ -122,6 +122,18 @@ var plugins_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
 				"_type": "textarea",
 				"_range": "typeof(thiseval)=='string' || thiseval==null",
 				"_data": "音乐鉴赏"
+			},
+			"intro&loop": {
+				"_leaf": true,
+				"_type": "textarea",
+				"_range": "typeof(thiseval)=='string' || thiseval==null",
+				"_data": "背景音乐拼接"
+			},
+			"scrollingText": {
+				"_leaf": true,
+				"_type": "textarea",
+				"_range": "typeof(thiseval)=='string' || thiseval==null",
+				"_data": "接收&发送在线留言"
 			}
 		}
 		if (obj[key]) return obj[key];
diff --git a/index.html b/index.html
index c49e005..a316bc3 100644
--- a/index.html
+++ b/index.html
@@ -47,6 +47,20 @@
           startImageDiv.classList.add("startImageDivAnimation");
           // 注释下面这句话以禁止单击立刻跳过开场动画
           startImageBackgroundDiv.onclick = onAnimationEnd;
+          // 新增加载图片轮播逻辑
+    const slides = document.querySelectorAll('.loading-slide');
+    let currentSlide = 0;
+    
+    const slideInterval = setInterval(() => {
+        slides[currentSlide].classList.remove('active');
+        currentSlide = (currentSlide + 1) % slides.length;
+        slides[currentSlide].classList.add('active');
+    }, 3000);
+
+    // 在加载完成时清除定时器
+    window.addEventListener('load', () => {
+        clearInterval(slideInterval);
+    });
         };
         startImageLogo.onerror = function () {};
         startImageLogo.src = "logo.png";
@@ -58,6 +72,14 @@
       <img id="musicBtn" />
       <div id="startPanel">
         <div id="startTop">
+           <!-- 新增图片展示区域 -->
+    <div id='startTopGallery'>
+       <img src='project/images/bg_1511.webp' class='loading-slide active' />
+      <img src='project/images/bg_1521.webp' class='loading-slide'/>
+      <img src='project/images/bg_2011.webp' class='loading-slide'/>
+     <img src='project/images/bg_2521.webp' class='loading-slide'/>
+      <img src='project/images/bg_3026.webp' class='loading-slide'/>
+  </div>
           <div id="startTopProgressBar">
             <div id="startTopProgress"></div>
           </div>
diff --git a/libs/control.js b/libs/control.js
index c6e4f30..93b4a0a 100644
--- a/libs/control.js
+++ b/libs/control.js
@@ -1,4 +1,3 @@
-
 /*
 control.js:游戏主要逻辑控制
 主要负责status相关内容,以及各种变量获取/存储
@@ -7,57 +6,93 @@ control.js:游戏主要逻辑控制
 
 "use strict";
 
-function control () {
-    this._init();
+function control() {
+  this._init();
 }
 
 control.prototype._init = function () {
-    this.controldata = functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.control;
-    this.renderFrameFuncs = [];
-    this.replayActions = [];
-    this.weathers = {};
-    this.resizes = [];
-    this.noAutoEvents = true;
-    this.updateNextFrame = false;
-    // --- 注册系统的animationFrame
-    this.registerAnimationFrame("totalTime", false, this._animationFrame_totalTime);
-    this.registerAnimationFrame("autoSave", true, this._animationFrame_autoSave);
-    this.registerAnimationFrame("globalAnimate", true, this._animationFrame_globalAnimate);
-    this.registerAnimationFrame("animate", true, this._animationFrame_animate);
-    this.registerAnimationFrame("heroMoving", true, this._animationFrame_heroMoving);
-    this.registerAnimationFrame("weather", true, this._animationFrame_weather);
-    this.registerAnimationFrame("tip", true, this._animateFrame_tip);
-    this.registerAnimationFrame("parallelDo", false, this._animationFrame_parallelDo);
-    // --- 注册系统的天气
-    this.registerWeather("rain", this._weather_rain, this._animationFrame_weather_rain);
-    this.registerWeather("snow", this._weather_snow, this._animationFrame_weather_snow);
-    this.registerWeather("fog", this._weather_fog, this.__animateFrame_weather_image);
-    this.registerWeather("cloud", this._weather_cloud, this.__animateFrame_weather_image);
-    this.registerWeather("sun", this._weather_sun, this._animationFrame_weather_sun);
-    // --- 注册系统的replay
-    this.registerReplayAction("move", this._replayAction_move);
-    this.registerReplayAction("item", this._replayAction_item);
-    this.registerReplayAction("equip", this._replayAction_equip);
-    this.registerReplayAction("unEquip", this._replayAction_unEquip);
-    this.registerReplayAction("saveEquip", this._replayAction_saveEquip);
-    this.registerReplayAction("loadEquip", this._replayAction_loadEquip);
-    this.registerReplayAction("fly", this._replayAction_fly);
-    this.registerReplayAction("shop", this._replayAction_shop);
-    this.registerReplayAction("turn", this._replayAction_turn);
-    this.registerReplayAction("getNext", this._replayAction_getNext);
-    this.registerReplayAction("moveDirectly", this._replayAction_moveDirectly);
-    this.registerReplayAction("key", this._replayAction_key);
-    this.registerReplayAction("click", this._replayAction_click);
-    this.registerReplayAction("ignoreInput", this._replayAction_ignoreInput);
-    this.registerReplayAction("no", this._replayAction_no);
-    // --- 注册系统的resize
-    this.registerResize("gameGroup", this._resize_gameGroup);
-    this.registerResize("canvas", this._resize_canvas);
-    this.registerResize("statusBar", this._resize_statusBar);
-    this.registerResize("status", this._resize_status);
-    this.registerResize("toolBar", this._resize_toolBar);
-    this.registerResize("tools", this._resize_tools);
-}
+  this.controldata = functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.control;
+  this.renderFrameFuncs = [];
+  this.replayActions = [];
+  this.weathers = {};
+  this.resizes = [];
+  this.noAutoEvents = true;
+  this.updateNextFrame = false;
+  // --- 注册系统的animationFrame
+  this.registerAnimationFrame(
+    "totalTime",
+    false,
+    this._animationFrame_totalTime
+  );
+  this.registerAnimationFrame("autoSave", true, this._animationFrame_autoSave);
+  this.registerAnimationFrame(
+    "globalAnimate",
+    true,
+    this._animationFrame_globalAnimate
+  );
+  this.registerAnimationFrame("animate", true, this._animationFrame_animate);
+  this.registerAnimationFrame(
+    "heroMoving",
+    true,
+    this._animationFrame_heroMoving
+  );
+  this.registerAnimationFrame("weather", true, this._animationFrame_weather);
+  this.registerAnimationFrame("tip", true, this._animateFrame_tip);
+  this.registerAnimationFrame(
+    "parallelDo",
+    false,
+    this._animationFrame_parallelDo
+  );
+  // --- 注册系统的天气
+  this.registerWeather(
+    "rain",
+    this._weather_rain,
+    this._animationFrame_weather_rain
+  );
+  this.registerWeather(
+    "snow",
+    this._weather_snow,
+    this._animationFrame_weather_snow
+  );
+  this.registerWeather(
+    "fog",
+    this._weather_fog,
+    this.__animateFrame_weather_image
+  );
+  this.registerWeather(
+    "cloud",
+    this._weather_cloud,
+    this.__animateFrame_weather_image
+  );
+  this.registerWeather(
+    "sun",
+    this._weather_sun,
+    this._animationFrame_weather_sun
+  );
+  // --- 注册系统的replay
+  this.registerReplayAction("move", this._replayAction_move);
+  this.registerReplayAction("item", this._replayAction_item);
+  this.registerReplayAction("equip", this._replayAction_equip);
+  this.registerReplayAction("unEquip", this._replayAction_unEquip);
+  this.registerReplayAction("saveEquip", this._replayAction_saveEquip);
+  this.registerReplayAction("loadEquip", this._replayAction_loadEquip);
+  this.registerReplayAction("fly", this._replayAction_fly);
+  this.registerReplayAction("shop", this._replayAction_shop);
+  this.registerReplayAction("turn", this._replayAction_turn);
+  this.registerReplayAction("getNext", this._replayAction_getNext);
+  this.registerReplayAction("moveDirectly", this._replayAction_moveDirectly);
+  this.registerReplayAction("key", this._replayAction_key);
+  this.registerReplayAction("click", this._replayAction_click);
+  this.registerReplayAction("ignoreInput", this._replayAction_ignoreInput);
+  this.registerReplayAction("no", this._replayAction_no);
+  // --- 注册系统的resize
+  this.registerResize("gameGroup", this._resize_gameGroup);
+  this.registerResize("canvas", this._resize_canvas);
+  this.registerResize("statusBar", this._resize_statusBar);
+  this.registerResize("status", this._resize_status);
+  this.registerResize("toolBar", this._resize_toolBar);
+  this.registerResize("tools", this._resize_tools);
+};
 
 // ------ requestAnimationFrame 相关 ------ //
 
@@ -65,1542 +100,1938 @@ control.prototype._init = function () {
 // name:名称,可用来作为注销使用;needPlaying:是否只在游戏运行时才执行(在标题界面不执行)
 // func:要执行的函数,或插件中的函数名;可接受timestamp(从页面加载完毕到当前所经过的时间)作为参数
 control.prototype.registerAnimationFrame = function (name, needPlaying, func) {
-    this.unregisterAnimationFrame(name);
-    this.renderFrameFuncs.push({ name: name, needPlaying: needPlaying, func: func });
-}
+  this.unregisterAnimationFrame(name);
+  this.renderFrameFuncs.push({
+    name: name,
+    needPlaying: needPlaying,
+    func: func,
+  });
+};
 
 ////// 注销一个 animationFrame //////
 control.prototype.unregisterAnimationFrame = function (name) {
-    this.renderFrameFuncs = this.renderFrameFuncs.filter(function (x) { return x.name != name; });
-}
+  this.renderFrameFuncs = this.renderFrameFuncs.filter(function (x) {
+    return x.name != name;
+  });
+};
 
 ////// 设置requestAnimationFrame //////
 control.prototype._setRequestAnimationFrame = function () {
-    this._checkRequestAnimationFrame();
-    core.animateFrame.totalTime = Math.max(core.animateFrame.totalTime, core.getLocalStorage('totalTime', 0));
-    var loop = function (timestamp) {
-        core.control.renderFrameFuncs.forEach(function (b) {
-            if (b.func) {
-                try {
-                    if (core.isPlaying() || !b.needPlaying)
-                        core.doFunc(b.func, core.control, timestamp);
-                }
-                catch (e) {
-                    console.error(e);
-                    console.error("ERROR in requestAnimationFrame[" + b.name + "]:已自动注销该项。");
-                    core.unregisterAnimationFrame(b.name);
-                }
-            }
-        })
-        window.requestAnimationFrame(loop);
-    }
+  this._checkRequestAnimationFrame();
+  core.animateFrame.totalTime = Math.max(
+    core.animateFrame.totalTime,
+    core.getLocalStorage("totalTime", 0)
+  );
+  var loop = function (timestamp) {
+    core.control.renderFrameFuncs.forEach(function (b) {
+      if (b.func) {
+        try {
+          if (core.isPlaying() || !b.needPlaying)
+            core.doFunc(b.func, core.control, timestamp);
+        } catch (e) {
+          console.error(e);
+          console.error(
+            "ERROR in requestAnimationFrame[" + b.name + "]:已自动注销该项。"
+          );
+          core.unregisterAnimationFrame(b.name);
+        }
+      }
+    });
     window.requestAnimationFrame(loop);
-}
+  };
+  window.requestAnimationFrame(loop);
+};
 
 control.prototype._checkRequestAnimationFrame = function () {
-    (function () {
-        var lastTime = 0;
-        var vendors = ['webkit', 'moz'];
-        for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
-            window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
-            window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] ||    // Webkit中此取消方法的名字变了
-                window[vendors[x] + 'CancelRequestAnimationFrame'];
-        }
+  (function () {
+    var lastTime = 0;
+    var vendors = ["webkit", "moz"];
+    for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
+      window.requestAnimationFrame =
+        window[vendors[x] + "RequestAnimationFrame"];
+      window.cancelAnimationFrame =
+        window[vendors[x] + "CancelAnimationFrame"] || // Webkit中此取消方法的名字变了
+        window[vendors[x] + "CancelRequestAnimationFrame"];
+    }
 
-        if (!window.requestAnimationFrame) {
-            window.requestAnimationFrame = function (callback, element) {
-                var currTime = new Date().getTime();
-                var timeToCall = Math.max(0, 16.7 - (currTime - lastTime));
-                var id = window.setTimeout(function () {
-                    callback(currTime + timeToCall);
-                }, timeToCall);
-                lastTime = currTime + timeToCall;
-                return id;
-            };
-        }
-        if (!window.cancelAnimationFrame) {
-            window.cancelAnimationFrame = function (id) {
-                clearTimeout(id);
-            };
-        }
-    }());
-}
+    if (!window.requestAnimationFrame) {
+      window.requestAnimationFrame = function (callback, element) {
+        var currTime = new Date().getTime();
+        var timeToCall = Math.max(0, 16.7 - (currTime - lastTime));
+        var id = window.setTimeout(function () {
+          callback(currTime + timeToCall);
+        }, timeToCall);
+        lastTime = currTime + timeToCall;
+        return id;
+      };
+    }
+    if (!window.cancelAnimationFrame) {
+      window.cancelAnimationFrame = function (id) {
+        clearTimeout(id);
+      };
+    }
+  })();
+};
 
 control.prototype._animationFrame_totalTime = function (timestamp) {
-    core.animateFrame.totalTime += timestamp - core.animateFrame.totalTimeStart;
-    core.animateFrame.totalTimeStart = timestamp;
-    if (core.isPlaying()) {
-        core.status.hero.statistics.totalTime = core.animateFrame.totalTime;
-        core.status.hero.statistics.currTime += timestamp - (core.status.hero.statistics.start || timestamp);
-        core.status.hero.statistics.start = timestamp;
-    }
-}
+  core.animateFrame.totalTime += timestamp - core.animateFrame.totalTimeStart;
+  core.animateFrame.totalTimeStart = timestamp;
+  if (core.isPlaying()) {
+    core.status.hero.statistics.totalTime = core.animateFrame.totalTime;
+    core.status.hero.statistics.currTime +=
+      timestamp - (core.status.hero.statistics.start || timestamp);
+    core.status.hero.statistics.start = timestamp;
+  }
+};
 
 control.prototype._animationFrame_autoSave = function (timestamp) {
-    if (timestamp - core.saves.autosave.time <= 5000) return;
-    core.control.checkAutosave();
-    core.saves.autosave.time = timestamp;
-}
+  if (timestamp - core.saves.autosave.time <= 5000) return;
+  core.control.checkAutosave();
+  core.saves.autosave.time = timestamp;
+};
 
 control.prototype._animationFrame_globalAnimate = function (timestamp) {
-    if (timestamp - core.animateFrame.globalTime <= core.values.animateSpeed) return;
-    core.status.globalAnimateStatus++;
-    if (core.status.floorId) {
-        // Global Animate
-        core.status.globalAnimateObjs.forEach(function (block) {
-            core.drawBlock(block, core.status.globalAnimateStatus);
-        });
+  if (timestamp - core.animateFrame.globalTime <= core.values.animateSpeed)
+    return;
+  core.status.globalAnimateStatus++;
+  if (core.status.floorId) {
+    // Global Animate
+    core.status.globalAnimateObjs.forEach(function (block) {
+      core.drawBlock(block, core.status.globalAnimateStatus);
+    });
 
-        // Global floor images
-        core.maps._drawFloorImages(core.status.floorId, core.canvas.bg, 'bg', core.status.floorAnimateObjs || [], core.status.globalAnimateStatus);
-        core.maps._drawFloorImages(core.status.floorId, core.canvas.fg, 'fg', core.status.floorAnimateObjs || [], core.status.globalAnimateStatus);
+    // Global floor images
+    core.maps._drawFloorImages(
+      core.status.floorId,
+      core.canvas.bg,
+      "bg",
+      core.status.floorAnimateObjs || [],
+      core.status.globalAnimateStatus
+    );
+    core.maps._drawFloorImages(
+      core.status.floorId,
+      core.canvas.fg,
+      "fg",
+      core.status.floorAnimateObjs || [],
+      core.status.globalAnimateStatus
+    );
 
-        // Global Autotile Animate
-        core.status.autotileAnimateObjs.forEach(function (block) {
-            core.maps._drawAutotileAnimate(block, core.status.globalAnimateStatus);
-        });
+    // Global Autotile Animate
+    core.status.autotileAnimateObjs.forEach(function (block) {
+      core.maps._drawAutotileAnimate(block, core.status.globalAnimateStatus);
+    });
 
-        // Global hero animate
-        if ((core.status.hero || {}).animate && core.status.heroMoving == 0 && main.mode == 'play' && !core.status.preview.enabled) {
-            core.drawHero('stop', null, core.status.globalAnimateStatus);
-        }
+    // Global hero animate
+    if (
+      (core.status.hero || {}).animate &&
+      core.status.heroMoving == 0 &&
+      main.mode == "play" &&
+      !core.status.preview.enabled
+    ) {
+      core.drawHero("stop", null, core.status.globalAnimateStatus);
     }
-    // Box animate
-    core.drawBoxAnimate();
-    core.animateFrame.globalTime = timestamp;
-}
+  }
+  // Box animate
+  core.drawBoxAnimate();
+  core.animateFrame.globalTime = timestamp;
+};
 
 control.prototype._animationFrame_animate = function (timestamp) {
-    if (timestamp - core.animateFrame.animateTime < 50 || !core.status.animateObjs || core.status.animateObjs.length == 0) return;
-    core.clearMap('animate');
-    // 更新帧
-    for (var i = 0; i < core.status.animateObjs.length; i++) {
-        var obj = core.status.animateObjs[i];
-        if (obj.index == obj.animate.frames.length) {
-            (function (callback) {
-                setTimeout(function () {
-                    if (callback) callback();
-                });
-            })(obj.callback);
-        }
+  if (
+    timestamp - core.animateFrame.animateTime < 50 ||
+    !core.status.animateObjs ||
+    core.status.animateObjs.length == 0
+  )
+    return;
+  core.clearMap("animate");
+  // 更新帧
+  for (var i = 0; i < core.status.animateObjs.length; i++) {
+    var obj = core.status.animateObjs[i];
+    if (obj.index == obj.animate.frames.length) {
+      (function (callback) {
+        setTimeout(function () {
+          if (callback) callback();
+        });
+      })(obj.callback);
     }
-    core.status.animateObjs = core.status.animateObjs.filter(function (obj) {
-        return obj.index < obj.animate.frames.length;
-    });
-    core.status.animateObjs.forEach(function (obj) {
-        if (obj.hero) {
-            core.maps._drawAnimateFrame('animate', obj.animate, core.status.heroCenter.px, core.status.heroCenter.py, obj.index++);
-        } else {
-            core.maps._drawAnimateFrame('animate', obj.animate, obj.centerX, obj.centerY, obj.index++);
-        }
-    });
-    core.animateFrame.animateTime = timestamp;
-}
+  }
+  core.status.animateObjs = core.status.animateObjs.filter(function (obj) {
+    return obj.index < obj.animate.frames.length;
+  });
+  core.status.animateObjs.forEach(function (obj) {
+    if (obj.hero) {
+      core.maps._drawAnimateFrame(
+        "animate",
+        obj.animate,
+        core.status.heroCenter.px,
+        core.status.heroCenter.py,
+        obj.index++
+      );
+    } else {
+      core.maps._drawAnimateFrame(
+        "animate",
+        obj.animate,
+        obj.centerX,
+        obj.centerY,
+        obj.index++
+      );
+    }
+  });
+  core.animateFrame.animateTime = timestamp;
+};
 
 control.prototype._animationFrame_heroMoving = function (timestamp) {
-    if (core.status.heroMoving <= 0) return;
-    // 换腿
-    if (timestamp - core.animateFrame.moveTime > core.values.moveSpeed) {
-        core.animateFrame.leftLeg = !core.animateFrame.leftLeg;
-        core.animateFrame.moveTime = timestamp;
-    }
-    core.drawHero(core.animateFrame.leftLeg ? 'leftFoot' : 'rightFoot', 4 * core.status.heroMoving);
-}
+  if (core.status.heroMoving <= 0) return;
+  // 换腿
+  if (timestamp - core.animateFrame.moveTime > core.values.moveSpeed) {
+    core.animateFrame.leftLeg = !core.animateFrame.leftLeg;
+    core.animateFrame.moveTime = timestamp;
+  }
+  core.drawHero(
+    core.animateFrame.leftLeg ? "leftFoot" : "rightFoot",
+    4 * core.status.heroMoving
+  );
+};
 
 control.prototype._animationFrame_weather = function (timestamp) {
-    var weather = core.animateFrame.weather, type = weather.type;
-    if (!core.dymCanvas.weather || !core.control.weathers[type] || !core.control.weathers[type].frameFunc) return;
-    try {
-        core.doFunc(core.control.weathers[type].frameFunc, core.control, timestamp, core.animateFrame.weather.level);
-    } catch (e) {
-        console.error(e);
-        console.error("ERROR in weather[" + type + "]:已自动注销该项。");
-        core.unregisterWeather(type);
-    }
-}
+  var weather = core.animateFrame.weather,
+    type = weather.type;
+  if (
+    !core.dymCanvas.weather ||
+    !core.control.weathers[type] ||
+    !core.control.weathers[type].frameFunc
+  )
+    return;
+  try {
+    core.doFunc(
+      core.control.weathers[type].frameFunc,
+      core.control,
+      timestamp,
+      core.animateFrame.weather.level
+    );
+  } catch (e) {
+    console.error(e);
+    console.error("ERROR in weather[" + type + "]:已自动注销该项。");
+    core.unregisterWeather(type);
+  }
+};
 
 control.prototype._animationFrame_weather_rain = function (timestamp, level) {
-    if (timestamp - core.animateFrame.weather.time < 30) return;
-    var ctx = core.dymCanvas.weather, ox = core.bigmap.offsetX, oy = core.bigmap.offsetY;
-    core.clearMap('weather');
-    ctx.strokeStyle = 'rgba(174,194,224,0.8)';
-    ctx.lineWidth = 1;
-    ctx.lineCap = 'round';
+  if (timestamp - core.animateFrame.weather.time < 30) return;
+  var ctx = core.dymCanvas.weather,
+    ox = core.bigmap.offsetX,
+    oy = core.bigmap.offsetY;
+  core.clearMap("weather");
+  ctx.strokeStyle = "rgba(174,194,224,0.8)";
+  ctx.lineWidth = 1;
+  ctx.lineCap = "round";
 
-    core.animateFrame.weather.nodes.forEach(function (p) {
-        ctx.beginPath();
-        ctx.moveTo(p.x - ox, p.y - oy);
-        ctx.lineTo(p.x + p.l * p.xs - ox, p.y + p.l * p.ys - oy);
-        ctx.stroke();
+  core.animateFrame.weather.nodes.forEach(function (p) {
+    ctx.beginPath();
+    ctx.moveTo(p.x - ox, p.y - oy);
+    ctx.lineTo(p.x + p.l * p.xs - ox, p.y + p.l * p.ys - oy);
+    ctx.stroke();
 
-        p.x += p.xs;
-        p.y += p.ys;
-        if (p.x > core.bigmap.width * 32 || p.y > core.bigmap.height * 32) {
-            p.x = Math.random() * core.bigmap.width * 32;
-            p.y = -10;
-        }
+    p.x += p.xs;
+    p.y += p.ys;
+    if (p.x > core.bigmap.width * 32 || p.y > core.bigmap.height * 32) {
+      p.x = Math.random() * core.bigmap.width * 32;
+      p.y = -10;
+    }
+  });
 
-    });
-
-    ctx.fill();
-    core.animateFrame.weather.time = timestamp;
-}
+  ctx.fill();
+  core.animateFrame.weather.time = timestamp;
+};
 
 control.prototype._animationFrame_weather_snow = function (timestamp, level) {
-    if (timestamp - core.animateFrame.weather.time < 30) return;
-    var ctx = core.dymCanvas.weather, ox = core.bigmap.offsetX, oy = core.bigmap.offsetY;
-    core.clearMap('weather');
-    ctx.fillStyle = "rgba(255, 255, 255, 0.8)";
-    ctx.beginPath();
-    core.animateFrame.weather.data = core.animateFrame.weather.data || 0;
-    core.animateFrame.weather.data += 0.01;
+  if (timestamp - core.animateFrame.weather.time < 30) return;
+  var ctx = core.dymCanvas.weather,
+    ox = core.bigmap.offsetX,
+    oy = core.bigmap.offsetY;
+  core.clearMap("weather");
+  ctx.fillStyle = "rgba(255, 255, 255, 0.8)";
+  ctx.beginPath();
+  core.animateFrame.weather.data = core.animateFrame.weather.data || 0;
+  core.animateFrame.weather.data += 0.01;
 
-    var angle = core.animateFrame.weather.data;
-    core.animateFrame.weather.nodes.forEach(function (p) {
-        ctx.moveTo(p.x - ox, p.y - oy);
-        ctx.arc(p.x - ox, p.y - oy, p.r, 0, Math.PI * 2, true);
-        // update
-        p.x += Math.sin(angle) * core.animateFrame.weather.level;
-        p.y += Math.cos(angle + p.d) + 1 + p.r / 2;
-        if (p.x > core.bigmap.width * 32 + 5 || p.x < -5 || p.y > core.bigmap.height * 32) {
-            if (Math.random() > 1 / 3) {
-                p.x = Math.random() * core.bigmap.width * 32;
-                p.y = -10;
-            }
-            else {
-                if (Math.sin(angle) > 0)
-                    p.x = -5;
-                else
-                    p.x = core.bigmap.width * 32 + 5;
-                p.y = Math.random() * core.bigmap.height * 32;
-            }
-        }
-    });
-    ctx.fill();
-    core.animateFrame.weather.time = timestamp;
-}
+  var angle = core.animateFrame.weather.data;
+  core.animateFrame.weather.nodes.forEach(function (p) {
+    ctx.moveTo(p.x - ox, p.y - oy);
+    ctx.arc(p.x - ox, p.y - oy, p.r, 0, Math.PI * 2, true);
+    // update
+    p.x += Math.sin(angle) * core.animateFrame.weather.level;
+    p.y += Math.cos(angle + p.d) + 1 + p.r / 2;
+    if (
+      p.x > core.bigmap.width * 32 + 5 ||
+      p.x < -5 ||
+      p.y > core.bigmap.height * 32
+    ) {
+      if (Math.random() > 1 / 3) {
+        p.x = Math.random() * core.bigmap.width * 32;
+        p.y = -10;
+      } else {
+        if (Math.sin(angle) > 0) p.x = -5;
+        else p.x = core.bigmap.width * 32 + 5;
+        p.y = Math.random() * core.bigmap.height * 32;
+      }
+    }
+  });
+  ctx.fill();
+  core.animateFrame.weather.time = timestamp;
+};
 
 control.prototype.__animateFrame_weather_image = function (timestamp, level) {
-    if (timestamp - core.animateFrame.weather.time < 30) return;
-    var node = core.animateFrame.weather.nodes[0];
-    var image = node.image;
-    if (!image) return;
-    core.clearMap('weather');
-    core.setAlpha('weather', node.level / 500);
-    var wind = 1.5;
-    var width = image.width, height = image.height;
-    node.x += node.dx * wind;
-    node.y += (2 * node.dy - 1) * wind;
-    if (node.x + 3 * width <= core._PX_) {
-        node.x += 4 * width;
-        while (node.x > 0) node.x -= width;
+  if (timestamp - core.animateFrame.weather.time < 30) return;
+  var node = core.animateFrame.weather.nodes[0];
+  var image = node.image;
+  if (!image) return;
+  core.clearMap("weather");
+  core.setAlpha("weather", node.level / 500);
+  var wind = 1.5;
+  var width = image.width,
+    height = image.height;
+  node.x += node.dx * wind;
+  node.y += (2 * node.dy - 1) * wind;
+  if (node.x + 3 * width <= core._PX_) {
+    node.x += 4 * width;
+    while (node.x > 0) node.x -= width;
+  }
+  node.dy += node.delta;
+  if (node.dy >= 1) {
+    node.delta = -0.001;
+  } else if (node.dy <= 0) {
+    node.delta = 0.001;
+  }
+  if (node.y + 3 * height <= core._PY_) {
+    node.y += 4 * height;
+    while (node.y > 0) node.y -= height;
+  } else if (node.y >= 0) {
+    node.y -= height;
+  }
+  for (var i = 0; i < 3; ++i) {
+    for (var j = 0; j < 3; ++j) {
+      if (
+        node.x + (i + 1) * width <= 0 ||
+        node.x + i * width >= core._PX_ ||
+        node.y + (j + 1) * height <= 0 ||
+        node.y + j * height >= core._PY_
+      )
+        continue;
+      core.drawImage("weather", image, node.x + i * width, node.y + j * height);
     }
-    node.dy += node.delta;
-    if (node.dy >= 1) {
-        node.delta = -0.001;
-    } else if (node.dy <= 0) {
-        node.delta = 0.001;
-    }
-    if (node.y + 3 * height <= core._PY_) {
-        node.y += 4 * height;
-        while (node.y > 0) node.y -= height;
-    }
-    else if (node.y >= 0) {
-        node.y -= height;
-    }
-    for (var i = 0; i < 3; ++i) {
-        for (var j = 0; j < 3; ++j) {
-            if (node.x + (i + 1) * width <= 0 || node.x + i * width >= core._PX_
-                || node.y + (j + 1) * height <= 0 || node.y + j * height >= core._PY_)
-                continue;
-            core.drawImage('weather', image, node.x + i * width, node.y + j * height);
-        }
-    }
-    core.setAlpha('weather', 1);
-    core.animateFrame.weather.time = timestamp;
-}
+  }
+  core.setAlpha("weather", 1);
+  core.animateFrame.weather.time = timestamp;
+};
 
 control.prototype._animationFrame_weather_sun = function (timestamp, level) {
-    if (timestamp - core.animateFrame.weather.time < 30) return;
-    var node = core.animateFrame.weather.nodes[0];
-    var opacity = node.opacity + node.delta;
-    if (opacity > level / 10 + 0.3 || opacity < level / 10 - 0.3)
-        node.delta = -node.delta;
-    node.opacity = opacity;
-    core.setOpacity('weather', core.clamp(opacity, 0, 1));
-    core.animateFrame.weather.time = timestamp;
-}
+  if (timestamp - core.animateFrame.weather.time < 30) return;
+  var node = core.animateFrame.weather.nodes[0];
+  var opacity = node.opacity + node.delta;
+  if (opacity > level / 10 + 0.3 || opacity < level / 10 - 0.3)
+    node.delta = -node.delta;
+  node.opacity = opacity;
+  core.setOpacity("weather", core.clamp(opacity, 0, 1));
+  core.animateFrame.weather.time = timestamp;
+};
 
 control.prototype._animateFrame_tip = function (timestamp) {
-    if (core.animateFrame.tip == null) return;
-    var tip = core.animateFrame.tip;
-    if (timestamp - tip.time <= 30) return;
-    var delta = timestamp - tip.time;
-    tip.time = timestamp;
+  if (core.animateFrame.tip == null) return;
+  var tip = core.animateFrame.tip;
+  if (timestamp - tip.time <= 30) return;
+  var delta = timestamp - tip.time;
+  tip.time = timestamp;
 
-    core.setFont('data', "16px Arial");
-    core.setTextAlign('data', 'left');
-    core.clearMap('data', 0, 0, core._PX_, 50);
-    core.ui._drawTip_drawOne(tip);
-    if (tip.stage == 1) {
-        tip.opacity += 0.05;
-        if (tip.opacity >= 0.6) {
-            tip.stage = 2;
-            tip.displayTime = 0;
-        }
-    } else if (tip.stage == 2) {
-        tip.displayTime += delta;
-        if (tip.displayTime >= 1000) tip.stage = 3;
-    } else tip.opacity -= 0.05;
-
-    if (tip.opacity <= 0) {
-        core.animateFrame.tip = null;
+  core.setFont("data", "16px Arial");
+  core.setTextAlign("data", "left");
+  core.clearMap("data", 0, 0, core._PX_, 50);
+  core.ui._drawTip_drawOne(tip);
+  if (tip.stage == 1) {
+    tip.opacity += 0.05;
+    if (tip.opacity >= 0.6) {
+      tip.stage = 2;
+      tip.displayTime = 0;
     }
-}
+  } else if (tip.stage == 2) {
+    tip.displayTime += delta;
+    if (tip.displayTime >= 1000) tip.stage = 3;
+  } else tip.opacity -= 0.05;
+
+  if (tip.opacity <= 0) {
+    core.animateFrame.tip = null;
+  }
+};
 
 control.prototype._animationFrame_parallelDo = function (timestamp) {
-    core.control.controldata.parallelDo(timestamp);
-}
+  core.control.controldata.parallelDo(timestamp);
+};
 
 // ------ 标题界面的处理 ------ //
 
 ////// 显示游戏开始界面 //////
 control.prototype.showStartAnimate = function (noAnimate, callback) {
-    this._showStartAnimate_resetDom();
-    if (core.flags.startUsingCanvas || noAnimate)
-        return this._showStartAnimate_finished(core.flags.startUsingCanvas, callback);
-    core.hideWithAnimate(core.dom.startTop, 20, function () {
-        core.control._showStartAnimate_finished(false, callback);
-    });
-}
+  this._showStartAnimate_resetDom();
+  if (core.flags.startUsingCanvas || noAnimate)
+    return this._showStartAnimate_finished(
+      core.flags.startUsingCanvas,
+      callback
+    );
+  core.hideWithAnimate(core.dom.startTop, 20, function () {
+    core.control._showStartAnimate_finished(false, callback);
+  });
+};
 
 control.prototype._showStartAnimate_resetDom = function () {
-    core.dom.startPanel.style.opacity = 1;
-    core.dom.startPanel.style.display = "block";
-    core.dom.startTop.style.opacity = 1;
-    core.dom.startTop.style.display = "block";
-    core.dom.startButtonGroup.style.display = 'none';
-    core.dom.startButtons.style.display = 'block';
-    core.dom.levelChooseButtons.style.display = 'none';
-    core.status.played = false;
-    core.clearStatus();
-    core.clearMap('all');
-    core.dom.musicBtn.style.display = 'block';
-    core.setMusicBtn();
-    // 重置音量
-    core.events.setVolume(1, 0);
-    core.updateStatusBar();
-}
+  core.dom.startPanel.style.opacity = 1;
+  core.dom.startPanel.style.display = "block";
+  core.dom.startTop.style.opacity = 1;
+  core.dom.startTop.style.display = "block";
+  core.dom.startButtonGroup.style.display = "none";
+  core.dom.startButtons.style.display = "block";
+  core.dom.levelChooseButtons.style.display = "none";
+  core.status.played = false;
+  core.clearStatus();
+  core.clearMap("all");
+  core.dom.musicBtn.style.display = "block";
+  core.setMusicBtn();
+  // 重置音量
+  core.events.setVolume(1, 0);
+  core.updateStatusBar();
+};
 
 control.prototype._showStartAnimate_finished = function (start, callback) {
-    core.dom.startTop.style.display = 'none';
-    core.dom.startButtonGroup.style.display = 'block';
-    main.selectedButton = null;
-    main.selectButton(0);
-    if (start) core.startGame();
-    if (callback) callback();
-}
+  core.dom.startTop.style.display = "none";
+  core.dom.startButtonGroup.style.display = "block";
+  main.selectedButton = null;
+  main.selectButton(0);
+  if (start) core.startGame();
+  if (callback) callback();
+};
 
 ////// 隐藏游戏开始界面 //////
 control.prototype.hideStartAnimate = function (callback) {
-    core.hideWithAnimate(core.dom.startPanel, 20, callback);
-}
+  core.hideWithAnimate(core.dom.startPanel, 20, callback);
+};
 
 ////// 游戏是否已经开始 //////
 control.prototype.isPlaying = function () {
-    return core.status.played;
-}
+  return core.status.played;
+};
 
 ////// 清除游戏状态和数据 //////
 control.prototype.clearStatus = function () {
-    // 停止各个Timeout和Interval
-    for (var i in core.timeout) {
-        clearTimeout(core.timeout[i]);
-        core.timeout[i] = null;
-    }
-    for (var i in core.interval) {
-        clearInterval(core.interval[i]);
-        core.interval[i] = null;
-    }
-    core.status = {};
-    core.clearStatusBar();
-    core.deleteAllCanvas();
-    core.status.played = false;
-}
+  // 停止各个Timeout和Interval
+  for (var i in core.timeout) {
+    clearTimeout(core.timeout[i]);
+    core.timeout[i] = null;
+  }
+  for (var i in core.interval) {
+    clearInterval(core.interval[i]);
+    core.interval[i] = null;
+  }
+  core.status = {};
+  core.clearStatusBar();
+  core.deleteAllCanvas();
+  core.status.played = false;
+};
 
 control.prototype._initStatistics = function (totalTime) {
-    if (!core.isset(core.status.hero.statistics))
-        core.status.hero.statistics = {
-            'totalTime': totalTime,
-            'currTime': 0,
-            'hp': 0,
-            "battle": 0,
-            'money': 0,
-            'exp': 0,
-            'battleDamage': 0,
-            'poisonDamage': 0,
-            'extraDamage': 0,
-            'moveDirectly': 0,
-            'ignoreSteps': 0,
-        }
-}
+  if (!core.isset(core.status.hero.statistics))
+    core.status.hero.statistics = {
+      totalTime: totalTime,
+      currTime: 0,
+      hp: 0,
+      battle: 0,
+      money: 0,
+      exp: 0,
+      battleDamage: 0,
+      poisonDamage: 0,
+      extraDamage: 0,
+      moveDirectly: 0,
+      ignoreSteps: 0,
+    };
+};
 
 // ------ 自动寻路,人物行走 ------ //
 
 ////// 清除自动寻路路线 //////
 control.prototype.clearAutomaticRouteNode = function (x, y) {
-    core.clearMap('route', x * 32 + 5 - core.status.automaticRoute.offsetX, y * 32 + 5 - core.status.automaticRoute.offsetY, 27, 27);
-}
+  core.clearMap(
+    "route",
+    x * 32 + 5 - core.status.automaticRoute.offsetX,
+    y * 32 + 5 - core.status.automaticRoute.offsetY,
+    27,
+    27
+  );
+};
 
 ////// 停止自动寻路操作 //////
 control.prototype.stopAutomaticRoute = function () {
-    if (!core.status.played) return;
-    core.status.automaticRoute.autoHeroMove = false;
-    core.status.automaticRoute.autoStep = 0;
-    core.status.automaticRoute.destStep = 0;
-    core.status.automaticRoute.movedStep = 0;
-    core.status.automaticRoute.autoStepRoutes = [];
-    core.status.automaticRoute.destX = null;
-    core.status.automaticRoute.destY = null;
-    core.status.automaticRoute.lastDirection = null;
-    core.status.heroStop = true;
-    if (core.status.automaticRoute.moveStepBeforeStop.length == 0)
-        core.deleteCanvas('route');
-}
+  if (!core.status.played) return;
+  core.status.automaticRoute.autoHeroMove = false;
+  core.status.automaticRoute.autoStep = 0;
+  core.status.automaticRoute.destStep = 0;
+  core.status.automaticRoute.movedStep = 0;
+  core.status.automaticRoute.autoStepRoutes = [];
+  core.status.automaticRoute.destX = null;
+  core.status.automaticRoute.destY = null;
+  core.status.automaticRoute.lastDirection = null;
+  core.status.heroStop = true;
+  if (core.status.automaticRoute.moveStepBeforeStop.length == 0)
+    core.deleteCanvas("route");
+};
 
 ////// 保存剩下的寻路,并停止 //////
 control.prototype.saveAndStopAutomaticRoute = function () {
-    var automaticRoute = core.status.automaticRoute;
-    if (automaticRoute.moveStepBeforeStop.length == 0) {
-        automaticRoute.moveStepBeforeStop = automaticRoute.autoStepRoutes.slice(automaticRoute.autoStep - 1);
-        if (automaticRoute.moveStepBeforeStop.length >= 1)
-            automaticRoute.moveStepBeforeStop[0].step -= automaticRoute.movedStep;
-    }
-    this.stopAutomaticRoute();
-}
+  var automaticRoute = core.status.automaticRoute;
+  if (automaticRoute.moveStepBeforeStop.length == 0) {
+    automaticRoute.moveStepBeforeStop = automaticRoute.autoStepRoutes.slice(
+      automaticRoute.autoStep - 1
+    );
+    if (automaticRoute.moveStepBeforeStop.length >= 1)
+      automaticRoute.moveStepBeforeStop[0].step -= automaticRoute.movedStep;
+  }
+  this.stopAutomaticRoute();
+};
 
 ////// 继续剩下的自动寻路操作 //////
 control.prototype.continueAutomaticRoute = function () {
-    // 此函数只应由events.afterOpenDoor和events.afterBattle调用
-    var moveStep = core.status.automaticRoute.moveStepBeforeStop;
-    //core.status.automaticRoute.moveStepBeforeStop = [];
-    if (moveStep.length === 0 || (moveStep.length === 1 && moveStep[0].step === 1)) {
-        core.status.automaticRoute.moveStepBeforeStop = [];
-    }
-    else {
-        core.setAutoHeroMove(moveStep);
-    }
-}
+  // 此函数只应由events.afterOpenDoor和events.afterBattle调用
+  var moveStep = core.status.automaticRoute.moveStepBeforeStop;
+  //core.status.automaticRoute.moveStepBeforeStop = [];
+  if (
+    moveStep.length === 0 ||
+    (moveStep.length === 1 && moveStep[0].step === 1)
+  ) {
+    core.status.automaticRoute.moveStepBeforeStop = [];
+  } else {
+    core.setAutoHeroMove(moveStep);
+  }
+};
 
 ////// 清空剩下的自动寻路列表 //////
 control.prototype.clearContinueAutomaticRoute = function (callback) {
-    core.deleteCanvas('route');
-    core.status.automaticRoute.moveStepBeforeStop = [];
-    if (callback) callback();
-}
+  core.deleteCanvas("route");
+  core.status.automaticRoute.moveStepBeforeStop = [];
+  if (callback) callback();
+};
 
 ////// 设置自动寻路路线 //////
 control.prototype.setAutomaticRoute = function (destX, destY, stepPostfix) {
-    if (!core.status.played || core.status.lockControl) return;
-    if (this._setAutomaticRoute_isMoving(destX, destY)) return;
-    if (this._setAutomaticRoute_isTurning(destX, destY, stepPostfix)) return;
-    if (this._setAutomaticRoute_clickMoveDirectly(destX, destY, stepPostfix)) return;
-    // 找寻自动寻路路线
-    var moveStep = core.automaticRoute(destX, destY);
-    if (moveStep.length == 0 && (destX != core.status.hero.loc.x || destY != core.status.hero.loc.y || stepPostfix.length == 0))
-        return;
-    moveStep = moveStep.concat(stepPostfix);
-    core.status.automaticRoute.destX = destX;
-    core.status.automaticRoute.destY = destY;
-    this._setAutomaticRoute_drawRoute(moveStep);
-    this._setAutomaticRoute_setAutoSteps(moveStep);
-    // 立刻移动
-    core.setAutoHeroMove();
-}
+  if (!core.status.played || core.status.lockControl) return;
+  if (this._setAutomaticRoute_isMoving(destX, destY)) return;
+  if (this._setAutomaticRoute_isTurning(destX, destY, stepPostfix)) return;
+  if (this._setAutomaticRoute_clickMoveDirectly(destX, destY, stepPostfix))
+    return;
+  // 找寻自动寻路路线
+  var moveStep = core.automaticRoute(destX, destY);
+  if (
+    moveStep.length == 0 &&
+    (destX != core.status.hero.loc.x ||
+      destY != core.status.hero.loc.y ||
+      stepPostfix.length == 0)
+  )
+    return;
+  moveStep = moveStep.concat(stepPostfix);
+  core.status.automaticRoute.destX = destX;
+  core.status.automaticRoute.destY = destY;
+  this._setAutomaticRoute_drawRoute(moveStep);
+  this._setAutomaticRoute_setAutoSteps(moveStep);
+  // 立刻移动
+  core.setAutoHeroMove();
+};
 
 control.prototype._setAutomaticRoute_isMoving = function (destX, destY) {
-    if (core.status.automaticRoute.autoHeroMove) {
-        var lastX = core.status.automaticRoute.destX, lastY = core.status.automaticRoute.destY;
-        core.stopAutomaticRoute();
-        // 双击瞬移
-        if (lastX == destX && lastY == destY) {
-            core.status.automaticRoute.moveDirectly = true;
-            setTimeout(function () {
-                if (core.status.automaticRoute.moveDirectly && core.status.heroMoving == 0) {
-                    core.control.tryMoveDirectly(destX, destY);
-                }
-                core.status.automaticRoute.moveDirectly = false;
-            }, core.values.moveSpeed);
+  if (core.status.automaticRoute.autoHeroMove) {
+    var lastX = core.status.automaticRoute.destX,
+      lastY = core.status.automaticRoute.destY;
+    core.stopAutomaticRoute();
+    // 双击瞬移
+    if (lastX == destX && lastY == destY) {
+      core.status.automaticRoute.moveDirectly = true;
+      setTimeout(function () {
+        if (
+          core.status.automaticRoute.moveDirectly &&
+          core.status.heroMoving == 0
+        ) {
+          core.control.tryMoveDirectly(destX, destY);
         }
-        return true;
+        core.status.automaticRoute.moveDirectly = false;
+      }, core.values.moveSpeed);
     }
-    return false;
-}
+    return true;
+  }
+  return false;
+};
 
-control.prototype._setAutomaticRoute_isTurning = function (destX, destY, stepPostfix) {
-    if (destX == core.status.hero.loc.x && destY == core.status.hero.loc.y && stepPostfix.length == 0) {
-        if (core.timeout.turnHeroTimeout == null) {
-            var routeLength = core.status.route.length;
-            core.timeout.turnHeroTimeout = setTimeout(function () {
-                if (core.status.route.length == routeLength) core.turnHero();
-                clearTimeout(core.timeout.turnHeroTimeout);
-                core.timeout.turnHeroTimeout = null;
-            }, 250);
-        }
-        else {
-            clearTimeout(core.timeout.turnHeroTimeout);
-            core.timeout.turnHeroTimeout = null;
-            core.getNextItem();
-        }
-        return true;
+control.prototype._setAutomaticRoute_isTurning = function (
+  destX,
+  destY,
+  stepPostfix
+) {
+  if (
+    destX == core.status.hero.loc.x &&
+    destY == core.status.hero.loc.y &&
+    stepPostfix.length == 0
+  ) {
+    if (core.timeout.turnHeroTimeout == null) {
+      var routeLength = core.status.route.length;
+      core.timeout.turnHeroTimeout = setTimeout(function () {
+        if (core.status.route.length == routeLength) core.turnHero();
+        clearTimeout(core.timeout.turnHeroTimeout);
+        core.timeout.turnHeroTimeout = null;
+      }, 250);
+    } else {
+      clearTimeout(core.timeout.turnHeroTimeout);
+      core.timeout.turnHeroTimeout = null;
+      core.getNextItem();
     }
-    if (core.timeout.turnHeroTimeout != null) return true;
-    return false;
-}
+    return true;
+  }
+  if (core.timeout.turnHeroTimeout != null) return true;
+  return false;
+};
 
-control.prototype._setAutomaticRoute_clickMoveDirectly = function (destX, destY, stepPostfix) {
-    // 单击瞬间移动
-    if (core.status.heroStop && core.status.heroMoving == 0) {
-        if (stepPostfix.length <= 1 && !core.hasFlag('__noClickMove__') && core.control.tryMoveDirectly(destX, destY))
-            return true;
-    }
-    return false;
-}
+control.prototype._setAutomaticRoute_clickMoveDirectly = function (
+  destX,
+  destY,
+  stepPostfix
+) {
+  // 单击瞬间移动
+  if (core.status.heroStop && core.status.heroMoving == 0) {
+    if (
+      stepPostfix.length <= 1 &&
+      !core.hasFlag("__noClickMove__") &&
+      core.control.tryMoveDirectly(destX, destY)
+    )
+      return true;
+  }
+  return false;
+};
 
 control.prototype._setAutomaticRoute_drawRoute = function (moveStep) {
-    // 计算绘制区域的宽高,并尽可能小的创建route层
-    var sx = core.bigmap.width * 32, sy = core.bigmap.height * 32, dx = 0, dy = 0;
-    moveStep.forEach(function (t) {
-        sx = Math.min(sx, t.x * 32); dx = Math.max(dx, t.x * 32);
-        sy = Math.min(sy, t.y * 32); dy = Math.max(dy, t.y * 32);
-    });
-    core.status.automaticRoute.offsetX = sx;
-    core.status.automaticRoute.offsetY = sy;
-    var ctx = core.createCanvas('route', sx - core.bigmap.offsetX, sy - core.bigmap.offsetY, dx - sx + 32, dy - sy + 32, 95);
-    ctx.fillStyle = '#bfbfbf';
-    ctx.strokeStyle = '#bfbfbf';
-    ctx.lineWidth = 8;
-    for (var m = 0; m < moveStep.length; m++) {
-        if (m == moveStep.length - 1) {
-            ctx.fillRect(moveStep[m].x * 32 + 10 - sx, moveStep[m].y * 32 + 10 - sy, 12, 12);
-        }
-        else {
-            ctx.beginPath();
-            var cx = moveStep[m].x * 32 + 16 - sx, cy = moveStep[m].y * 32 + 16 - sy;
-            var currDir = moveStep[m].direction, nextDir = moveStep[m + 1].direction;
-            ctx.moveTo(cx - core.utils.scan[currDir].x * 11, cy - core.utils.scan[currDir].y * 11);
-            ctx.lineTo(cx, cy);
-            ctx.lineTo(cx + core.utils.scan[nextDir].x * 11, cy + core.utils.scan[nextDir].y * 11);
-            ctx.stroke();
-        }
+  // 计算绘制区域的宽高,并尽可能小的创建route层
+  var sx = core.bigmap.width * 32,
+    sy = core.bigmap.height * 32,
+    dx = 0,
+    dy = 0;
+  moveStep.forEach(function (t) {
+    sx = Math.min(sx, t.x * 32);
+    dx = Math.max(dx, t.x * 32);
+    sy = Math.min(sy, t.y * 32);
+    dy = Math.max(dy, t.y * 32);
+  });
+  core.status.automaticRoute.offsetX = sx;
+  core.status.automaticRoute.offsetY = sy;
+  var ctx = core.createCanvas(
+    "route",
+    sx - core.bigmap.offsetX,
+    sy - core.bigmap.offsetY,
+    dx - sx + 32,
+    dy - sy + 32,
+    95
+  );
+  ctx.fillStyle = "#bfbfbf";
+  ctx.strokeStyle = "#bfbfbf";
+  ctx.lineWidth = 8;
+  for (var m = 0; m < moveStep.length; m++) {
+    if (m == moveStep.length - 1) {
+      ctx.fillRect(
+        moveStep[m].x * 32 + 10 - sx,
+        moveStep[m].y * 32 + 10 - sy,
+        12,
+        12
+      );
+    } else {
+      ctx.beginPath();
+      var cx = moveStep[m].x * 32 + 16 - sx,
+        cy = moveStep[m].y * 32 + 16 - sy;
+      var currDir = moveStep[m].direction,
+        nextDir = moveStep[m + 1].direction;
+      ctx.moveTo(
+        cx - core.utils.scan[currDir].x * 11,
+        cy - core.utils.scan[currDir].y * 11
+      );
+      ctx.lineTo(cx, cy);
+      ctx.lineTo(
+        cx + core.utils.scan[nextDir].x * 11,
+        cy + core.utils.scan[nextDir].y * 11
+      );
+      ctx.stroke();
     }
-}
+  }
+};
 
 control.prototype._setAutomaticRoute_setAutoSteps = function (moveStep) {
-    // 路线转autoStepRoutes
-    var step = 0, currStep = null;
-    moveStep.forEach(function (t) {
-        var dir = t.direction;
-        if (currStep == null || currStep == dir)
-            step++;
-        else {
-            core.status.automaticRoute.autoStepRoutes.push({ 'direction': currStep, 'step': step });
-            step = 1;
-        }
-        currStep = dir;
-    });
-    core.status.automaticRoute.autoStepRoutes.push({ 'direction': currStep, 'step': step });
-}
+  // 路线转autoStepRoutes
+  var step = 0,
+    currStep = null;
+  moveStep.forEach(function (t) {
+    var dir = t.direction;
+    if (currStep == null || currStep == dir) step++;
+    else {
+      core.status.automaticRoute.autoStepRoutes.push({
+        direction: currStep,
+        step: step,
+      });
+      step = 1;
+    }
+    currStep = dir;
+  });
+  core.status.automaticRoute.autoStepRoutes.push({
+    direction: currStep,
+    step: step,
+  });
+};
 
 ////// 设置勇士的自动行走路线 //////
 control.prototype.setAutoHeroMove = function (steps) {
-    steps = steps || core.status.automaticRoute.autoStepRoutes;
-    if (steps.length == 0) return;
-    core.status.automaticRoute.autoStepRoutes = steps;
-    core.status.automaticRoute.autoHeroMove = true;
-    core.status.automaticRoute.autoStep = 1;
-    core.status.automaticRoute.destStep = steps[0].step;
-    core.moveHero(steps[0].direction);
-}
+  steps = steps || core.status.automaticRoute.autoStepRoutes;
+  if (steps.length == 0) return;
+  core.status.automaticRoute.autoStepRoutes = steps;
+  core.status.automaticRoute.autoHeroMove = true;
+  core.status.automaticRoute.autoStep = 1;
+  core.status.automaticRoute.destStep = steps[0].step;
+  core.moveHero(steps[0].direction);
+};
 
 ////// 设置行走的效果动画 //////
 control.prototype.setHeroMoveInterval = function (callback) {
-    if (core.status.heroMoving > 0) return;
-    if (core.status.replay.speed == 24) {
-        if (callback) callback();
-        return;
+  if (core.status.heroMoving > 0) return;
+  if (core.status.replay.speed == 24) {
+    if (callback) callback();
+    return;
+  }
+
+  core.status.heroMoving = 1;
+
+  var toAdd = 1;
+  if (core.status.replay.speed > 3) toAdd = 2;
+  if (core.status.replay.speed > 6) toAdd = 4;
+  if (core.status.replay.speed > 12) toAdd = 8;
+
+  core.interval.heroMoveInterval = window.setInterval(function () {
+    core.status.heroMoving += toAdd;
+    if (core.status.heroMoving >= 8) {
+      clearInterval(core.interval.heroMoveInterval);
+      core.status.heroMoving = 0;
+      if (callback) callback();
     }
-
-    core.status.heroMoving = 1;
-
-    var toAdd = 1;
-    if (core.status.replay.speed > 3) toAdd = 2;
-    if (core.status.replay.speed > 6) toAdd = 4;
-    if (core.status.replay.speed > 12) toAdd = 8;
-
-    core.interval.heroMoveInterval = window.setInterval(function () {
-        core.status.heroMoving += toAdd;
-        if (core.status.heroMoving >= 8) {
-            clearInterval(core.interval.heroMoveInterval);
-            core.status.heroMoving = 0;
-            if (callback) callback();
-        }
-    }, core.values.moveSpeed / 8 * toAdd / core.status.replay.speed);
-}
+  }, ((core.values.moveSpeed / 8) * toAdd) / core.status.replay.speed);
+};
 
 ////// 每移动一格后执行的事件 //////
 control.prototype.moveOneStep = function (callback) {
-    return this.controldata.moveOneStep(callback);
-}
+  return this.controldata.moveOneStep(callback);
+};
 
 ////// 实际每一步的行走过程 //////
 control.prototype.moveAction = function (callback) {
-    if (core.status.heroMoving > 0) return;
-    var noPass = core.noPass(core.nextX(), core.nextY()), canMove = core.canMoveHero();
-    // 下一个点如果不能走
-    if (noPass || !canMove) return this._moveAction_noPass(canMove, callback);
-    this._moveAction_moving(callback);
-}
+  if (core.status.heroMoving > 0) return;
+  var noPass = core.noPass(core.nextX(), core.nextY()),
+    canMove = core.canMoveHero();
+  // 下一个点如果不能走
+  if (noPass || !canMove) return this._moveAction_noPass(canMove, callback);
+  this._moveAction_moving(callback);
+};
 
 control.prototype._moveAction_noPass = function (canMove, callback) {
-    core.status.route.push(core.getHeroLoc('direction'));
-    core.status.automaticRoute.moveStepBeforeStop = [];
-    core.status.automaticRoute.lastDirection = core.getHeroLoc('direction');
-    if (canMove) core.trigger(core.nextX(), core.nextY());
-    core.drawHero();
+  core.status.route.push(core.getHeroLoc("direction"));
+  core.status.automaticRoute.moveStepBeforeStop = [];
+  core.status.automaticRoute.lastDirection = core.getHeroLoc("direction");
+  if (canMove) core.trigger(core.nextX(), core.nextY());
+  core.drawHero();
 
-    if (core.status.automaticRoute.moveStepBeforeStop.length == 0) {
-        core.clearContinueAutomaticRoute();
-        core.stopAutomaticRoute();
-    }
-    if (callback) callback();
-}
+  if (core.status.automaticRoute.moveStepBeforeStop.length == 0) {
+    core.clearContinueAutomaticRoute();
+    core.stopAutomaticRoute();
+  }
+  if (callback) callback();
+};
 
 control.prototype._moveAction_moving = function (callback) {
-    core.setHeroMoveInterval(function () {
-        core.setHeroLoc('x', core.nextX(), true);
-        core.setHeroLoc('y', core.nextY(), true);
+  core.setHeroMoveInterval(function () {
+    core.setHeroLoc("x", core.nextX(), true);
+    core.setHeroLoc("y", core.nextY(), true);
 
-        var direction = core.getHeroLoc('direction');
-        core.control._moveAction_popAutomaticRoute();
-        core.status.route.push(direction);
+    var direction = core.getHeroLoc("direction");
+    core.control._moveAction_popAutomaticRoute();
+    core.status.route.push(direction);
 
-        core.moveOneStep();
-        core.checkRouteFolding();
-        if (callback) callback();
-    });
-}
+    core.moveOneStep();
+    core.checkRouteFolding();
+    if (callback) callback();
+  });
+};
 
 control.prototype._moveAction_popAutomaticRoute = function () {
-    var automaticRoute = core.status.automaticRoute;
-    // 检查自动寻路是否被弹出
-    if (automaticRoute.autoHeroMove) {
-        automaticRoute.movedStep++;
-        automaticRoute.lastDirection = core.getHeroLoc('direction');
-        if (automaticRoute.destStep == automaticRoute.movedStep) {
-            if (automaticRoute.autoStep == automaticRoute.autoStepRoutes.length) {
-                core.clearContinueAutomaticRoute();
-                core.stopAutomaticRoute();
-            }
-            else {
-                automaticRoute.movedStep = 0;
-                automaticRoute.destStep = automaticRoute.autoStepRoutes[automaticRoute.autoStep].step;
-                core.setHeroLoc('direction', automaticRoute.autoStepRoutes[automaticRoute.autoStep].direction);
-                core.status.automaticRoute.autoStep++;
-            }
-        }
+  var automaticRoute = core.status.automaticRoute;
+  // 检查自动寻路是否被弹出
+  if (automaticRoute.autoHeroMove) {
+    automaticRoute.movedStep++;
+    automaticRoute.lastDirection = core.getHeroLoc("direction");
+    if (automaticRoute.destStep == automaticRoute.movedStep) {
+      if (automaticRoute.autoStep == automaticRoute.autoStepRoutes.length) {
+        core.clearContinueAutomaticRoute();
+        core.stopAutomaticRoute();
+      } else {
+        automaticRoute.movedStep = 0;
+        automaticRoute.destStep =
+          automaticRoute.autoStepRoutes[automaticRoute.autoStep].step;
+        core.setHeroLoc(
+          "direction",
+          automaticRoute.autoStepRoutes[automaticRoute.autoStep].direction
+        );
+        core.status.automaticRoute.autoStep++;
+      }
     }
-}
+  }
+};
 
 ////// 让勇士开始移动 //////
 control.prototype.moveHero = function (direction, callback) {
-    // 如果正在移动,直接return
-    if (core.status.heroMoving != 0) return;
-    if (core.isset(direction))
-        core.setHeroLoc('direction', direction);
+  // 如果正在移动,直接return
+  if (core.status.heroMoving != 0) return;
+  if (core.isset(direction)) core.setHeroLoc("direction", direction);
 
-    if (callback) return this.moveAction(callback);
-    this._moveHero_moving();
-}
+  if (callback) return this.moveAction(callback);
+  this._moveHero_moving();
+};
 
 control.prototype._moveHero_moving = function () {
-    // ------ 我已经看不懂这个函数了,反正好用就行23333333
-    core.status.heroStop = false;
-    core.status.automaticRoute.moveDirectly = false;
-    var move = function () {
-        if (!core.status.heroStop) {
-            if (core.hasFlag('debug') && core.status.ctrlDown) {
-                if (core.status.heroMoving != 0) return;
-                // 检测是否穿出去
-                var nx = core.nextX(), ny = core.nextY();
-                if (nx < 0 || nx >= core.bigmap.width || ny < 0 || ny >= core.bigmap.height) return;
-                core.eventMoveHero([core.getHeroLoc('direction')], core.values.moveSpeed, move);
-            }
-            else {
-                core.moveAction();
-                setTimeout(move, 50);
-            }
-        }
+  // ------ 我已经看不懂这个函数了,反正好用就行23333333
+  core.status.heroStop = false;
+  core.status.automaticRoute.moveDirectly = false;
+  var move = function () {
+    if (!core.status.heroStop) {
+      if (core.hasFlag("debug") && core.status.ctrlDown) {
+        if (core.status.heroMoving != 0) return;
+        // 检测是否穿出去
+        var nx = core.nextX(),
+          ny = core.nextY();
+        if (
+          nx < 0 ||
+          nx >= core.bigmap.width ||
+          ny < 0 ||
+          ny >= core.bigmap.height
+        )
+          return;
+        core.eventMoveHero(
+          [core.getHeroLoc("direction")],
+          core.values.moveSpeed,
+          move
+        );
+      } else {
+        core.moveAction();
+        setTimeout(move, 50);
+      }
     }
-    move();
-}
+  };
+  move();
+};
 
 ////// 当前是否正在移动 //////
 control.prototype.isMoving = function () {
-    return !core.status.heroStop || core.status.heroMoving > 0;
-}
+  return !core.status.heroStop || core.status.heroMoving > 0;
+};
 
 ////// 停止勇士的一切行动,等待勇士行动结束后,再执行callback //////
 control.prototype.waitHeroToStop = function (callback) {
-    var lastDirection = core.status.automaticRoute.lastDirection;
-    core.stopAutomaticRoute();
-    core.clearContinueAutomaticRoute();
-    if (callback) {
-        core.status.replay.animate = true;
-        core.lockControl();
-        core.status.automaticRoute.moveDirectly = false;
-        setTimeout(function () {
-            core.status.replay.animate = false;
-            if (core.isset(lastDirection))
-                core.setHeroLoc('direction', lastDirection);
-            core.drawHero();
-            callback();
-        }, core.status.replay.speed == 24 ? 1 : 30);
-    }
-}
+  var lastDirection = core.status.automaticRoute.lastDirection;
+  core.stopAutomaticRoute();
+  core.clearContinueAutomaticRoute();
+  if (callback) {
+    core.status.replay.animate = true;
+    core.lockControl();
+    core.status.automaticRoute.moveDirectly = false;
+    setTimeout(
+      function () {
+        core.status.replay.animate = false;
+        if (core.isset(lastDirection))
+          core.setHeroLoc("direction", lastDirection);
+        core.drawHero();
+        callback();
+      },
+      core.status.replay.speed == 24 ? 1 : 30
+    );
+  }
+};
 
 ////// 转向 //////
 control.prototype.turnHero = function (direction) {
-    if (direction) {
-        core.setHeroLoc('direction', direction);
-        core.drawHero();
-        core.status.route.push("turn:" + direction);
-        return;
-    }
-    core.setHeroLoc('direction', core.turnDirection(':right'));
+  if (direction) {
+    core.setHeroLoc("direction", direction);
     core.drawHero();
-    core.status.route.push("turn");
-    core.checkRouteFolding();
-}
+    core.status.route.push("turn:" + direction);
+    return;
+  }
+  core.setHeroLoc("direction", core.turnDirection(":right"));
+  core.drawHero();
+  core.status.route.push("turn");
+  core.checkRouteFolding();
+};
 
 ////// 瞬间移动 //////
 control.prototype.moveDirectly = function (destX, destY, ignoreSteps) {
-    return this.controldata.moveDirectly(destX, destY, ignoreSteps);
-}
+  return this.controldata.moveDirectly(destX, destY, ignoreSteps);
+};
 
 ////// 尝试瞬间移动 //////
 control.prototype.tryMoveDirectly = function (destX, destY) {
-    if (this.nearHero(destX, destY)) return false;
-    var canMoveArray = core.maps.generateMovableArray();
-    var dirs = [[destX, destY], [destX - 1, destY, "right"], [destX, destY - 1, "down"], [destX, destY + 1, "up"], [destX + 1, destY, "left"]];
-    var canMoveDirectlyArray = core.canMoveDirectlyArray(dirs, canMoveArray);
+  if (this.nearHero(destX, destY)) return false;
+  var canMoveArray = core.maps.generateMovableArray();
+  var dirs = [
+    [destX, destY],
+    [destX - 1, destY, "right"],
+    [destX, destY - 1, "down"],
+    [destX, destY + 1, "up"],
+    [destX + 1, destY, "left"],
+  ];
+  var canMoveDirectlyArray = core.canMoveDirectlyArray(dirs, canMoveArray);
 
-    for (var i = 0; i < dirs.length; ++i) {
-        var d = dirs[i], dx = d[0], dy = d[1], dir = d[2];
-        if (dx < 0 || dx >= core.bigmap.width || dy < 0 || dy >= core.bigmap.height) continue;
-        if (dir && !core.inArray(canMoveArray[dx][dy], dir)) continue;
-        if (canMoveDirectlyArray[i] < 0) continue;
-        if (core.control.moveDirectly(dx, dy, canMoveDirectlyArray[i])) {
-            if (dir) core.moveHero(dir, function () { });
-            return true;
-        }
+  for (var i = 0; i < dirs.length; ++i) {
+    var d = dirs[i],
+      dx = d[0],
+      dy = d[1],
+      dir = d[2];
+    if (dx < 0 || dx >= core.bigmap.width || dy < 0 || dy >= core.bigmap.height)
+      continue;
+    if (dir && !core.inArray(canMoveArray[dx][dy], dir)) continue;
+    if (canMoveDirectlyArray[i] < 0) continue;
+    if (core.control.moveDirectly(dx, dy, canMoveDirectlyArray[i])) {
+      if (dir) core.moveHero(dir, function () {});
+      return true;
     }
-    return false;
-}
+  }
+  return false;
+};
 
 ////// 绘制勇士 //////
 control.prototype.drawHero = function (status, offset, frame) {
-    if (!core.isPlaying() || !core.status.floorId || core.status.gameOver) return;
-    var x = core.getHeroLoc('x'), y = core.getHeroLoc('y'), direction = core.getHeroLoc('direction');
-    status = status || 'stop';
-    if (!offset) offset = 0;
+  if (!core.isPlaying() || !core.status.floorId || core.status.gameOver) return;
+  var x = core.getHeroLoc("x"),
+    y = core.getHeroLoc("y"),
+    direction = core.getHeroLoc("direction");
+  status = status || "stop";
+  if (!offset) offset = 0;
 
-    var way = core.utils.scan2[direction];
-    var dx = way.x, dy = way.y;
-    var offsetX = typeof offset == 'number' ? dx * offset : (offset.x || 0);
-    var offsetY = typeof offset == 'number' ? dy * offset : (offset.y || 0);
-    offset = { x: offsetX, y: offsetY, offset: offset };
+  var way = core.utils.scan2[direction];
+  var dx = way.x,
+    dy = way.y;
+  var offsetX = typeof offset == "number" ? dx * offset : offset.x || 0;
+  var offsetY = typeof offset == "number" ? dy * offset : offset.y || 0;
+  offset = { x: offsetX, y: offsetY, offset: offset };
 
-    core.clearAutomaticRouteNode(x + dx, y + dy);
-    core.clearMap('hero');
-    core.status.heroCenter.px = 32 * x + offsetX + 16;
-    core.status.heroCenter.py = 32 * y + offsetY + 32 - core.material.icons.hero.height / 2;
+  core.clearAutomaticRouteNode(x + dx, y + dy);
+  core.clearMap("hero");
+  core.status.heroCenter.px = 32 * x + offsetX + 16;
+  core.status.heroCenter.py =
+    32 * y + offsetY + 32 - core.material.icons.hero.height / 2;
 
-    // 重置hero层画布
-    core.setGameCanvasTranslate('hero', 0, 0);
-    delete core.canvas.hero._px;
-    delete core.canvas.hero._py;
-    core.status.preview.enabled = false;
-    if (!core.hasFlag('__lockViewport__')) {
-        this._drawHero_updateViewport(x, y, offset);
-    }
+  // 重置hero层画布
+  core.setGameCanvasTranslate("hero", 0, 0);
+  delete core.canvas.hero._px;
+  delete core.canvas.hero._py;
+  core.status.preview.enabled = false;
+  if (!core.hasFlag("__lockViewport__")) {
+    this._drawHero_updateViewport(x, y, offset);
+  }
 
-    this._drawHero_draw(direction, x, y, status, offset, frame);
-}
+  this._drawHero_draw(direction, x, y, status, offset, frame);
+};
 
 control.prototype._drawHero_updateViewport = function (x, y, offset) {
-    core.bigmap.offsetX = core.clamp((x - core._HALF_WIDTH_) * 32 + offset.x, 0, Math.max(32 * core.bigmap.width - core._PX_, 0));
-    core.bigmap.offsetY = core.clamp((y - core._HALF_HEIGHT_) * 32 + offset.y, 0, Math.max(32 * core.bigmap.height - core._PY_, 0));
-    core.control.updateViewport();
-}
+  core.bigmap.offsetX = core.clamp(
+    (x - core._HALF_WIDTH_) * 32 + offset.x,
+    0,
+    Math.max(32 * core.bigmap.width - core._PX_, 0)
+  );
+  core.bigmap.offsetY = core.clamp(
+    (y - core._HALF_HEIGHT_) * 32 + offset.y,
+    0,
+    Math.max(32 * core.bigmap.height - core._PY_, 0)
+  );
+  core.control.updateViewport();
+};
 
-control.prototype._drawHero_draw = function (direction, x, y, status, offset, frame) {
-    offset = offset || { x: 0, y: 0, offset: 0, px: 0, py: 0 };
-    var opacity = core.setAlpha('hero', core.getFlag('__heroOpacity__', 1))
-    this._drawHero_getDrawObjs(direction, x, y, status, offset).forEach(function (block) {
-        core.drawImage('hero', block.img, (block.heroIcon[block.status] + (frame || 0)) % 4 * block.width,
-            block.heroIcon.loc * block.height, block.width, block.height,
-            block.posx + (32 - block.width) / 2, block.posy + 32 - block.height, block.width, block.height);
-    });
-    core.setAlpha('hero', opacity);
-}
+control.prototype._drawHero_draw = function (
+  direction,
+  x,
+  y,
+  status,
+  offset,
+  frame
+) {
+  offset = offset || { x: 0, y: 0, offset: 0, px: 0, py: 0 };
+  var opacity = core.setAlpha("hero", core.getFlag("__heroOpacity__", 1));
+  this._drawHero_getDrawObjs(direction, x, y, status, offset).forEach(function (
+    block
+  ) {
+    core.drawImage(
+      "hero",
+      block.img,
+      ((block.heroIcon[block.status] + (frame || 0)) % 4) * block.width,
+      block.heroIcon.loc * block.height,
+      block.width,
+      block.height,
+      block.posx + (32 - block.width) / 2,
+      block.posy + 32 - block.height,
+      block.width,
+      block.height
+    );
+  });
+  core.setAlpha("hero", opacity);
+};
 
-control.prototype._drawHero_getDrawObjs = function (direction, x, y, status, offset) {
-    var heroIconArr = core.material.icons.hero, drawObjs = [], index = 0;
-    drawObjs.push({
-        "img": core.material.images.hero,
-        "width": core.material.icons.hero.width || 32,
-        "height": core.material.icons.hero.height,
-        "heroIcon": heroIconArr[direction],
-        "posx": x * 32 - core.bigmap.offsetX + offset.x,
-        "posy": y * 32 - core.bigmap.offsetY + offset.y,
-        "status": status,
-        "index": index++,
+control.prototype._drawHero_getDrawObjs = function (
+  direction,
+  x,
+  y,
+  status,
+  offset
+) {
+  var heroIconArr = core.material.icons.hero,
+    drawObjs = [],
+    index = 0;
+  drawObjs.push({
+    img: core.material.images.hero,
+    width: core.material.icons.hero.width || 32,
+    height: core.material.icons.hero.height,
+    heroIcon: heroIconArr[direction],
+    posx: x * 32 - core.bigmap.offsetX + offset.x,
+    posy: y * 32 - core.bigmap.offsetY + offset.y,
+    status: status,
+    index: index++,
+  });
+  if (typeof offset.offset == "number") {
+    core.status.hero.followers.forEach(function (t) {
+      drawObjs.push({
+        img: core.material.images.images[t.name],
+        width: core.material.images.images[t.name].width / 4,
+        height: core.material.images.images[t.name].height / 4,
+        heroIcon: heroIconArr[t.direction],
+        posx:
+          32 * t.x -
+          core.bigmap.offsetX +
+          (t.stop
+            ? 0
+            : core.utils.scan2[t.direction].x * Math.abs(offset.offset)),
+        posy:
+          32 * t.y -
+          core.bigmap.offsetY +
+          (t.stop
+            ? 0
+            : core.utils.scan2[t.direction].y * Math.abs(offset.offset)),
+        status: t.stop ? "stop" : status,
+        index: index++,
+      });
     });
-    if (typeof offset.offset == 'number') {
-        core.status.hero.followers.forEach(function (t) {
-            drawObjs.push({
-                "img": core.material.images.images[t.name],
-                "width": core.material.images.images[t.name].width / 4,
-                "height": core.material.images.images[t.name].height / 4,
-                "heroIcon": heroIconArr[t.direction],
-                "posx": 32 * t.x - core.bigmap.offsetX + (t.stop ? 0 : core.utils.scan2[t.direction].x * Math.abs(offset.offset)),
-                "posy": 32 * t.y - core.bigmap.offsetY + (t.stop ? 0 : core.utils.scan2[t.direction].y * Math.abs(offset.offset)),
-                "status": t.stop ? "stop" : status,
-                "index": index++
-            });
-        });
+  }
+  return drawObjs.sort(function (a, b) {
+    return a.posy == b.posy ? b.index - a.index : a.posy - b.posy;
+  });
+};
+
+control.prototype.setHeroOpacity = function (
+  opacity,
+  moveMode,
+  time,
+  callback
+) {
+  time = time || 0;
+  if (time == 0) {
+    core.setFlag("__heroOpacity__", opacity);
+    core.drawHero();
+    if (callback) callback();
+    return;
+  }
+  time /= Math.max(core.status.replay.speed, 1);
+
+  var fromOpacity = core.getFlag("__heroOpacity__", 1);
+  var step = 0,
+    steps = parseInt(time / 10);
+  if (steps <= 0) steps = 1;
+  var moveFunc = core.applyEasing(moveMode);
+
+  var animate = setInterval(function () {
+    step++;
+    core.setFlag(
+      "__heroOpacity__",
+      fromOpacity + (opacity - fromOpacity) * moveFunc(step / steps)
+    );
+    core.drawHero();
+    if (step == steps) {
+      delete core.animateFrame.asyncId[animate];
+      clearInterval(animate);
+      if (callback) callback();
     }
-    return drawObjs.sort(function (a, b) {
-        return a.posy == b.posy ? b.index - a.index : a.posy - b.posy;
-    });
-}
+  }, 10);
 
-control.prototype.setHeroOpacity = function (opacity, moveMode, time, callback) {
-    time = time || 0;
-    if (time == 0) {
-        core.setFlag('__heroOpacity__', opacity);
-        core.drawHero();
-        if (callback) callback();
-        return;
-    }
-    time /= Math.max(core.status.replay.speed, 1)
-
-    var fromOpacity = core.getFlag('__heroOpacity__', 1);
-    var step = 0, steps = parseInt(time / 10);
-    if (steps <= 0) steps = 1;
-    var moveFunc = core.applyEasing(moveMode);
-
-    var animate = setInterval(function () {
-        step++;
-        core.setFlag('__heroOpacity__', fromOpacity + (opacity - fromOpacity) * moveFunc(step / steps));
-        core.drawHero();
-        if (step == steps) {
-            delete core.animateFrame.asyncId[animate];
-            clearInterval(animate);
-            if (callback) callback();
-        }
-    }, 10);
-
-    core.animateFrame.lastAsyncId = animate;
-    core.animateFrame.asyncId[animate] = callback;
-}
+  core.animateFrame.lastAsyncId = animate;
+  core.animateFrame.asyncId[animate] = callback;
+};
 
 // ------ 画布、位置、阻激夹域,显伤 ------ //
 
 ////// 设置画布偏移
 control.prototype.setGameCanvasTranslate = function (canvas, x, y) {
-    var c = core.dom.gameCanvas[canvas];
-    x = x * core.domStyle.scale;
-    y = y * core.domStyle.scale;
-    c.style.transform = 'translate(' + x + 'px,' + y + 'px)';
-    c.style.webkitTransform = 'translate(' + x + 'px,' + y + 'px)';
-    c.style.OTransform = 'translate(' + x + 'px,' + y + 'px)';
-    c.style.MozTransform = 'translate(' + x + 'px,' + y + 'px)';
-    if (main.mode === 'editor' && editor.isMobile) {
-        c.style.transform = 'translate(' + (x / core._PX_ * 96) + 'vw,' + (y / core._PY_ * 96) + 'vw)';
-        c.style.webkitTransform = 'translate(' + (x / core._PX_ * 96) + 'vw,' + (y / core._PY_ * 96) + 'vw)';
-        c.style.OTransform = 'translate(' + (x / core._PX_ * 96) + 'vw,' + (y / core._PY_ * 96) + 'vw)';
-        c.style.MozTransform = 'translate(' + (x / core._PX_ * 96) + 'vw,' + (y / core._PY_ * 96) + 'vw)';
-    }
+  var c = core.dom.gameCanvas[canvas];
+  x = x * core.domStyle.scale;
+  y = y * core.domStyle.scale;
+  c.style.transform = "translate(" + x + "px," + y + "px)";
+  c.style.webkitTransform = "translate(" + x + "px," + y + "px)";
+  c.style.OTransform = "translate(" + x + "px," + y + "px)";
+  c.style.MozTransform = "translate(" + x + "px," + y + "px)";
+  if (main.mode === "editor" && editor.isMobile) {
+    c.style.transform =
+      "translate(" +
+      (x / core._PX_) * 96 +
+      "vw," +
+      (y / core._PY_) * 96 +
+      "vw)";
+    c.style.webkitTransform =
+      "translate(" +
+      (x / core._PX_) * 96 +
+      "vw," +
+      (y / core._PY_) * 96 +
+      "vw)";
+    c.style.OTransform =
+      "translate(" +
+      (x / core._PX_) * 96 +
+      "vw," +
+      (y / core._PY_) * 96 +
+      "vw)";
+    c.style.MozTransform =
+      "translate(" +
+      (x / core._PX_) * 96 +
+      "vw," +
+      (y / core._PY_) * 96 +
+      "vw)";
+  }
 };
 
 ////// 加减画布偏移
 control.prototype.addGameCanvasTranslate = function (x, y) {
-    for (var ii = 0, canvas; canvas = core.dom.gameCanvas[ii]; ii++) {
-        var id = canvas.getAttribute('id');
-        if (id == 'ui' || id == 'data') continue; // UI层和data层不移动
-        var offsetX = x, offsetY = y;
-        if (core.bigmap.canvas.indexOf(id) >= 0) {
-            if (core.bigmap.v2) {
-                offsetX -= (core.bigmap.offsetX - 32 * core.bigmap.posX) + 32;
-                offsetY -= (core.bigmap.offsetY - 32 * core.bigmap.posY) + 32;
-            } else {
-                offsetX -= core.bigmap.offsetX;
-                offsetY -= core.bigmap.offsetY;
-            }
-        }
-        core.control.setGameCanvasTranslate(id, offsetX, offsetY);
+  for (var ii = 0, canvas; (canvas = core.dom.gameCanvas[ii]); ii++) {
+    var id = canvas.getAttribute("id");
+    if (id == "ui" || id == "data") continue; // UI层和data层不移动
+    var offsetX = x,
+      offsetY = y;
+    if (core.bigmap.canvas.indexOf(id) >= 0) {
+      if (core.bigmap.v2) {
+        offsetX -= core.bigmap.offsetX - 32 * core.bigmap.posX + 32;
+        offsetY -= core.bigmap.offsetY - 32 * core.bigmap.posY + 32;
+      } else {
+        offsetX -= core.bigmap.offsetX;
+        offsetY -= core.bigmap.offsetY;
+      }
     }
-}
+    core.control.setGameCanvasTranslate(id, offsetX, offsetY);
+  }
+};
 
 ////// 更新视野范围 //////
 control.prototype.updateViewport = function () {
-    // 当前是否应该重绘?
-    if (core.bigmap.v2) {
-        if (core.bigmap.offsetX >= core.bigmap.posX * 32 + 32
-            || core.bigmap.offsetX <= core.bigmap.posX * 32 - 32
-            || core.bigmap.offsetY >= core.bigmap.posY * 32 + 32
-            || core.bigmap.offsetY <= core.bigmap.posY * 32 - 32) {
-            core.bigmap.posX = parseInt(core.bigmap.offsetX / 32);
-            core.bigmap.posY = parseInt(core.bigmap.offsetY / 32);
-            core.redrawMap();
-        }
-    } else {
-        core.bigmap.posX = core.bigmap.posY = 0;
+  // 当前是否应该重绘?
+  if (core.bigmap.v2) {
+    if (
+      core.bigmap.offsetX >= core.bigmap.posX * 32 + 32 ||
+      core.bigmap.offsetX <= core.bigmap.posX * 32 - 32 ||
+      core.bigmap.offsetY >= core.bigmap.posY * 32 + 32 ||
+      core.bigmap.offsetY <= core.bigmap.posY * 32 - 32
+    ) {
+      core.bigmap.posX = parseInt(core.bigmap.offsetX / 32);
+      core.bigmap.posY = parseInt(core.bigmap.offsetY / 32);
+      core.redrawMap();
     }
-    var offsetX = core.bigmap.v2 ? -(core.bigmap.offsetX - 32 * core.bigmap.posX) - 32 : -core.bigmap.offsetX;
-    var offsetY = core.bigmap.v2 ? -(core.bigmap.offsetY - 32 * core.bigmap.posY) - 32 : -core.bigmap.offsetY;
+  } else {
+    core.bigmap.posX = core.bigmap.posY = 0;
+  }
+  var offsetX = core.bigmap.v2
+    ? -(core.bigmap.offsetX - 32 * core.bigmap.posX) - 32
+    : -core.bigmap.offsetX;
+  var offsetY = core.bigmap.v2
+    ? -(core.bigmap.offsetY - 32 * core.bigmap.posY) - 32
+    : -core.bigmap.offsetY;
 
-    core.bigmap.canvas.forEach(function (cn) {
-        core.control.setGameCanvasTranslate(cn, offsetX, offsetY);
-    });
-    // ------ 路线
-    core.relocateCanvas('route', core.status.automaticRoute.offsetX - core.bigmap.offsetX, core.status.automaticRoute.offsetY - core.bigmap.offsetY);
-    // ------ 所有的大怪物也都需要重定位
-    for (var one in core.dymCanvas) {
-        if (one.startsWith('_bigImage_')) {
-            var ox = core.dymCanvas[one].canvas.getAttribute('_ox');
-            var oy = core.dymCanvas[one].canvas.getAttribute('_oy');
-            if (ox != null && oy != null) {
-                core.relocateCanvas(one, parseInt(ox) - core.bigmap.offsetX, parseInt(oy) - core.bigmap.offsetY);
-            }
-        }
+  core.bigmap.canvas.forEach(function (cn) {
+    core.control.setGameCanvasTranslate(cn, offsetX, offsetY);
+  });
+  // ------ 路线
+  core.relocateCanvas(
+    "route",
+    core.status.automaticRoute.offsetX - core.bigmap.offsetX,
+    core.status.automaticRoute.offsetY - core.bigmap.offsetY
+  );
+  // ------ 所有的大怪物也都需要重定位
+  for (var one in core.dymCanvas) {
+    if (one.startsWith("_bigImage_")) {
+      var ox = core.dymCanvas[one].canvas.getAttribute("_ox");
+      var oy = core.dymCanvas[one].canvas.getAttribute("_oy");
+      if (ox != null && oy != null) {
+        core.relocateCanvas(
+          one,
+          parseInt(ox) - core.bigmap.offsetX,
+          parseInt(oy) - core.bigmap.offsetY
+        );
+      }
     }
-
-}
+  }
+};
 
 ////// 设置视野范围 //////
 control.prototype.setViewport = function (px, py) {
-    var originOffsetX = core.bigmap.offsetX, originOffsetY = core.bigmap.offsetY;
-    core.bigmap.offsetX = core.clamp(px, 0, 32 * core.bigmap.width - core._PX_);
-    core.bigmap.offsetY = core.clamp(py, 0, 32 * core.bigmap.height - core._PY_);
-    this.updateViewport();
-    // ------ hero层也需要!
-    var px = parseFloat(core.canvas.hero._px) || 0;
-    var py = parseFloat(core.canvas.hero._py) || 0;
-    px += originOffsetX - core.bigmap.offsetX;
-    py += originOffsetY - core.bigmap.offsetY;
-    core.control.setGameCanvasTranslate('hero', px, py);
-    core.canvas.hero._px = px;
-    core.canvas.hero._py = py;
-}
+  var originOffsetX = core.bigmap.offsetX,
+    originOffsetY = core.bigmap.offsetY;
+  core.bigmap.offsetX = core.clamp(px, 0, 32 * core.bigmap.width - core._PX_);
+  core.bigmap.offsetY = core.clamp(py, 0, 32 * core.bigmap.height - core._PY_);
+  this.updateViewport();
+  // ------ hero层也需要!
+  var px = parseFloat(core.canvas.hero._px) || 0;
+  var py = parseFloat(core.canvas.hero._py) || 0;
+  px += originOffsetX - core.bigmap.offsetX;
+  py += originOffsetY - core.bigmap.offsetY;
+  core.control.setGameCanvasTranslate("hero", px, py);
+  core.canvas.hero._px = px;
+  core.canvas.hero._py = py;
+};
 
 ////// 移动视野范围 //////
 control.prototype.moveViewport = function (x, y, moveMode, time, callback) {
-    time = time || 0;
-    time /= Math.max(core.status.replay.speed, 1)
-    var per_time = 10, step = 0, steps = parseInt(time / per_time);
-    if (steps <= 0) {
-        this.setViewport(32 * x, 32 * y);
-        if (callback) callback();
-        return;
+  time = time || 0;
+  time /= Math.max(core.status.replay.speed, 1);
+  var per_time = 10,
+    step = 0,
+    steps = parseInt(time / per_time);
+  if (steps <= 0) {
+    this.setViewport(32 * x, 32 * y);
+    if (callback) callback();
+    return;
+  }
+  var px = core.clamp(32 * x, 0, 32 * core.bigmap.width - core._PX_);
+  var py = core.clamp(32 * y, 0, 32 * core.bigmap.height - core._PY_);
+  var cx = core.bigmap.offsetX;
+  var cy = core.bigmap.offsetY;
+  var moveFunc = core.applyEasing(moveMode);
+
+  var animate = window.setInterval(function () {
+    step++;
+    core.setViewport(
+      cx + moveFunc(step / steps) * (px - cx),
+      cy + moveFunc(step / steps) * (py - cy)
+    );
+    if (step == steps) {
+      delete core.animateFrame.asyncId[animate];
+      clearInterval(animate);
+      core.setViewport(px, py);
+      if (callback) callback();
     }
-    var px = core.clamp(32 * x, 0, 32 * core.bigmap.width - core._PX_);
-    var py = core.clamp(32 * y, 0, 32 * core.bigmap.height - core._PY_);
-    var cx = core.bigmap.offsetX;
-    var cy = core.bigmap.offsetY;
-    var moveFunc = core.applyEasing(moveMode);
+  }, per_time);
 
-    var animate = window.setInterval(function () {
-        step++;
-        core.setViewport(cx + moveFunc(step / steps) * (px - cx), cy + moveFunc(step / steps) * (py - cy));
-        if (step == steps) {
-            delete core.animateFrame.asyncId[animate];
-            clearInterval(animate);
-            core.setViewport(px, py);
-            if (callback) callback();
-        }
-    }, per_time);
-
-    core.animateFrame.lastAsyncId = animate;
-    core.animateFrame.asyncId[animate] = callback;
-}
+  core.animateFrame.lastAsyncId = animate;
+  core.animateFrame.asyncId[animate] = callback;
+};
 
 ////// 获得勇士面对位置的x坐标 //////
 control.prototype.nextX = function (n) {
-    if (n == null) n = 1;
-    return core.getHeroLoc('x') + core.utils.scan[core.getHeroLoc('direction')].x * n;
-}
+  if (n == null) n = 1;
+  return (
+    core.getHeroLoc("x") + core.utils.scan[core.getHeroLoc("direction")].x * n
+  );
+};
 
 ////// 获得勇士面对位置的y坐标 //////
 control.prototype.nextY = function (n) {
-    if (n == null) n = 1;
-    return core.getHeroLoc('y') + core.utils.scan[core.getHeroLoc('direction')].y * n;
-}
+  if (n == null) n = 1;
+  return (
+    core.getHeroLoc("y") + core.utils.scan[core.getHeroLoc("direction")].y * n
+  );
+};
 
 ////// 某个点是否在勇士旁边 //////
 control.prototype.nearHero = function (x, y, n) {
-    if (n == null) n = 1;
-    return Math.abs(x - core.getHeroLoc('x')) + Math.abs(y - core.getHeroLoc('y')) <= n;
-}
+  if (n == null) n = 1;
+  return (
+    Math.abs(x - core.getHeroLoc("x")) + Math.abs(y - core.getHeroLoc("y")) <= n
+  );
+};
 
 ////// 聚集跟随者 //////
 control.prototype.gatherFollowers = function () {
-    var x = core.getHeroLoc('x'), y = core.getHeroLoc('y'), dir = core.getHeroLoc('direction');
-    core.status.hero.followers.forEach(function (t) {
-        t.x = x;
-        t.y = y;
-        t.stop = true;
-        t.direction = dir;
-    });
-}
+  var x = core.getHeroLoc("x"),
+    y = core.getHeroLoc("y"),
+    dir = core.getHeroLoc("direction");
+  core.status.hero.followers.forEach(function (t) {
+    t.x = x;
+    t.y = y;
+    t.stop = true;
+    t.direction = dir;
+  });
+};
 
 ////// 更新跟随者坐标 //////
 control.prototype.updateFollowers = function () {
-    core.status.hero.followers.forEach(function (t) {
-        if (!t.stop) {
-            t.x += core.utils.scan2[t.direction].x;
-            t.y += core.utils.scan2[t.direction].y;
-        }
-    })
+  core.status.hero.followers.forEach(function (t) {
+    if (!t.stop) {
+      t.x += core.utils.scan2[t.direction].x;
+      t.y += core.utils.scan2[t.direction].y;
+    }
+  });
 
-    var nowx = core.getHeroLoc('x'), nowy = core.getHeroLoc('y');
-    core.status.hero.followers.forEach(function (t) {
-        t.stop = true;
-        var dx = nowx - t.x, dy = nowy - t.y;
-        for (var dir in core.utils.scan2) {
-            if (core.utils.scan2[dir].x == dx && core.utils.scan2[dir].y == dy) {
-                t.stop = false;
-                t.direction = dir;
-            }
-        }
-        nowx = t.x; nowy = t.y;
-    })
-}
+  var nowx = core.getHeroLoc("x"),
+    nowy = core.getHeroLoc("y");
+  core.status.hero.followers.forEach(function (t) {
+    t.stop = true;
+    var dx = nowx - t.x,
+      dy = nowy - t.y;
+    for (var dir in core.utils.scan2) {
+      if (core.utils.scan2[dir].x == dx && core.utils.scan2[dir].y == dy) {
+        t.stop = false;
+        t.direction = dir;
+      }
+    }
+    nowx = t.x;
+    nowy = t.y;
+  });
+};
 
 ////// 瞬移更新跟随者坐标 //////
 control.prototype._moveDirectyFollowers = function (x, y) {
-    var route = core.automaticRoute(x, y);
-    if (route.length == 0) route = [{ x: x, y: y, direction: core.getHeroLoc('direction') }];
+  var route = core.automaticRoute(x, y);
+  if (route.length == 0)
+    route = [{ x: x, y: y, direction: core.getHeroLoc("direction") }];
 
-    var nowx = x, nowy = y;
-    for (var i = 0; i < core.status.hero.followers.length; ++i) {
-        var t = core.status.hero.followers[i];
-        var index = route.length - i - 2;
-        if (index < 0) index = 0;
-        t.stop = true;
-        t.x = route[index].x;
-        t.y = route[index].y;
-        t.direction = route[index].direction;
-        var dx = nowx - t.x, dy = nowy - t.y;
-        for (var dir in core.utils.scan2) {
-            if (core.utils.scan2[dir].x == dx && core.utils.scan2[dir].y == dy) {
-                t.stop = false;
-                t.direction = dir;
-            }
-        }
-        nowx = t.x; nowy = t.y;
+  var nowx = x,
+    nowy = y;
+  for (var i = 0; i < core.status.hero.followers.length; ++i) {
+    var t = core.status.hero.followers[i];
+    var index = route.length - i - 2;
+    if (index < 0) index = 0;
+    t.stop = true;
+    t.x = route[index].x;
+    t.y = route[index].y;
+    t.direction = route[index].direction;
+    var dx = nowx - t.x,
+      dy = nowy - t.y;
+    for (var dir in core.utils.scan2) {
+      if (core.utils.scan2[dir].x == dx && core.utils.scan2[dir].y == dy) {
+        t.stop = false;
+        t.direction = dir;
+      }
     }
-}
+    nowx = t.x;
+    nowy = t.y;
+  }
+};
 
 ////// 更新领域、夹击、阻击的伤害地图 //////
 control.prototype.updateCheckBlock = function (floorId) {
-    return this.controldata.updateCheckBlock(floorId);
-}
+  return this.controldata.updateCheckBlock(floorId);
+};
 
 ////// 检查并执行领域、夹击、阻击事件 //////
 control.prototype.checkBlock = function () {
-    var x = core.getHeroLoc('x'), y = core.getHeroLoc('y'), loc = x + "," + y;
-    var damage = core.status.checkBlock.damage[loc];
-    if (damage) {
-        core.status.hero.hp -= damage;
-        var text = (Object.keys(core.status.checkBlock.type[loc] || {}).join(",")) || "伤害";
-        core.drawTip("受到" + text + damage + "点");
-        core.drawHeroAnimate("zone");
-        this._checkBlock_disableQuickShop();
-        core.status.hero.statistics.extraDamage += damage;
-        if (core.status.hero.hp <= 0) {
-            core.status.hero.hp = 0;
-            core.updateStatusBar(false, true);
-            core.events.lose();
-            return;
-        } else {
-            core.updateStatusBar(false, true);
-        }
+  var x = core.getHeroLoc("x"),
+    y = core.getHeroLoc("y"),
+    loc = x + "," + y;
+  var damage = core.status.checkBlock.damage[loc];
+  if (damage) {
+    core.status.hero.hp -= damage;
+    var text =
+      Object.keys(core.status.checkBlock.type[loc] || {}).join(",") || "伤害";
+    core.drawTip("受到" + text + damage + "点");
+    core.drawHeroAnimate("zone");
+    this._checkBlock_disableQuickShop();
+    core.status.hero.statistics.extraDamage += damage;
+    if (core.status.hero.hp <= 0) {
+      core.status.hero.hp = 0;
+      core.updateStatusBar(false, true);
+      core.events.lose();
+      return;
+    } else {
+      core.updateStatusBar(false, true);
     }
-    this._checkBlock_ambush(core.status.checkBlock.ambush[loc]);
-    this._checkBlock_repulse(core.status.checkBlock.repulse[loc]);
-}
+  }
+  this._checkBlock_ambush(core.status.checkBlock.ambush[loc]);
+  this._checkBlock_repulse(core.status.checkBlock.repulse[loc]);
+};
 
 control.prototype._checkBlock_disableQuickShop = function () {
-    // 禁用快捷商店
-    if (core.flags.disableShopOnDamage) {
-        Object.keys(core.status.shops).forEach(function (shopId) {
-            core.setShopVisited(shopId, false);
-        });
-    }
-}
+  // 禁用快捷商店
+  if (core.flags.disableShopOnDamage) {
+    Object.keys(core.status.shops).forEach(function (shopId) {
+      core.setShopVisited(shopId, false);
+    });
+  }
+};
 
 ////// 阻击 //////
 control.prototype._checkBlock_repulse = function (repulse) {
-    if (!repulse || repulse.length == 0) return;
-    var actions = [];
-    repulse.forEach(function (t) {
-        actions.push({ "type": "move", "loc": [t[0], t[1]], "steps": [t[3]], "time": 250, "keep": true, "async": true });
+  if (!repulse || repulse.length == 0) return;
+  var actions = [];
+  repulse.forEach(function (t) {
+    actions.push({
+      type: "move",
+      loc: [t[0], t[1]],
+      steps: [t[3]],
+      time: 250,
+      keep: true,
+      async: true,
     });
-    actions.push({ "type": "waitAsync" });
-    core.insertAction(actions);
-}
+  });
+  actions.push({ type: "waitAsync" });
+  core.insertAction(actions);
+};
 
 ////// 捕捉 //////
 control.prototype._checkBlock_ambush = function (ambush) {
-    if (!ambush || ambush.length == 0) return;
-    // 捕捉效果
-    var actions = [];
-    ambush.forEach(function (t) {
-        actions.push({ "type": "move", "loc": [t[0], t[1]], "steps": [t[3]], "time": 250, "keep": false, "async": true });
+  if (!ambush || ambush.length == 0) return;
+  // 捕捉效果
+  var actions = [];
+  ambush.forEach(function (t) {
+    actions.push({
+      type: "move",
+      loc: [t[0], t[1]],
+      steps: [t[3]],
+      time: 250,
+      keep: false,
+      async: true,
     });
-    actions.push({ "type": "waitAsync" });
-    // 强制战斗
-    ambush.forEach(function (t) {
-        actions.push({
-            "type": "function", "function": "function() { " +
-                "core.battle('" + t[2] + "', " + t[0] + "," + t[1] + ", true, core.doAction); " +
-                "}", "async": true
-        });
+  });
+  actions.push({ type: "waitAsync" });
+  // 强制战斗
+  ambush.forEach(function (t) {
+    actions.push({
+      type: "function",
+      function:
+        "function() { " +
+        "core.battle('" +
+        t[2] +
+        "', " +
+        t[0] +
+        "," +
+        t[1] +
+        ", true, core.doAction); " +
+        "}",
+      async: true,
     });
-    core.insertAction(actions);
-}
+  });
+  core.insertAction(actions);
+};
 
 ////// 更新全地图显伤 //////
 control.prototype.updateDamage = function (floorId, ctx) {
-    floorId = floorId || core.status.floorId;
-    if (!floorId || core.status.gameOver || main.mode != 'play') return;
-    var onMap = ctx == null;
+  floorId = floorId || core.status.floorId;
+  if (!floorId || core.status.gameOver || main.mode != "play") return;
+  var onMap = ctx == null;
 
-    // 没有怪物手册
-    if (!core.hasItem('book')) return;
-    core.status.damage.posX = core.bigmap.posX;
-    core.status.damage.posY = core.bigmap.posY;
-    if (!onMap) {
-        var width = core.floors[floorId].width, height = core.floors[floorId].height;
-        // 地图过大的缩略图不绘制显伤
-        if (width * height > core.bigmap.threshold) return;
-    }
-    this._updateDamage_damage(floorId, onMap);
-    this._updateDamage_extraDamage(floorId, onMap);
-    this.drawDamage(ctx);
-}
+  // 没有怪物手册
+  if (!core.hasItem("book")) return;
+  core.status.damage.posX = core.bigmap.posX;
+  core.status.damage.posY = core.bigmap.posY;
+  if (!onMap) {
+    var width = core.floors[floorId].width,
+      height = core.floors[floorId].height;
+    // 地图过大的缩略图不绘制显伤
+    if (width * height > core.bigmap.threshold) return;
+  }
+  this._updateDamage_damage(floorId, onMap);
+  this._updateDamage_extraDamage(floorId, onMap);
+  this.drawDamage(ctx);
+};
 
 control.prototype._updateDamage_damage = function (floorId, onMap) {
-    core.status.damage.data = [];
-    if (!core.flags.displayEnemyDamage && !core.flags.displayExtraDamage) return;
+  core.status.damage.data = [];
+  if (!core.flags.displayEnemyDamage && !core.flags.displayExtraDamage) return;
 
-    core.extractBlocks(floorId);
-    core.status.maps[floorId].blocks.forEach(function (block) {
-        var x = block.x, y = block.y;
+  core.extractBlocks(floorId);
+  core.status.maps[floorId].blocks.forEach(function (block) {
+    var x = block.x,
+      y = block.y;
 
-        // v2优化,只绘制范围内的部分
-        if (onMap && core.bigmap.v2) {
-            if (x < core.bigmap.posX - core.bigmap.extend || x > core.bigmap.posX + core._WIDTH_ + core.bigmap.extend
-                || y < core.bigmap.posY - core.bigmap.extend || y > core.bigmap.posY + core._HEIGHT_ + core.bigmap.extend) {
-                return;
-            }
-        }
+    // v2优化,只绘制范围内的部分
+    if (onMap && core.bigmap.v2) {
+      if (
+        x < core.bigmap.posX - core.bigmap.extend ||
+        x > core.bigmap.posX + core._WIDTH_ + core.bigmap.extend ||
+        y < core.bigmap.posY - core.bigmap.extend ||
+        y > core.bigmap.posY + core._HEIGHT_ + core.bigmap.extend
+      ) {
+        return;
+      }
+    }
 
-        if (!block.disable && block.event.cls.indexOf('enemy') == 0 && block.event.displayDamage !== false) {
-            if (core.flags.displayEnemyDamage) {
-                var damageString = core.enemys.getDamageString(block.event.id, x, y, floorId);
-                core.status.damage.data.push({ text: damageString.damage, px: 32 * x + 1, py: 32 * (y + 1) - 1, color: damageString.color });
-            }
-            if (core.flags.displayCritical) {
-                var critical = core.enemys.nextCriticals(block.event.id, 1, x, y, floorId);
-                critical = core.formatBigNumber((critical[0] || [])[0], true);
-                if (critical == '???') critical = '?';
-                core.status.damage.data.push({ text: critical, px: 32 * x + 1, py: 32 * (y + 1) - 11, color: '#FFFFFF' });
-            }
-        }
-    });
-}
+    if (
+      !block.disable &&
+      block.event.cls.indexOf("enemy") == 0 &&
+      block.event.displayDamage !== false
+    ) {
+      if (core.flags.displayEnemyDamage) {
+        var damageString = core.enemys.getDamageString(
+          block.event.id,
+          x,
+          y,
+          floorId
+        );
+        core.status.damage.data.push({
+          text: damageString.damage,
+          px: 32 * x + 1,
+          py: 32 * (y + 1) - 1,
+          color: damageString.color,
+        });
+      }
+      if (core.flags.displayCritical) {
+        var critical = core.enemys.nextCriticals(
+          block.event.id,
+          1,
+          x,
+          y,
+          floorId
+        );
+        critical = core.formatBigNumber((critical[0] || [])[0], true);
+        if (critical == "???") critical = "?";
+        core.status.damage.data.push({
+          text: critical,
+          px: 32 * x + 1,
+          py: 32 * (y + 1) - 11,
+          color: "#FFFFFF",
+        });
+      }
+    }
+  });
+};
 
 control.prototype._updateDamage_extraDamage = function (floorId, onMap) {
-    core.status.damage.extraData = [];
-    if (!core.flags.displayExtraDamage) return;
+  core.status.damage.extraData = [];
+  if (!core.flags.displayExtraDamage) return;
 
-    var width = core.floors[floorId].width, height = core.floors[floorId].height;
-    var startX = onMap && core.bigmap.v2 ? Math.max(0, core.bigmap.posX - core.bigmap.extend) : 0;
-    var endX = onMap && core.bigmap.v2 ? Math.min(width, core.bigmap.posX + core._WIDTH_ + core.bigmap.extend + 1) : width;
-    var startY = onMap && core.bigmap.v2 ? Math.max(0, core.bigmap.posY - core.bigmap.extend) : 0;
-    var endY = onMap && core.bigmap.v2 ? Math.min(height, core.bigmap.posY + core._HEIGHT_ + core.bigmap.extend + 1) : height;
+  var width = core.floors[floorId].width,
+    height = core.floors[floorId].height;
+  var startX =
+    onMap && core.bigmap.v2
+      ? Math.max(0, core.bigmap.posX - core.bigmap.extend)
+      : 0;
+  var endX =
+    onMap && core.bigmap.v2
+      ? Math.min(
+          width,
+          core.bigmap.posX + core._WIDTH_ + core.bigmap.extend + 1
+        )
+      : width;
+  var startY =
+    onMap && core.bigmap.v2
+      ? Math.max(0, core.bigmap.posY - core.bigmap.extend)
+      : 0;
+  var endY =
+    onMap && core.bigmap.v2
+      ? Math.min(
+          height,
+          core.bigmap.posY + core._HEIGHT_ + core.bigmap.extend + 1
+        )
+      : height;
 
-    for (var x = startX; x < endX; x++) {
-        for (var y = startY; y < endY; y++) {
-            var alpha = 1;
-            if (core.noPass(x, y, floorId)) {
-                if (core.flags.extraDamageType == 2) alpha = 0;
-                else if (core.flags.extraDamageType == 1) alpha = 0.6;
-            }
-            var damage = core.status.checkBlock.damage[x + "," + y] || 0;
-            if (damage > 0) { // 该点伤害
-                damage = core.formatBigNumber(damage, true);
-                core.status.damage.extraData.push({ text: damage, px: 32 * x + 16, py: 32 * (y + 1) - 14, color: '#ffaa33', alpha: alpha });
-            }
-            else { // 检查捕捉
-                if (core.status.checkBlock.ambush[x + "," + y]) {
-                    core.status.damage.extraData.push({ text: '!', px: 32 * x + 16, py: 32 * (y + 1) - 14, color: '#ffaa33', alpha: alpha });
-                }
-            }
+  for (var x = startX; x < endX; x++) {
+    for (var y = startY; y < endY; y++) {
+      var alpha = 1;
+      if (core.noPass(x, y, floorId)) {
+        if (core.flags.extraDamageType == 2) alpha = 0;
+        else if (core.flags.extraDamageType == 1) alpha = 0.6;
+      }
+      var damage = core.status.checkBlock.damage[x + "," + y] || 0;
+      if (damage > 0) {
+        // 该点伤害
+        damage = core.formatBigNumber(damage, true);
+        core.status.damage.extraData.push({
+          text: damage,
+          px: 32 * x + 16,
+          py: 32 * (y + 1) - 14,
+          color: "#ffaa33",
+          alpha: alpha,
+        });
+      } else {
+        // 检查捕捉
+        if (core.status.checkBlock.ambush[x + "," + y]) {
+          core.status.damage.extraData.push({
+            text: "!",
+            px: 32 * x + 16,
+            py: 32 * (y + 1) - 14,
+            color: "#ffaa33",
+            alpha: alpha,
+          });
         }
+      }
     }
-}
+  }
+};
 
 ////// 重绘地图显伤 //////
 control.prototype.drawDamage = function (ctx) {
-    if (core.status.gameOver || !core.status.damage || main.mode != 'play') return;
-    var onMap = false;
-    if (ctx == null) {
-        ctx = core.canvas.damage;
-        core.clearMap('damage');
-        onMap = true;
-    }
+  if (core.status.gameOver || !core.status.damage || main.mode != "play")
+    return;
+  var onMap = false;
+  if (ctx == null) {
+    ctx = core.canvas.damage;
+    core.clearMap("damage");
+    onMap = true;
+  }
 
-    if (onMap && core.bigmap.v2) {
-        // 检查是否需要重算...
-        if (Math.abs(core.bigmap.posX - core.status.damage.posX) >= core.bigmap.extend - 1
-            || Math.abs(core.bigmap.posY - core.status.damage.posY) >= core.bigmap.extend - 1) {
-            return this.updateDamage();
-        }
+  if (onMap && core.bigmap.v2) {
+    // 检查是否需要重算...
+    if (
+      Math.abs(core.bigmap.posX - core.status.damage.posX) >=
+        core.bigmap.extend - 1 ||
+      Math.abs(core.bigmap.posY - core.status.damage.posY) >=
+        core.bigmap.extend - 1
+    ) {
+      return this.updateDamage();
     }
-    return this._drawDamage_draw(ctx, onMap);
-}
+  }
+  return this._drawDamage_draw(ctx, onMap);
+};
 
 control.prototype._drawDamage_draw = function (ctx, onMap) {
-    if (!core.hasItem('book')) return;
+  if (!core.hasItem("book")) return;
 
-    core.setFont(ctx, "bold 11px Arial");
-    core.setTextAlign(ctx, 'left');
-    core.status.damage.data.forEach(function (one) {
-        var px = one.px, py = one.py;
-        if (onMap && core.bigmap.v2) {
-            px -= core.bigmap.posX * 32;
-            py -= core.bigmap.posY * 32;
-            if (px < -32 * 2 || px > core._PX_ + 32 || py < -32 || py > core._PY_ + 32)
-                return;
-        }
-        core.fillBoldText(ctx, one.text, px, py, one.color);
-    });
+  core.setFont(ctx, "bold 11px Arial");
+  core.setTextAlign(ctx, "left");
+  core.status.damage.data.forEach(function (one) {
+    var px = one.px,
+      py = one.py;
+    if (onMap && core.bigmap.v2) {
+      px -= core.bigmap.posX * 32;
+      py -= core.bigmap.posY * 32;
+      if (
+        px < -32 * 2 ||
+        px > core._PX_ + 32 ||
+        py < -32 ||
+        py > core._PY_ + 32
+      )
+        return;
+    }
+    core.fillBoldText(ctx, one.text, px, py, one.color);
+  });
 
-    core.setTextAlign(ctx, 'center');
-    core.status.damage.extraData.forEach(function (one) {
-        var px = one.px, py = one.py;
-        if (onMap && core.bigmap.v2) {
-            px -= core.bigmap.posX * 32;
-            py -= core.bigmap.posY * 32;
-            if (px < -32 || px > core._PX_ + 32 || py < -32 || py > core._PY_ + 32)
-                return;
-        }
-        var alpha = core.setAlpha(ctx, one.alpha);
-        core.fillBoldText(ctx, one.text, px, py, one.color);
-        core.setAlpha(ctx, alpha);
-    });
-}
+  core.setTextAlign(ctx, "center");
+  core.status.damage.extraData.forEach(function (one) {
+    var px = one.px,
+      py = one.py;
+    if (onMap && core.bigmap.v2) {
+      px -= core.bigmap.posX * 32;
+      py -= core.bigmap.posY * 32;
+      if (px < -32 || px > core._PX_ + 32 || py < -32 || py > core._PY_ + 32)
+        return;
+    }
+    var alpha = core.setAlpha(ctx, one.alpha);
+    core.fillBoldText(ctx, one.text, px, py, one.color);
+    core.setAlpha(ctx, alpha);
+  });
+};
 
 // ------ 录像相关 ------ //
 
 ////// 选择录像文件 //////
 control.prototype.chooseReplayFile = function () {
-    core.readFile(function (obj) {
-        if (obj.name != core.firstData.name) return alert("存档和游戏不一致!");
-        if (!obj.route) return alert("无效的录像!");
-        var _replay = function () {
-            core.startGame(core.flags.startUsingCanvas ? '' : obj.hard || '', obj.seed, core.decodeRoute(obj.route));
-        }
-        if (obj.version && obj.version != core.firstData.version) {
-            core.myconfirm("游戏版本不一致!\n你仍然想播放录像吗?", _replay);
-            return;
-        }
-        _replay();
-    }, null, ".h5route");
-}
+  core.readFile(
+    function (obj) {
+      if (obj.name != core.firstData.name) return alert("存档和游戏不一致!");
+      if (!obj.route) return alert("无效的录像!");
+      var _replay = function () {
+        core.startGame(
+          core.flags.startUsingCanvas ? "" : obj.hard || "",
+          obj.seed,
+          core.decodeRoute(obj.route)
+        );
+      };
+      if (obj.version && obj.version != core.firstData.version) {
+        core.myconfirm("游戏版本不一致!\n你仍然想播放录像吗?", _replay);
+        return;
+      }
+      _replay();
+    },
+    null,
+    ".h5route"
+  );
+};
 
 ////// 开始播放 //////
 control.prototype.startReplay = function (list) {
-    if (!core.isPlaying()) return;
-    core.status.replay.replaying = true;
-    core.status.replay.pausing = true;
-    core.status.replay.failed = false;
-    core.status.replay.speed = 1.0;
-    core.status.replay.toReplay = core.cloneArray(list);
-    core.status.replay.totalList = core.status.route.concat(list);
-    core.status.replay.steps = 0;
-    core.status.replay.save = [];
-    core.createCanvas('replay', 0, core._PY_ - 40, core._PX_, 40, 199);
-    core.setOpacity('replay', 0.6);
-    this._replay_drawProgress();
-    core.updateStatusBar(false, true);
-    core.drawTip("开始播放");
-    this.replay();
-}
+  if (!core.isPlaying()) return;
+  core.status.replay.replaying = true;
+  core.status.replay.pausing = true;
+  core.status.replay.failed = false;
+  core.status.replay.speed = 1.0;
+  core.status.replay.toReplay = core.cloneArray(list);
+  core.status.replay.totalList = core.status.route.concat(list);
+  core.status.replay.steps = 0;
+  core.status.replay.save = [];
+  core.createCanvas("replay", 0, core._PY_ - 40, core._PX_, 40, 199);
+  core.setOpacity("replay", 0.6);
+  this._replay_drawProgress();
+  core.updateStatusBar(false, true);
+  core.drawTip("开始播放");
+  this.replay();
+};
 
 ////// 更改播放状态 //////
 control.prototype.triggerReplay = function () {
-    if (core.status.replay.pausing) this.resumeReplay();
-    else this.pauseReplay();
-}
+  if (core.status.replay.pausing) this.resumeReplay();
+  else this.pauseReplay();
+};
 
 ////// 暂停播放 //////
 control.prototype.pauseReplay = function () {
-    if (!core.isPlaying() || !core.isReplaying()) return;
-    core.status.replay.pausing = true;
-    core.updateStatusBar(false, true);
-    core.drawTip("暂停播放");
-}
+  if (!core.isPlaying() || !core.isReplaying()) return;
+  core.status.replay.pausing = true;
+  core.updateStatusBar(false, true);
+  core.drawTip("暂停播放");
+};
 
 ////// 恢复播放 //////
 control.prototype.resumeReplay = function () {
-    if (!core.isPlaying() || !core.isReplaying()) return;
-    if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
-        core.playSound('操作失败');
-        return core.drawTip("请等待当前事件的处理结束");
-    }
-    core.status.replay.pausing = false;
-    core.updateStatusBar(false, true);
-    core.drawTip("恢复播放");
-    core.replay();
-}
+  if (!core.isPlaying() || !core.isReplaying()) return;
+  if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
+    core.playSound("操作失败");
+    return core.drawTip("请等待当前事件的处理结束");
+  }
+  core.status.replay.pausing = false;
+  core.updateStatusBar(false, true);
+  core.drawTip("恢复播放");
+  core.replay();
+};
 
 ////// 单步播放 //////
 control.prototype.stepReplay = function () {
-    if (!core.isPlaying() || !core.isReplaying()) return;
-    if (!core.status.replay.pausing) {
-        core.playSound('操作失败');
-        return core.drawTip("请先暂停录像");
-    }
-    if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
-        core.playSound('操作失败');
-        return core.drawTip("请等待当前事件的处理结束");
-    }
-    core.replay(true);
-}
+  if (!core.isPlaying() || !core.isReplaying()) return;
+  if (!core.status.replay.pausing) {
+    core.playSound("操作失败");
+    return core.drawTip("请先暂停录像");
+  }
+  if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
+    core.playSound("操作失败");
+    return core.drawTip("请等待当前事件的处理结束");
+  }
+  core.replay(true);
+};
 
 ////// 加速播放 //////
 control.prototype.speedUpReplay = function () {
-    if (!core.isPlaying() || !core.isReplaying()) return;
-    var speeds = [0.2, 0.5, 1, 2, 3, 6, 12, 24];
-    for (var i = speeds.length - 2; i >= 0; i--) {
-        if (speeds[i] <= core.status.replay.speed) {
-            core.status.replay.speed = speeds[i + 1];
-            break;
-        }
+  if (!core.isPlaying() || !core.isReplaying()) return;
+  var speeds = [0.2, 0.5, 1, 2, 3, 6, 12, 24];
+  for (var i = speeds.length - 2; i >= 0; i--) {
+    if (speeds[i] <= core.status.replay.speed) {
+      core.status.replay.speed = speeds[i + 1];
+      break;
     }
-    core.drawTip("x" + core.status.replay.speed + "倍");
-}
+  }
+  core.drawTip("x" + core.status.replay.speed + "倍");
+};
 
 ////// 减速播放 //////
 control.prototype.speedDownReplay = function () {
-    if (!core.isPlaying() || !core.isReplaying()) return;
-    var speeds = [0.2, 0.5, 1, 2, 3, 6, 12, 24];
-    for (var i = 1; i <= speeds.length; i++) {
-        if (speeds[i] >= core.status.replay.speed) {
-            core.status.replay.speed = speeds[i - 1];
-            break;
-        }
+  if (!core.isPlaying() || !core.isReplaying()) return;
+  var speeds = [0.2, 0.5, 1, 2, 3, 6, 12, 24];
+  for (var i = 1; i <= speeds.length; i++) {
+    if (speeds[i] >= core.status.replay.speed) {
+      core.status.replay.speed = speeds[i - 1];
+      break;
     }
-    core.drawTip("x" + core.status.replay.speed + "倍");
-}
+  }
+  core.drawTip("x" + core.status.replay.speed + "倍");
+};
 
 ////// 设置播放速度 //////
 control.prototype.setReplaySpeed = function (speed) {
-    if (!core.isPlaying() || !core.isReplaying()) return;
-    core.status.replay.speed = speed;
-    core.drawTip("x" + core.status.replay.speed + "倍");
-}
+  if (!core.isPlaying() || !core.isReplaying()) return;
+  core.status.replay.speed = speed;
+  core.drawTip("x" + core.status.replay.speed + "倍");
+};
 
 ////// 停止播放 //////
 control.prototype.stopReplay = function (force) {
-    if (!core.isPlaying()) return;
-    if (!core.isReplaying() && !force) return;
-    core.status.replay.toReplay = [];
-    core.status.replay.totalList = [];
-    core.status.replay.replaying = false;
-    core.status.replay.pausing = false;
-    core.status.replay.failed = false;
-    core.status.replay.speed = 1.0;
-    core.status.replay.steps = 0;
-    core.status.replay.save = [];
-    core.deleteCanvas('replay');
-    core.updateStatusBar(false, true);
-    core.drawTip("停止播放并恢复游戏");
-}
+  if (!core.isPlaying()) return;
+  if (!core.isReplaying() && !force) return;
+  core.status.replay.toReplay = [];
+  core.status.replay.totalList = [];
+  core.status.replay.replaying = false;
+  core.status.replay.pausing = false;
+  core.status.replay.failed = false;
+  core.status.replay.speed = 1.0;
+  core.status.replay.steps = 0;
+  core.status.replay.save = [];
+  core.deleteCanvas("replay");
+  core.updateStatusBar(false, true);
+  core.drawTip("停止播放并恢复游戏");
+};
 
 ////// 回退 //////
 control.prototype.rewindReplay = function () {
-    if (!core.isPlaying() || !core.isReplaying()) return;
-    if (!core.status.replay.pausing) {
-        core.playSound('操作失败');
-        return core.drawTip("请先暂停录像");
-    }
-    if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
-        core.playSound('操作失败');
-        return core.drawTip("请等待当前事件的处理结束");
-    }
-    if (core.status.replay.save.length == 0) {
-        core.playSound('操作失败');
-        return core.drawTip("无法再回到上一个节点");
-    }
-    var save = core.status.replay.save, data = save.pop();
-    core.loadData(data.data, function () {
-        core.removeFlag('__fromLoad__');
-        core.status.replay = {
-            "replaying": true,
-            "pausing": true,
-            "animate": false,
-            "toReplay": data.replay.toReplay,
-            "totalList": data.replay.totalList,
-            "speed": core.status.replay.speed,
-            "steps": data.replay.steps,
-            "save": save
-        }
-        core.createCanvas('replay', 0, core._PY_ - 40, core._PX_, 40, 199);
-        core.setOpacity('replay', 0.6);
-        core.control._replay_drawProgress();
-        core.updateStatusBar(false, true);
-        core.drawTip("成功回退到上一个节点");
-    });
-}
+  if (!core.isPlaying() || !core.isReplaying()) return;
+  if (!core.status.replay.pausing) {
+    core.playSound("操作失败");
+    return core.drawTip("请先暂停录像");
+  }
+  if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
+    core.playSound("操作失败");
+    return core.drawTip("请等待当前事件的处理结束");
+  }
+  if (core.status.replay.save.length == 0) {
+    core.playSound("操作失败");
+    return core.drawTip("无法再回到上一个节点");
+  }
+  var save = core.status.replay.save,
+    data = save.pop();
+  core.loadData(data.data, function () {
+    core.removeFlag("__fromLoad__");
+    core.status.replay = {
+      replaying: true,
+      pausing: true,
+      animate: false,
+      toReplay: data.replay.toReplay,
+      totalList: data.replay.totalList,
+      speed: core.status.replay.speed,
+      steps: data.replay.steps,
+      save: save,
+    };
+    core.createCanvas("replay", 0, core._PY_ - 40, core._PX_, 40, 199);
+    core.setOpacity("replay", 0.6);
+    core.control._replay_drawProgress();
+    core.updateStatusBar(false, true);
+    core.drawTip("成功回退到上一个节点");
+  });
+};
 
 ////// 回放时存档 //////
 control.prototype._replay_SL = function () {
-    if (!core.isPlaying() || !core.isReplaying()) return;
-    if (!core.status.replay.pausing) {
-        core.playSound('操作失败');
-        return core.drawTip("请先暂停录像");
-    }
-    if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
-        core.playSound('操作失败');
-        return core.drawTip("请等待当前事件的处理结束");
-    }
-    if (core.hasFlag('__forbidSave__')) {
-        core.playSound('操作失败');
-        return core.drawTip('当前禁止存档');
-    }
-    this._replay_hideProgress();
+  if (!core.isPlaying() || !core.isReplaying()) return;
+  if (!core.status.replay.pausing) {
+    core.playSound("操作失败");
+    return core.drawTip("请先暂停录像");
+  }
+  if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
+    core.playSound("操作失败");
+    return core.drawTip("请等待当前事件的处理结束");
+  }
+  if (core.hasFlag("__forbidSave__")) {
+    core.playSound("操作失败");
+    return core.drawTip("当前禁止存档");
+  }
+  this._replay_hideProgress();
 
-    core.lockControl();
-    core.status.event.id = 'save';
-    var saveIndex = core.saves.saveIndex;
-    var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page;
+  core.lockControl();
+  core.status.event.id = "save";
+  var saveIndex = core.saves.saveIndex;
+  var page = parseInt((saveIndex - 1) / 5),
+    offset = saveIndex - 5 * page;
 
-    core.ui._drawSLPanel(10 * page + offset);
-}
+  core.ui._drawSLPanel(10 * page + offset);
+};
 
 ////// 回放时查看怪物手册 //////
 control.prototype._replay_book = function () {
-    if (!core.isPlaying() || !core.isReplaying()) return;
-    if (!core.status.replay.pausing) {
-        core.playSound('操作失败');
-        return core.drawTip("请先暂停录像");
-    }
-    if (core.isMoving() || core.status.replay.animate || (core.status.event.id && core.status.event.id != 'viewMaps')) {
-        core.playSound('操作失败');
-        return core.drawTip("请等待当前事件的处理结束");
-    }
-    if (!core.hasItem('book')) {
-        core.playSound('操作失败');
-        return core.drawTip('你没有' + core.material.items['book'].name, 'book');
-    }
-    this._replay_hideProgress();
+  if (!core.isPlaying() || !core.isReplaying()) return;
+  if (!core.status.replay.pausing) {
+    core.playSound("操作失败");
+    return core.drawTip("请先暂停录像");
+  }
+  if (
+    core.isMoving() ||
+    core.status.replay.animate ||
+    (core.status.event.id && core.status.event.id != "viewMaps")
+  ) {
+    core.playSound("操作失败");
+    return core.drawTip("请等待当前事件的处理结束");
+  }
+  if (!core.hasItem("book")) {
+    core.playSound("操作失败");
+    return core.drawTip("你没有" + core.material.items["book"].name, "book");
+  }
+  this._replay_hideProgress();
 
-    // 从“浏览地图”页面打开
-    if (core.status.event.id == 'viewMaps')
-        core.status.event.ui = core.status.event.data;
+  // 从“浏览地图”页面打开
+  if (core.status.event.id == "viewMaps")
+    core.status.event.ui = core.status.event.data;
 
-    core.lockControl();
-    core.status.event.id = 'book';
-    core.useItem('book', true);
-}
+  core.lockControl();
+  core.status.event.id = "book";
+  core.useItem("book", true);
+};
 
 ////// 回放录像时浏览地图 //////
 control.prototype._replay_viewMap = function () {
-    if (!core.isPlaying() || !core.isReplaying()) return;
-    if (!core.status.replay.pausing) {
-        core.playSound('操作失败');
-        return core.drawTip("请先暂停录像");
-    }
-    if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
-        core.playSound('操作失败');
-        return core.drawTip("请等待当前事件的处理结束");
-    }
-    this._replay_hideProgress();
+  if (!core.isPlaying() || !core.isReplaying()) return;
+  if (!core.status.replay.pausing) {
+    core.playSound("操作失败");
+    return core.drawTip("请先暂停录像");
+  }
+  if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
+    core.playSound("操作失败");
+    return core.drawTip("请等待当前事件的处理结束");
+  }
+  this._replay_hideProgress();
 
-    core.lockControl();
-    core.status.event.id = 'viewMaps';
-    core.ui._drawViewMaps();
-}
+  core.lockControl();
+  core.status.event.id = "viewMaps";
+  core.ui._drawViewMaps();
+};
 
 control.prototype._replay_toolbox = function () {
-    if (!core.isPlaying() || !core.isReplaying()) return;
-    if (!core.status.replay.pausing) {
-        core.playSound('操作失败');
-        return core.drawTip("请先暂停录像");
-    }
-    if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
-        core.playSound('操作失败');
-        return core.drawTip("请等待当前事件的处理结束");
-    }
-    this._replay_hideProgress();
+  if (!core.isPlaying() || !core.isReplaying()) return;
+  if (!core.status.replay.pausing) {
+    core.playSound("操作失败");
+    return core.drawTip("请先暂停录像");
+  }
+  if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
+    core.playSound("操作失败");
+    return core.drawTip("请等待当前事件的处理结束");
+  }
+  this._replay_hideProgress();
 
-    core.lockControl();
-    core.status.event.id = 'toolbox';
-    core.ui._drawToolbox();
-}
+  core.lockControl();
+  core.status.event.id = "toolbox";
+  core.ui._drawToolbox();
+};
 
 control.prototype._replay_equipbox = function () {
-    if (!core.isPlaying() || !core.isReplaying()) return;
-    if (!core.status.replay.pausing) {
-        core.playSound('操作失败');
-        return core.drawTip("请先暂停录像");
-    }
-    if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
-        core.playSound('操作失败');
-        return core.drawTip("请等待当前事件的处理结束");
-    }
-    this._replay_hideProgress();
+  if (!core.isPlaying() || !core.isReplaying()) return;
+  if (!core.status.replay.pausing) {
+    core.playSound("操作失败");
+    return core.drawTip("请先暂停录像");
+  }
+  if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
+    core.playSound("操作失败");
+    return core.drawTip("请等待当前事件的处理结束");
+  }
+  this._replay_hideProgress();
 
-    core.lockControl();
-    core.status.event.id = 'equipbox';
-    core.ui._drawEquipbox();
-}
+  core.lockControl();
+  core.status.event.id = "equipbox";
+  core.ui._drawEquipbox();
+};
 
 ////// 是否正在播放录像 //////
 control.prototype.isReplaying = function () {
-    return (core.status.replay || {}).replaying;
-}
+  return (core.status.replay || {}).replaying;
+};
 
 ////// 回放 //////
 control.prototype.replay = function (force) {
-    if (!core.isPlaying() || !core.isReplaying()
-        || core.status.replay.animate || core.status.event.id || core.status.replay.failed) return;
-    if (core.status.replay.pausing && !force) return;
-    this._replay_drawProgress();
-    if (core.status.replay.toReplay.length == 0)
-        return this._replay_finished();
-    this._replay_save();
-    var action = core.status.replay.toReplay.shift();
-    if (this._doReplayAction(action)) return;
-    this._replay_error(action);
-}
+  if (
+    !core.isPlaying() ||
+    !core.isReplaying() ||
+    core.status.replay.animate ||
+    core.status.event.id ||
+    core.status.replay.failed
+  )
+    return;
+  if (core.status.replay.pausing && !force) return;
+  this._replay_drawProgress();
+  if (core.status.replay.toReplay.length == 0) return this._replay_finished();
+  this._replay_save();
+  var action = core.status.replay.toReplay.shift();
+  if (this._doReplayAction(action)) return;
+  this._replay_error(action);
+};
 
 ////// 注册一个录像行为 //////
 // name:自定义名称,可用于注销使用
@@ -1608,1958 +2039,2394 @@ control.prototype.replay = function (force) {
 //       需要接受一个action参数,代表录像回放时的下一个操作
 // func返回true代表成功处理了此录像行为,false代表没有处理此录像行为。
 control.prototype.registerReplayAction = function (name, func) {
-    this.unregisterReplayAction(name);
-    this.replayActions.push({ name: name, func: func });
-}
+  this.unregisterReplayAction(name);
+  this.replayActions.push({ name: name, func: func });
+};
 
 ////// 注销一个录像行为 //////
 control.prototype.unregisterReplayAction = function (name) {
-    this.replayActions = this.replayActions.filter(function (b) { return b.name != name; });
-}
+  this.replayActions = this.replayActions.filter(function (b) {
+    return b.name != name;
+  });
+};
 
 ////// 执行录像行为,会在注册的函数中依次执行直到得到true为止 //////
 control.prototype._doReplayAction = function (action) {
-    for (var i in this.replayActions) {
-        try {
-            if (core.doFunc(this.replayActions[i].func, this, action)) return true;
-        } catch (e) {
-            console.error(e);
-            console.error("ERROR in replayActions[" + this.replayActions[i].name + "]:已自动注销该项。");
-            core.unregisterReplayAction(this.replayActions[i].name);
-        }
+  for (var i in this.replayActions) {
+    try {
+      if (core.doFunc(this.replayActions[i].func, this, action)) return true;
+    } catch (e) {
+      console.error(e);
+      console.error(
+        "ERROR in replayActions[" +
+          this.replayActions[i].name +
+          "]:已自动注销该项。"
+      );
+      core.unregisterReplayAction(this.replayActions[i].name);
     }
-    return false;
-}
+  }
+  return false;
+};
 
 control.prototype._replay_finished = function () {
-    core.status.replay.replaying = false;
-    core.status.replay.failed = false;
-    core.status.event.selection = 0;
-    var str = "录像播放完毕,你想退出播放吗?";
-    if (core.status.route.length != core.status.replay.totalList.length
-        || core.subarray(core.status.route, core.status.replay.totalList) == null) {
-        str = "录像播放完毕,但记录不一致。\n请检查录像播放时的二次记录问题。\n你想退出播放吗?";
+  core.status.replay.replaying = false;
+  core.status.replay.failed = false;
+  core.status.event.selection = 0;
+  var str = "录像播放完毕,你想退出播放吗?";
+  if (
+    core.status.route.length != core.status.replay.totalList.length ||
+    core.subarray(core.status.route, core.status.replay.totalList) == null
+  ) {
+    str =
+      "录像播放完毕,但记录不一致。\n请检查录像播放时的二次记录问题。\n你想退出播放吗?";
+  }
+  core.ui.drawConfirmBox(
+    str,
+    function () {
+      core.ui.closePanel();
+      core.stopReplay(true);
+    },
+    function () {
+      core.status.replay.replaying = true;
+      core.ui.closePanel();
+      core.pauseReplay();
     }
-    core.ui.drawConfirmBox(str, function () {
-        core.ui.closePanel();
-        core.stopReplay(true);
-    }, function () {
-        core.status.replay.replaying = true;
-        core.ui.closePanel();
-        core.pauseReplay();
-    });
-}
+  );
+};
 
 control.prototype._replay_save = function () {
-    core.status.replay.steps++;
-    if (core.status.replay.steps % 40 == 1) {
-        if (core.status.replay.save.length == 30)
-            core.status.replay.save.shift();
-        core.status.replay.save.push({
-            "data": core.saveData(), "replay": {
-                "totalList": core.cloneArray(core.status.replay.totalList),
-                "toReplay": core.cloneArray(core.status.replay.toReplay),
-                "steps": core.status.replay.steps
-            }
-        });
-    }
-}
+  core.status.replay.steps++;
+  if (core.status.replay.steps % 40 == 1) {
+    if (core.status.replay.save.length == 30) core.status.replay.save.shift();
+    core.status.replay.save.push({
+      data: core.saveData(),
+      replay: {
+        totalList: core.cloneArray(core.status.replay.totalList),
+        toReplay: core.cloneArray(core.status.replay.toReplay),
+        steps: core.status.replay.steps,
+      },
+    });
+  }
+};
 
 control.prototype._replay_error = function (action, callback) {
-    core.ui.closePanel();
-    core.status.replay.replaying = false;
-    core.status.replay.failed = true;
-    var len = core.status.replay.toReplay.length;
-    var prevList = core.status.replay.totalList.slice(-len - 11, -len - 1);
-    var nextList = core.status.replay.toReplay.slice(0, 10);
-    console.log("录像文件出错,当前操作:" + action);
-    console.log("之前的10个操作是:\n" + prevList.toString());
-    console.log("接下来10个操作是:\n" + nextList.toString());
-    core.ui.drawConfirmBox("录像文件出错,你想回到上个节点吗?", function () {
-        core.status.replay.failed = false;
-        core.ui.closePanel();
-        if (core.status.replay.save.length > 0) {
-            core.status.replay.replaying = true;
-            core.status.replay.pausing = true;
-            core.rewindReplay();
-        }
-        else {
-            core.playSound('操作失败');
-            core.stopReplay(true);
-            core.drawTip("无法回到上一个节点");
-            if (callback) callback();
-        }
-    }, function () {
-        core.status.replay.failed = false;
-        core.ui.closePanel();
+  core.ui.closePanel();
+  core.status.replay.replaying = false;
+  core.status.replay.failed = true;
+  var len = core.status.replay.toReplay.length;
+  var prevList = core.status.replay.totalList.slice(-len - 11, -len - 1);
+  var nextList = core.status.replay.toReplay.slice(0, 10);
+  console.log("录像文件出错,当前操作:" + action);
+  console.log("之前的10个操作是:\n" + prevList.toString());
+  console.log("接下来10个操作是:\n" + nextList.toString());
+  core.ui.drawConfirmBox(
+    "录像文件出错,你想回到上个节点吗?",
+    function () {
+      core.status.replay.failed = false;
+      core.ui.closePanel();
+      if (core.status.replay.save.length > 0) {
+        core.status.replay.replaying = true;
+        core.status.replay.pausing = true;
+        core.rewindReplay();
+      } else {
+        core.playSound("操作失败");
         core.stopReplay(true);
+        core.drawTip("无法回到上一个节点");
         if (callback) callback();
-    });
-}
+      }
+    },
+    function () {
+      core.status.replay.failed = false;
+      core.ui.closePanel();
+      core.stopReplay(true);
+      if (callback) callback();
+    }
+  );
+};
 
 control.prototype._replay_hideProgress = function () {
-    if (core.dymCanvas.replay) core.dymCanvas.replay.canvas.style.display = 'none';
-}
+  if (core.dymCanvas.replay)
+    core.dymCanvas.replay.canvas.style.display = "none";
+};
 
 control.prototype._replay_drawProgress = function () {
-    if (!core.dymCanvas.replay) return;
-    if (core.dymCanvas.replay.canvas.style.display == 'none') core.dymCanvas.replay.canvas.style.display = 'block';
-    var total = core.status.replay.totalList.length, left = total - core.status.replay.toReplay.length;
-    var content = '播放进度:' + left + ' / ' + total + '(' + (left / total * 100).toFixed(2) + '%)';
-    var width = 26 + core.calWidth('replay', content, "16px Arial");
-    core.clearMap('replay');
-    core.fillRect('replay', 0, 0, width, 40, '#000000');
-    core.fillText('replay', content, 16, 27, '#FFFFFF');
-}
+  if (!core.dymCanvas.replay) return;
+  if (core.dymCanvas.replay.canvas.style.display == "none")
+    core.dymCanvas.replay.canvas.style.display = "block";
+  var total = core.status.replay.totalList.length,
+    left = total - core.status.replay.toReplay.length;
+  var content =
+    "播放进度:" +
+    left +
+    " / " +
+    total +
+    "(" +
+    ((left / total) * 100).toFixed(2) +
+    "%)";
+  var width = 26 + core.calWidth("replay", content, "16px Arial");
+  core.clearMap("replay");
+  core.fillRect("replay", 0, 0, width, 40, "#000000");
+  core.fillText("replay", content, 16, 27, "#FFFFFF");
+};
 
 control.prototype.__replay_getTimeout = function () {
-    if (core.status.replay.speed == 24) return 0;
-    return 750 / Math.max(1, core.status.replay.speed);
-}
+  if (core.status.replay.speed == 24) return 0;
+  return 750 / Math.max(1, core.status.replay.speed);
+};
 
 control.prototype._replayAction_move = function (action) {
-    if (["up", "down", "left", "right"].indexOf(action) < 0) return false;
-    core.moveHero(action, core.replay);
-    return true;
-}
+  if (["up", "down", "left", "right"].indexOf(action) < 0) return false;
+  core.moveHero(action, core.replay);
+  return true;
+};
 
 control.prototype._replayAction_item = function (action) {
-    if (action.indexOf("item:") != 0) return false;
-    var itemId = action.substring(5);
-    if (!core.canUseItem(itemId)) return false;
-    if (core.material.items[itemId].hideInReplay || core.status.replay.speed == 24) {
-        core.useItem(itemId, false, core.replay);
-        return true;
-    }
-    var tools = core.getToolboxItems('tools'),
-        constants = core.getToolboxItems('constants');
-    var index, per = core._WIDTH_ - 1;
-    if ((index = tools.indexOf(itemId)) >= 0) {
-        core.status.event.data = { "toolsPage": Math.floor(index / per) + 1, "constantsPage": 1 };
-        index = index % per;
-    }
-    else if ((index = constants.indexOf(itemId)) >= 0) {
-        core.status.event.data = { "toolsPage": 1, "constantsPage": Math.floor(index / per) + 1 };
-        index = index % per + per;
-    }
-    if (index < 0) return false;
-    core.ui._drawToolbox(index);
-    setTimeout(function () {
-        core.ui.closePanel();
-        core.useItem(itemId, false, core.replay);
-    }, core.control.__replay_getTimeout());
+  if (action.indexOf("item:") != 0) return false;
+  var itemId = action.substring(5);
+  if (!core.canUseItem(itemId)) return false;
+  if (
+    core.material.items[itemId].hideInReplay ||
+    core.status.replay.speed == 24
+  ) {
+    core.useItem(itemId, false, core.replay);
     return true;
-}
+  }
+  var tools = core.getToolboxItems("tools"),
+    constants = core.getToolboxItems("constants");
+  var index,
+    per = core._WIDTH_ - 1;
+  if ((index = tools.indexOf(itemId)) >= 0) {
+    core.status.event.data = {
+      toolsPage: Math.floor(index / per) + 1,
+      constantsPage: 1,
+    };
+    index = index % per;
+  } else if ((index = constants.indexOf(itemId)) >= 0) {
+    core.status.event.data = {
+      toolsPage: 1,
+      constantsPage: Math.floor(index / per) + 1,
+    };
+    index = (index % per) + per;
+  }
+  if (index < 0) return false;
+  core.ui._drawToolbox(index);
+  setTimeout(function () {
+    core.ui.closePanel();
+    core.useItem(itemId, false, core.replay);
+  }, core.control.__replay_getTimeout());
+  return true;
+};
 
 control.prototype._replayAction_equip = function (action) {
-    if (action.indexOf("equip:") != 0) return false;
-    var equipId = action.substring(6);
-    var ownEquipment = core.getToolboxItems('equips');
-    var index = ownEquipment.indexOf(equipId), per = core._WIDTH_ - 1;
-    if (index < 0) {
-        core.removeFlag('__doNotCheckAutoEvents__');
-        return false;
-    }
+  if (action.indexOf("equip:") != 0) return false;
+  var equipId = action.substring(6);
+  var ownEquipment = core.getToolboxItems("equips");
+  var index = ownEquipment.indexOf(equipId),
+    per = core._WIDTH_ - 1;
+  if (index < 0) {
+    core.removeFlag("__doNotCheckAutoEvents__");
+    return false;
+  }
 
-    var cb = function () {
-        var next = core.status.replay.toReplay[0] || "";
-        if (!next.startsWith('equip:') && !next.startsWith('unEquip:')) {
-            core.removeFlag('__doNotCheckAutoEvents__');
-            core.checkAutoEvents();
-        }
-        core.replay();
+  var cb = function () {
+    var next = core.status.replay.toReplay[0] || "";
+    if (!next.startsWith("equip:") && !next.startsWith("unEquip:")) {
+      core.removeFlag("__doNotCheckAutoEvents__");
+      core.checkAutoEvents();
     }
-    core.setFlag('__doNotCheckAutoEvents__', true);
+    core.replay();
+  };
+  core.setFlag("__doNotCheckAutoEvents__", true);
 
-    core.status.route.push(action);
-    if (core.material.items[equipId].hideInReplay || core.status.replay.speed == 24) {
-        core.loadEquip(equipId, cb);
-        return true;
-    }
-    core.status.event.data = { "page": Math.floor(index / per) + 1, "selectId": null };
-    index = index % per + per;
-    core.ui._drawEquipbox(index);
-    setTimeout(function () {
-        core.ui.closePanel();
-        core.loadEquip(equipId, cb);
-    }, core.control.__replay_getTimeout());
+  core.status.route.push(action);
+  if (
+    core.material.items[equipId].hideInReplay ||
+    core.status.replay.speed == 24
+  ) {
+    core.loadEquip(equipId, cb);
     return true;
-}
+  }
+  core.status.event.data = {
+    page: Math.floor(index / per) + 1,
+    selectId: null,
+  };
+  index = (index % per) + per;
+  core.ui._drawEquipbox(index);
+  setTimeout(function () {
+    core.ui.closePanel();
+    core.loadEquip(equipId, cb);
+  }, core.control.__replay_getTimeout());
+  return true;
+};
 
 control.prototype._replayAction_unEquip = function (action) {
-    if (action.indexOf("unEquip:") != 0) return false;
-    var equipType = parseInt(action.substring(8));
-    if (!core.isset(equipType)) {
-        core.removeFlag('__doNotCheckAutoEvents__');
-        return false;
-    }
+  if (action.indexOf("unEquip:") != 0) return false;
+  var equipType = parseInt(action.substring(8));
+  if (!core.isset(equipType)) {
+    core.removeFlag("__doNotCheckAutoEvents__");
+    return false;
+  }
 
-    var cb = function () {
-        var next = core.status.replay.toReplay[0] || "";
-        if (!next.startsWith('equip:') && !next.startsWith('unEquip:')) {
-            core.removeFlag('__doNotCheckAutoEvents__');
-            core.checkAutoEvents();
-        }
-        core.replay();
+  var cb = function () {
+    var next = core.status.replay.toReplay[0] || "";
+    if (!next.startsWith("equip:") && !next.startsWith("unEquip:")) {
+      core.removeFlag("__doNotCheckAutoEvents__");
+      core.checkAutoEvents();
     }
-    core.setFlag('__doNotCheckAutoEvents__', true);
+    core.replay();
+  };
+  core.setFlag("__doNotCheckAutoEvents__", true);
 
-    core.ui._drawEquipbox(equipType);
-    core.status.route.push(action);
-    if (core.status.replay.speed == 24) {
-        core.unloadEquip(equipType, cb);
-        return true;
-    }
-    setTimeout(function () {
-        core.ui.closePanel();
-        core.unloadEquip(equipType, cb);
-    }, core.control.__replay_getTimeout());
+  core.ui._drawEquipbox(equipType);
+  core.status.route.push(action);
+  if (core.status.replay.speed == 24) {
+    core.unloadEquip(equipType, cb);
     return true;
-}
+  }
+  setTimeout(function () {
+    core.ui.closePanel();
+    core.unloadEquip(equipType, cb);
+  }, core.control.__replay_getTimeout());
+  return true;
+};
 
 control.prototype._replayAction_saveEquip = function (action) {
-    if (action.indexOf('saveEquip:') != 0) return false;
-    core.quickSaveEquip(parseInt(action.substring(10)));
-    core.replay();
-    return true;
-}
+  if (action.indexOf("saveEquip:") != 0) return false;
+  core.quickSaveEquip(parseInt(action.substring(10)));
+  core.replay();
+  return true;
+};
 
 control.prototype._replayAction_loadEquip = function (action) {
-    if (action.indexOf('loadEquip:') != 0) return false;
-    core.quickLoadEquip(parseInt(action.substring(10)));
-    core.replay();
-    return true;
-}
+  if (action.indexOf("loadEquip:") != 0) return false;
+  core.quickLoadEquip(parseInt(action.substring(10)));
+  core.replay();
+  return true;
+};
 
 control.prototype._replayAction_fly = function (action) {
-    if (action.indexOf("fly:") != 0) return false;
-    var floorId = action.substring(4);
-    var toIndex = core.floorIds.indexOf(floorId);
-    if (!core.canUseItem('fly') || (core.flags.flyNearStair && !core.nearStair())) return false;
-    core.ui.drawFly(toIndex);
-    if (core.status.replay.speed == 24) {
-        if (!core.flyTo(floorId, core.replay))
-            core.control._replay_error(action);
-        return true;
-    }
-    setTimeout(function () {
-        if (!core.flyTo(floorId, core.replay))
-            core.control._replay_error(action);
-    }, core.control.__replay_getTimeout());
+  if (action.indexOf("fly:") != 0) return false;
+  var floorId = action.substring(4);
+  var toIndex = core.floorIds.indexOf(floorId);
+  if (
+    !core.canUseItem("fly") ||
+    (core.flags.flyNearStair && !core.nearStair() && !flags.canMoveFloor)
+  )
+    return false;
+  core.ui.drawFly(toIndex);
+  if (core.status.replay.speed == 24) {
+    if (!core.flyTo(floorId, core.replay)) core.control._replay_error(action);
     return true;
-}
+  }
+  setTimeout(function () {
+    if (!core.flyTo(floorId, core.replay)) core.control._replay_error(action);
+  }, core.control.__replay_getTimeout());
+  return true;
+};
 
 control.prototype._replayAction_shop = function (action) {
-    if (action.indexOf("shop:") != 0) return false;
-    var shopId = action.substring(5);
-    if (core.canUseQuickShop(shopId) != null || !core.canOpenShop(shopId)) {
-        this._replay_error(shopId);
-        return true;
-    }
-    core.openShop(shopId, false);
-    core.replay();
+  if (action.indexOf("shop:") != 0) return false;
+  var shopId = action.substring(5);
+  if (core.canUseQuickShop(shopId) != null || !core.canOpenShop(shopId)) {
+    this._replay_error(shopId);
     return true;
-}
+  }
+  core.openShop(shopId, false);
+  core.replay();
+  return true;
+};
 
 control.prototype._replayAction_turn = function (action) {
-    if (action != 'turn' && action.indexOf('turn:') != 0) return false;
-    if (action == 'turn') core.turnHero();
-    else core.turnHero(action.substring(5));
-    core.replay();
-    return true;
-}
+  if (action != "turn" && action.indexOf("turn:") != 0) return false;
+  if (action == "turn") core.turnHero();
+  else core.turnHero(action.substring(5));
+  core.replay();
+  return true;
+};
 
 control.prototype._replayAction_getNext = function (action) {
-    if (action != "getNext") return false;
-    core.getNextItem();
-    core.replay();
-    return true;
-}
+  if (action != "getNext") return false;
+  core.getNextItem();
+  core.replay();
+  return true;
+};
 
 control.prototype._replayAction_moveDirectly = function (action) {
-    if (action.indexOf("move:") != 0) return false;
-    // 忽略连续的瞬移事件;如果大地图某一边超过计算范围则不合并
-    if (!core.hasFlag('poison') && core.status.thisMap.width < 2 * core.bigmap.extend + core._WIDTH_
-        && core.status.thisMap.height < 2 * core.bigmap.extend + core._HEIGHT_) {
-        while (core.status.replay.toReplay.length > 0 &&
-            core.status.replay.toReplay[0].indexOf('move:') == 0) {
-            core.status.route.push(action);
-            action = core.status.replay.toReplay.shift();
-        }
+  if (action.indexOf("move:") != 0) return false;
+  // 忽略连续的瞬移事件;如果大地图某一边超过计算范围则不合并
+  if (
+    !core.hasFlag("poison") &&
+    core.status.thisMap.width < 2 * core.bigmap.extend + core._WIDTH_ &&
+    core.status.thisMap.height < 2 * core.bigmap.extend + core._HEIGHT_
+  ) {
+    while (
+      core.status.replay.toReplay.length > 0 &&
+      core.status.replay.toReplay[0].indexOf("move:") == 0
+    ) {
+      core.status.route.push(action);
+      action = core.status.replay.toReplay.shift();
     }
+  }
 
-    var pos = action.substring(5).split(":");
-    var x = parseInt(pos[0]), y = parseInt(pos[1]);
-    var nowx = core.getHeroLoc('x'), nowy = core.getHeroLoc('y');
-    var ignoreSteps = core.canMoveDirectly(x, y);
-    if (!core.moveDirectly(x, y, ignoreSteps)) return false;
-    if (core.status.replay.speed == 24) {
-        core.replay();
-        return true;
-    }
-
-    core.ui.drawArrow('ui', 32 * nowx + 16 - core.bigmap.offsetX, 32 * nowy + 16 - core.bigmap.offsetY,
-        32 * x + 16 - core.bigmap.offsetX, 32 * y + 16 - core.bigmap.offsetY, '#FF0000', 3);
-    var timeout = this.__replay_getTimeout();
-    if (ignoreSteps < 10) timeout = timeout * ignoreSteps / 10;
-    setTimeout(function () {
-        core.clearMap('ui');
-        core.replay();
-    }, timeout);
+  var pos = action.substring(5).split(":");
+  var x = parseInt(pos[0]),
+    y = parseInt(pos[1]);
+  var nowx = core.getHeroLoc("x"),
+    nowy = core.getHeroLoc("y");
+  var ignoreSteps = core.canMoveDirectly(x, y);
+  if (!core.moveDirectly(x, y, ignoreSteps)) return false;
+  if (core.status.replay.speed == 24) {
+    core.replay();
     return true;
-}
+  }
+
+  core.ui.drawArrow(
+    "ui",
+    32 * nowx + 16 - core.bigmap.offsetX,
+    32 * nowy + 16 - core.bigmap.offsetY,
+    32 * x + 16 - core.bigmap.offsetX,
+    32 * y + 16 - core.bigmap.offsetY,
+    "#FF0000",
+    3
+  );
+  var timeout = this.__replay_getTimeout();
+  if (ignoreSteps < 10) timeout = (timeout * ignoreSteps) / 10;
+  setTimeout(function () {
+    core.clearMap("ui");
+    core.replay();
+  }, timeout);
+  return true;
+};
 
 control.prototype._replayAction_key = function (action) {
-    if (action.indexOf("key:") != 0) return false;
-    core.actions.keyUp(parseInt(action.substring(4)), false, true);
-    core.replay();
-    return true;
-}
+  if (action.indexOf("key:") != 0) return false;
+  core.actions.keyUp(parseInt(action.substring(4)), false, true);
+  core.replay();
+  return true;
+};
 
 control.prototype._replayAction_click = function (action) {
-    if (action.indexOf("click:") != 0) return false;
-    var p = action.split(":");
-    if (p.length != 4) return false;
-    core.actions.doRegisteredAction("onStatusBarClick", parseInt(p[2]), parseInt(p[3]), parseInt(p[1]));
-    core.replay();
-    return true;
-}
+  if (action.indexOf("click:") != 0) return false;
+  var p = action.split(":");
+  if (p.length != 4) return false;
+  core.actions.doRegisteredAction(
+    "onStatusBarClick",
+    parseInt(p[2]),
+    parseInt(p[3]),
+    parseInt(p[1])
+  );
+  core.replay();
+  return true;
+};
 
 control.prototype._replayAction_ignoreInput = function (action) {
-    if (action.indexOf('input:') == 0 || action.indexOf('input2:') == 0 || action.indexOf('choices:') == 0 || action.indexOf('random:') == 0) {
-        console.warn('警告!录像播放中出现了未知的 ' + action + '!');
-        core.replay();
-        return true;
-    }
-    return false;
-}
-
-control.prototype._replayAction_no = function (action) {
-    if (action != 'no') return false;
-    core.status.route.push(action);
+  if (
+    action.indexOf("input:") == 0 ||
+    action.indexOf("input2:") == 0 ||
+    action.indexOf("choices:") == 0 ||
+    action.indexOf("random:") == 0
+  ) {
+    console.warn("警告!录像播放中出现了未知的 " + action + "!");
     core.replay();
     return true;
-}
+  }
+  return false;
+};
+
+control.prototype._replayAction_no = function (action) {
+  if (action != "no") return false;
+  core.status.route.push(action);
+  core.replay();
+  return true;
+};
 
 // ------ 存读档相关 ------ //
 
 ////// 自动存档 //////
 control.prototype.autosave = function (removeLast) {
-    if (core.hasFlag('__forbidSave__')) return;
-    var x = null;
-    if (removeLast) {
-        x = core.status.route.pop();
-        core.status.route.push("turn:" + core.getHeroLoc('direction'));
+  if (core.hasFlag("__forbidSave__")) return;
+  var x = null;
+  if (removeLast) {
+    x = core.status.route.pop();
+    core.status.route.push("turn:" + core.getHeroLoc("direction"));
+  }
+  if (core.status.event.id == "action" && !removeLast)
+    // 事件中自动存档,读档后是否回到事件触发前
+    core.setFlag("__events__", core.clone(core.status.event.data));
+  if (core.saves.autosave.data == null) {
+    core.saves.autosave.data = [];
+  }
+  core.saves.autosave.data.splice(core.saves.autosave.now, 0, core.saveData());
+  core.saves.autosave.now += 1;
+  if (core.saves.autosave.data.length > core.saves.autosave.max) {
+    if (core.saves.autosave.now < core.saves.autosave.max / 2)
+      core.saves.autosave.data.pop();
+    else {
+      core.saves.autosave.data.shift();
+      core.saves.autosave.now = core.saves.autosave.now - 1;
     }
-    if (core.status.event.id == 'action' && !removeLast) // 事件中自动存档,读档后是否回到事件触发前
-        core.setFlag("__events__", core.clone(core.status.event.data));
-    if (core.saves.autosave.data == null) {
-        core.saves.autosave.data = [];
-    }
-    core.saves.autosave.data.splice(core.saves.autosave.now, 0, core.saveData());
-    core.saves.autosave.now += 1;
-    if (core.saves.autosave.data.length > core.saves.autosave.max) {
-        if (core.saves.autosave.now < core.saves.autosave.max / 2)
-            core.saves.autosave.data.pop();
-        else {
-            core.saves.autosave.data.shift();
-            core.saves.autosave.now = core.saves.autosave.now - 1;
-        }
-    }
-    core.saves.autosave.updated = true;
-    core.saves.ids[0] = true;
-    core.removeFlag("__events__");
-    if (removeLast) {
-        core.status.route.pop();
-        if (x) core.status.route.push(x);
-    }
-}
+  }
+  core.saves.autosave.updated = true;
+  core.saves.ids[0] = true;
+  core.removeFlag("__events__");
+  if (removeLast) {
+    core.status.route.pop();
+    if (x) core.status.route.push(x);
+  }
+};
 
 /////// 实际进行自动存档 //////
 control.prototype.checkAutosave = function () {
-    if (!core.animateFrame || !core.saves || !core.saves.autosave) return;
-    core.setLocalStorage('totalTime', core.animateFrame.totalTime);
-    var autosave = core.saves.autosave;
-    if (autosave.data == null || !autosave.updated || !autosave.storage) return;
-    autosave.updated = false;
-    if (autosave.data.length >= 1) {
-        core.setLocalForage("autoSave", autosave.data[autosave.now - 1]);
-    }
-}
+  if (!core.animateFrame || !core.saves || !core.saves.autosave) return;
+  core.setLocalStorage("totalTime", core.animateFrame.totalTime);
+  var autosave = core.saves.autosave;
+  if (autosave.data == null || !autosave.updated || !autosave.storage) return;
+  autosave.updated = false;
+  if (autosave.data.length >= 1) {
+    core.setLocalForage("autoSave", autosave.data[autosave.now - 1]);
+  }
+};
 
 ////// 实际进行存读档事件 //////
 control.prototype.doSL = function (id, type) {
-    switch (type) {
-        case 'save': this._doSL_save(id); break;
-        case 'load': this._doSL_load(id, this._doSL_load_afterGet); break;
-        case 'reload': this._doSL_reload(id, this._doSL_load_afterGet); break;
-        case 'replayLoad': this._doSL_load(id, this._doSL_replayLoad_afterGet); break;
-        case 'replayRemain': this._doSL_load(id, this._doSL_replayRemain_afterGet); break;
-        case 'replaySince': this._doSL_load(id, this._doSL_replaySince_afterGet); break;
-    }
-}
+  switch (type) {
+    case "save":
+      this._doSL_save(id);
+      break;
+    case "load":
+      this._doSL_load(id, this._doSL_load_afterGet);
+      break;
+    case "reload":
+      this._doSL_reload(id, this._doSL_load_afterGet);
+      break;
+    case "replayLoad":
+      this._doSL_load(id, this._doSL_replayLoad_afterGet);
+      break;
+    case "replayRemain":
+      this._doSL_load(id, this._doSL_replayRemain_afterGet);
+      break;
+    case "replaySince":
+      this._doSL_load(id, this._doSL_replaySince_afterGet);
+      break;
+  }
+};
 
 control.prototype._doSL_save = function (id) {
-    if (id == 'autoSave') {
-        core.playSound('操作失败');
-        return core.drawTip('不能覆盖自动存档!');
+  if (id == "autoSave") {
+    core.playSound("操作失败");
+    return core.drawTip("不能覆盖自动存档!");
+  }
+  // 在事件中的存档
+  if (core.status.event.interval != null)
+    core.setFlag("__events__", core.status.event.interval);
+  var data = core.saveData();
+  if (core.isReplaying() && core.status.replay.toReplay.length > 0) {
+    data.__toReplay__ = core.encodeRoute(core.status.replay.toReplay);
+  }
+  core.setLocalForage(
+    "save" + id,
+    data,
+    function () {
+      core.saves.saveIndex = id;
+      core.setLocalStorage("saveIndex", core.saves.saveIndex);
+      // 恢复事件
+      if (!core.events.recoverEvents(core.status.event.interval))
+        core.ui.closePanel();
+      core.playSound("存档");
+      core.drawTip("存档成功!");
+    },
+    function (err) {
+      console.error(err);
+      alert("存档失败,错误信息:\n" + err);
     }
-    // 在事件中的存档
-    if (core.status.event.interval != null)
-        core.setFlag("__events__", core.status.event.interval);
-    var data = core.saveData();
-    if (core.isReplaying() && core.status.replay.toReplay.length > 0) {
-        data.__toReplay__ = core.encodeRoute(core.status.replay.toReplay);
-    }
-    core.setLocalForage("save" + id, data, function () {
-        core.saves.saveIndex = id;
-        core.setLocalStorage('saveIndex', core.saves.saveIndex);
-        // 恢复事件
-        if (!core.events.recoverEvents(core.status.event.interval))
-            core.ui.closePanel();
-        core.playSound('存档');
-        core.drawTip('存档成功!');
-    }, function (err) {
-        console.error(err);
-        alert("存档失败,错误信息:\n" + err);
-    });
-    core.removeFlag("__events__");
-    return;
-}
+  );
+  core.removeFlag("__events__");
+  return;
+};
 
 control.prototype._doSL_load = function (id, callback) {
-    if (id == 'autoSave' && core.saves.autosave.data != null) {
-        core.saves.autosave.now -= 1;
-        var data = core.saves.autosave.data.splice(core.saves.autosave.now, 1)[0];
-        if (core.isPlaying() && !core.status.gameOver) {
-            core.control.autosave(0);
-            core.saves.autosave.now -= 1;
-        }
-        if (core.saves.autosave.now == 0) {
-            core.saves.autosave.data.unshift(core.clone(data));
-            core.saves.autosave.now += 1;
+  if (id == "autoSave" && core.saves.autosave.data != null) {
+    core.saves.autosave.now -= 1;
+    var data = core.saves.autosave.data.splice(core.saves.autosave.now, 1)[0];
+    if (core.isPlaying() && !core.status.gameOver) {
+      core.control.autosave(0);
+      core.saves.autosave.now -= 1;
+    }
+    if (core.saves.autosave.now == 0) {
+      core.saves.autosave.data.unshift(core.clone(data));
+      core.saves.autosave.now += 1;
+    }
+    callback(id, data);
+  } else {
+    core.getLocalForage(
+      id == "autoSave" ? id : "save" + id,
+      null,
+      function (data) {
+        if (id == "autoSave" && data != null) {
+          core.saves.autosave.data = data;
+          if (!(core.saves.autosave.data instanceof Array)) {
+            core.saves.autosave.data = [core.saves.autosave.data];
+          }
+          core.saves.autosave.now = core.saves.autosave.data.length;
+          return core.control._doSL_load(id, callback);
         }
         callback(id, data);
-    }
-    else {
-        core.getLocalForage(id == 'autoSave' ? id : "save" + id, null, function (data) {
-            if (id == 'autoSave' && data != null) {
-                core.saves.autosave.data = data;
-                if (!(core.saves.autosave.data instanceof Array)) {
-                    core.saves.autosave.data = [core.saves.autosave.data];
-                }
-                core.saves.autosave.now = core.saves.autosave.data.length;
-                return core.control._doSL_load(id, callback);
-            }
-            callback(id, data);
-        }, function (err) {
-            console.error(err);
-            alert("无效的存档");
-        })
-    }
-    return;
-}
+      },
+      function (err) {
+        console.error(err);
+        alert("无效的存档");
+      }
+    );
+  }
+  return;
+};
 
 control.prototype._doSL_reload = function (id, callback) {
-    if (core.saves.autosave.data != null && core.saves.autosave.now < core.saves.autosave.data.length) {
-        var data = core.saves.autosave.data.splice(core.saves.autosave.now, 1)[0];
-        core.control.autosave(false);
-        callback(id, data);
-    }
-    return;
-}
+  if (
+    core.saves.autosave.data != null &&
+    core.saves.autosave.now < core.saves.autosave.data.length
+  ) {
+    var data = core.saves.autosave.data.splice(core.saves.autosave.now, 1)[0];
+    core.control.autosave(false);
+    callback(id, data);
+  }
+  return;
+};
 
 control.prototype._doSL_load_afterGet = function (id, data) {
-    if (!data) return alert("无效的存档");
-    var _replay = function () {
-        core.startGame(data.hard, data.hero.flags.__seed__, core.decodeRoute(data.route));
-    };
-    if (data.version != core.firstData.version) {
-        core.myconfirm("存档版本不匹配!\n你想回放此存档的录像吗?\n可以随时停止录像播放以继续游戏。", _replay);
-        return;
+  if (!data) return alert("无效的存档");
+  var _replay = function () {
+    core.startGame(
+      data.hard,
+      data.hero.flags.__seed__,
+      core.decodeRoute(data.route)
+    );
+  };
+  if (data.version != core.firstData.version) {
+    core.myconfirm(
+      "存档版本不匹配!\n你想回放此存档的录像吗?\n可以随时停止录像播放以继续游戏。",
+      _replay
+    );
+    return;
+  }
+  if (data.hero.flags.__events__ && data.guid != core.getGuid()) {
+    core.myconfirm("此存档可能存在风险,你想要播放录像么?", _replay);
+    return;
+  }
+  core.ui.closePanel();
+  core.loadData(data, function () {
+    core.removeFlag("__fromLoad__");
+    core.drawTip("读档成功");
+    if (id != "autoSave") {
+      core.saves.saveIndex = id;
+      core.setLocalStorage("saveIndex", core.saves.saveIndex);
     }
-    if (data.hero.flags.__events__ && data.guid != core.getGuid()) {
-        core.myconfirm("此存档可能存在风险,你想要播放录像么?", _replay);
-        return;
-    }
-    core.ui.closePanel();
-    core.loadData(data, function () {
-        core.removeFlag('__fromLoad__');
-        core.drawTip("读档成功");
-        if (id != "autoSave") {
-            core.saves.saveIndex = id;
-            core.setLocalStorage('saveIndex', core.saves.saveIndex);
-        }
-    });
-}
+  });
+};
 
 control.prototype._doSL_replayLoad_afterGet = function (id, data) {
-    if (!data) {
-        core.playSound('操作失败');
-        return core.drawTip("无效的存档");
-    }
-    if (data.version != core.firstData.version) {
-        core.playSound('操作失败');
-        return core.drawTip("存档版本不匹配");
-    }
-    if (data.hero.flags.__events__ && data.guid != core.getGuid()) {
-        core.playSound('操作失败');
-        return core.drawTip("此存档可能存在风险,无法读档");
-    }
-    var route = core.subarray(core.status.route, core.decodeRoute(data.route));
-    if (route == null) {
-        core.playSound('操作失败');
-        return core.drawTip("无法从此存档回放录像");
-    }
-    core.loadData(data, function () {
-        core.removeFlag('__fromLoad__');
-        core.startReplay(route);
-        core.drawTip("回退到存档节点");
-    });
-}
+  if (!data) {
+    core.playSound("操作失败");
+    return core.drawTip("无效的存档");
+  }
+  if (data.version != core.firstData.version) {
+    core.playSound("操作失败");
+    return core.drawTip("存档版本不匹配");
+  }
+  if (data.hero.flags.__events__ && data.guid != core.getGuid()) {
+    core.playSound("操作失败");
+    return core.drawTip("此存档可能存在风险,无法读档");
+  }
+  var route = core.subarray(core.status.route, core.decodeRoute(data.route));
+  if (route == null) {
+    core.playSound("操作失败");
+    return core.drawTip("无法从此存档回放录像");
+  }
+  core.loadData(data, function () {
+    core.removeFlag("__fromLoad__");
+    core.startReplay(route);
+    core.drawTip("回退到存档节点");
+  });
+};
 
 control.prototype._doSL_replayRemain_afterGet = function (id, data) {
-    if (!data) {
-        core.playSound('操作失败');
-        return core.drawTip("无效的存档");
-    }
-    var route = core.decodeRoute(data.route);
-    if (core.status.tempRoute) {
-        var remainRoute = core.subarray(route, core.status.tempRoute);
-        if (remainRoute == null)
-            return alert("无法接续播放录像!\n该存档必须是前一个选择的存档的后续内容。");
-        delete core.status.tempRoute;
-        core.ui.closePanel();
-        core.startReplay(remainRoute);
-        core.drawTip("接续播放录像");
-        return;
-    }
-    else if (data.floorId != core.status.floorId || data.hero.loc.x != core.getHeroLoc('x') || data.hero.loc.y != core.getHeroLoc('y'))
-        return alert("楼层或坐标不一致!");
-
-    core.status.tempRoute = route;
+  if (!data) {
+    core.playSound("操作失败");
+    return core.drawTip("无效的存档");
+  }
+  var route = core.decodeRoute(data.route);
+  if (core.status.tempRoute) {
+    var remainRoute = core.subarray(route, core.status.tempRoute);
+    if (remainRoute == null)
+      return alert(
+        "无法接续播放录像!\n该存档必须是前一个选择的存档的后续内容。"
+      );
+    delete core.status.tempRoute;
     core.ui.closePanel();
-    core.drawText("\t[步骤2]请选择第二个存档。\n\r[yellow]该存档必须是前一个存档的后续。\r\n将尝试播放到此存档。", function () {
-        core.status.event.id = 'replayRemain';
-        core.lockControl();
-        var saveIndex = core.saves.saveIndex;
-        var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page;
-        core.ui._drawSLPanel(10 * page + offset);
-    });
-}
+    core.startReplay(remainRoute);
+    core.drawTip("接续播放录像");
+    return;
+  } else if (
+    data.floorId != core.status.floorId ||
+    data.hero.loc.x != core.getHeroLoc("x") ||
+    data.hero.loc.y != core.getHeroLoc("y")
+  )
+    return alert("楼层或坐标不一致!");
+
+  core.status.tempRoute = route;
+  core.ui.closePanel();
+  core.drawText(
+    "\t[步骤2]请选择第二个存档。\n\r[yellow]该存档必须是前一个存档的后续。\r\n将尝试播放到此存档。",
+    function () {
+      core.status.event.id = "replayRemain";
+      core.lockControl();
+      var saveIndex = core.saves.saveIndex;
+      var page = parseInt((saveIndex - 1) / 5),
+        offset = saveIndex - 5 * page;
+      core.ui._drawSLPanel(10 * page + offset);
+    }
+  );
+};
 
 control.prototype._doSL_replaySince_afterGet = function (id, data) {
-    if (data.floorId != core.status.floorId || data.hero.loc.x != core.getHeroLoc('x') || data.hero.loc.y != core.getHeroLoc('y'))
-        return alert("楼层或坐标不一致!");
-    if (!data.__toReplay__) return alert('该存档没有剩余录像!');
-    core.ui.closePanel();
-    core.startReplay(core.decodeRoute(data.__toReplay__));
-    core.drawTip("播放存档剩余录像");
-    return;
-}
+  if (
+    data.floorId != core.status.floorId ||
+    data.hero.loc.x != core.getHeroLoc("x") ||
+    data.hero.loc.y != core.getHeroLoc("y")
+  )
+    return alert("楼层或坐标不一致!");
+  if (!data.__toReplay__) return alert("该存档没有剩余录像!");
+  core.ui.closePanel();
+  core.startReplay(core.decodeRoute(data.__toReplay__));
+  core.drawTip("播放存档剩余录像");
+  return;
+};
 
 ////// 同步存档到服务器 //////
 control.prototype.syncSave = function (type) {
-    core.ui.drawWaiting("正在同步,请稍候...");
-    var callback = function (saves) {
-        core.control._syncSave_http(type, saves);
-    }
-    if (type == 'all') core.getAllSaves(callback);
-    else core.getSave(core.saves.saveIndex, callback);
-}
+  core.ui.drawWaiting("正在同步,请稍候...");
+  var callback = function (saves) {
+    core.control._syncSave_http(type, saves);
+  };
+  if (type == "all") core.getAllSaves(callback);
+  else core.getSave(core.saves.saveIndex, callback);
+};
 
 control.prototype._syncSave_http = function (type, saves) {
-    if (!saves) return core.drawText("没有要同步的存档");
-    var formData = new FormData();
-    formData.append('type', 'save');
-    formData.append('name', core.firstData.name);
-    formData.append('data', LZString.compressToBase64(JSON.stringify(saves)));
-    formData.append('shorten', '1');
+  if (!saves) return core.drawText("没有要同步的存档");
+  var formData = new FormData();
+  formData.append("type", "save");
+  formData.append("name", core.firstData.name);
+  formData.append("data", LZString.compressToBase64(JSON.stringify(saves)));
+  formData.append("shorten", "1");
 
-    core.http("POST", "/games/sync.php", formData, function (data) {
-        var response = JSON.parse(data);
-        if (response.code < 0) {
-            core.drawText("出错啦!\n无法同步存档到服务器。\n错误原因:" + response.msg);
-        }
-        else {
-            core.drawText((type == 'all' ? "所有存档" : "存档" + core.saves.saveIndex) + "同步成功!\n\n您的存档编号+密码: \r[yellow]"
-                + response.code + response.msg
-                + "\r\n\n请牢记以上信息(如截图等),在从服务器\n同步存档时使用。\n\r[yellow]另外请注意,存档同步只会保存一个月的时间。\r")
-        }
-    }, function (e) {
-        core.drawText("出错啦!\n无法同步存档到服务器。\n错误原因:" + e);
-    })
-}
+  core.http(
+    "POST",
+    "/games/sync.php",
+    formData,
+    function (data) {
+      var response = JSON.parse(data);
+      if (response.code < 0) {
+        core.drawText(
+          "出错啦!\n无法同步存档到服务器。\n错误原因:" + response.msg
+        );
+      } else {
+        core.drawText(
+          (type == "all" ? "所有存档" : "存档" + core.saves.saveIndex) +
+            "同步成功!\n\n您的存档编号+密码: \r[yellow]" +
+            response.code +
+            response.msg +
+            "\r\n\n请牢记以上信息(如截图等),在从服务器\n同步存档时使用。\n\r[yellow]另外请注意,存档同步只会保存一个月的时间。\r"
+        );
+      }
+    },
+    function (e) {
+      core.drawText("出错啦!\n无法同步存档到服务器。\n错误原因:" + e);
+    }
+  );
+};
 
 ////// 从服务器加载存档 //////
 control.prototype.syncLoad = function () {
-    core.myprompt("请输入存档编号+密码", null, function (idpassword) {
-        if (!idpassword) return core.ui._drawSyncSave();
-        if (!/^\d{6}\w{4}$/.test(idpassword) && !/^\d{4}\w{3}$/.test(idpassword)) {
-            core.drawText("不合法的存档编号+密码!");
-            return;
-        }
-        core.ui.drawWaiting("正在同步,请稍候...");
-        if (idpassword.length == 7) {
-            core.control._syncLoad_http(idpassword.substring(0, 4), idpassword.substring(4));
-        } else {
-            core.control._syncLoad_http(idpassword.substring(0, 6), idpassword.substring(6));
-        }
-    });
-}
+  core.myprompt("请输入存档编号+密码", null, function (idpassword) {
+    if (!idpassword) return core.ui._drawSyncSave();
+    if (!/^\d{6}\w{4}$/.test(idpassword) && !/^\d{4}\w{3}$/.test(idpassword)) {
+      core.drawText("不合法的存档编号+密码!");
+      return;
+    }
+    core.ui.drawWaiting("正在同步,请稍候...");
+    if (idpassword.length == 7) {
+      core.control._syncLoad_http(
+        idpassword.substring(0, 4),
+        idpassword.substring(4)
+      );
+    } else {
+      core.control._syncLoad_http(
+        idpassword.substring(0, 6),
+        idpassword.substring(6)
+      );
+    }
+  });
+};
 
 control.prototype._syncLoad_http = function (id, password) {
-    var formData = new FormData();
-    formData.append('type', 'load');
-    formData.append('name', core.firstData.name);
-    formData.append('id', id);
-    formData.append('password', password);
+  var formData = new FormData();
+  formData.append("type", "load");
+  formData.append("name", core.firstData.name);
+  formData.append("id", id);
+  formData.append("password", password);
 
-    core.http("POST", "/games/sync.php", formData, function (data) {
-        var response = JSON.parse(data);
-        if (response.code == 0) {
-            var msg = null;
-            try {
-                msg = JSON.parse(LZString.decompressFromBase64(response.msg));
-            } catch (e) { }
-            if (!msg) {
-                try {
-                    msg = JSON.parse(response.msg);
-                } catch (e) { }
-            }
-            if (msg) {
-                core.control._syncLoad_write(msg);
-            } else {
-                core.drawText("出错啦!\n存档解析失败!");
-            }
+  core.http(
+    "POST",
+    "/games/sync.php",
+    formData,
+    function (data) {
+      var response = JSON.parse(data);
+      if (response.code == 0) {
+        var msg = null;
+        try {
+          msg = JSON.parse(LZString.decompressFromBase64(response.msg));
+        } catch (e) {}
+        if (!msg) {
+          try {
+            msg = JSON.parse(response.msg);
+          } catch (e) {}
         }
-        else {
-            core.drawText("出错啦!\n无法从服务器同步存档。\n错误原因:" + response.msg);
+        if (msg) {
+          core.control._syncLoad_write(msg);
+        } else {
+          core.drawText("出错啦!\n存档解析失败!");
         }
-    }, function (e) {
-        core.drawText("出错啦!\n无法从服务器同步存档。\n错误原因:" + e);
-    });
-}
+      } else {
+        core.drawText(
+          "出错啦!\n无法从服务器同步存档。\n错误原因:" + response.msg
+        );
+      }
+    },
+    function (e) {
+      core.drawText("出错啦!\n无法从服务器同步存档。\n错误原因:" + e);
+    }
+  );
+};
 
 control.prototype._syncLoad_write = function (data) {
-    if (data instanceof Array) {
-        core.status.event.selection = 1;
-        core.ui.drawConfirmBox("所有本地存档都将被覆盖,确认?", function () {
-            for (var i = 1; i <= 5 * (main.savePages || 30); i++) {
-                if (i <= data.length)
-                    core.setLocalForage("save" + i, data[i - 1]);
-                else if (core.saves.ids[i])
-                    core.removeLocalForage("save" + i);
-            }
-            core.ui.closePanel();
-            core.drawText("同步成功!\n你的本地所有存档均已被覆盖。");
-        }, function () {
-            core.status.event.selection = 0;
-            core.ui._drawSyncSave();
-        });
-    }
-    else {
-        // 只覆盖单存档
-        core.setLocalForage("save" + core.saves.saveIndex, data, function () {
-            core.drawText("同步成功!\n单存档已覆盖至存档" + core.saves.saveIndex);
-        });
-    }
-}
+  if (data instanceof Array) {
+    core.status.event.selection = 1;
+    core.ui.drawConfirmBox(
+      "所有本地存档都将被覆盖,确认?",
+      function () {
+        for (var i = 1; i <= 5 * (main.savePages || 30); i++) {
+          if (i <= data.length) core.setLocalForage("save" + i, data[i - 1]);
+          else if (core.saves.ids[i]) core.removeLocalForage("save" + i);
+        }
+        core.ui.closePanel();
+        core.drawText("同步成功!\n你的本地所有存档均已被覆盖。");
+      },
+      function () {
+        core.status.event.selection = 0;
+        core.ui._drawSyncSave();
+      }
+    );
+  } else {
+    // 只覆盖单存档
+    core.setLocalForage("save" + core.saves.saveIndex, data, function () {
+      core.drawText("同步成功!\n单存档已覆盖至存档" + core.saves.saveIndex);
+    });
+  }
+};
 
 ////// 存档到本地 //////
 control.prototype.saveData = function () {
-    return this.controldata.saveData();
-}
+  return this.controldata.saveData();
+};
 
 ////// 从本地读档 //////
 control.prototype.loadData = function (data, callback) {
-    return this.controldata.loadData(data, callback);
-}
+  return this.controldata.loadData(data, callback);
+};
 
 control.prototype.getSave = function (index, callback) {
-    if (index == 0) {
-        // --- 自动存档先从缓存中获取
-        if (core.saves.autosave.data != null)
-            callback(core.saves.autosave.data);
-        else {
-            core.getLocalForage("autoSave", null, function (data) {
-                if (data != null) {
-                    core.saves.autosave.data = data;
-                    if (!(core.saves.autosave.data instanceof Array)) {
-                        core.saves.autosave.data = [core.saves.autosave.data];
-                    }
-                    core.saves.autosave.now = core.saves.autosave.data.length;
-                }
-                callback(core.saves.autosave.data);
-            }, function (err) {
-                console.error(err);
-                callback(null);
-            });
+  if (index == 0) {
+    // --- 自动存档先从缓存中获取
+    if (core.saves.autosave.data != null) callback(core.saves.autosave.data);
+    else {
+      core.getLocalForage(
+        "autoSave",
+        null,
+        function (data) {
+          if (data != null) {
+            core.saves.autosave.data = data;
+            if (!(core.saves.autosave.data instanceof Array)) {
+              core.saves.autosave.data = [core.saves.autosave.data];
+            }
+            core.saves.autosave.now = core.saves.autosave.data.length;
+          }
+          callback(core.saves.autosave.data);
+        },
+        function (err) {
+          console.error(err);
+          callback(null);
         }
-        return;
+      );
     }
-    core.getLocalForage("save" + index, null, function (data) {
-        if (callback) callback(data);
-    }, function (err) {
-        console.error(err);
-        if (callback) callback(null);
-    });
-}
+    return;
+  }
+  core.getLocalForage(
+    "save" + index,
+    null,
+    function (data) {
+      if (callback) callback(data);
+    },
+    function (err) {
+      console.error(err);
+      if (callback) callback(null);
+    }
+  );
+};
 
 control.prototype.getSaves = function (ids, callback) {
-    if (!(ids instanceof Array)) return this.getSave(ids, callback);
-    var count = ids.length, data = {};
-    for (var i = 0; i < ids.length; ++i) {
-        (function (i) {
-            core.getSave(ids[i], function (result) {
-                data[i] = result;
-                if (Object.keys(data).length == count)
-                    callback(data);
-            })
-        })(i);
-    }
-}
+  if (!(ids instanceof Array)) return this.getSave(ids, callback);
+  var count = ids.length,
+    data = {};
+  for (var i = 0; i < ids.length; ++i) {
+    (function (i) {
+      core.getSave(ids[i], function (result) {
+        data[i] = result;
+        if (Object.keys(data).length == count) callback(data);
+      });
+    })(i);
+  }
+};
 
 control.prototype.getAllSaves = function (callback) {
-    var ids = Object.keys(core.saves.ids).filter(function (x) { return x != 0; })
-        .sort(function (a, b) { return a - b; }), saves = [];
-    this.getSaves(ids, function (data) {
-        for (var i = 0; i < ids.length; ++i) {
-            if (data[i] != null)
-                saves.push(data[i]);
-        }
-        callback(saves);
-    });
-}
+  var ids = Object.keys(core.saves.ids)
+      .filter(function (x) {
+        return x != 0;
+      })
+      .sort(function (a, b) {
+        return a - b;
+      }),
+    saves = [];
+  this.getSaves(ids, function (data) {
+    for (var i = 0; i < ids.length; ++i) {
+      if (data[i] != null) saves.push(data[i]);
+    }
+    callback(saves);
+  });
+};
 
 ////// 获得所有存在存档的存档位 //////
 control.prototype.getSaveIndexes = function (callback) {
-    var indexes = {};
-    core.keysLocalForage(function (err, keys) {
-        if (err) {
-            console.error(err);
-            return callback(indexes);
-        }
-        keys.forEach(function (key) {
-            core.control._getSaveIndexes_getIndex(indexes, key);
-        });
-        callback(indexes);
+  var indexes = {};
+  core.keysLocalForage(function (err, keys) {
+    if (err) {
+      console.error(err);
+      return callback(indexes);
+    }
+    keys.forEach(function (key) {
+      core.control._getSaveIndexes_getIndex(indexes, key);
     });
-}
+    callback(indexes);
+  });
+};
 
 control.prototype._getSaveIndexes_getIndex = function (indexes, name) {
-    var e = new RegExp('^' + core.firstData.name + "_(save\\d+|autoSave)$").exec(name);
-    if (e) {
-        if (e[1] == 'autoSave') indexes[0] = true;
-        else indexes[parseInt(e[1].substring(4))] = true;
-    }
-}
+  var e = new RegExp("^" + core.firstData.name + "_(save\\d+|autoSave)$").exec(
+    name
+  );
+  if (e) {
+    if (e[1] == "autoSave") indexes[0] = true;
+    else indexes[parseInt(e[1].substring(4))] = true;
+  }
+};
 
 ////// 判断某个存档位是否存在存档 //////
 control.prototype.hasSave = function (index) {
-    return core.saves.ids[index] || false;
-}
+  return core.saves.ids[index] || false;
+};
 
 ////// 删除某个存档
 control.prototype.removeSave = function (index, callback) {
-    if (index == 0 || index == "autoSave") {
-        index = "autoSave";
-        core.removeLocalForage(index, function () {
-            core.saves.autosave.data = null;
-            core.saves.autosave.updated = false;
-            if (callback) callback();
-        });
-        return;
-    }
-    core.removeLocalForage("save" + index, function () {
-        core.saves.favorite = core.saves.favorite.filter(function (i) { return core.hasSave(i); });
-        delete core.saves.favoriteName[index];
-        core.control._updateFavoriteSaves();
-        if (callback) callback();
-    }, function () {
-        core.playSound('操作失败');
-        core.drawTip("无法删除存档!");
-        if (callback) callback();
+  if (index == 0 || index == "autoSave") {
+    index = "autoSave";
+    core.removeLocalForage(index, function () {
+      core.saves.autosave.data = null;
+      core.saves.autosave.updated = false;
+      if (callback) callback();
     });
-}
+    return;
+  }
+  core.removeLocalForage(
+    "save" + index,
+    function () {
+      core.saves.favorite = core.saves.favorite.filter(function (i) {
+        return core.hasSave(i);
+      });
+      delete core.saves.favoriteName[index];
+      core.control._updateFavoriteSaves();
+      if (callback) callback();
+    },
+    function () {
+      core.playSound("操作失败");
+      core.drawTip("无法删除存档!");
+      if (callback) callback();
+    }
+  );
+};
 
 ////// 读取收藏信息
 control.prototype._loadFavoriteSaves = function () {
-    core.saves.favorite = core.getLocalStorage("favorite", []);
-    // --- 移除不存在的收藏
-    core.saves.favorite = core.saves.favorite.filter(function (i) { return core.hasSave(i); });
-    core.saves.favoriteName = core.getLocalStorage("favoriteName", {});
-}
+  core.saves.favorite = core.getLocalStorage("favorite", []);
+  // --- 移除不存在的收藏
+  core.saves.favorite = core.saves.favorite.filter(function (i) {
+    return core.hasSave(i);
+  });
+  core.saves.favoriteName = core.getLocalStorage("favoriteName", {});
+};
 
 control.prototype._updateFavoriteSaves = function () {
-    core.setLocalStorage("favorite", core.saves.favorite);
-    core.setLocalStorage("favoriteName", core.saves.favoriteName);
-}
+  core.setLocalStorage("favorite", core.saves.favorite);
+  core.setLocalStorage("favoriteName", core.saves.favoriteName);
+};
 
 // ------ 属性,状态,位置,buff,变量,锁定控制等 ------ //
 
 ////// 设置勇士属性 //////
 control.prototype.setStatus = function (name, value) {
-    if (!core.status.hero) return;
-    if (name == 'x' || name == 'y' || name == 'direction')
-        this.setHeroLoc(name, value);
-    else
-        core.status.hero[name] = value;
-}
+  if (!core.status.hero) return;
+  if (name == "x" || name == "y" || name == "direction")
+    this.setHeroLoc(name, value);
+  else core.status.hero[name] = value;
+};
 
 ////// 增减勇士属性 //////
 control.prototype.addStatus = function (name, value) {
-    this.setStatus(name, this.getStatus(name) + value);
-}
+  this.setStatus(name, this.getStatus(name) + value);
+};
 
 ////// 获得勇士属性 //////
 control.prototype.getStatus = function (name) {
-    if (!core.status.hero) return null;
-    if (name == 'x' || name == 'y' || name == 'direction')
-        return this.getHeroLoc(name);
-    if (main.mode == 'editor' && !core.hasFlag('__statistics__')) {
-        return data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.hero[name];
-    }
-    return core.status.hero[name];
-}
+  if (!core.status.hero) return null;
+  if (name == "x" || name == "y" || name == "direction")
+    return this.getHeroLoc(name);
+  if (main.mode == "editor" && !core.hasFlag("__statistics__")) {
+    return data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.hero[name];
+  }
+  return core.status.hero[name];
+};
 
 ////// 从status中获得属性,如果不存在则从勇士属性中获取 //////
 control.prototype.getStatusOrDefault = function (status, name) {
-    if (status && name in status)
-        return Math.floor(status[name]);
-    return Math.floor(this.getStatus(name));
-}
+  if (status && name in status) return Math.floor(status[name]);
+  return Math.floor(this.getStatus(name));
+};
 
 ////// 获得勇士实际属性(增幅后的) //////
 control.prototype.getRealStatus = function (name) {
-    return this.getRealStatusOrDefault(null, name);
-}
+  return this.getRealStatusOrDefault(null, name);
+};
 
 ////// 从status中获得实际属性(增幅后的),如果不存在则从勇士属性中获取 //////
 control.prototype.getRealStatusOrDefault = function (status, name) {
-    return Math.floor(this.getStatusOrDefault(status, name) * this.getBuff(name));
-}
+  return Math.floor(this.getStatusOrDefault(status, name) * this.getBuff(name));
+};
 
 ////// 获得勇士原始属性(无装备和衰弱影响) //////
 control.prototype.getNakedStatus = function (name) {
-    var value = this.getStatus(name);
-    if (value == null) return value;
-    // 装备增幅
-    core.status.hero.equipment.forEach(function (v) {
-        if (!v || !(core.material.items[v] || {}).equip) return;
-        value -= core.material.items[v].equip.value[name] || 0;
-    });
-    // 衰弱扣除
-    if (core.hasFlag('weak') && core.values.weakValue >= 1 && (name == 'atk' || name == 'def')) {
-        value += core.values.weakValue;
-    }
-    return value;
-}
+  var value = this.getStatus(name);
+  if (value == null) return value;
+  // 装备增幅
+  core.status.hero.equipment.forEach(function (v) {
+    if (!v || !(core.material.items[v] || {}).equip) return;
+    value -= core.material.items[v].equip.value[name] || 0;
+  });
+  // 衰弱扣除
+  if (
+    core.hasFlag("weak") &&
+    core.values.weakValue >= 1 &&
+    (name == "atk" || name == "def")
+  ) {
+    value += core.values.weakValue;
+  }
+  return value;
+};
 
 ////// 获得某个属性的名字 //////
 control.prototype.getStatusLabel = function (name) {
-    if (this.controldata.getStatusLabel) {
-        return this.controldata.getStatusLabel(name) || name;
-    }
-    return {
-        name: "名称", lv: "等级", hpmax: "生命上限", hp: "生命", manamax: "魔力上限", mana: "魔力",
-        atk: "攻击", def: "防御", mdef: "护盾", money: "金币", exp: "经验", point: "加点", steps: "步数"
-    }[name] || name;
-}
+  if (this.controldata.getStatusLabel) {
+    return this.controldata.getStatusLabel(name) || name;
+  }
+  return (
+    {
+      name: "名称",
+      lv: "等级",
+      hpmax: "生命上限",
+      hp: "生命",
+      manamax: "魔力上限",
+      mana: "魔力",
+      atk: "攻击",
+      def: "防御",
+      mdef: "护盾",
+      money: "金币",
+      exp: "经验",
+      point: "加点",
+      steps: "步数",
+    }[name] || name
+  );
+};
 
 ////// 设置某个属性的增幅值 //////
 control.prototype.setBuff = function (name, value) {
-    // 仅保留三位有效buff值
-    value = parseFloat(value.toFixed(3));
-    this.setFlag('__' + name + '_buff__', value);
-}
+  // 仅保留三位有效buff值
+  value = parseFloat(value.toFixed(3));
+  this.setFlag("__" + name + "_buff__", value);
+};
 
 ////// 加减某个属性的增幅值 //////
 control.prototype.addBuff = function (name, value) {
-    var buff = this.getBuff(name) + value;
-    // 仅保留三位有效buff值
-    buff = parseFloat(buff.toFixed(3));
-    this.setFlag('__' + name + '_buff__', buff);
-}
+  var buff = this.getBuff(name) + value;
+  // 仅保留三位有效buff值
+  buff = parseFloat(buff.toFixed(3));
+  this.setFlag("__" + name + "_buff__", buff);
+};
 
 ////// 获得某个属性的增幅值 //////
 control.prototype.getBuff = function (name) {
-    return core.getFlag('__' + name + '_buff__', 1);
-}
+  return core.getFlag("__" + name + "_buff__", 1);
+};
 
 ////// 获得或移除毒衰咒效果 //////
 control.prototype.triggerDebuff = function (action, type) {
-    return this.controldata.triggerDebuff(action, type);
-}
+  return this.controldata.triggerDebuff(action, type);
+};
 
 ////// 设置勇士的位置 //////
 control.prototype.setHeroLoc = function (name, value, noGather) {
-    if (!core.status.hero) return;
-    core.status.hero.loc[name] = value;
-    if ((name == 'x' || name == 'y') && !noGather) {
-        this.gatherFollowers();
-    }
-    core.ui.drawStatusBar();
-}
+  if (!core.status.hero) return;
+  core.status.hero.loc[name] = value;
+  if ((name == "x" || name == "y") && !noGather) {
+    this.gatherFollowers();
+  }
+  core.ui.drawStatusBar();
+};
 
 ////// 获得勇士的位置 //////
 control.prototype.getHeroLoc = function (name) {
-    if (!core.status.hero) return;
-    if (main.mode == 'editor') {
-        if (name == null) return data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.hero.loc;
-        return data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.hero.loc[name];
-    }
-    if (name == null) return core.status.hero.loc;
-    return core.status.hero.loc[name];
-}
+  if (!core.status.hero) return;
+  if (main.mode == "editor") {
+    if (name == null)
+      return data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.hero.loc;
+    return data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.hero.loc[name];
+  }
+  if (name == null) return core.status.hero.loc;
+  return core.status.hero.loc[name];
+};
 
 ////// 获得某个等级的名称 //////
 control.prototype.getLvName = function (lv) {
-    if (!core.status.hero) return null;
-    if (lv == null) lv = core.status.hero.lv;
-    return ((core.firstData.levelUp || [])[lv - 1] || {}).title || lv;
-}
+  if (!core.status.hero) return null;
+  if (lv == null) lv = core.status.hero.lv;
+  return ((core.firstData.levelUp || [])[lv - 1] || {}).title || lv;
+};
 
 ////// 获得下个等级所需经验;如果不存在下个等级,返回null。 //////
 control.prototype.getNextLvUpNeed = function () {
-    if (!core.status.hero) return null;
-    if (core.status.hero.lv >= core.firstData.levelUp.length) return null;
-    var need = core.calValue(core.firstData.levelUp[core.status.hero.lv].need);
-    if (core.flags.statusBarItems.indexOf('levelUpLeftMode') >= 0)
-        return Math.max(need - core.getStatus('exp'), 0);
-    else return need;
-}
+  if (!core.status.hero) return null;
+  if (core.status.hero.lv >= core.firstData.levelUp.length) return null;
+  var need = core.calValue(core.firstData.levelUp[core.status.hero.lv].need);
+  if (core.flags.statusBarItems.indexOf("levelUpLeftMode") >= 0)
+    return Math.max(need - core.getStatus("exp"), 0);
+  else return need;
+};
 
 ////// 设置某个自定义变量或flag //////
 control.prototype.setFlag = function (name, value) {
-    if (value == null) return this.removeFlag(name);
-    if (!core.status.hero) return;
-    core.status.hero.flags[name] = value;
-}
+  if (value == null) return this.removeFlag(name);
+  if (!core.status.hero) return;
+  core.status.hero.flags[name] = value;
+};
 
 ////// 增加某个flag数值 //////
 control.prototype.addFlag = function (name, value) {
-    if (!core.status.hero) return;
-    core.setFlag(name, core.getFlag(name, 0) + value);
-}
+  if (!core.status.hero) return;
+  core.setFlag(name, core.getFlag(name, 0) + value);
+};
 
 ////// 获得某个自定义变量或flag //////
 control.prototype.getFlag = function (name, defaultValue) {
-    if (!core.status.hero) return defaultValue;
-    var value = core.status.hero.flags[name];
-    return value != null ? value : defaultValue;
-}
+  if (!core.status.hero) return defaultValue;
+  var value = core.status.hero.flags[name];
+  return value != null ? value : defaultValue;
+};
 
 ////// 是否存在某个自定义变量或flag,且值为true //////
 control.prototype.hasFlag = function (name) {
-    return !!core.getFlag(name);
-}
+  return !!core.getFlag(name);
+};
 
 ////// 删除某个自定义变量或flag //////
 control.prototype.removeFlag = function (name) {
-    if (!core.status.hero) return;
-    delete core.status.hero.flags[name];
-}
+  if (!core.status.hero) return;
+  delete core.status.hero.flags[name];
+};
 
 ////// 获得某个点的独立开关 //////
 control.prototype.getSwitch = function (x, y, floorId, name, defaultValue) {
-    var prefix = [floorId || core.status.floorId || ":f", x != null ? x : "x", y != null ? y : "y"].join("@");
-    return this.getFlag(prefix + "@" + name, defaultValue);
-}
+  var prefix = [
+    floorId || core.status.floorId || ":f",
+    x != null ? x : "x",
+    y != null ? y : "y",
+  ].join("@");
+  return this.getFlag(prefix + "@" + name, defaultValue);
+};
 
 ////// 设置某个点的独立开关 //////
 control.prototype.setSwitch = function (x, y, floorId, name, value) {
-    var prefix = [floorId || core.status.floorId || ":f", x != null ? x : "x", y != null ? y : "y"].join("@");
-    return this.setFlag(prefix + "@" + name, value);
-}
+  var prefix = [
+    floorId || core.status.floorId || ":f",
+    x != null ? x : "x",
+    y != null ? y : "y",
+  ].join("@");
+  return this.setFlag(prefix + "@" + name, value);
+};
 
 ////// 增加某个点的独立开关 //////
 control.prototype.addSwitch = function (x, y, floorId, name, value) {
-    var prefix = [floorId || core.status.floorId || ":f", x != null ? x : "x", y != null ? y : "y"].join("@");
-    return this.addFlag(prefix + "@" + name, value);
-}
+  var prefix = [
+    floorId || core.status.floorId || ":f",
+    x != null ? x : "x",
+    y != null ? y : "y",
+  ].join("@");
+  return this.addFlag(prefix + "@" + name, value);
+};
 
 ////// 判定某个点的独立开关 //////
 control.prototype.hasSwitch = function (x, y, floorId, name) {
-    var prefix = [floorId || core.status.floorId || ":f", x != null ? x : "x", y != null ? y : "y"].join("@");
-    return this.hasFlag(prefix + "@" + name);
-}
+  var prefix = [
+    floorId || core.status.floorId || ":f",
+    x != null ? x : "x",
+    y != null ? y : "y",
+  ].join("@");
+  return this.hasFlag(prefix + "@" + name);
+};
 
 ////// 删除某个点的独立开关 //////
 control.prototype.removeSwitch = function (x, y, floorId, name) {
-    var prefix = [floorId || core.status.floorId || ":f", x != null ? x : "x", y != null ? y : "y"].join("@");
-    return this.removeFlag(prefix + "@" + name);
-}
+  var prefix = [
+    floorId || core.status.floorId || ":f",
+    x != null ? x : "x",
+    y != null ? y : "y",
+  ].join("@");
+  return this.removeFlag(prefix + "@" + name);
+};
 
 ////// 锁定状态栏,常常用于事件处理 //////
 control.prototype.lockControl = function () {
-    core.status.lockControl = true;
-}
+  core.status.lockControl = true;
+};
 
 ////// 解锁状态栏 //////
 control.prototype.unlockControl = function () {
-    core.status.lockControl = false;
-}
+  core.status.lockControl = false;
+};
 
 ////// 开启debug模式 //////
 control.prototype.debug = function () {
-    core.setFlag('debug', true);
-    core.drawText("\t[调试模式开启]此模式下按住Ctrl键(或Ctrl+Shift键)可以穿墙并忽略一切事件。\n此模式下将无法上传成绩。");
-}
+  core.setFlag("debug", true);
+  core.drawText(
+    "\t[调试模式开启]此模式下按住Ctrl键(或Ctrl+Shift键)可以穿墙并忽略一切事件。\n此模式下将无法上传成绩。"
+  );
+};
 
 control.prototype._bindRoutePush = function () {
-    core.status.route.push = function (element) {
-        // 忽视移动、转向、瞬移
-        if (["up", "down", "left", "right", "turn"].indexOf(element) < 0 && !element.startsWith("move:")) {
-            core.clearRouteFolding();
-        }
-        Array.prototype.push.call(core.status.route, element);
+  core.status.route.push = function (element) {
+    // 忽视移动、转向、瞬移
+    if (
+      ["up", "down", "left", "right", "turn"].indexOf(element) < 0 &&
+      !element.startsWith("move:")
+    ) {
+      core.clearRouteFolding();
     }
-}
+    Array.prototype.push.call(core.status.route, element);
+  };
+};
 
 ////// 清除录像折叠信息 //////
 control.prototype.clearRouteFolding = function () {
-    core.status.routeFolding = {};
-}
+  core.status.routeFolding = {};
+};
 
 ////// 检查录像折叠 //////
 control.prototype.checkRouteFolding = function () {
-    // 未开启、未开始游戏、录像播放中、正在事件中:不执行
-    if (!core.flags.enableRouteFolding || !core.isPlaying() || core.isReplaying() || core.status.event.id) {
-        return this.clearRouteFolding();
+  // 未开启、未开始游戏、录像播放中、正在事件中:不执行
+  if (
+    !core.flags.enableRouteFolding ||
+    !core.isPlaying() ||
+    core.isReplaying() ||
+    core.status.event.id
+  ) {
+    return this.clearRouteFolding();
+  }
+  var hero = core.clone(core.status.hero, function (name, value) {
+    return name != "steps" && typeof value == "number";
+  });
+  var index = [
+    core.getHeroLoc("x"),
+    core.getHeroLoc("y"),
+    core.getHeroLoc("direction").charAt(0),
+  ].join(",");
+  core.status.routeFolding = core.status.routeFolding || {};
+  if (core.status.routeFolding[index]) {
+    var one = core.status.routeFolding[index];
+    if (core.same(one.hero, hero) && one.length < core.status.route.length) {
+      Object.keys(core.status.routeFolding).forEach(function (v) {
+        if (core.status.routeFolding[v].length >= one.length)
+          delete core.status.routeFolding[v];
+      });
+      core.status.route = core.status.route.slice(0, one.length);
+      this._bindRoutePush();
     }
-    var hero = core.clone(core.status.hero, function (name, value) {
-        return name != 'steps' && typeof value == 'number';
-    });
-    var index = [core.getHeroLoc('x'), core.getHeroLoc('y'), core.getHeroLoc('direction').charAt(0)].join(',');
-    core.status.routeFolding = core.status.routeFolding || {};
-    if (core.status.routeFolding[index]) {
-        var one = core.status.routeFolding[index];
-        if (core.same(one.hero, hero) && one.length < core.status.route.length) {
-            Object.keys(core.status.routeFolding).forEach(function (v) {
-                if (core.status.routeFolding[v].length >= one.length) delete core.status.routeFolding[v];
-            });
-            core.status.route = core.status.route.slice(0, one.length);
-            this._bindRoutePush();
-        }
-    }
-    core.status.routeFolding[index] = { hero: hero, length: core.status.route.length };
-}
+  }
+  core.status.routeFolding[index] = {
+    hero: hero,
+    length: core.status.route.length,
+  };
+};
 
 // ------ 天气,色调,BGM ------ //
 
 control.prototype.getMappedName = function (name) {
-    return core.getFlag('__nameMap__', {})[name] || (main.nameMap || {})[name] || name;
-}
+  return (
+    core.getFlag("__nameMap__", {})[name] || (main.nameMap || {})[name] || name
+  );
+};
 
 ////// 更改天气效果 //////
 control.prototype.setWeather = function (type, level) {
-    // 非雨雪
-    if (type == null || !this.weathers[type]) {
-        core.deleteCanvas('weather')
-        core.animateFrame.weather.type = null;
-        core.animateFrame.weather.nodes = [];
-        return;
-    }
-    if (level == null) level = core.animateFrame.weather.level;
-    level = core.clamp(parseInt(level) || 5, 1, 10);
-    // 当前天气:则忽略
-    if (type == core.animateFrame.weather.type && level == core.animateFrame.weather.level) return;
-
-    // 计算当前的宽高
-    core.createCanvas('weather', 0, 0, core._PX_, core._PY_, 80);
-    core.setOpacity('weather', 1.0);
-    core.animateFrame.weather.type = type;
-    core.animateFrame.weather.level = level;
+  // 非雨雪
+  if (type == null || !this.weathers[type]) {
+    core.deleteCanvas("weather");
+    core.animateFrame.weather.type = null;
     core.animateFrame.weather.nodes = [];
-    try {
-        core.doFunc(this.weathers[type].initFunc, this, level);
-    } catch (e) {
-        console.error(e);
-        console.error("ERROR in weather[" + type + "]:已自动注销该项。");
-        core.unregisterWeather(type);
-    }
-}
+    return;
+  }
+  if (level == null) level = core.animateFrame.weather.level;
+  level = core.clamp(parseInt(level) || 5, 1, 10);
+  // 当前天气:则忽略
+  if (
+    type == core.animateFrame.weather.type &&
+    level == core.animateFrame.weather.level
+  )
+    return;
+
+  // 计算当前的宽高
+  core.createCanvas("weather", 0, 0, core._PX_, core._PY_, 80);
+  core.setOpacity("weather", 1.0);
+  core.animateFrame.weather.type = type;
+  core.animateFrame.weather.level = level;
+  core.animateFrame.weather.nodes = [];
+  try {
+    core.doFunc(this.weathers[type].initFunc, this, level);
+  } catch (e) {
+    console.error(e);
+    console.error("ERROR in weather[" + type + "]:已自动注销该项。");
+    core.unregisterWeather(type);
+  }
+};
 
 ////// 注册一个天气 //////
 // name为天气类型,如 sun, rain, snow 等
 // initFunc 为设置为此天气时的初始化,接受level参数
 // frameFunc 为该天气下每帧的效果,接受和timestamp参数(从页面加载完毕到当前经过的时间)
 control.prototype.registerWeather = function (name, initFunc, frameFunc) {
-    this.unregisterWeather(name);
-    this.weathers[name] = { initFunc: initFunc, frameFunc: frameFunc };
-}
+  this.unregisterWeather(name);
+  this.weathers[name] = { initFunc: initFunc, frameFunc: frameFunc };
+};
 
 ////// 取消注册一个天气 //////
 control.prototype.unregisterWeather = function (name) {
-    delete this.weathers[name];
-    if (core.animateFrame.weather.type == name) {
-        this.setWeather(null);
-    }
-}
+  delete this.weathers[name];
+  if (core.animateFrame.weather.type == name) {
+    this.setWeather(null);
+  }
+};
 
 control.prototype._weather_rain = function (level) {
-    var number = level * parseInt(20 * core.bigmap.width * core.bigmap.height / (core._WIDTH_ * core._HEIGHT_));
-    for (var a = 0; a < number; a++) {
-        core.animateFrame.weather.nodes.push({
-            'x': Math.random() * core.bigmap.width * 32,
-            'y': Math.random() * core.bigmap.height * 32,
-            'l': Math.random() * 2.5,
-            'xs': -4 + Math.random() * 4 + 2,
-            'ys': Math.random() * 10 + 10
-        })
-    }
-}
+  var number =
+    level *
+    parseInt(
+      (20 * core.bigmap.width * core.bigmap.height) /
+        (core._WIDTH_ * core._HEIGHT_)
+    );
+  for (var a = 0; a < number; a++) {
+    core.animateFrame.weather.nodes.push({
+      x: Math.random() * core.bigmap.width * 32,
+      y: Math.random() * core.bigmap.height * 32,
+      l: Math.random() * 2.5,
+      xs: -4 + Math.random() * 4 + 2,
+      ys: Math.random() * 10 + 10,
+    });
+  }
+};
 
 control.prototype._weather_snow = function (level) {
-    var number = level * parseInt(20 * core.bigmap.width * core.bigmap.height / (core._WIDTH_ * core._HEIGHT_));
-    for (var a = 0; a < number; a++) {
-        core.animateFrame.weather.nodes.push({
-            'x': Math.random() * core.bigmap.width * 32,
-            'y': Math.random() * core.bigmap.height * 32,
-            'r': Math.random() * 5 + 1,
-            'd': Math.random() * Math.min(level, 200),
-        })
-    }
-}
+  var number =
+    level *
+    parseInt(
+      (20 * core.bigmap.width * core.bigmap.height) /
+        (core._WIDTH_ * core._HEIGHT_)
+    );
+  for (var a = 0; a < number; a++) {
+    core.animateFrame.weather.nodes.push({
+      x: Math.random() * core.bigmap.width * 32,
+      y: Math.random() * core.bigmap.height * 32,
+      r: Math.random() * 5 + 1,
+      d: Math.random() * Math.min(level, 200),
+    });
+  }
+};
 
 control.prototype._weather_fog = function (level) {
-    if (!core.animateFrame.weather.fog) return;
-    core.animateFrame.weather.nodes = [{
-        'image': core.animateFrame.weather.fog,
-        'level': 40 * level,
-        'x': 0,
-        'y': -core._PY_ / 2,
-        'dx': -Math.random() * 1.5,
-        'dy': Math.random(),
-        'delta': 0.001,
-    }];
-}
+  if (!core.animateFrame.weather.fog) return;
+  core.animateFrame.weather.nodes = [
+    {
+      image: core.animateFrame.weather.fog,
+      level: 40 * level,
+      x: 0,
+      y: -core._PY_ / 2,
+      dx: -Math.random() * 1.5,
+      dy: Math.random(),
+      delta: 0.001,
+    },
+  ];
+};
 
 control.prototype._weather_cloud = function (level) {
-    if (!core.animateFrame.weather.cloud) return;
-    core.animateFrame.weather.nodes = [{
-        'image': core.animateFrame.weather.cloud,
-        'level': 40 * level,
-        'x': 0,
-        'y': -core._PY_ / 2,
-        'dx': -Math.random() * 1.5,
-        'dy': Math.random(),
-        'delta': 0.001,
-    }];
-}
+  if (!core.animateFrame.weather.cloud) return;
+  core.animateFrame.weather.nodes = [
+    {
+      image: core.animateFrame.weather.cloud,
+      level: 40 * level,
+      x: 0,
+      y: -core._PY_ / 2,
+      dx: -Math.random() * 1.5,
+      dy: Math.random(),
+      delta: 0.001,
+    },
+  ];
+};
 
 control.prototype._weather_sun = function (level) {
-    if (!core.animateFrame.weather.sun) return;
-    // 直接绘制
-    core.clearMap('weather');
-    core.drawImage(
-        'weather', core.animateFrame.weather.sun, 0, 0, core.animateFrame.weather.sun.width, core.animateFrame.weather.sun.height, 0, 0, core._PX_, core._PY_
-    );
-    core.setOpacity('weather', level / 10);
-    core.animateFrame.weather.nodes = [{ opacity: level / 10, delta: 0.01 }];
-}
+  if (!core.animateFrame.weather.sun) return;
+  // 直接绘制
+  core.clearMap("weather");
+  core.drawImage(
+    "weather",
+    core.animateFrame.weather.sun,
+    0,
+    0,
+    core.animateFrame.weather.sun.width,
+    core.animateFrame.weather.sun.height,
+    0,
+    0,
+    core._PX_,
+    core._PY_
+  );
+  core.setOpacity("weather", level / 10);
+  core.animateFrame.weather.nodes = [{ opacity: level / 10, delta: 0.01 }];
+};
 
 ////// 更改画面色调 //////
 control.prototype.setCurtain = function (color, time, moveMode, callback) {
-    if (time == null) time = 750;
-    if (time <= 0) time = 0;
-    if (!core.status.curtainColor)
-        core.status.curtainColor = [0, 0, 0, 0];
-    if (!color) color = [0, 0, 0, 0];
-    if (color[3] == null) color[3] = 1;
-    color[3] = core.clamp(color[3], 0, 1);
+  if (time == null) time = 750;
+  if (time <= 0) time = 0;
+  if (!core.status.curtainColor) core.status.curtainColor = [0, 0, 0, 0];
+  if (!color) color = [0, 0, 0, 0];
+  if (color[3] == null) color[3] = 1;
+  color[3] = core.clamp(color[3], 0, 1);
 
-    if (time == 0) {
-        // 直接变色
-        core.clearMap('curtain');
-        core.fillRect('curtain', 0, 0, core._PX_, core._PY_, core.arrayToRGBA(color));
-        core.status.curtainColor = color;
-        if (callback) callback();
-        return;
+  if (time == 0) {
+    // 直接变色
+    core.clearMap("curtain");
+    core.fillRect(
+      "curtain",
+      0,
+      0,
+      core._PX_,
+      core._PY_,
+      core.arrayToRGBA(color)
+    );
+    core.status.curtainColor = color;
+    if (callback) callback();
+    return;
+  }
+
+  this._setCurtain_animate(
+    core.status.curtainColor,
+    color,
+    time,
+    moveMode,
+    callback
+  );
+};
+
+control.prototype._setCurtain_animate = function (
+  nowColor,
+  color,
+  time,
+  moveMode,
+  callback
+) {
+  time /= Math.max(core.status.replay.speed, 1);
+  var per_time = 10,
+    step = 0,
+    steps = parseInt(time / per_time);
+  if (steps <= 0) steps = 1;
+  var curr = nowColor;
+  var moveFunc = core.applyEasing(moveMode);
+
+  var cb = function () {
+    core.status.curtainColor = curr;
+    if (callback) callback();
+  };
+  var animate = setInterval(function () {
+    step++;
+    curr = [
+      nowColor[0] + (color[0] - nowColor[0]) * moveFunc(step / steps),
+      nowColor[1] + (color[1] - nowColor[1]) * moveFunc(step / steps),
+      nowColor[2] + (color[2] - nowColor[2]) * moveFunc(step / steps),
+      nowColor[3] + (color[3] - nowColor[3]) * moveFunc(step / steps),
+    ];
+    core.clearMap("curtain");
+    core.fillRect(
+      "curtain",
+      0,
+      0,
+      core._PX_,
+      core._PY_,
+      core.arrayToRGBA(curr)
+    );
+    if (step == steps) {
+      delete core.animateFrame.asyncId[animate];
+      clearInterval(animate);
+      cb();
     }
+  }, per_time);
 
-    this._setCurtain_animate(core.status.curtainColor, color, time, moveMode, callback);
-}
-
-control.prototype._setCurtain_animate = function (nowColor, color, time, moveMode, callback) {
-    time /= Math.max(core.status.replay.speed, 1)
-    var per_time = 10, step = 0, steps = parseInt(time / per_time);
-    if (steps <= 0) steps = 1;
-    var curr = nowColor;
-    var moveFunc = core.applyEasing(moveMode);
-
-    var cb = function () {
-        core.status.curtainColor = curr;
-        if (callback) callback();
-    }
-    var animate = setInterval(function () {
-        step++;
-        curr = [
-            nowColor[0] + (color[0] - nowColor[0]) * moveFunc(step / steps),
-            nowColor[1] + (color[1] - nowColor[1]) * moveFunc(step / steps),
-            nowColor[2] + (color[2] - nowColor[2]) * moveFunc(step / steps),
-            nowColor[3] + (color[3] - nowColor[3]) * moveFunc(step / steps),
-        ]
-        core.clearMap('curtain');
-        core.fillRect('curtain', 0, 0, core._PX_, core._PY_, core.arrayToRGBA(curr));
-        if (step == steps) {
-            delete core.animateFrame.asyncId[animate];
-            clearInterval(animate);
-            cb();
-        }
-    }, per_time);
-
-    core.animateFrame.lastAsyncId = animate;
-    core.animateFrame.asyncId[animate] = cb;
-}
+  core.animateFrame.lastAsyncId = animate;
+  core.animateFrame.asyncId[animate] = cb;
+};
 
 ////// 画面闪烁 //////
-control.prototype.screenFlash = function (color, time, times, moveMode, callback) {
-    times = times || 1;
-    time = time / 3;
-    var nowColor = core.clone(core.status.curtainColor);
-    core.setCurtain(color, time, moveMode, function () {
-        core.setCurtain(nowColor, time * 2, moveMode, function () {
-            if (times > 1)
-                core.screenFlash(color, time * 3, times - 1, moveMode, callback);
-            else {
-                if (callback) callback();
-            }
-        });
+control.prototype.screenFlash = function (
+  color,
+  time,
+  times,
+  moveMode,
+  callback
+) {
+  times = times || 1;
+  time = time / 3;
+  var nowColor = core.clone(core.status.curtainColor);
+  core.setCurtain(color, time, moveMode, function () {
+    core.setCurtain(nowColor, time * 2, moveMode, function () {
+      if (times > 1)
+        core.screenFlash(color, time * 3, times - 1, moveMode, callback);
+      else {
+        if (callback) callback();
+      }
     });
-}
+  });
+};
 
 ////// 播放背景音乐 //////
 control.prototype.playBgm = function (bgm, startTime) {
-    bgm = core.getMappedName(bgm);
-    if (main.mode != 'play' || !core.material.bgms[bgm]) return;
-    // 如果不允许播放
-    if (!core.musicStatus.bgmStatus) {
-        try {
-            core.musicStatus.playingBgm = bgm;
-            core.musicStatus.lastBgm = bgm;
-            core.material.bgms[bgm].pause();
-        }
-        catch (e) {
-            console.error(e);
-        }
-        return;
-    }
-    this.setMusicBtn();
-
+  bgm = core.getMappedName(bgm);
+  if (main.mode != "play" || !core.material.bgms[bgm]) return;
+  // 如果不允许播放
+  if (!core.musicStatus.bgmStatus) {
     try {
-        this._playBgm_play(bgm, startTime);
+      core.musicStatus.playingBgm = bgm;
+      core.musicStatus.lastBgm = bgm;
+      core.material.bgms[bgm].pause();
+    } catch (e) {
+      console.error(e);
     }
-    catch (e) {
-        console.log("无法播放BGM " + bgm);
-        console.error(e);
-        core.musicStatus.playingBgm = null;
-    }
-}
+    return;
+  }
+  this.setMusicBtn();
+
+  try {
+    this._playBgm_play(bgm, startTime);
+  } catch (e) {
+    console.log("无法播放BGM " + bgm);
+    console.error(e);
+    core.musicStatus.playingBgm = null;
+  }
+};
 
 control.prototype._playBgm_play = function (bgm, startTime) {
-    // 如果当前正在播放,且和本BGM相同,直接忽略
-    if (core.musicStatus.playingBgm == bgm && !core.material.bgms[core.musicStatus.playingBgm].paused) {
-        return;
-    }
-    // 如果正在播放中,暂停
-    if (core.musicStatus.playingBgm) {
-        core.material.bgms[core.musicStatus.playingBgm].pause();
-    }
-    // 缓存BGM
-    core.loader.loadBgm(bgm);
-    // 播放当前BGM
-    core.material.bgms[bgm].volume = core.musicStatus.userVolume * core.musicStatus.designVolume;
-    core.material.bgms[bgm].currentTime = startTime || 0;
-    core.material.bgms[bgm].play();
-    core.musicStatus.playingBgm = bgm;
-    core.musicStatus.lastBgm = bgm;
-    core.setBgmSpeed(100);
-}
+  // 如果当前正在播放,且和本BGM相同,直接忽略
+  if (
+    core.musicStatus.playingBgm == bgm &&
+    !core.material.bgms[core.musicStatus.playingBgm].paused
+  ) {
+    return;
+  }
+  // 如果正在播放中,暂停
+  if (core.musicStatus.playingBgm) {
+    core.material.bgms[core.musicStatus.playingBgm].pause();
+  }
+  // 缓存BGM
+  core.loader.loadBgm(bgm);
+  // 播放当前BGM
+  core.material.bgms[bgm].volume =
+    core.musicStatus.userVolume * core.musicStatus.designVolume;
+  core.material.bgms[bgm].currentTime = startTime || 0;
+  core.material.bgms[bgm].play();
+  core.musicStatus.playingBgm = bgm;
+  core.musicStatus.lastBgm = bgm;
+  core.setBgmSpeed(100);
+};
 
 ///// 设置当前背景音乐的播放速度 //////
 control.prototype.setBgmSpeed = function (speed, usePitch) {
-    var bgm = core.musicStatus.playingBgm;
-    if (main.mode != 'play' || !core.material.bgms[bgm]) return;
-    bgm = core.material.bgms[bgm];
-    if (speed < 30 || speed > 300) return;
-    bgm.playbackRate = speed / 100;
-    core.musicStatus.bgmSpeed = speed;
+  var bgm = core.musicStatus.playingBgm;
+  if (main.mode != "play" || !core.material.bgms[bgm]) return;
+  bgm = core.material.bgms[bgm];
+  if (speed < 30 || speed > 300) return;
+  bgm.playbackRate = speed / 100;
+  core.musicStatus.bgmSpeed = speed;
 
-    if (bgm.preservesPitch != null) {
-        if (bgm.__preservesPitch == null) bgm.__preservesPitch = bgm.preservesPitch;
-        if (usePitch == null) bgm.preservesPitch = bgm.__preservesPitch;
-        else if (usePitch) bgm.preservesPitch = false;
-        else bgm.preservesPitch = true;
-        core.musicStatus.bgmUsePitch = usePitch;
-    }
-}
+  if (bgm.preservesPitch != null) {
+    if (bgm.__preservesPitch == null) bgm.__preservesPitch = bgm.preservesPitch;
+    if (usePitch == null) bgm.preservesPitch = bgm.__preservesPitch;
+    else if (usePitch) bgm.preservesPitch = false;
+    else bgm.preservesPitch = true;
+    core.musicStatus.bgmUsePitch = usePitch;
+  }
+};
 
 ////// 暂停背景音乐的播放 //////
 control.prototype.pauseBgm = function () {
-    if (main.mode != 'play') return;
-    try {
-        if (core.musicStatus.playingBgm) {
-            core.musicStatus.pauseTime = core.material.bgms[core.musicStatus.playingBgm].currentTime;
-            core.material.bgms[core.musicStatus.playingBgm].pause();
-            core.musicStatus.playingBgm = null;
-        }
+  if (main.mode != "play") return;
+  try {
+    if (core.musicStatus.playingBgm) {
+      core.musicStatus.pauseTime =
+        core.material.bgms[core.musicStatus.playingBgm].currentTime;
+      core.material.bgms[core.musicStatus.playingBgm].pause();
+      core.musicStatus.playingBgm = null;
     }
-    catch (e) {
-        console.log("无法暂停BGM");
-        console.error(e);
-    }
-    this.setMusicBtn();
-}
+  } catch (e) {
+    console.log("无法暂停BGM");
+    console.error(e);
+  }
+  this.setMusicBtn();
+};
 
 ////// 恢复背景音乐的播放 //////
 control.prototype.resumeBgm = function (resumeTime) {
-    if (main.mode != 'play') return;
-    try {
-        var speed = core.musicStatus.bgmSpeed;
-        var usePitch = core.musicStatus.bgmUsePitch;
-        core.playBgm(core.musicStatus.playingBgm || core.musicStatus.lastBgm || main.startBgm,
-            resumeTime ? core.musicStatus.pauseTime : 0);
-        if (resumeTime) {
-            core.setBgmSpeed(speed, usePitch);
-        }
+  if (main.mode != "play") return;
+  try {
+    var speed = core.musicStatus.bgmSpeed;
+    var usePitch = core.musicStatus.bgmUsePitch;
+    core.playBgm(
+      core.musicStatus.playingBgm || core.musicStatus.lastBgm || main.startBgm,
+      resumeTime ? core.musicStatus.pauseTime : 0
+    );
+    if (resumeTime) {
+      core.setBgmSpeed(speed, usePitch);
     }
-    catch (e) {
-        console.log("无法恢复BGM");
-        console.error(e);
-    }
-    this.setMusicBtn();
-}
+  } catch (e) {
+    console.log("无法恢复BGM");
+    console.error(e);
+  }
+  this.setMusicBtn();
+};
 
 control.prototype.setMusicBtn = function () {
-    if (core.musicStatus.bgmStatus)
-        core.dom.musicBtn.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAMAAADzN3VRAAABWVBMVEX///9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmL///8AAAC5ubn+/v6xsbEtLS0MDAxmZmZoaGhvb2/c3Nzd3d38/Pz9/f0oKCgpKSl0dHR1dXW6urrb29v7+/v09PTv7+/39/cgICACAgImJibh4eGFhYWGhoaHh4eOjo5paWm7u7vDw8PMzMwyMjI7OztAQEDe3t5FRUVMTEzj4+Pl5eXm5ubp6enr6+tcXFzi4uL19fVeXl74+PgjIyNkZGQGBgaSkpKYmJiampqenp4DAwMwMDBnZ2cICAivr68eHh63t7cLCwsSEhLw8PBhYWEUFBQVFRXNzc3Pz8/Z2dna2toaGhqkpKSlpaWpqamrq6tFOUNAAAAAc3RSTlMAAwQFBhUWGxwkJSYyO0dISVBRUmpvj5CSk5SVoaOlpqiysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyA0IuUgAAAVdJREFUeF5NkVVbw0AQRTcQrLR4IIEGcidJoaUuQHF3d3d3+P/CkuxCzss8nG++mbnDBJXhNt2CpbeFK1kQpSEKidlc8S9qdATRa6UIdQMoxEpDA0Ov3wUAPfW+qLWACydNv9zMrzkJwPK6FB3oHyOfXfuNxvoBQ+GmBYinhHB77TmiVBxoYUw1AYcEq332AS8OYKosAuTT0nza9uU2USYPRJgGxEiSOFywJ3mNARozgBJJzkfLvfu8JgGDWcC9FEsjWzR+y80gYDEAA8QZ3N6kmP1Fs3fEASB7pob7Hh+Wz5L0ci17Or05J7bH6B6dZv05XWK3rG+myV05Ert592Qo55sPuoIr7hEZHHtieIPWy0RU9DLwc3Mnck/vi8/E8XNrDWQtEVnL/ySKMrv0jPwPp870fprcyYifmiEmqGpHkI5q9ofSFIUk2qiwIGpEMyxYhhZRRcMPz89RJ2s9W8wAAAAASUVORK5CYII=";
-    else
-        core.dom.musicBtn.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAMAAADzN3VRAAABYlBMVEX///9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmL////8/PwAAABmZmZoaGihoaGioqKxsbG5ubnb29vc3Nzd3d3h4eHi4uL9/f3+/v4tLS1nZ2d0dHSUlJSenp66uroMDAz7+/spKSkoKCgUFBRpaWkVFRVvb291dXU7OzuVlZWYmJhkZGQgICAjIyOkpKQCAgK3t7cGBgbv7++pqamrq6seHh4mJiZhYWGamprp6enr6+saGhpeXl7j4+Pl5eXm5uZKSkrw8PD09PT19fW7u7vDw8PMzMwICAgwMDAyMjILCwtAQECGhoaHh4eBgYGFhYUSEhJXV1dZWVlcXFyOjo6SkpLNzc339/fPz8/Z2dna2tqTk5OlpaWxOPeTAAAAdnRSTlMAAwQFBhUWGxwkJSYyO0dISVBRUmpvj5CSk5SVoaOlpqiysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyNuo+uwAAAWJJREFUeF5NkmV34zAQReUm7WbTuJBNunY3bvXGDjNTkZkZlpn5/9eR5FPfbzr3jGb0RkwRiMQMDm7EIgHmRxtLwMOaHHoQjwz4MUKeCM8AWMrmd7u7f/aXAMyOShHiQD1n04DtN5e5FMBFlSauIsm585dKi4CpuSYKJIv1tBDVmvOSqJgEoowFLSBHaQh10XHWiCgHWEGmAw2blPrvOK/KRJUGoLM4kCVSKrWz7HwgoiwQZyaQJ0+9PvxV23BNATAZB25IqX9b3+jTW9fcApwB6NLgUD5NY3mPXnwmFwBezff1ztzRFzTp94FXMy36HDuCa2RafdnnmZqtL818Gl9/qNnEeyrUk2aTPiKj3qMyWBVi/YSuWq5qiwxkbtX3vYWzdz/l8M0k8ERlvViiB1Ygslb7SbVtJezncj+Cx5bYaeGuonZqhZlieAp+no74/s5EAh6JcY35Cepxk4ObcT3IJPe/1lKsDpFCFQAAAABJRU5ErkJggg==";
-}
+  if (core.musicStatus.bgmStatus)
+    core.dom.musicBtn.src =
+      "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAMAAADzN3VRAAABWVBMVEX///9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmL///8AAAC5ubn+/v6xsbEtLS0MDAxmZmZoaGhvb2/c3Nzd3d38/Pz9/f0oKCgpKSl0dHR1dXW6urrb29v7+/v09PTv7+/39/cgICACAgImJibh4eGFhYWGhoaHh4eOjo5paWm7u7vDw8PMzMwyMjI7OztAQEDe3t5FRUVMTEzj4+Pl5eXm5ubp6enr6+tcXFzi4uL19fVeXl74+PgjIyNkZGQGBgaSkpKYmJiampqenp4DAwMwMDBnZ2cICAivr68eHh63t7cLCwsSEhLw8PBhYWEUFBQVFRXNzc3Pz8/Z2dna2toaGhqkpKSlpaWpqamrq6tFOUNAAAAAc3RSTlMAAwQFBhUWGxwkJSYyO0dISVBRUmpvj5CSk5SVoaOlpqiysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyA0IuUgAAAVdJREFUeF5NkVVbw0AQRTcQrLR4IIEGcidJoaUuQHF3d3d3+P/CkuxCzss8nG++mbnDBJXhNt2CpbeFK1kQpSEKidlc8S9qdATRa6UIdQMoxEpDA0Ov3wUAPfW+qLWACydNv9zMrzkJwPK6FB3oHyOfXfuNxvoBQ+GmBYinhHB77TmiVBxoYUw1AYcEq332AS8OYKosAuTT0nza9uU2USYPRJgGxEiSOFywJ3mNARozgBJJzkfLvfu8JgGDWcC9FEsjWzR+y80gYDEAA8QZ3N6kmP1Fs3fEASB7pob7Hh+Wz5L0ci17Or05J7bH6B6dZv05XWK3rG+myV05Ert592Qo55sPuoIr7hEZHHtieIPWy0RU9DLwc3Mnck/vi8/E8XNrDWQtEVnL/ySKMrv0jPwPp870fprcyYifmiEmqGpHkI5q9ofSFIUk2qiwIGpEMyxYhhZRRcMPz89RJ2s9W8wAAAAASUVORK5CYII=";
+  else
+    core.dom.musicBtn.src =
+      "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAMAAADzN3VRAAABYlBMVEX///9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmL////8/PwAAABmZmZoaGihoaGioqKxsbG5ubnb29vc3Nzd3d3h4eHi4uL9/f3+/v4tLS1nZ2d0dHSUlJSenp66uroMDAz7+/spKSkoKCgUFBRpaWkVFRVvb291dXU7OzuVlZWYmJhkZGQgICAjIyOkpKQCAgK3t7cGBgbv7++pqamrq6seHh4mJiZhYWGamprp6enr6+saGhpeXl7j4+Pl5eXm5uZKSkrw8PD09PT19fW7u7vDw8PMzMwICAgwMDAyMjILCwtAQECGhoaHh4eBgYGFhYUSEhJXV1dZWVlcXFyOjo6SkpLNzc339/fPz8/Z2dna2tqTk5OlpaWxOPeTAAAAdnRSTlMAAwQFBhUWGxwkJSYyO0dISVBRUmpvj5CSk5SVoaOlpqiysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyNuo+uwAAAWJJREFUeF5NkmV34zAQReUm7WbTuJBNunY3bvXGDjNTkZkZlpn5/9eR5FPfbzr3jGb0RkwRiMQMDm7EIgHmRxtLwMOaHHoQjwz4MUKeCM8AWMrmd7u7f/aXAMyOShHiQD1n04DtN5e5FMBFlSauIsm585dKi4CpuSYKJIv1tBDVmvOSqJgEoowFLSBHaQh10XHWiCgHWEGmAw2blPrvOK/KRJUGoLM4kCVSKrWz7HwgoiwQZyaQJ0+9PvxV23BNATAZB25IqX9b3+jTW9fcApwB6NLgUD5NY3mPXnwmFwBezff1ztzRFzTp94FXMy36HDuCa2RafdnnmZqtL818Gl9/qNnEeyrUk2aTPiKj3qMyWBVi/YSuWq5qiwxkbtX3vYWzdz/l8M0k8ERlvViiB1Ygslb7SbVtJezncj+Cx5bYaeGuonZqhZlieAp+no74/s5EAh6JcY35Cepxk4ObcT3IJPe/1lKsDpFCFQAAAABJRU5ErkJggg==";
+};
 
 ////// 更改背景音乐的播放 //////
 control.prototype.triggerBgm = function () {
-    if (main.mode != 'play') return;
+  if (main.mode != "play") return;
 
-    core.musicStatus.bgmStatus = !core.musicStatus.bgmStatus;
-    if (core.musicStatus.bgmStatus)
-        this.resumeBgm();
-    else
-        this.pauseBgm();
-    core.setLocalStorage('bgmStatus', core.musicStatus.bgmStatus);
-}
+  core.musicStatus.bgmStatus = !core.musicStatus.bgmStatus;
+  if (core.musicStatus.bgmStatus) this.resumeBgm();
+  else this.pauseBgm();
+  core.setLocalStorage("bgmStatus", core.musicStatus.bgmStatus);
+};
 
 ////// 播放音频 //////
 control.prototype.playSound = function (sound, pitch, callback) {
-    sound = core.getMappedName(sound);
-    if (main.mode != 'play' || !core.musicStatus.soundStatus || !core.material.sounds[sound]) return;
-    try {
-        if (core.musicStatus.audioContext != null) {
-            var source = core.musicStatus.audioContext.createBufferSource();
-            source.__name = sound;
-            source.buffer = core.material.sounds[sound];
-            source.connect(core.musicStatus.gainNode);
-            var id = setTimeout(null);
-            if (pitch && pitch >= 30 && pitch <= 300) {
-                source.playbackRate.setValueAtTime(pitch / 100, 0);
-            }
-            source.onended = function () {
-                delete core.musicStatus.playingSounds[id];
-                if (callback) callback();
-            }
-            core.musicStatus.playingSounds[id] = source;
-            if (source.start) source.start(0);
-            else if (source.noteOn) source.noteOn(0);
-            return id;
-        }
-        else {
-            core.material.sounds[sound].volume = core.musicStatus.userVolume;
-            core.material.sounds[sound].play();
-            if (callback) callback();
-        }
+  sound = core.getMappedName(sound);
+  if (
+    main.mode != "play" ||
+    !core.musicStatus.soundStatus ||
+    !core.material.sounds[sound]
+  )
+    return;
+  try {
+    if (core.musicStatus.audioContext != null) {
+      var source = core.musicStatus.audioContext.createBufferSource();
+      source.__name = sound;
+      source.buffer = core.material.sounds[sound];
+      source.connect(core.musicStatus.gainNode);
+      var id = setTimeout(null);
+      if (pitch && pitch >= 30 && pitch <= 300) {
+        source.playbackRate.setValueAtTime(pitch / 100, 0);
+      }
+      source.onended = function () {
+        delete core.musicStatus.playingSounds[id];
+        if (callback) callback();
+      };
+      core.musicStatus.playingSounds[id] = source;
+      if (source.start) source.start(0);
+      else if (source.noteOn) source.noteOn(0);
+      return id;
+    } else {
+      core.material.sounds[sound].volume = core.musicStatus.userVolume;
+      core.material.sounds[sound].play();
+      if (callback) callback();
     }
-    catch (e) {
-        console.log("无法播放SE " + sound);
-        console.error(e);
-    }
-}
+  } catch (e) {
+    console.log("无法播放SE " + sound);
+    console.error(e);
+  }
+};
 
 ////// 停止所有音频 //////
 control.prototype.stopSound = function (id) {
-    if (id == null) {
-        Object.keys(core.musicStatus.playingSounds).forEach(function (id) {
-            core.control.stopSound(id);
-        });
-        return;
-    }
-    var source = core.musicStatus.playingSounds[id];
-    if (!source) return;
-    try {
-        if (source.stop) source.stop();
-        else if (source.noteOff) source.noteOff();
-    }
-    catch (e) {
-        console.error(e);
-    }
-    delete core.musicStatus.playingSounds[id];
-}
+  if (id == null) {
+    Object.keys(core.musicStatus.playingSounds).forEach(function (id) {
+      core.control.stopSound(id);
+    });
+    return;
+  }
+  var source = core.musicStatus.playingSounds[id];
+  if (!source) return;
+  try {
+    if (source.stop) source.stop();
+    else if (source.noteOff) source.noteOff();
+  } catch (e) {
+    console.error(e);
+  }
+  delete core.musicStatus.playingSounds[id];
+};
 
 ////// 获得当前正在播放的所有(指定)音效的id列表 //////
 control.prototype.getPlayingSounds = function (name) {
-    name = core.getMappedName(name);
-    return Object.keys(core.musicStatus.playingSounds).filter(function (one) {
-        return name == null || core.musicStatus.playingSounds[one].__name == name
-    });
-}
+  name = core.getMappedName(name);
+  return Object.keys(core.musicStatus.playingSounds).filter(function (one) {
+    return name == null || core.musicStatus.playingSounds[one].__name == name;
+  });
+};
 
 ////// 检查bgm状态 //////
 control.prototype.checkBgm = function () {
-    core.playBgm(core.musicStatus.playingBgm || main.startBgm);
-}
+  core.playBgm(core.musicStatus.playingBgm || main.startBgm);
+};
 
 ///// 设置屏幕放缩 //////
 control.prototype.setDisplayScale = function (delta) {
-    var index = core.domStyle.availableScale.indexOf(core.domStyle.scale);
-    if (index < 0) return;
-    index = (index + delta + core.domStyle.availableScale.length) % core.domStyle.availableScale.length;
-    core.domStyle.scale = core.domStyle.availableScale[index];
-    core.setLocalStorage('scale', core.domStyle.scale);
-    core.resize();
-}
+  var index = core.domStyle.availableScale.indexOf(core.domStyle.scale);
+  if (index < 0) return;
+  index =
+    (index + delta + core.domStyle.availableScale.length) %
+    core.domStyle.availableScale.length;
+  core.domStyle.scale = core.domStyle.availableScale[index];
+  core.setLocalStorage("scale", core.domStyle.scale);
+  core.resize();
+};
 
 // ------ 状态栏,工具栏等相关 ------ //
 
 ////// 清空状态栏 //////
 control.prototype.clearStatusBar = function () {
-    Object.keys(core.statusBar).forEach(function (e) {
-        if (core.statusBar[e].innerHTML != null) {
-            core.statusBar[e].innerHTML = "&nbsp;";
-            core.statusBar[e].removeAttribute('_style');
-            core.statusBar[e].removeAttribute('_value');
-        }
-    })
-    core.statusBar.image.book.style.opacity = 0.3;
-    if (!core.flags.equipboxButton)
-        core.statusBar.image.fly.style.opacity = 0.3;
-}
+  Object.keys(core.statusBar).forEach(function (e) {
+    if (core.statusBar[e].innerHTML != null) {
+      core.statusBar[e].innerHTML = "&nbsp;";
+      core.statusBar[e].removeAttribute("_style");
+      core.statusBar[e].removeAttribute("_value");
+    }
+  });
+  core.statusBar.image.book.style.opacity = 0.3;
+  if (!core.flags.equipboxButton) core.statusBar.image.fly.style.opacity = 0.3;
+};
 
 ////// 更新状态栏 //////
 control.prototype.updateStatusBar = function (doNotCheckAutoEvents, immediate) {
-    if (!core.isPlaying()) return;
-    if (immediate) {
-        return this.updateStatusBar_update();
-    }
-    if (!doNotCheckAutoEvents) this.noAutoEvents = false;
-    if (core.isReplaying()) return this.updateStatusBar_update();
-    if (!core.control.updateNextFrame) {
-        core.control.updateNextFrame = true;
-        requestAnimationFrame(this.updateStatusBar_update);
-    }
+  if (!core.isPlaying()) return;
+  if (immediate) {
+    return this.updateStatusBar_update();
+  }
+  if (!doNotCheckAutoEvents) this.noAutoEvents = false;
+  if (core.isReplaying()) return this.updateStatusBar_update();
+  if (!core.control.updateNextFrame) {
+    core.control.updateNextFrame = true;
+    requestAnimationFrame(this.updateStatusBar_update);
+  }
 };
 
 control.prototype.updateStatusBar_update = function () {
-    core.control.updateNextFrame = false;
-    if (!core.isPlaying() || core.hasFlag('__statistics__')) return;
-    core.control.controldata.updateStatusBar();
-    if (!core.control.noAutoEvents) core.checkAutoEvents();
-    core.control._updateStatusBar_setToolboxIcon();
-    core.clearRouteFolding();
-    core.control.noAutoEvents = true;
+  core.control.updateNextFrame = false;
+  if (!core.isPlaying() || core.hasFlag("__statistics__")) return;
+  core.control.controldata.updateStatusBar();
+  if (!core.control.noAutoEvents) core.checkAutoEvents();
+  core.control._updateStatusBar_setToolboxIcon();
+  core.clearRouteFolding();
+  core.control.noAutoEvents = true;
 };
 
 control.prototype._updateStatusBar_setToolboxIcon = function () {
-    if (core.isReplaying()) {
-        core.statusBar.image.book.src = core.status.replay.pausing ? core.statusBar.icons.play.src : core.statusBar.icons.pause.src;
-        core.statusBar.image.book.style.opacity = 1;
-        core.statusBar.image.fly.src = core.statusBar.icons.stop.src;
-        core.statusBar.image.fly.style.opacity = 1;
-        core.statusBar.image.toolbox.src = core.statusBar.icons.rewind.src;
-        core.statusBar.image.keyboard.src = core.statusBar.icons.book.src;
-        core.statusBar.image.shop.src = core.statusBar.icons.floor.src;
-        core.statusBar.image.save.src = core.statusBar.icons.speedDown.src;
-        core.statusBar.image.save.style.opacity = 1;
-        core.statusBar.image.load.src = core.statusBar.icons.speedUp.src;
-        core.statusBar.image.settings.src = core.statusBar.icons.save.src;
+  if (core.isReplaying()) {
+    core.statusBar.image.book.src = core.status.replay.pausing
+      ? core.statusBar.icons.play.src
+      : core.statusBar.icons.pause.src;
+    core.statusBar.image.book.style.opacity = 1;
+    core.statusBar.image.fly.src = core.statusBar.icons.stop.src;
+    core.statusBar.image.fly.style.opacity = 1;
+    core.statusBar.image.toolbox.src = core.statusBar.icons.rewind.src;
+    core.statusBar.image.keyboard.src = core.statusBar.icons.book.src;
+    core.statusBar.image.shop.src = core.statusBar.icons.floor.src;
+    core.statusBar.image.save.src = core.statusBar.icons.speedDown.src;
+    core.statusBar.image.save.style.opacity = 1;
+    core.statusBar.image.load.src = core.statusBar.icons.speedUp.src;
+    core.statusBar.image.settings.src = core.statusBar.icons.save.src;
+  } else {
+    core.statusBar.image.book.src = core.statusBar.icons.book.src;
+    core.statusBar.image.book.style.opacity = core.hasItem("book") ? 1 : 0.3;
+    if (!core.flags.equipboxButton) {
+      core.statusBar.image.fly.src = core.statusBar.icons.fly.src;
+      core.statusBar.image.fly.style.opacity = core.hasItem("fly") ? 1 : 0.3;
+    } else {
+      core.statusBar.image.fly.src = core.statusBar.icons.equipbox.src;
+      core.statusBar.image.fly.style.opacity = 1;
     }
-    else {
-        core.statusBar.image.book.src = core.statusBar.icons.book.src;
-        core.statusBar.image.book.style.opacity = core.hasItem('book') ? 1 : 0.3;
-        if (!core.flags.equipboxButton) {
-            core.statusBar.image.fly.src = core.statusBar.icons.fly.src;
-            core.statusBar.image.fly.style.opacity = core.hasItem('fly') ? 1 : 0.3;
-        }
-        else {
-            core.statusBar.image.fly.src = core.statusBar.icons.equipbox.src;
-            core.statusBar.image.fly.style.opacity = 1;
-        }
-        core.statusBar.image.toolbox.src = core.statusBar.icons.toolbox.src;
-        core.statusBar.image.keyboard.src = core.statusBar.icons.keyboard.src;
-        core.statusBar.image.shop.src = core.statusBar.icons.shop.src;
-        core.statusBar.image.save.src = core.statusBar.icons.save.src;
-        core.statusBar.image.save.style.opacity = core.hasFlag('__forbidSave__') ? 0.3 : 1;
-        core.statusBar.image.load.src = core.statusBar.icons.load.src;
-        core.statusBar.image.settings.src = core.statusBar.icons.settings.src;
-    }
-}
+    core.statusBar.image.toolbox.src = core.statusBar.icons.toolbox.src;
+    core.statusBar.image.keyboard.src = core.statusBar.icons.keyboard.src;
+    core.statusBar.image.shop.src = core.statusBar.icons.shop.src;
+    core.statusBar.image.save.src = core.statusBar.icons.save.src;
+    core.statusBar.image.save.style.opacity = core.hasFlag("__forbidSave__")
+      ? 0.3
+      : 1;
+    core.statusBar.image.load.src = core.statusBar.icons.load.src;
+    core.statusBar.image.settings.src = core.statusBar.icons.settings.src;
+  }
+};
 
 control.prototype.showStatusBar = function () {
-    if (main.mode == 'editor') return;
-    if (core.domStyle.showStatusBar) return;
-    var statusItems = core.dom.status;
-    core.domStyle.showStatusBar = true;
-    core.removeFlag('hideStatusBar');
-    // 显示
-    for (var i = 0; i < statusItems.length; ++i)
-        statusItems[i].style.opacity = 1;
-    this.setToolbarButton(false);
-    core.dom.tools.hard.style.display = 'block';
-    core.dom.toolBar.style.display = 'block';
-}
+  if (main.mode == "editor") return;
+  if (core.domStyle.showStatusBar) return;
+  var statusItems = core.dom.status;
+  core.domStyle.showStatusBar = true;
+  core.removeFlag("hideStatusBar");
+  // 显示
+  for (var i = 0; i < statusItems.length; ++i) statusItems[i].style.opacity = 1;
+  this.setToolbarButton(false);
+  core.dom.tools.hard.style.display = "block";
+  core.dom.toolBar.style.display = "block";
+};
 
 control.prototype.hideStatusBar = function (showToolbox) {
-    if (main.mode == 'editor') return;
+  if (main.mode == "editor") return;
 
-    // 如果原本就是隐藏的,则先显示
-    if (!core.domStyle.showStatusBar)
-        this.showStatusBar();
-    if (core.isReplaying()) showToolbox = true;
+  // 如果原本就是隐藏的,则先显示
+  if (!core.domStyle.showStatusBar) this.showStatusBar();
+  if (core.isReplaying()) showToolbox = true;
 
-    var statusItems = core.dom.status, toolItems = core.dom.tools;
-    core.domStyle.showStatusBar = false;
-    core.setFlag('hideStatusBar', true);
-    core.setFlag('showToolbox', showToolbox || null);
-    // 隐藏
-    for (var i = 0; i < statusItems.length; ++i)
-        statusItems[i].style.opacity = 0;
-    if ((!core.domStyle.isVertical && !core.flags.extendToolbar) || !showToolbox) {
-        for (var i = 0; i < toolItems.length; ++i)
-            toolItems[i].style.display = 'none';
-    }
-    if (!core.domStyle.isVertical && !core.flags.extendToolbar) {
-        core.dom.toolBar.style.display = 'none';
-    }
-}
+  var statusItems = core.dom.status,
+    toolItems = core.dom.tools;
+  core.domStyle.showStatusBar = false;
+  core.setFlag("hideStatusBar", true);
+  core.setFlag("showToolbox", showToolbox || null);
+  // 隐藏
+  for (var i = 0; i < statusItems.length; ++i) statusItems[i].style.opacity = 0;
+  if (
+    (!core.domStyle.isVertical && !core.flags.extendToolbar) ||
+    !showToolbox
+  ) {
+    for (var i = 0; i < toolItems.length; ++i)
+      toolItems[i].style.display = "none";
+  }
+  if (!core.domStyle.isVertical && !core.flags.extendToolbar) {
+    core.dom.toolBar.style.display = "none";
+  }
+};
 
 ////// 更新状态栏的勇士图标 //////
 control.prototype.updateHeroIcon = function (name) {
-    name = name || "hero.png";
-    if (core.statusBar.icons.name == name) return;
-    core.statusBar.icons.name = name;
+  name = name || "hero.png";
+  if (core.statusBar.icons.name == name) return;
+  core.statusBar.icons.name = name;
 
-    var image = core.material.images.hero;
-    // 全身图
-    var w = core.material.icons.hero.width || 32;
-    var h = core.material.icons.hero.height || 48;
-    var ratio = Math.min(w / h, 1), width = 32 * ratio, left = 16 - width / 2;
+  var image = core.material.images.hero;
+  // 全身图
+  var w = core.material.icons.hero.width || 32;
+  var h = core.material.icons.hero.height || 48;
+  var ratio = Math.min(w / h, 1),
+    width = 32 * ratio,
+    left = 16 - width / 2;
 
-    var canvas = document.createElement("canvas");
-    var ctx = canvas.getContext("2d");
-    canvas.width = 32;
-    canvas.height = 32;
-    core.drawImage(ctx, image, 0, 0, w, h, left, 0, width, 32);
+  var canvas = document.createElement("canvas");
+  var ctx = canvas.getContext("2d");
+  canvas.width = 32;
+  canvas.height = 32;
+  core.drawImage(ctx, image, 0, 0, w, h, left, 0, width, 32);
 
-    core.statusBar.image.name.src = canvas.toDataURL("image/png");
-}
+  core.statusBar.image.name.src = canvas.toDataURL("image/png");
+};
 
 ////// 改变工具栏为按钮1-8 //////
 control.prototype.setToolbarButton = function (useButton) {
-    if (!core.domStyle.showStatusBar) {
-        // 隐藏状态栏时检查竖屏
-        if (!core.domStyle.isVertical && !core.flags.extendToolbar) {
-            for (var i = 0; i < core.dom.tools.length; ++i)
-                core.dom.tools[i].style.display = 'none';
-            return;
-        }
-        if (!core.hasFlag('showToolbox')) return;
-        else core.dom.tools.hard.style.display = 'block';
+  if (!core.domStyle.showStatusBar) {
+    // 隐藏状态栏时检查竖屏
+    if (!core.domStyle.isVertical && !core.flags.extendToolbar) {
+      for (var i = 0; i < core.dom.tools.length; ++i)
+        core.dom.tools[i].style.display = "none";
+      return;
     }
+    if (!core.hasFlag("showToolbox")) return;
+    else core.dom.tools.hard.style.display = "block";
+  }
 
-    if (useButton == null) useButton = core.domStyle.toolbarBtn;
-    if ((!core.domStyle.isVertical && !core.flags.extendToolbar)) useButton = false;
-    core.domStyle.toolbarBtn = useButton;
+  if (useButton == null) useButton = core.domStyle.toolbarBtn;
+  if (!core.domStyle.isVertical && !core.flags.extendToolbar) useButton = false;
+  core.domStyle.toolbarBtn = useButton;
 
-    if (useButton) {
-        ["book", "fly", "toolbox", "keyboard", "shop", "save", "load", "settings"].forEach(function (t) {
-            core.statusBar.image[t].style.display = 'none';
-        });
-        ["btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7", "btn8"].forEach(function (t) {
-            core.statusBar.image[t].style.display = 'block';
-        })
-        main.statusBar.image.btn8.style.filter = core.getLocalStorage('altKey') ? 'sepia(1) contrast(1.5)' : '';
-    }
-    else {
-        ["btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7", "btn8"].forEach(function (t) {
-            core.statusBar.image[t].style.display = 'none';
-        });
-        ["book", "fly", "toolbox", "save", "load", "settings"].forEach(function (t) {
-            core.statusBar.image[t].style.display = 'block';
-        });
-        core.statusBar.image.keyboard.style.display
-            = core.statusBar.image.shop.style.display
-            = core.domStyle.isVertical || core.flags.extendToolbar ? "block" : "none";
-    }
-}
+  if (useButton) {
+    [
+      "book",
+      "fly",
+      "toolbox",
+      "keyboard",
+      "shop",
+      "save",
+      "load",
+      "settings",
+    ].forEach(function (t) {
+      core.statusBar.image[t].style.display = "none";
+    });
+    ["btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7", "btn8"].forEach(
+      function (t) {
+        core.statusBar.image[t].style.display = "block";
+      }
+    );
+    main.statusBar.image.btn8.style.filter = core.getLocalStorage("altKey")
+      ? "sepia(1) contrast(1.5)"
+      : "";
+  } else {
+    ["btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7", "btn8"].forEach(
+      function (t) {
+        core.statusBar.image[t].style.display = "none";
+      }
+    );
+    ["book", "fly", "toolbox", "save", "load", "settings"].forEach(function (
+      t
+    ) {
+      core.statusBar.image[t].style.display = "block";
+    });
+    core.statusBar.image.keyboard.style.display =
+      core.statusBar.image.shop.style.display =
+        core.domStyle.isVertical || core.flags.extendToolbar ? "block" : "none";
+  }
+};
 
 ////// ------ resize处理 ------ //
 
 control.prototype._shouldDisplayStatus = function (id) {
-    if (id == null) {
-        var toDraw = [], status = core.dom.status;
-        for (var i = 0; i < status.length; ++i) {
-            var dom = core.dom.status[i], idCol = dom.id;
-            if (idCol.indexOf("Col") != idCol.length - 3) continue;
-            var id = idCol.substring(0, idCol.length - 3);
-            if (!this._shouldDisplayStatus(id)) continue;
-            toDraw.push(id);
-        }
-        return toDraw;
+  if (id == null) {
+    var toDraw = [],
+      status = core.dom.status;
+    for (var i = 0; i < status.length; ++i) {
+      var dom = core.dom.status[i],
+        idCol = dom.id;
+      if (idCol.indexOf("Col") != idCol.length - 3) continue;
+      var id = idCol.substring(0, idCol.length - 3);
+      if (!this._shouldDisplayStatus(id)) continue;
+      toDraw.push(id);
     }
-    var obj = {};
-    core.flags.statusBarItems.forEach(function (v) { obj[v] = true; })
-    switch (id) {
-        case 'floor': return obj.enableFloor;
-        case 'name': return obj.enableName;
-        case 'lv': return obj.enableLv;
-        case 'hp': return obj.enableHP;
-        case 'hpmax': return obj.enableHPMax;
-        case 'mana': return obj.enableMana;
-        case 'atk': return obj.enableAtk;
-        case 'def': return obj.enableDef;
-        case 'mdef': return obj.enableMDef;
-        case 'money': return obj.enableMoney;
-        case 'exp': return obj.enableExp && !obj.levelUpLeftMode;
-        case 'up': return obj.enableLevelUp;
-        case 'skill': return obj.enableSkill;
-        case 'key': return obj.enableKeys;
-        case 'pzf': return obj.enablePZF;
-        case 'debuff': return obj.enableDebuff;
-        default: return true;
-    }
-}
+    return toDraw;
+  }
+  var obj = {};
+  core.flags.statusBarItems.forEach(function (v) {
+    obj[v] = true;
+  });
+  switch (id) {
+    case "floor":
+      return obj.enableFloor;
+    case "name":
+      return obj.enableName;
+    case "lv":
+      return obj.enableLv;
+    case "hp":
+      return obj.enableHP;
+    case "hpmax":
+      return obj.enableHPMax;
+    case "mana":
+      return obj.enableMana;
+    case "atk":
+      return obj.enableAtk;
+    case "def":
+      return obj.enableDef;
+    case "mdef":
+      return obj.enableMDef;
+    case "money":
+      return obj.enableMoney;
+    case "exp":
+      return obj.enableExp && !obj.levelUpLeftMode;
+    case "up":
+      return obj.enableLevelUp;
+    case "skill":
+      return obj.enableSkill;
+    case "key":
+      return obj.enableKeys;
+    case "pzf":
+      return obj.enablePZF;
+    case "debuff":
+      return obj.enableDebuff;
+    default:
+      return true;
+  }
+};
 
 ////// 注册一个resize函数 //////
 // name为名称,可供注销使用
 // func可以是一个函数,或者是插件中的函数名;可以接受obj参数,详见resize函数。
 control.prototype.registerResize = function (name, func) {
-    this.unregisterResize(name);
-    this.resizes.push({ name: name, func: func });
-}
+  this.unregisterResize(name);
+  this.resizes.push({ name: name, func: func });
+};
 
 ////// 注销一个resize函数 //////
 control.prototype.unregisterResize = function (name) {
-    this.resizes = this.resizes.filter(function (b) { return b.name != name; });
-}
+  this.resizes = this.resizes.filter(function (b) {
+    return b.name != name;
+  });
+};
 
 control.prototype._doResize = function (obj) {
-    for (var i in this.resizes) {
-        try {
-            if (core.doFunc(this.resizes[i].func, this, obj)) return true;
-        } catch (e) {
-            console.error(e);
-            console.error("ERROR in resizes[" + this.resizes[i].name + "]:已自动注销该项。");
-            this.unregisterResize(this.resizes[i].name);
-        }
+  for (var i in this.resizes) {
+    try {
+      if (core.doFunc(this.resizes[i].func, this, obj)) return true;
+    } catch (e) {
+      console.error(e);
+      console.error(
+        "ERROR in resizes[" + this.resizes[i].name + "]:已自动注销该项。"
+      );
+      this.unregisterResize(this.resizes[i].name);
     }
-    return false;
-}
+  }
+  return false;
+};
 
 ////// 屏幕分辨率改变后重新自适应 //////
 control.prototype.resize = function () {
-    if (main.mode == 'editor') return;
-    var clientWidth = main.dom.body.clientWidth, clientHeight = main.dom.body.clientHeight;
-    var BORDER = 3;
-    var extendToolbar = core.flags.extendToolbar;
-    let hideLeftStatusBar = core.flags.hideLeftStatusBar;
-    var BAR_WIDTH = hideLeftStatusBar ? 0 : Math.round(core._PY_ * 0.31);
+  if (main.mode == "editor") return;
+  var clientWidth = main.dom.body.clientWidth,
+    clientHeight = main.dom.body.clientHeight;
+  var BORDER = 3;
+  var extendToolbar = core.flags.extendToolbar;
+  let hideLeftStatusBar = core.flags.hideLeftStatusBar;
+  var BAR_WIDTH = hideLeftStatusBar ? 0 : Math.round(core._PY_ * 0.31);
 
-    var horizontalMaxRatio = (clientHeight - 2 * BORDER - (hideLeftStatusBar ? BORDER : 0)) / (core._PY_ + (hideLeftStatusBar ? 38 : 0));
+  var horizontalMaxRatio =
+    (clientHeight - 2 * BORDER - (hideLeftStatusBar ? BORDER : 0)) /
+    (core._PY_ + (hideLeftStatusBar ? 38 : 0));
 
-    if (clientWidth - 3 * BORDER >= core._PX_ + BAR_WIDTH || (clientWidth > clientHeight && horizontalMaxRatio < 1)) {
-        // 横屏
-        core.domStyle.isVertical = false;
+  if (
+    clientWidth - 3 * BORDER >= core._PX_ + BAR_WIDTH ||
+    (clientWidth > clientHeight && horizontalMaxRatio < 1)
+  ) {
+    // 横屏
+    core.domStyle.isVertical = false;
 
-        core.domStyle.availableScale = [];
-        [1, 1.25, 1.5, 1.75, 2, 2.25, 2.5].forEach(function (v) {
-            if (clientWidth - 3 * BORDER >= v * (core._PX_ + BAR_WIDTH) && horizontalMaxRatio >= v) {
-                core.domStyle.availableScale.push(v);
-            }
-        });
-        if (core.domStyle.availableScale.indexOf(core.domStyle.scale) < 0) {
-            core.domStyle.scale = Math.min(1, horizontalMaxRatio);
-        }
-    }
-    else {
-        // 竖屏
-        core.domStyle.isVertical = true;
-        core.domStyle.scale = Math.min((clientWidth - 2 * BORDER) / core._PX_);
-        core.domStyle.availableScale = [];
-        extendToolbar = false;
-        hideLeftStatusBar = false;
-        BAR_WIDTH = Math.round(core._PX_ * 0.3);
+    core.domStyle.availableScale = [];
+    [1, 1.25, 1.5, 1.75, 2, 2.25, 2.5].forEach(function (v) {
+      if (
+        clientWidth - 3 * BORDER >= v * (core._PX_ + BAR_WIDTH) &&
+        horizontalMaxRatio >= v
+      ) {
+        core.domStyle.availableScale.push(v);
+      }
+    });
+    if (core.domStyle.availableScale.indexOf(core.domStyle.scale) < 0) {
+      core.domStyle.scale = Math.min(1, horizontalMaxRatio);
     }
+  } else {
+    // 竖屏
+    core.domStyle.isVertical = true;
+    core.domStyle.scale = Math.min((clientWidth - 2 * BORDER) / core._PX_);
+    core.domStyle.availableScale = [];
+    extendToolbar = false;
+    hideLeftStatusBar = false;
+    BAR_WIDTH = Math.round(core._PX_ * 0.3);
+  }
 
-    var statusDisplayArr = this._shouldDisplayStatus(), count = statusDisplayArr.length;
-    var statusCanvas = core.flags.statusCanvas, statusCanvasRows = core.values.statusCanvasRowsOnMobile || 3;
-    var col = statusCanvas ? statusCanvasRows : Math.ceil(count / 3);
-    if (col > 5) {
-        if (statusCanvas) alert("自绘状态栏的在竖屏下的行数应不超过5!");
-        else alert("当前状态栏数目(" + count + ")大于15,请调整到不超过15以避免手机端出现显示问题。");
-    }
-    var globalAttribute = core.status.globalAttribute || core.initStatus.globalAttribute;
+  var statusDisplayArr = this._shouldDisplayStatus(),
+    count = statusDisplayArr.length;
+  var statusCanvas = core.flags.statusCanvas,
+    statusCanvasRows = core.values.statusCanvasRowsOnMobile || 3;
+  var col = statusCanvas ? statusCanvasRows : Math.ceil(count / 3);
+  if (col > 5) {
+    if (statusCanvas) alert("自绘状态栏的在竖屏下的行数应不超过5!");
+    else
+      alert(
+        "当前状态栏数目(" +
+          count +
+          ")大于15,请调整到不超过15以避免手机端出现显示问题。"
+      );
+  }
+  var globalAttribute =
+    core.status.globalAttribute || core.initStatus.globalAttribute;
 
-    var obj = {
-        clientWidth: clientWidth,
-        clientHeight: clientHeight,
-        BORDER: BORDER,
-        BAR_WIDTH: BAR_WIDTH,
-        TOOLBAR_HEIGHT: 38,
-        outerWidth: core._PX_ * core.domStyle.scale + 2 * BORDER,
-        outerHeight: core._PY_ * core.domStyle.scale + 2 * BORDER,
-        globalAttribute: globalAttribute,
-        border: '3px ' + core.arrayToRGBA(globalAttribute.borderColor) + ' solid',
-        statusDisplayArr: statusDisplayArr,
-        count: count,
-        col: col,
-        statusBarHeightInVertical: core.domStyle.isVertical ? (32 * col + 6) * core.domStyle.scale + 2 * BORDER : 0,
-        toolbarHeightInVertical: core.domStyle.isVertical ? 38 * core.domStyle.scale + 2 * BORDER : 0,
-        extendToolbar: extendToolbar,
-        is15x15: false,
-        hideLeftStatusBar
-    };
+  var obj = {
+    clientWidth: clientWidth,
+    clientHeight: clientHeight,
+    BORDER: BORDER,
+    BAR_WIDTH: BAR_WIDTH,
+    TOOLBAR_HEIGHT: 38,
+    outerWidth: core._PX_ * core.domStyle.scale + 2 * BORDER,
+    outerHeight: core._PY_ * core.domStyle.scale + 2 * BORDER,
+    globalAttribute: globalAttribute,
+    border: "3px " + core.arrayToRGBA(globalAttribute.borderColor) + " solid",
+    statusDisplayArr: statusDisplayArr,
+    count: count,
+    col: col,
+    statusBarHeightInVertical: core.domStyle.isVertical
+      ? (32 * col + 6) * core.domStyle.scale + 2 * BORDER
+      : 0,
+    toolbarHeightInVertical: core.domStyle.isVertical
+      ? 38 * core.domStyle.scale + 2 * BORDER
+      : 0,
+    extendToolbar: extendToolbar,
+    is15x15: false,
+    hideLeftStatusBar,
+  };
 
-    this._doResize(obj);
-    this.setToolbarButton();
-    core.updateStatusBar();
-}
+  this._doResize(obj);
+  this.setToolbarButton();
+  core.updateStatusBar();
+};
 
 control.prototype._resize_gameGroup = function (obj) {
-    var startBackground = core.domStyle.isVertical ? (main.styles.startVerticalBackground || main.styles.startBackground) : main.styles.startBackground;
-    if (main.dom.startBackground.getAttribute('__src__') != startBackground) {
-        main.dom.startBackground.setAttribute('__src__', startBackground);
-        main.dom.startBackground.src = startBackground;
-    }
+  var startBackground = core.domStyle.isVertical
+    ? main.styles.startVerticalBackground || main.styles.startBackground
+    : main.styles.startBackground;
+  if (main.dom.startBackground.getAttribute("__src__") != startBackground) {
+    main.dom.startBackground.setAttribute("__src__", startBackground);
+    main.dom.startBackground.src = startBackground;
+  }
 
-    var gameGroup = core.dom.gameGroup;
-    var totalWidth, totalHeight;
-    if (core.domStyle.isVertical) {
-        totalWidth = obj.outerWidth;
-        totalHeight = obj.outerHeight + obj.statusBarHeightInVertical + obj.toolbarHeightInVertical
-    }
-    else {
-        totalWidth = obj.outerWidth + obj.BAR_WIDTH * core.domStyle.scale + (obj.hideLeftStatusBar ? 0 : obj.BORDER);
-        totalHeight = obj.outerHeight + (obj.extendToolbar ? obj.TOOLBAR_HEIGHT * core.domStyle.scale + obj.BORDER : 0);
-    }
-    gameGroup.style.width = totalWidth + "px";
-    gameGroup.style.height = totalHeight + "px";
-    gameGroup.style.left = (obj.clientWidth - totalWidth) / 2 + "px";
-    gameGroup.style.top = (obj.clientHeight - totalHeight) / 2 + "px";
-    // floorMsgGroup
-    var floorMsgGroup = core.dom.floorMsgGroup;
-    floorMsgGroup.style = obj.globalAttribute.floorChangingStyle;
-    floorMsgGroup.style.width = obj.outerWidth - 2 * obj.BORDER + "px";
-    floorMsgGroup.style.height = totalHeight - 2 * obj.BORDER + "px";
-    floorMsgGroup.style.fontSize = 16 * core.domStyle.scale + "px";
-    // startPanel
-    core.dom.startPanel.style.fontSize = 16 * core.domStyle.scale + "px";
-    // musicBtn
-    if (core.domStyle.isVertical || core.domStyle.scale < 1) {
-        core.dom.musicBtn.style.right = core.dom.musicBtn.style.bottom = "3px";
-    }
-    else {
-        core.dom.musicBtn.style.right = (obj.clientWidth - totalWidth) / 2 + "px";
-        core.dom.musicBtn.style.bottom = (obj.clientHeight - totalHeight) / 2 - 27 + "px";
-    }
-}
+  var gameGroup = core.dom.gameGroup;
+  var totalWidth, totalHeight;
+  if (core.domStyle.isVertical) {
+    totalWidth = obj.outerWidth;
+    totalHeight =
+      obj.outerHeight +
+      obj.statusBarHeightInVertical +
+      obj.toolbarHeightInVertical;
+  } else {
+    totalWidth =
+      obj.outerWidth +
+      obj.BAR_WIDTH * core.domStyle.scale +
+      (obj.hideLeftStatusBar ? 0 : obj.BORDER);
+    totalHeight =
+      obj.outerHeight +
+      (obj.extendToolbar
+        ? obj.TOOLBAR_HEIGHT * core.domStyle.scale + obj.BORDER
+        : 0);
+  }
+  gameGroup.style.width = totalWidth + "px";
+  gameGroup.style.height = totalHeight + "px";
+  gameGroup.style.left = (obj.clientWidth - totalWidth) / 2 + "px";
+  gameGroup.style.top = (obj.clientHeight - totalHeight) / 2 + "px";
+  // floorMsgGroup
+  var floorMsgGroup = core.dom.floorMsgGroup;
+  floorMsgGroup.style = obj.globalAttribute.floorChangingStyle;
+  floorMsgGroup.style.width = obj.outerWidth - 2 * obj.BORDER + "px";
+  floorMsgGroup.style.height = totalHeight - 2 * obj.BORDER + "px";
+  floorMsgGroup.style.fontSize = 16 * core.domStyle.scale + "px";
+  // startPanel
+  core.dom.startPanel.style.fontSize = 16 * core.domStyle.scale + "px";
+  // musicBtn
+  if (core.domStyle.isVertical || core.domStyle.scale < 1) {
+    core.dom.musicBtn.style.right = core.dom.musicBtn.style.bottom = "3px";
+  } else {
+    core.dom.musicBtn.style.right = (obj.clientWidth - totalWidth) / 2 + "px";
+    core.dom.musicBtn.style.bottom =
+      (obj.clientHeight - totalHeight) / 2 - 27 + "px";
+  }
+};
 
 control.prototype._resize_canvas = function (obj) {
-    var innerWidth = (core._PX_ * core.domStyle.scale) + "px", innerHeight = (core._PY_ * core.domStyle.scale) + "px";
-    if (!core.isPlaying()) {
-        for (var i = 0; i < core.dom.gameCanvas.length; ++i) {
-            var ctx = core.dom.gameCanvas[i].getContext('2d');
-            core.resizeCanvas(ctx, core._PX_, core._PY_);
-            core.dom.gameCanvas[i].style.width = innerWidth;
-            core.dom.gameCanvas[i].style.height = innerHeight;
-        }
-    } else {
-        requestAnimationFrame(function () {
-            for (var i = 0; i < core.dom.gameCanvas.length; ++i) {
-                core.dom.gameCanvas[i].style.width = innerWidth;
-                core.dom.gameCanvas[i].style.height = innerHeight;
-            }
-        });
+  var innerWidth = core._PX_ * core.domStyle.scale + "px",
+    innerHeight = core._PY_ * core.domStyle.scale + "px";
+  if (!core.isPlaying()) {
+    for (var i = 0; i < core.dom.gameCanvas.length; ++i) {
+      var ctx = core.dom.gameCanvas[i].getContext("2d");
+      core.resizeCanvas(ctx, core._PX_, core._PY_);
+      core.dom.gameCanvas[i].style.width = innerWidth;
+      core.dom.gameCanvas[i].style.height = innerHeight;
     }
-    core.dom.gif.style.width = innerWidth;
-    core.dom.gif.style.height = innerHeight;
-    core.dom.gif2.style.width = innerWidth;
-    core.dom.gif2.style.height = innerHeight;
-    core.dom.gameDraw.style.width = innerWidth;
-    core.dom.gameDraw.style.height = innerHeight;
-    core.dom.gameDraw.style.top = obj.statusBarHeightInVertical + "px";
-    core.dom.gameDraw.style.right = 0;
-    core.dom.gameDraw.style.border = obj.border;
-    // resize bigmap
-    core.bigmap.canvas.forEach(function (cn) {
-        var ratio = core.canvas[cn].canvas.hasAttribute('isHD') ? core.domStyle.ratio : 1;
-        core.canvas[cn].canvas.style.width = core.canvas[cn].canvas.width / ratio * core.domStyle.scale + "px";
-        core.canvas[cn].canvas.style.height = core.canvas[cn].canvas.height / ratio * core.domStyle.scale + "px";
+  } else {
+    requestAnimationFrame(function () {
+      for (var i = 0; i < core.dom.gameCanvas.length; ++i) {
+        core.dom.gameCanvas[i].style.width = innerWidth;
+        core.dom.gameCanvas[i].style.height = innerHeight;
+      }
     });
-    // resize dynamic canvas
-    if (!core.isPlaying()) {
-        for (var name in core.dymCanvas) {
-            var ctx = core.dymCanvas[name], canvas = ctx.canvas;
-            // core.maps._setHDCanvasSize(ctx, parseFloat(canvas.getAttribute('_width')), parseFloat(canvas.getAttribute('_height')));
-            canvas.style.left = parseFloat(canvas.getAttribute("_left")) * core.domStyle.scale + "px";
-            canvas.style.top = parseFloat(canvas.getAttribute("_top")) * core.domStyle.scale + "px";
-            var scale = canvas.getAttribute('_scale') || 1;
-            core.resizeCanvas(canvas, canvas.width * scale / core.domStyle.scale, canvas.height * scale / core.domStyle.scale);
-        }
-    } else {
-        for (var name in core.dymCanvas) {
-            var ctx = core.dymCanvas[name], canvas = ctx.canvas;
-            core.resizeCanvas(ctx, parseFloat(canvas.getAttribute("_width")), parseFloat(canvas.getAttribute("_height")))
-            canvas.style.left = parseFloat(canvas.getAttribute("_left")) * core.domStyle.scale + "px";
-            canvas.style.top = parseFloat(canvas.getAttribute("_top")) * core.domStyle.scale + "px";
-        }
+  }
+  core.dom.gif.style.width = innerWidth;
+  core.dom.gif.style.height = innerHeight;
+  core.dom.gif2.style.width = innerWidth;
+  core.dom.gif2.style.height = innerHeight;
+  core.dom.gameDraw.style.width = innerWidth;
+  core.dom.gameDraw.style.height = innerHeight;
+  core.dom.gameDraw.style.top = obj.statusBarHeightInVertical + "px";
+  core.dom.gameDraw.style.right = 0;
+  core.dom.gameDraw.style.border = obj.border;
+  // resize bigmap
+  core.bigmap.canvas.forEach(function (cn) {
+    var ratio = core.canvas[cn].canvas.hasAttribute("isHD")
+      ? core.domStyle.ratio
+      : 1;
+    core.canvas[cn].canvas.style.width =
+      (core.canvas[cn].canvas.width / ratio) * core.domStyle.scale + "px";
+    core.canvas[cn].canvas.style.height =
+      (core.canvas[cn].canvas.height / ratio) * core.domStyle.scale + "px";
+  });
+  // resize dynamic canvas
+  if (!core.isPlaying()) {
+    for (var name in core.dymCanvas) {
+      var ctx = core.dymCanvas[name],
+        canvas = ctx.canvas;
+      // core.maps._setHDCanvasSize(ctx, parseFloat(canvas.getAttribute('_width')), parseFloat(canvas.getAttribute('_height')));
+      canvas.style.left =
+        parseFloat(canvas.getAttribute("_left")) * core.domStyle.scale + "px";
+      canvas.style.top =
+        parseFloat(canvas.getAttribute("_top")) * core.domStyle.scale + "px";
+      var scale = canvas.getAttribute("_scale") || 1;
+      core.resizeCanvas(
+        canvas,
+        (canvas.width * scale) / core.domStyle.scale,
+        (canvas.height * scale) / core.domStyle.scale
+      );
     }
-    // resize next
-    main.dom.next.style.width = main.dom.next.style.height = 5 * core.domStyle.scale + "px";
-    main.dom.next.style.borderBottomWidth = main.dom.next.style.borderRightWidth = 4 * core.domStyle.scale + "px";
-}
+  } else {
+    for (var name in core.dymCanvas) {
+      var ctx = core.dymCanvas[name],
+        canvas = ctx.canvas;
+      core.resizeCanvas(
+        ctx,
+        parseFloat(canvas.getAttribute("_width")),
+        parseFloat(canvas.getAttribute("_height"))
+      );
+      canvas.style.left =
+        parseFloat(canvas.getAttribute("_left")) * core.domStyle.scale + "px";
+      canvas.style.top =
+        parseFloat(canvas.getAttribute("_top")) * core.domStyle.scale + "px";
+    }
+  }
+  // resize next
+  main.dom.next.style.width = main.dom.next.style.height =
+    5 * core.domStyle.scale + "px";
+  main.dom.next.style.borderBottomWidth = main.dom.next.style.borderRightWidth =
+    4 * core.domStyle.scale + "px";
+};
 
 control.prototype._resize_statusBar = function (obj) {
-    // statusBar
-    var statusBar = core.dom.statusBar;
-    if (core.domStyle.isVertical) {
-        statusBar.style.width = obj.outerWidth + "px";
-        statusBar.style.height = obj.statusBarHeightInVertical + "px";
-        statusBar.style.background = obj.globalAttribute.statusTopBackground;
-        statusBar.style.fontSize = 16 * core.domStyle.scale + "px";
+  // statusBar
+  var statusBar = core.dom.statusBar;
+  if (core.domStyle.isVertical) {
+    statusBar.style.width = obj.outerWidth + "px";
+    statusBar.style.height = obj.statusBarHeightInVertical + "px";
+    statusBar.style.background = obj.globalAttribute.statusTopBackground;
+    statusBar.style.fontSize = 16 * core.domStyle.scale + "px";
+  } else {
+    statusBar.style.width =
+      obj.BAR_WIDTH * core.domStyle.scale + obj.BORDER + "px";
+    statusBar.style.height =
+      obj.outerHeight +
+      (obj.extendToolbar
+        ? obj.TOOLBAR_HEIGHT * core.domStyle.scale + obj.BORDER
+        : 0) +
+      "px";
+    statusBar.style.background = obj.globalAttribute.statusLeftBackground;
+    // --- 计算文字大小
+    if (obj.hideLeftStatusBar) {
+      statusBar.style.fontSize = 16 * core.domStyle.scale + "px";
+    } else {
+      statusBar.style.fontSize =
+        16 *
+          Math.min(1, (core._HEIGHT_ - 4) / obj.count) *
+          core.domStyle.scale +
+        "px";
     }
-    else {
-        statusBar.style.width = (obj.BAR_WIDTH * core.domStyle.scale + obj.BORDER) + "px";
-        statusBar.style.height = obj.outerHeight + (obj.extendToolbar ? obj.TOOLBAR_HEIGHT * core.domStyle.scale + obj.BORDER : 0) + "px";
-        statusBar.style.background = obj.globalAttribute.statusLeftBackground;
-        // --- 计算文字大小
-        if (obj.hideLeftStatusBar) {
-            statusBar.style.fontSize = 16 * core.domStyle.scale + "px";
-        } else {
-            statusBar.style.fontSize = 16 * Math.min(1, (core._HEIGHT_ - 4) / obj.count) * core.domStyle.scale + "px";
-        }
-    }
-    statusBar.style.display = obj.hideLeftStatusBar ? 'none' : 'block';
-    statusBar.style.borderTop = statusBar.style.borderLeft = obj.border;
-    statusBar.style.borderRight = core.domStyle.isVertical ? obj.border : '';
-    statusBar.style.borderBottom = core.domStyle.isVertical ? '' : obj.border;
-    // 自绘状态栏
-    if (core.domStyle.isVertical) {
-        core.dom.statusCanvas.style.width = core._PX_ * core.domStyle.scale + "px";
-        core.dom.statusCanvas.style.height = obj.statusBarHeightInVertical - 3 + "px";
-        core.maps._setHDCanvasSize(core.dom.statusCanvasCtx, core._PX_, obj.col * 32 + 9);
-    }
-    else {
-        core.dom.statusCanvas.style.width = obj.BAR_WIDTH * core.domStyle.scale + "px";
-        core.dom.statusCanvas.style.height = obj.outerHeight - 2 * obj.BORDER + (obj.extendToolbar ? obj.TOOLBAR_HEIGHT * core.domStyle.scale + obj.BORDER : 0) + "px";
-        core.maps._setHDCanvasSize(core.dom.statusCanvasCtx, obj.BAR_WIDTH, core._PY_ + (obj.extendToolbar ? obj.TOOLBAR_HEIGHT + obj.BORDER : 0));
-    }
-    core.dom.statusCanvas.style.display = core.flags.statusCanvas && !obj.hideLeftStatusBar ? "block" : "none";
-}
+  }
+  statusBar.style.display = obj.hideLeftStatusBar ? "none" : "block";
+  statusBar.style.borderTop = statusBar.style.borderLeft = obj.border;
+  statusBar.style.borderRight = core.domStyle.isVertical ? obj.border : "";
+  statusBar.style.borderBottom = core.domStyle.isVertical ? "" : obj.border;
+  // 自绘状态栏
+  if (core.domStyle.isVertical) {
+    core.dom.statusCanvas.style.width = core._PX_ * core.domStyle.scale + "px";
+    core.dom.statusCanvas.style.height =
+      obj.statusBarHeightInVertical - 3 + "px";
+    core.maps._setHDCanvasSize(
+      core.dom.statusCanvasCtx,
+      core._PX_,
+      obj.col * 32 + 9
+    );
+  } else {
+    core.dom.statusCanvas.style.width =
+      obj.BAR_WIDTH * core.domStyle.scale + "px";
+    core.dom.statusCanvas.style.height =
+      obj.outerHeight -
+      2 * obj.BORDER +
+      (obj.extendToolbar
+        ? obj.TOOLBAR_HEIGHT * core.domStyle.scale + obj.BORDER
+        : 0) +
+      "px";
+    core.maps._setHDCanvasSize(
+      core.dom.statusCanvasCtx,
+      obj.BAR_WIDTH,
+      core._PY_ + (obj.extendToolbar ? obj.TOOLBAR_HEIGHT + obj.BORDER : 0)
+    );
+  }
+  core.dom.statusCanvas.style.display =
+    core.flags.statusCanvas && !obj.hideLeftStatusBar ? "block" : "none";
+};
 
 control.prototype._resize_status = function (obj) {
-    var statusHeight;
-    if (core.domStyle.isVertical) {
-        statusHeight = 32 * core.domStyle.scale * 0.8;
-    } else {
-        statusHeight = (obj.hideLeftStatusBar ? core._HEIGHT_ : core._HEIGHT_ - 4) / obj.count * 32 * core.domStyle.scale * 0.8;
-    }
-    // status
-    for (var i = 0; i < core.dom.status.length; ++i) {
-        var id = core.dom.status[i].id, style = core.dom.status[i].style;
-        if (id.endsWith("Col")) id = id.substring(0, id.length - 3);
-        style.display = core.flags.statusCanvas || obj.statusDisplayArr.indexOf(id) < 0 ? 'none' : 'block';
-        style.margin = 3 * core.domStyle.scale + "px";
-        style.height = statusHeight + "px";
-        style.maxWidth = obj.BAR_WIDTH * core.domStyle.scale * (core.domStyle.isVertical ? 0.95 : 1) + obj.BORDER + "px";
-        if (obj.is15x15 && !core.domStyle.isVertical)
-            style.marginLeft = 11 * core.domStyle.scale + "px";
-    }
-    // statusLabels, statusTexts
-    for (var i = 0; i < core.dom.statusLabels.length; ++i) {
-        core.dom.statusLabels[i].style.lineHeight = statusHeight + "px";
-        core.dom.statusLabels[i].style.marginLeft = 6 * core.domStyle.scale + "px";
-    }
-    for (var i = 0; i < core.dom.statusTexts.length; ++i) {
-        core.dom.statusTexts[i].style.color = core.arrayToRGBA(obj.globalAttribute.statusBarColor);
-    }
-    // keys
-    if (core.flags.statusBarItems.indexOf('enableGreenKey') >= 0) {
-        core.dom.keyCol.style.fontSize = '0.75em';
-        core.statusBar.greenKey.style.display = '';
-    } else {
-        core.dom.keyCol.style.fontSize = '';
-        core.statusBar.greenKey.style.display = 'none';
-    }
-}
+  var statusHeight;
+  if (core.domStyle.isVertical) {
+    statusHeight = 32 * core.domStyle.scale * 0.8;
+  } else {
+    statusHeight =
+      ((obj.hideLeftStatusBar ? core._HEIGHT_ : core._HEIGHT_ - 4) /
+        obj.count) *
+      32 *
+      core.domStyle.scale *
+      0.8;
+  }
+  // status
+  for (var i = 0; i < core.dom.status.length; ++i) {
+    var id = core.dom.status[i].id,
+      style = core.dom.status[i].style;
+    if (id.endsWith("Col")) id = id.substring(0, id.length - 3);
+    style.display =
+      core.flags.statusCanvas || obj.statusDisplayArr.indexOf(id) < 0
+        ? "none"
+        : "block";
+    style.margin = 3 * core.domStyle.scale + "px";
+    style.height = statusHeight + "px";
+    style.maxWidth =
+      obj.BAR_WIDTH *
+        core.domStyle.scale *
+        (core.domStyle.isVertical ? 0.95 : 1) +
+      obj.BORDER +
+      "px";
+    if (obj.is15x15 && !core.domStyle.isVertical)
+      style.marginLeft = 11 * core.domStyle.scale + "px";
+  }
+  // statusLabels, statusTexts
+  for (var i = 0; i < core.dom.statusLabels.length; ++i) {
+    core.dom.statusLabels[i].style.lineHeight = statusHeight + "px";
+    core.dom.statusLabels[i].style.marginLeft = 6 * core.domStyle.scale + "px";
+  }
+  for (var i = 0; i < core.dom.statusTexts.length; ++i) {
+    core.dom.statusTexts[i].style.color = core.arrayToRGBA(
+      obj.globalAttribute.statusBarColor
+    );
+  }
+  // keys
+  if (core.flags.statusBarItems.indexOf("enableGreenKey") >= 0) {
+    core.dom.keyCol.style.fontSize = "0.75em";
+    core.statusBar.greenKey.style.display = "";
+  } else {
+    core.dom.keyCol.style.fontSize = "";
+    core.statusBar.greenKey.style.display = "none";
+  }
+};
 
 control.prototype._resize_toolBar = function (obj) {
-    // toolBar
-    var toolBar = core.dom.toolBar;
-    if (core.domStyle.isVertical) {
-        toolBar.style.left = 0;
-        toolBar.style.right = "";
-        toolBar.style.width = obj.outerWidth + "px";
-        toolBar.style.top = obj.statusBarHeightInVertical + obj.outerHeight + "px";
-        toolBar.style.height = obj.toolbarHeightInVertical + "px";
-        toolBar.style.background = obj.globalAttribute.toolsBackground;
-    }
-    else {
-        if (obj.extendToolbar || obj.hideLeftStatusBar) {
-            toolBar.style.left = "";
-            toolBar.style.right = 0;
-            toolBar.style.width = obj.outerWidth + "px";
-            toolBar.style.top = obj.outerHeight + "px";
-            toolBar.style.height = obj.TOOLBAR_HEIGHT * core.domStyle.scale + obj.BORDER + "px";
-            toolBar.style.background = obj.globalAttribute.toolsBackground;
-        } else {
-            toolBar.style.left = 0;
-            toolBar.style.right = "";
-            toolBar.style.width = obj.BAR_WIDTH * core.domStyle.scale + obj.BORDER + "px";
-            toolBar.style.top = 0.75 * obj.outerHeight + "px";
-            toolBar.style.height = 0.25 * obj.outerHeight + "px";
-            toolBar.style.background = 'transparent';
-        }
-    }
-    toolBar.style.borderLeft = obj.border;
-    toolBar.style.borderRight = toolBar.style.borderBottom = core.domStyle.isVertical || obj.extendToolbar ? obj.border : '';
-    toolBar.style.fontSize = 16 * core.domStyle.scale + "px";
-
-    if (!core.domStyle.showStatusBar && !core.domStyle.isVertical && !obj.extendToolbar) {
-        toolBar.style.display = 'none';
+  // toolBar
+  var toolBar = core.dom.toolBar;
+  if (core.domStyle.isVertical) {
+    toolBar.style.left = 0;
+    toolBar.style.right = "";
+    toolBar.style.width = obj.outerWidth + "px";
+    toolBar.style.top = obj.statusBarHeightInVertical + obj.outerHeight + "px";
+    toolBar.style.height = obj.toolbarHeightInVertical + "px";
+    toolBar.style.background = obj.globalAttribute.toolsBackground;
+  } else {
+    if (obj.extendToolbar || obj.hideLeftStatusBar) {
+      toolBar.style.left = "";
+      toolBar.style.right = 0;
+      toolBar.style.width = obj.outerWidth + "px";
+      toolBar.style.top = obj.outerHeight + "px";
+      toolBar.style.height =
+        obj.TOOLBAR_HEIGHT * core.domStyle.scale + obj.BORDER + "px";
+      toolBar.style.background = obj.globalAttribute.toolsBackground;
     } else {
-        toolBar.style.display = 'block';
+      toolBar.style.left = 0;
+      toolBar.style.right = "";
+      toolBar.style.width =
+        obj.BAR_WIDTH * core.domStyle.scale + obj.BORDER + "px";
+      toolBar.style.top = 0.75 * obj.outerHeight + "px";
+      toolBar.style.height = 0.25 * obj.outerHeight + "px";
+      toolBar.style.background = "transparent";
     }
-}
+  }
+  toolBar.style.borderLeft = obj.border;
+  toolBar.style.borderRight = toolBar.style.borderBottom =
+    core.domStyle.isVertical || obj.extendToolbar ? obj.border : "";
+  toolBar.style.fontSize = 16 * core.domStyle.scale + "px";
+
+  if (
+    !core.domStyle.showStatusBar &&
+    !core.domStyle.isVertical &&
+    !obj.extendToolbar
+  ) {
+    toolBar.style.display = "none";
+  } else {
+    toolBar.style.display = "block";
+  }
+};
 
 control.prototype._resize_tools = function (obj) {
-    var toolsHeight = 32 * core.domStyle.scale * ((core.domStyle.isVertical || obj.extendToolbar) && !obj.is15x15 ? 0.95 : 1);
-    var toolsMarginLeft;
-    if (core.domStyle.isVertical || obj.extendToolbar)
-        toolsMarginLeft = (core._HALF_WIDTH_ - 3) * 3 * core.domStyle.scale;
-    else
-        toolsMarginLeft = (obj.BAR_WIDTH * core.domStyle.scale - 9 - toolsHeight * 3) / 4;
-    for (var i = 0; i < core.dom.tools.length; ++i) {
-        var style = core.dom.tools[i].style;
-        style.height = toolsHeight + "px";
-        style.marginLeft = toolsMarginLeft + "px";
-        style.marginTop = 3 * core.domStyle.scale + "px"
-    }
-    core.dom.hard.style.lineHeight = toolsHeight + "px";
-    if (core.domStyle.isVertical || obj.extendToolbar) {
-        core.dom.hard.style.width = obj.outerWidth - 9 * toolsMarginLeft - 8.5 * toolsHeight - 12 + "px";
-    }
-    else {
-        core.dom.hard.style.width = obj.BAR_WIDTH * core.domStyle.scale - 9 - 2 * toolsMarginLeft + "px";
-        if (!obj.is15x15) core.dom.hard.style.marginTop = 0;
-    }
-}
+  var toolsHeight =
+    32 *
+    core.domStyle.scale *
+    ((core.domStyle.isVertical || obj.extendToolbar) && !obj.is15x15
+      ? 0.95
+      : 1);
+  var toolsMarginLeft;
+  if (core.domStyle.isVertical || obj.extendToolbar)
+    toolsMarginLeft = (core._HALF_WIDTH_ - 3) * 3 * core.domStyle.scale;
+  else
+    toolsMarginLeft =
+      (obj.BAR_WIDTH * core.domStyle.scale - 9 - toolsHeight * 3) / 4;
+  for (var i = 0; i < core.dom.tools.length; ++i) {
+    var style = core.dom.tools[i].style;
+    style.height = toolsHeight + "px";
+    style.marginLeft = toolsMarginLeft + "px";
+    style.marginTop = 3 * core.domStyle.scale + "px";
+  }
+  core.dom.hard.style.lineHeight = toolsHeight + "px";
+  if (core.domStyle.isVertical || obj.extendToolbar) {
+    core.dom.hard.style.width =
+      obj.outerWidth - 9 * toolsMarginLeft - 8.5 * toolsHeight - 12 + "px";
+  } else {
+    core.dom.hard.style.width =
+      obj.BAR_WIDTH * core.domStyle.scale - 9 - 2 * toolsMarginLeft + "px";
+    if (!obj.is15x15) core.dom.hard.style.marginTop = 0;
+  }
+};
diff --git a/libs/events.js b/libs/events.js
index 66d9954..3aabd20 100644
--- a/libs/events.js
+++ b/libs/events.js
@@ -1,429 +1,485 @@
-
 "use strict";
 
-function events () {
-    this._init();
+function events() {
+  this._init();
 }
 
 ////// 初始化 //////
 events.prototype._init = function () {
-    this.eventdata = functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.events;
-    this.commonEvent = events_c12a15a8_c380_4b28_8144_256cba95f760.commonEvent;
-    this.systemEvents = {};
-    this.actions = {};
-}
+  this.eventdata = functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.events;
+  this.commonEvent = events_c12a15a8_c380_4b28_8144_256cba95f760.commonEvent;
+  this.systemEvents = {};
+  this.actions = {};
+};
 
 // ------ 初始化,开始和结束 ------ //
 
 /// 初始化游戏
 events.prototype.resetGame = function (hero, hard, floorId, maps, values) {
-    this.eventdata.resetGame(hero, hard, floorId, maps, values);
-}
+  this.eventdata.resetGame(hero, hard, floorId, maps, values);
+};
 
 ////// 游戏开始事件 //////
 events.prototype.startGame = function (hard, seed, route, callback) {
-    main.dom.levelChooseButtons.style.display = 'none';
-    main.dom.startButtonGroup.style.display = 'none';
-    hard = hard || "";
+  main.dom.levelChooseButtons.style.display = "none";
+  main.dom.startButtonGroup.style.display = "none";
+  hard = hard || "";
 
-    if (main.mode != 'play') return;
+  if (main.mode != "play") return;
 
-    // 无动画的开始游戏
-    if (core.flags.startUsingCanvas || route != null) {
-        core.dom.startPanel.style.display = 'none';
-        this._startGame_start(hard, seed, route, callback);
-    }
-    else {
-        core.hideStartAnimate(function () {
-            core.events._startGame_start(hard, seed, route, callback);
-        });
-    }
-}
+  // 无动画的开始游戏
+  if (core.flags.startUsingCanvas || route != null) {
+    core.dom.startPanel.style.display = "none";
+    this._startGame_start(hard, seed, route, callback);
+  } else {
+    core.hideStartAnimate(function () {
+      core.events._startGame_start(hard, seed, route, callback);
+    });
+  }
+};
 
 events.prototype._startGame_start = function (hard, seed, route, callback) {
-    core.resetGame(core.firstData.hero, hard, null, core.cloneArray(core.initStatus.maps));
-    core.setHeroLoc('x', -1);
-    core.setHeroLoc('y', -1);
+  core.resetGame(
+    core.firstData.hero,
+    hard,
+    null,
+    core.cloneArray(core.initStatus.maps)
+  );
+  core.setHeroLoc("x", -1);
+  core.setHeroLoc("y", -1);
 
-    if (seed != null && seed > 0) {
-        core.setFlag('__seed__', seed);
-        core.setFlag('__rand__', seed);
-    }
-    else core.utils.__init_seed();
-    core.clearStatusBar();
+  if (seed != null && seed > 0) {
+    core.setFlag("__seed__", seed);
+    core.setFlag("__rand__", seed);
+  } else core.utils.__init_seed();
+  core.clearStatusBar();
 
-    var todo = [];
-    if (core.flags.startUsingCanvas) {
-        core.hideStatusBar();
-        core.dom.musicBtn.style.display = 'block';
-        core.push(todo, core.firstData.startCanvas);
-    }
-    core.push(todo, { "type": "function", "function": "function() { core.events._startGame_setHard(); }" })
-    core.push(todo, core.firstData.startText);
-    this.insertAction(todo, null, null, function () {
-        core.events._startGame_afterStart(callback);
-    });
+  var todo = [];
+  if (core.flags.startUsingCanvas) {
+    core.hideStatusBar();
+    core.dom.musicBtn.style.display = "block";
+    core.push(todo, core.firstData.startCanvas);
+  }
+  core.push(todo, {
+    type: "function",
+    function: "function() { core.events._startGame_setHard(); }",
+  });
+  core.push(todo, core.firstData.startText);
+  this.insertAction(todo, null, null, function () {
+    core.events._startGame_afterStart(callback);
+  });
 
-    if (route != null) core.startReplay(route);
-}
+  if (route != null) core.startReplay(route);
+};
 
 events.prototype._startGame_setHard = function () {
-    // 根据难度设置flag:hard
-    // 这一段应当在startCanvas之后,startText之前做
-    var hardValue = 0;
-    var hardColor = 'red';
-    main.levelChoose.forEach(function (one) {
-        if (one.name == core.status.hard) {
-            hardValue = one.hard;
-            hardColor = core.arrayToRGBA(one.color || [255, 0, 0, 1]);
-            core.insertAction(one.action);
-        }
-    });
-    core.setFlag('hard', hardValue || 0);
-    core.setFlag('__hardColor__', hardColor);
-}
+  // 根据难度设置flag:hard
+  // 这一段应当在startCanvas之后,startText之前做
+  var hardValue = 0;
+  var hardColor = "red";
+  main.levelChoose.forEach(function (one) {
+    if (one.name == core.status.hard) {
+      hardValue = one.hard;
+      hardColor = core.arrayToRGBA(one.color || [255, 0, 0, 1]);
+      core.insertAction(one.action);
+    }
+  });
+  core.setFlag("hard", hardValue || 0);
+  core.setFlag("__hardColor__", hardColor);
+};
 
 events.prototype._startGame_afterStart = function (callback) {
-    core.ui.closePanel();
-    core.changeFloor(core.firstData.floorId, null, core.firstData.hero.loc, null, function () {
-        // 插入一个空事件避免直接回放录像出错
-        core.insertAction([]);
-        if (callback) callback();
-    });
-    this._startGame_upload();
-}
+  core.ui.closePanel();
+  core.changeFloor(
+    core.firstData.floorId,
+    null,
+    core.firstData.hero.loc,
+    null,
+    function () {
+      // 插入一个空事件避免直接回放录像出错
+      core.insertAction([]);
+      if (callback) callback();
+    }
+  );
+  this._startGame_upload();
+};
 
 events.prototype._startGame_upload = function () {
-    // Upload
-    var formData = new FormData();
-    formData.append('type', 'people');
-    formData.append('name', core.firstData.name);
-    formData.append('version', core.firstData.version);
-    formData.append('platform', core.platform.string);
-    formData.append('hard', core.encodeBase64(core.status.hard));
-    formData.append('hardCode', core.getFlag('hard', 0));
-    formData.append('base64', 1);
+  // Upload
+  var formData = new FormData();
+  formData.append("type", "people");
+  formData.append("name", core.firstData.name);
+  formData.append("version", core.firstData.version);
+  formData.append("platform", core.platform.string);
+  formData.append("hard", core.encodeBase64(core.status.hard));
+  formData.append("hardCode", core.getFlag("hard", 0));
+  formData.append("base64", 1);
 
-    core.utils.http("POST", "/games/upload.php", formData);
-}
+  core.utils.http("POST", "/games/upload.php", formData);
+};
 
 ////// 游戏获胜事件 //////
 events.prototype.win = function (reason, norank, noexit) {
-    if (!noexit) core.status.gameOver = true;
-    return this.eventdata.win(reason, norank, noexit);
-}
+  if (!noexit) core.status.gameOver = true;
+  return this.eventdata.win(reason, norank, noexit);
+};
 
 ////// 游戏失败事件 //////
 events.prototype.lose = function (reason) {
-    if (core.isReplaying()) return core.control._replay_error(reason, function () { core.lose(reason); });
-    core.status.gameOver = true;
-    return this.eventdata.lose(reason);
-}
+  if (core.isReplaying())
+    return core.control._replay_error(reason, function () {
+      core.lose(reason);
+    });
+  core.status.gameOver = true;
+  return this.eventdata.lose(reason);
+};
 
 ////// 游戏结束 //////
 events.prototype.gameOver = function (ending, fromReplay, norank) {
-    if (!core.status.extraEvent) {
-        core.clearMap('all');
-        core.deleteAllCanvas();
-        core.dom.gif2.innerHTML = "";
-        core.setWeather();
-    }
-    core.ui.closePanel();
+  if (!core.status.extraEvent) {
+    core.clearMap("all");
+    core.deleteAllCanvas();
+    core.dom.gif2.innerHTML = "";
+    core.setWeather();
+  }
+  core.ui.closePanel();
 
-    if (main.isCompetition && ending != null) {
-        if (ending == "") ending = "恭喜通关";
-        ending += "[比赛]";
-    }
+  if (main.isCompetition && ending != null) {
+    if (ending == "") ending = "恭喜通关";
+    ending += "[比赛]";
+  }
 
-    var reason = null;
-    if (fromReplay) reason = "录像回放完毕!";
-    else if (core.hasFlag("debug")) reason = "\t[系统提示]调试模式下无法上传成绩";
+  var reason = null;
+  if (fromReplay) reason = "录像回放完毕!";
+  else if (core.hasFlag("debug")) reason = "\t[系统提示]调试模式下无法上传成绩";
 
-    if (reason != null)
-        core.drawText(reason, core.restart);
-    else
-        this._gameOver_confirmUpload(ending, norank);
-}
+  if (reason != null) core.drawText(reason, core.restart);
+  else this._gameOver_confirmUpload(ending, norank);
+};
 
 events.prototype._gameOver_confirmUpload = function (ending, norank) {
-    core.ui.closePanel();
+  core.ui.closePanel();
 
-    if (ending == null) {
-        this._gameOver_confirmDownload(ending);
-        return;
+  if (ending == null) {
+    this._gameOver_confirmDownload(ending);
+    return;
+  }
+  core.ui.drawConfirmBox(
+    "你想记录你的ID和成绩吗?",
+    function () {
+      if (main.isCompetition) {
+        core.events._gameOver_doUpload("", ending, norank);
+      } else {
+        var id = core.getCookie("id") || "";
+        var hint =
+          "请输入你的ID:\n(登录状态下输入数字用户编号可成为蓝名成绩并计入用户通关数)";
+        if (id)
+          hint =
+            "请输入你的ID:\n(输入数字用户编号" +
+            id +
+            "可成为蓝名成绩并计入用户通关数)";
+        core.myprompt(hint, id, function (username) {
+          core.events._gameOver_doUpload(username, ending, norank);
+        });
+      }
+    },
+    function () {
+      if (main.isCompetition) core.events._gameOver_confirmDownload(ending);
+      else core.events._gameOver_doUpload(null, ending, norank);
     }
-    core.ui.drawConfirmBox("你想记录你的ID和成绩吗?", function () {
-        if (main.isCompetition) {
-            core.events._gameOver_doUpload("", ending, norank);
-        }
-        else {
-            var id = core.getCookie('id') || "";
-            var hint = "请输入你的ID:\n(登录状态下输入数字用户编号可成为蓝名成绩并计入用户通关数)";
-            if (id) hint = "请输入你的ID:\n(输入数字用户编号" + id + "可成为蓝名成绩并计入用户通关数)";
-            core.myprompt(hint, id, function (username) {
-                core.events._gameOver_doUpload(username, ending, norank);
-            });
-        }
-    }, function () {
-        if (main.isCompetition)
-            core.events._gameOver_confirmDownload(ending);
-        else
-            core.events._gameOver_doUpload(null, ending, norank);
-    })
-}
+  );
+};
 
 events.prototype._gameOver_doUpload = function (username, ending, norank) {
-    var hp = core.status.hero.hp;
-    if (username == null) hp = 1;
-    core.ui.closePanel();
-    // upload
-    var formData = new FormData();
-    formData.append('type', 'score');
-    formData.append('name', core.firstData.name);
-    formData.append('version', core.firstData.version);
-    formData.append('platform', core.platform.string);
-    formData.append('hard', core.encodeBase64(core.status.hard));
-    formData.append('username', core.encodeBase64(username || ""));
-    formData.append('ending', core.encodeBase64(ending));
-    formData.append('lv', core.status.hero.lv);
-    formData.append('hp', Math.min(hp, Math.pow(2, 63)));
-    formData.append('atk', core.status.hero.atk);
-    formData.append('def', core.status.hero.def);
-    formData.append('mdef', core.status.hero.mdef);
-    formData.append('money', core.status.hero.money);
-    formData.append('experience', core.status.hero.exp);
-    formData.append('steps', core.status.hero.steps);
-    formData.append('norank', norank ? 1 : 0);
-    formData.append('seed', core.getFlag('__seed__'));
-    formData.append('totalTime', Math.floor(core.status.hero.statistics.totalTime / 1000));
-    formData.append('route', core.encodeRoute(core.status.route));
-    formData.append('base64', 1);
+  var hp = core.status.hero.hp;
+  if (username == null) hp = 1;
+  core.ui.closePanel();
+  // upload
+  var formData = new FormData();
+  formData.append("type", "score");
+  formData.append("name", core.firstData.name);
+  formData.append("version", core.firstData.version);
+  formData.append("platform", core.platform.string);
+  formData.append("hard", core.encodeBase64(core.status.hard));
+  formData.append("username", core.encodeBase64(username || ""));
+  formData.append("ending", core.encodeBase64(ending));
+  formData.append("lv", core.status.hero.lv);
+  formData.append("hp", Math.min(hp, Math.pow(2, 63)));
+  formData.append("atk", core.status.hero.atk);
+  formData.append("def", core.status.hero.def);
+  formData.append("mdef", core.status.hero.mdef);
+  formData.append("money", core.status.hero.money);
+  formData.append("experience", core.status.hero.exp);
+  formData.append("steps", core.status.hero.steps);
+  formData.append("norank", norank ? 1 : 0);
+  formData.append("seed", core.getFlag("__seed__"));
+  formData.append(
+    "totalTime",
+    Math.floor(core.status.hero.statistics.totalTime / 1000)
+  );
+  formData.append("route", core.encodeRoute(core.status.route));
+  formData.append("base64", 1);
 
-    if (main.isCompetition)
-        core.http("POST", "/games/competition/upload.php", formData);
-    else
-        core.http("POST", "/games/upload.php", formData);
+  if (main.isCompetition)
+    core.http("POST", "/games/competition/upload.php", formData);
+  else core.http("POST", "/games/upload.php", formData);
 
-    core.events._gameOver_confirmDownload(ending);
-}
+  core.events._gameOver_confirmDownload(ending);
+};
 
 events.prototype._gameOver_confirmDownload = function (ending) {
-    core.ui.closePanel();
-    core.ui.drawConfirmBox("你想下载录像吗?", function () {
-        var obj = {
-            'name': core.firstData.name,
-            'version': core.firstData.version,
-            'hard': core.status.hard,
-            'seed': core.getFlag('__seed__'),
-            'route': core.encodeRoute(core.status.route)
-        }
-        core.download(core.firstData.name + "_" + core.formatDate2(new Date()) + ".h5route",
-            LZString.compressToBase64(JSON.stringify(obj)));
-        core.events._gameOver_askRate(ending);
-    }, function () {
-        core.events._gameOver_askRate(ending);
-    });
-}
+  core.ui.closePanel();
+  core.ui.drawConfirmBox(
+    "你想下载录像吗?",
+    function () {
+      var obj = {
+        name: core.firstData.name,
+        version: core.firstData.version,
+        hard: core.status.hard,
+        seed: core.getFlag("__seed__"),
+        route: core.encodeRoute(core.status.route),
+      };
+      core.download(
+        core.firstData.name + "_" + core.formatDate2(new Date()) + ".h5route",
+        LZString.compressToBase64(JSON.stringify(obj))
+      );
+      core.events._gameOver_askRate(ending);
+    },
+    function () {
+      core.events._gameOver_askRate(ending);
+    }
+  );
+};
 
 events.prototype._gameOver_askRate = function (ending) {
-    core.ui.closePanel();
+  core.ui.closePanel();
 
-    // 继续接下来的事件
-    if (core.status.extraEvent) {
-        core.status.event = core.status.extraEvent;
-        delete core.status.extraEvent;
-        core.lockControl();
-        core.doAction();
-        return;
+  // 继续接下来的事件
+  if (core.status.extraEvent) {
+    core.status.event = core.status.extraEvent;
+    delete core.status.extraEvent;
+    core.lockControl();
+    core.doAction();
+    return;
+  }
+
+  if (ending == null) {
+    if (!core.hasSave(0)) {
+      core.ui.closePanel();
+      core.restart();
+      return;
     }
 
-    if (ending == null) {
-        if (!core.hasSave(0)) {
-            core.ui.closePanel();
-            core.restart();
-            return;
-        }
-
-        core.status.event.selection = 0;
-        core.ui.drawConfirmBox("你想读取自动存档么?", function () {
-            core.ui.closePanel();
-            core.doSL("autoSave", "load");
-        }, function () {
-            core.ui.closePanel();
-            core.restart();
-        });
-        return;
-    }
-
-    core.ui.drawConfirmBox("恭喜通关!你想查看榜单、评论,\n以及评分和标色投票吗?", function () {
-        if (core.platform.isPC) {
-            window.open("/tower/?name=" + core.firstData.name, "_blank");
-            core.restart();
-        }
-        else {
-            window.location.href = "/tower/?name=" + core.firstData.name;
-        }
-    }, function () {
+    core.status.event.selection = 0;
+    core.ui.drawConfirmBox(
+      "你想读取自动存档么?",
+      function () {
+        core.ui.closePanel();
+        core.doSL("autoSave", "load");
+      },
+      function () {
+        core.ui.closePanel();
         core.restart();
-    });
-}
+      }
+    );
+    return;
+  }
+
+  core.ui.drawConfirmBox(
+    "恭喜通关!你想查看榜单、评论,\n以及评分和标色投票吗?",
+    function () {
+      if (core.platform.isPC) {
+        window.open("/tower/?name=" + core.firstData.name, "_blank");
+        core.restart();
+      } else {
+        window.location.href = "/tower/?name=" + core.firstData.name;
+      }
+    },
+    function () {
+      core.restart();
+    }
+  );
+};
 
 ////// 重新开始游戏;此函数将回到标题页面 //////
 events.prototype.restart = function () {
-    core.showStartAnimate();
-    core.playBgm(main.startBgm);
-}
+  core.showStartAnimate();
+  core.playBgm(main.startBgm);
+};
 
 ////// 询问是否需要重新开始 //////
 events.prototype.confirmRestart = function () {
-    core.playSound('打开界面');
-    core.status.event.selection = 1;
-    core.ui.drawConfirmBox("你确定要返回标题页面吗?", function () {
-        core.playSound('确定');
-        core.ui.closePanel();
-        core.restart();
-    }, function () {
-        core.playSound('取消');
-        core.ui.closePanel();
-    });
-}
+  core.playSound("打开界面");
+  core.status.event.selection = 1;
+  core.ui.drawConfirmBox(
+    "你确定要返回标题页面吗?",
+    function () {
+      core.playSound("确定");
+      core.ui.closePanel();
+      core.restart();
+    },
+    function () {
+      core.playSound("取消");
+      core.ui.closePanel();
+    }
+  );
+};
 
 // ------ 系统事件的处理 ------ //
 
 ////// 注册一个系统事件 //////
 // type为事件名,func为事件的处理函数,可接受(data, callback)参数
 events.prototype.registerSystemEvent = function (type, func) {
-    this.systemEvents[type] = func;
-}
+  this.systemEvents[type] = func;
+};
 
 ////// 注销一个系统事件 //////
 events.prototype.unregisterSystemEvent = function (type) {
-    delete this.systemEvents[type];
-}
+  delete this.systemEvents[type];
+};
 
 ////// 执行一个系统事件 //////
 events.prototype.doSystemEvent = function (type, data, callback) {
-    core.clearRouteFolding();
-    if (this.systemEvents[type]) {
-        try {
-            return core.doFunc(this.systemEvents[type], this, data, callback);
-        }
-        catch (e) {
-            console.error(e);
-            console.error("ERROR in systemEvents[" + type + "]");
-        }
+  core.clearRouteFolding();
+  if (this.systemEvents[type]) {
+    try {
+      return core.doFunc(this.systemEvents[type], this, data, callback);
+    } catch (e) {
+      console.error(e);
+      console.error("ERROR in systemEvents[" + type + "]");
     }
-    if (this["_sys_" + type]) return this["_sys_" + type](data, callback);
-    console.error("未知的系统事件: " + type + "!");
-    if (callback) callback();
-}
+  }
+  if (this["_sys_" + type]) return this["_sys_" + type](data, callback);
+  console.error("未知的系统事件: " + type + "!");
+  if (callback) callback();
+};
 
 ////// 触发(x,y)点的事件 //////
 events.prototype.trigger = function (x, y, callback) {
-    var _executeCallback = function () {
-        // 因为trigger之后还有可能触发其他同步脚本(比如阻激夹域检测)
-        // 所以这里强制callback被异步触发
-        if (callback) {
-            setTimeout(callback, 1); // +1是为了录像检测系统 
-        }
-        return;
-    }
-    if (core.status.gameOver) return _executeCallback();
-    if (core.status.event.id == 'action') {
-        core.insertAction({ "type": "function", "function": "function () { core.events._trigger_inAction(" + x + "," + y + "); }", "async": true },
-            null, null, null, true);
-        return _executeCallback();
-    }
-    if (core.status.event.id) return _executeCallback();
-
-    var block = core.getBlock(x, y);
-    if (block == null) return _executeCallback();
-
-    // 执行该点的脚本
-    if (block.event.script) {
-        core.clearRouteFolding();
-        try {
-            eval(block.event.script);
-        } catch (ee) { console.error(ee) }
-    }
-
-    // 碰触事件
-    if (block.event.event) {
-        core.clearRouteFolding();
-        core.insertAction(block.event.event, block.x, block.y);
-        // 不再执行该点的系统事件
-        return _executeCallback();
-    }
-
-    if (block.event.trigger && block.event.trigger != 'null') {
-        var noPass = block.event.noPass, trigger = block.event.trigger;
-        if (noPass) core.clearAutomaticRouteNode(x, y);
-
-        // 转换楼层能否穿透
-        if (trigger == 'changeFloor' && !noPass && this._trigger_ignoreChangeFloor(block))
-            return _executeCallback();
-        core.status.automaticRoute.moveDirectly = false;
-        this.doSystemEvent(trigger, block);
+  var _executeCallback = function () {
+    // 因为trigger之后还有可能触发其他同步脚本(比如阻激夹域检测)
+    // 所以这里强制callback被异步触发
+    if (callback) {
+      setTimeout(callback, 1); // +1是为了录像检测系统
     }
+    return;
+  };
+  if (core.status.gameOver) return _executeCallback();
+  if (core.status.event.id == "action") {
+    core.insertAction(
+      {
+        type: "function",
+        function:
+          "function () { core.events._trigger_inAction(" + x + "," + y + "); }",
+        async: true,
+      },
+      null,
+      null,
+      null,
+      true
+    );
     return _executeCallback();
-}
+  }
+  if (core.status.event.id) return _executeCallback();
+
+  var block = core.getBlock(x, y);
+  if (block == null) return _executeCallback();
+
+  // 执行该点的脚本
+  if (block.event.script) {
+    core.clearRouteFolding();
+    try {
+      eval(block.event.script);
+    } catch (ee) {
+      console.error(ee);
+    }
+  }
+
+  // 碰触事件
+  if (block.event.event) {
+    core.clearRouteFolding();
+    core.insertAction(block.event.event, block.x, block.y);
+    // 不再执行该点的系统事件
+    return _executeCallback();
+  }
+
+  if (block.event.trigger && block.event.trigger != "null") {
+    var noPass = block.event.noPass,
+      trigger = block.event.trigger;
+    if (noPass) core.clearAutomaticRouteNode(x, y);
+
+    // 转换楼层能否穿透
+    if (
+      trigger == "changeFloor" &&
+      !noPass &&
+      this._trigger_ignoreChangeFloor(block)
+    )
+      return _executeCallback();
+    core.status.automaticRoute.moveDirectly = false;
+    this.doSystemEvent(trigger, block);
+  }
+  return _executeCallback();
+};
 
 events.prototype._trigger_inAction = function (x, y) {
-    if (core.status.gameOver || core.status.event.id != 'action') return;
+  if (core.status.gameOver || core.status.event.id != "action") return;
 
-    var block = core.getBlock(x, y);
-    if (block == null) return core.doAction();
+  var block = core.getBlock(x, y);
+  if (block == null) return core.doAction();
 
-    // 执行该点的脚本
-    try {
-        eval(block.event.script);
-    } catch (ee) { console.error(ee) }
+  // 执行该点的脚本
+  try {
+    eval(block.event.script);
+  } catch (ee) {
+    console.error(ee);
+  }
 
-    // 碰触事件
-    if (block.event.event) {
-        core.clearRouteFolding();
-        core.insertAction(block.event.event, block.x, block.y);
-        // 不再执行该点的系统事件
-        return core.doAction();
-    }
-
-    if (block.event.trigger && block.event.trigger != 'null') {
-        this.setEvents(null, x, y);
-        if (block.event.trigger == 'action') {
-            this.insertAction(block.event.data);
-        }
-        else {
-            this.doSystemEvent(block.event.trigger, block, core.doAction);
-            return;
-        }
-    }
+  // 碰触事件
+  if (block.event.event) {
+    core.clearRouteFolding();
+    core.insertAction(block.event.event, block.x, block.y);
+    // 不再执行该点的系统事件
     return core.doAction();
-}
+  }
+
+  if (block.event.trigger && block.event.trigger != "null") {
+    this.setEvents(null, x, y);
+    if (block.event.trigger == "action") {
+      this.insertAction(block.event.data);
+    } else {
+      this.doSystemEvent(block.event.trigger, block, core.doAction);
+      return;
+    }
+  }
+  return core.doAction();
+};
 
 events.prototype._trigger_ignoreChangeFloor = function (block) {
-    var able = core.flags.ignoreChangeFloor;
-    if (block.event.data && block.event.data.ignoreChangeFloor != null)
-        able = block.event.data.ignoreChangeFloor;
-    if (able) {
-        if (core.isReplaying()) {
-            if (core.status.replay.toReplay[0] == 'no') {
-                core.status.replay.toReplay.shift();
-                core.status.route.push("no");
-                return true;
-            }
-        }
-        else if (core.status.automaticRoute.autoHeroMove
-            || core.status.automaticRoute.autoStep < core.status.automaticRoute.autoStepRoutes.length) {
-            core.status.route.push("no");
-            return true;
-        }
+  var able = core.flags.ignoreChangeFloor;
+  if (block.event.data && block.event.data.ignoreChangeFloor != null)
+    able = block.event.data.ignoreChangeFloor;
+  if (able) {
+    if (core.isReplaying()) {
+      if (core.status.replay.toReplay[0] == "no") {
+        core.status.replay.toReplay.shift();
+        core.status.route.push("no");
+        return true;
+      }
+    } else if (
+      core.status.automaticRoute.autoHeroMove ||
+      core.status.automaticRoute.autoStep <
+        core.status.automaticRoute.autoStepRoutes.length
+    ) {
+      core.status.route.push("no");
+      return true;
     }
-    return false;
-}
+  }
+  return false;
+};
 
 events.prototype._sys_battle = function (data, callback) {
-    // 检查是否需要改变朝向
-    /* if (data.x == core.nextX() && data.y == core.nextY()) {
+  // 检查是否需要改变朝向
+  /* if (data.x == core.nextX() && data.y == core.nextY()) {
         var dir = core.turnDirection(":back");
         var id = data.event.id, toId = (data.event.faceIds || {})[dir];
         if (toId && id != toId) {
@@ -433,499 +489,554 @@ events.prototype._sys_battle = function (data, callback) {
         }
     } */
 
-    // 检查战前事件
-    var beforeBattle = [];
-    core.push(beforeBattle, core.floors[core.status.floorId].beforeBattle[data.x + "," + data.y]);
-    core.push(beforeBattle, (core.material.enemys[data.event.id] || {}).beforeBattle);
-    if (beforeBattle.length > 0) {
-        core.push(beforeBattle, [{ "type": "battle", "x": data.x, "y": data.y }]);
-        core.clearContinueAutomaticRoute();
+  // 检查战前事件
+  var beforeBattle = [];
+  core.push(
+    beforeBattle,
+    core.floors[core.status.floorId].beforeBattle[data.x + "," + data.y]
+  );
+  core.push(
+    beforeBattle,
+    (core.material.enemys[data.event.id] || {}).beforeBattle
+  );
+  if (beforeBattle.length > 0) {
+    core.push(beforeBattle, [{ type: "battle", x: data.x, y: data.y }]);
+    core.clearContinueAutomaticRoute();
 
-        // 自动存档
-        var inAction = core.status.event.id == 'action';
-        if (inAction) {
-            core.insertAction(beforeBattle, data.x, data.y);
-            core.doAction();
-        } else {
-            core.autosave(true);
-            core.insertAction(beforeBattle, data.x, data.y, callback);
-        }
+    // 自动存档
+    var inAction = core.status.event.id == "action";
+    if (inAction) {
+      core.insertAction(beforeBattle, data.x, data.y);
+      core.doAction();
     } else {
-        this.battle(data.event.id, data.x, data.y, false, callback);
+      core.autosave(true);
+      core.insertAction(beforeBattle, data.x, data.y, callback);
     }
-}
+  } else {
+    this.battle(data.event.id, data.x, data.y, false, callback);
+  }
+};
 
 ////// 战斗 //////
 events.prototype.battle = function (id, x, y, force, callback) {
-    core.saveAndStopAutomaticRoute();
-    id = id || core.getBlockId(x, y);
-    if (!id) return core.clearContinueAutomaticRoute(callback);
-    // 非强制战斗
-    if (!core.enemys.canBattle(id, x, y) && !force && !core.status.event.id) {
-        core.stopSound();
-        core.playSound('操作失败');
-        core.drawTip("你打不过此怪物!", id);
-        return core.clearContinueAutomaticRoute(callback);
-    }
-    // 自动存档
-    if (!core.status.event.id) core.autosave(true);
-    // 战前事件
-    if (!this.beforeBattle(id, x, y))
-        return core.clearContinueAutomaticRoute(callback);
-    // 战后事件
-    this.afterBattle(id, x, y);
-    if (callback) callback();
-}
+  core.saveAndStopAutomaticRoute();
+  id = id || core.getBlockId(x, y);
+  if (!id) return core.clearContinueAutomaticRoute(callback);
+  // 非强制战斗
+  if (!core.enemys.canBattle(id, x, y) && !force && !core.status.event.id) {
+    core.stopSound();
+    core.playSound("操作失败");
+    core.drawTip("你打不过此怪物!", id);
+    return core.clearContinueAutomaticRoute(callback);
+  }
+  // 自动存档
+  if (!core.status.event.id) core.autosave(true);
+  // 战前事件
+  if (!this.beforeBattle(id, x, y))
+    return core.clearContinueAutomaticRoute(callback);
+  // 战后事件
+  this.afterBattle(id, x, y);
+  if (callback) callback();
+};
 
 ////// 战斗前触发的事件 //////
 events.prototype.beforeBattle = function (enemyId, x, y) {
-    return this.eventdata.beforeBattle(enemyId, x, y)
-}
+  return this.eventdata.beforeBattle(enemyId, x, y);
+};
 
 ////// 战斗结束后触发的事件 //////
 events.prototype.afterBattle = function (enemyId, x, y) {
-    return this.eventdata.afterBattle(enemyId, x, y);
-}
+  return this.eventdata.afterBattle(enemyId, x, y);
+};
 
 events.prototype._sys_openDoor = function (data, callback) {
-    this.openDoor(data.x, data.y, true, function () {
-        core.replay();
-        if (callback) callback();
-    });
-}
+  this.openDoor(data.x, data.y, true, function () {
+    core.replay();
+    if (callback) callback();
+  });
+};
 
 ////// 开门 //////
 events.prototype.openDoor = function (x, y, needKey, callback) {
-    var block = core.getBlock(x, y);
-    core.saveAndStopAutomaticRoute();
-    if (!this._openDoor_check(block, x, y, needKey)) {
-        var locked = core.status.lockControl;
-        core.waitHeroToStop(function () {
-            if (!locked) core.unlockControl();
-            if (callback) callback();
-        });
-        return;
-    }
-    if (core.status.replay.speed == 24) {
-        core.status.replay.animate = true;
-        core.removeBlock(x, y);
-        setTimeout(function () {
-            core.status.replay.animate = false;
-            core.events.afterOpenDoor(block.event.id, x, y);
-            if (callback) callback();
-        }, 1); // +1是为了录像检测系统
-    } else {
-        this._openDoor_animate(block, x, y, callback);
-    }
-}
-
-events.prototype._openDoor_check = function (block, x, y, needKey) {
-    var clearAndReturn = function () {
-        core.clearContinueAutomaticRoute();
-        return false;
-    }
-
-    if (block == null || block.event == null) return clearAndReturn();
-    var id = block.event.id;
-
-    // 是否存在门或暗墙
-    if (core.material.icons.animates[id] == null && core.material.icons.npc48[id] == null) {
-        return clearAndReturn();
-    }
-
-    if (id == 'steelDoor' && core.flags.steelDoorWithoutKey)
-        needKey = false;
-    var doorInfo = block.event.doorInfo;
-    if (doorInfo == null) return clearAndReturn();
-    // Check all keys
-    var keyInfo = doorInfo.keys || {};
-    if (needKey) {
-        for (var keyName in keyInfo) {
-            var keyValue = keyInfo[keyName];
-            if (keyName.endsWith(':o')) keyName = keyName.substring(0, keyName.length - 2);
-
-            // --- 如果是一个不存在的道具,则直接认为无法开启
-            if (!core.material.items[keyName]) {
-                core.stopSound();
-                core.playSound('操作失败');
-                core.drawTip("无法开启此门");
-                return clearAndReturn();
-            }
-            if (core.itemCount(keyName) < keyValue) {
-                core.stopSound();
-                core.playSound('操作失败');
-                core.drawTip("你的" + ((core.material.items[keyName] || {}).name || "钥匙") + "不足!", null, true);
-                return false;
-            }
-        }
-        if (!core.status.event.id) core.autosave(true);
-        for (var keyName in keyInfo) {
-            if (!keyName.endsWith(':o')) core.removeItem(keyName, keyInfo[keyName]);
-        }
-    }
-    core.playSound(doorInfo.openSound);
-    return true;
-}
-
-events.prototype._openDoor_animate = function (block, x, y, callback) {
-    var blockInfo = core.getBlockInfo(block);
-    blockInfo.opacity = block.opacity;
-    blockInfo.filter = block.filter;
-
-    var speed = (block.event.doorInfo.time || 160) / 4;
-
+  var block = core.getBlock(x, y);
+  core.saveAndStopAutomaticRoute();
+  if (!this._openDoor_check(block, x, y, needKey)) {
     var locked = core.status.lockControl;
-    core.lockControl();
+    core.waitHeroToStop(function () {
+      if (!locked) core.unlockControl();
+      if (callback) callback();
+    });
+    return;
+  }
+  if (core.status.replay.speed == 24) {
     core.status.replay.animate = true;
     core.removeBlock(x, y);
+    setTimeout(function () {
+      core.status.replay.animate = false;
+      core.events.afterOpenDoor(block.event.id, x, y);
+      if (callback) callback();
+    }, 1); // +1是为了录像检测系统
+  } else {
+    this._openDoor_animate(block, x, y, callback);
+  }
+};
 
-    blockInfo.posX = 0;
-    core.maps._drawBlockInfo(blockInfo, x, y);
+events.prototype._openDoor_check = function (block, x, y, needKey) {
+  var clearAndReturn = function () {
+    core.clearContinueAutomaticRoute();
+    return false;
+  };
 
-    var cb = function () {
-        core.maps._removeBlockFromMap(core.status.floorId, block);
-        if (!locked) core.unlockControl();
-        core.status.replay.animate = false;
-        core.events.afterOpenDoor(block.event.id, x, y);
-        if (callback) callback();
+  if (block == null || block.event == null) return clearAndReturn();
+  var id = block.event.id;
+
+  // 是否存在门或暗墙
+  if (
+    core.material.icons.animates[id] == null &&
+    core.material.icons.npc48[id] == null
+  ) {
+    return clearAndReturn();
+  }
+
+  if (id == "steelDoor" && core.flags.steelDoorWithoutKey) needKey = false;
+  var doorInfo = block.event.doorInfo;
+  if (doorInfo == null) return clearAndReturn();
+  // Check all keys
+  var keyInfo = doorInfo.keys || {};
+  if (needKey) {
+    for (var keyName in keyInfo) {
+      var keyValue = keyInfo[keyName];
+      if (keyName.endsWith(":o"))
+        keyName = keyName.substring(0, keyName.length - 2);
+
+      // --- 如果是一个不存在的道具,则直接认为无法开启
+      if (!core.material.items[keyName]) {
+        core.stopSound();
+        core.playSound("操作失败");
+        core.drawTip("无法开启此门");
+        return clearAndReturn();
+      }
+      if (core.itemCount(keyName) < keyValue) {
+        core.stopSound();
+        core.playSound("操作失败");
+        core.drawTip(
+          "你的" +
+            ((core.material.items[keyName] || {}).name || "钥匙") +
+            "不足!",
+          null,
+          true
+        );
+        return false;
+      }
     }
+    if (!core.status.event.id) core.autosave(true);
+    for (var keyName in keyInfo) {
+      if (!keyName.endsWith(":o")) core.removeItem(keyName, keyInfo[keyName]);
+    }
+  }
+  core.playSound(doorInfo.openSound);
+  return true;
+};
 
-    var animate = window.setInterval(function () {
-        blockInfo.posX++;
-        if (blockInfo.posX == 4) {
-            clearInterval(animate);
-            delete core.animateFrame.asyncId[animate];
-            cb();
-            return;
-        }
-        core.maps._drawBlockInfo(blockInfo, x, y);
-    }, core.status.replay.speed == 24 ? 1 : speed / Math.max(core.status.replay.speed, 1));
+events.prototype._openDoor_animate = function (block, x, y, callback) {
+  var blockInfo = core.getBlockInfo(block);
+  blockInfo.opacity = block.opacity;
+  blockInfo.filter = block.filter;
 
-    core.animateFrame.lastAsyncId = animate;
-    core.animateFrame.asyncId[animate] = cb;
-}
+  var speed = (block.event.doorInfo.time || 160) / 4;
+
+  var locked = core.status.lockControl;
+  core.lockControl();
+  core.status.replay.animate = true;
+  core.removeBlock(x, y);
+
+  blockInfo.posX = 0;
+  core.maps._drawBlockInfo(blockInfo, x, y);
+
+  var cb = function () {
+    core.maps._removeBlockFromMap(core.status.floorId, block);
+    if (!locked) core.unlockControl();
+    core.status.replay.animate = false;
+    core.events.afterOpenDoor(block.event.id, x, y);
+    if (callback) callback();
+  };
+
+  var animate = window.setInterval(
+    function () {
+      blockInfo.posX++;
+      if (blockInfo.posX == 4) {
+        clearInterval(animate);
+        delete core.animateFrame.asyncId[animate];
+        cb();
+        return;
+      }
+      core.maps._drawBlockInfo(blockInfo, x, y);
+    },
+    core.status.replay.speed == 24
+      ? 1
+      : speed / Math.max(core.status.replay.speed, 1)
+  );
+
+  core.animateFrame.lastAsyncId = animate;
+  core.animateFrame.asyncId[animate] = cb;
+};
 
 ////// 开一个门后触发的事件 //////
 events.prototype.afterOpenDoor = function (doorId, x, y) {
-    return this.eventdata.afterOpenDoor(doorId, x, y);
-}
+  return this.eventdata.afterOpenDoor(doorId, x, y);
+};
 
 events.prototype._sys_getItem = function (data, callback) {
-    this.getItem(data.event.id, 1, data.x, data.y, false, callback);
-}
+  this.getItem(data.event.id, 1, data.x, data.y, false, callback);
+};
 
 ////// 获得某个物品 //////
 events.prototype.getItem = function (id, num, x, y, isGentleClick, callback) {
-    if (num == null) num = 1;
-    var itemCls = core.material.items[id].cls;
-    core.removeBlock(x, y);
-    core.items.getItemEffect(id, num);
-    var text = '获得 ' + core.material.items[id].name;
-    if (num > 1) text += "x" + num;
-    if (itemCls === 'items' && num == 1) text += core.items.getItemEffectTip(id);
-    core.drawTip(text, id);
+  if (num == null) num = 1;
+  var itemCls = core.material.items[id].cls;
+  core.removeBlock(x, y);
+  core.items.getItemEffect(id, num);
+  var text = "获得 " + core.material.items[id].name;
+  if (num > 1) text += "x" + num;
+  if (itemCls === "items" && num == 1) text += core.items.getItemEffectTip(id);
+  core.drawTip(text, id);
 
-    // --- 首次获得道具的提示
-    if (!core.hasFlag("__itemHint__")) core.setFlag("__itemHint__", []);
-    var itemHint = core.getFlag("__itemHint__");
-    if (core.flags.itemFirstText && itemHint.indexOf(id) < 0 && itemCls != 'items') {
-        var hint = core.material.items[id].text || "该道具暂无描述";
-        try {
-            hint = core.replaceText(hint);
-        } catch (e) { }
-        if (!core.status.event.id || core.status.event.id == 'action') {
-            core.insertAction("\t[" + core.material.items[id].name + "," + id + "]" + hint + "\n"
-                + (id.endsWith('Key') ? "(钥匙类道具,遇到对应的门时自动打开)"
-                    : itemCls == 'tools' ? "(消耗类道具,请按T在道具栏使用)"
-                        : itemCls == 'constants' ? "(永久类道具,请按T在道具栏使用)"
-                            : itemCls == 'equips' ? "(装备类道具,请按Q在装备栏进行装备)" : ""));
-        }
-        itemHint.push(id);
+  // --- 首次获得道具的提示
+  if (!core.hasFlag("__itemHint__")) core.setFlag("__itemHint__", []);
+  var itemHint = core.getFlag("__itemHint__");
+  if (
+    core.flags.itemFirstText &&
+    itemHint.indexOf(id) < 0 &&
+    itemCls != "items"
+  ) {
+    var hint = core.material.items[id].text || "该道具暂无描述";
+    try {
+      hint = core.replaceText(hint);
+    } catch (e) {}
+    if (!core.status.event.id || core.status.event.id == "action") {
+      core.insertAction(
+        "\t[" +
+          core.material.items[id].name +
+          "," +
+          id +
+          "]" +
+          hint +
+          "\n" +
+          (id.endsWith("Key")
+            ? "(钥匙类道具,遇到对应的门时自动打开)"
+            : itemCls == "tools"
+            ? "(消耗类道具,请按T在道具栏使用)"
+            : itemCls == "constants"
+            ? "(永久类道具,请按T在道具栏使用)"
+            : itemCls == "equips"
+            ? "(装备类道具,请按Q在装备栏进行装备)"
+            : "")
+      );
     }
+    itemHint.push(id);
+  }
 
-    this.afterGetItem(id, x, y, isGentleClick);
-    if (callback) callback();
-}
+  this.afterGetItem(id, x, y, isGentleClick);
+  if (callback) callback();
+};
 
 events.prototype.afterGetItem = function (id, x, y, isGentleClick) {
-    this.eventdata.afterGetItem(id, x, y, isGentleClick);
-}
+  this.eventdata.afterGetItem(id, x, y, isGentleClick);
+};
 
 ////// 获得面前的物品(轻按) //////
 events.prototype.getNextItem = function (noRoute) {
-    if (core.isMoving() || !core.flags.enableGentleClick) return false;
-    if (this._canGetNextItem()) return this._getNextItem(null, noRoute);
+  if (core.isMoving() || !core.flags.enableGentleClick) return false;
+  if (this._canGetNextItem()) return this._getNextItem(null, noRoute);
 
-    var directions = ["up", "down", "left", "right"].filter(function (dir) {
-        return core.events._canGetNextItem(dir);
-    });
-    return directions.length > 0 ? this._getNextItem(directions[0], noRoute) : false;
-}
+  var directions = ["up", "down", "left", "right"].filter(function (dir) {
+    return core.events._canGetNextItem(dir);
+  });
+  return directions.length > 0
+    ? this._getNextItem(directions[0], noRoute)
+    : false;
+};
 
 events.prototype._canGetNextItem = function (direction) {
-    direction = direction || core.getHeroLoc('direction');
-    if (!core.canMoveHero(null, null, direction)) return;
-    var nx = core.getHeroLoc('x') + core.utils.scan[direction].x;
-    var ny = core.getHeroLoc('y') + core.utils.scan[direction].y;
-    var block = core.getBlock(nx, ny);
-    return block != null && !block.event.script && !block.event.event && block.event.trigger == 'getItem';
-}
+  direction = direction || core.getHeroLoc("direction");
+  if (!core.canMoveHero(null, null, direction)) return;
+  var nx = core.getHeroLoc("x") + core.utils.scan[direction].x;
+  var ny = core.getHeroLoc("y") + core.utils.scan[direction].y;
+  var block = core.getBlock(nx, ny);
+  return (
+    block != null &&
+    !block.event.script &&
+    !block.event.event &&
+    block.event.trigger == "getItem"
+  );
+};
 
 events.prototype._getNextItem = function (direction, noRoute) {
-    direction = direction || core.getHeroLoc('direction');
-    var nx = core.getHeroLoc('x') + core.utils.scan[direction].x;
-    var ny = core.getHeroLoc('y') + core.utils.scan[direction].y;
-    if (!noRoute) core.status.route.push("getNext");
-    this.getItem(core.getBlockId(nx, ny), 1, nx, ny, true);
-    return true;
-}
+  direction = direction || core.getHeroLoc("direction");
+  var nx = core.getHeroLoc("x") + core.utils.scan[direction].x;
+  var ny = core.getHeroLoc("y") + core.utils.scan[direction].y;
+  if (!noRoute) core.status.route.push("getNext");
+  this.getItem(core.getBlockId(nx, ny), 1, nx, ny, true);
+  return true;
+};
 
 events.prototype._sys_changeFloor = function (data, callback) {
-    data = data.event.data;
-    var heroLoc = {};
-    if (data.loc) heroLoc = { 'x': data.loc[0], 'y': data.loc[1] };
-    if (data.direction) heroLoc.direction = data.direction;
-    if (core.status.event.id != 'action') core.status.event.id = null;
-    core.changeFloor(data.floorId, data.stair, heroLoc, data.time, function () {
-        core.replay();
-        if (callback) callback();
-    });
-}
+  data = data.event.data;
+  var heroLoc = {};
+  if (data.loc) heroLoc = { x: data.loc[0], y: data.loc[1] };
+  if (data.direction) heroLoc.direction = data.direction;
+  if (core.status.event.id != "action") core.status.event.id = null;
+  core.changeFloor(data.floorId, data.stair, heroLoc, data.time, function () {
+    core.replay();
+    if (callback) callback();
+  });
+};
 
 ////// 楼层切换 //////
-events.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback) {
-    var info = this._changeFloor_getInfo(floorId, stair, heroLoc, time);
-    if (info == null) {
-        if (callback) callback();
-        return;
-    }
-    floorId = info.floorId;
-    info.locked = core.status.lockControl;
+events.prototype.changeFloor = function (
+  floorId,
+  stair,
+  heroLoc,
+  time,
+  callback
+) {
+  var info = this._changeFloor_getInfo(floorId, stair, heroLoc, time);
+  if (info == null) {
+    if (callback) callback();
+    return;
+  }
+  floorId = info.floorId;
+  info.locked = core.status.lockControl;
 
-    core.dom.floorNameLabel.innerText = core.status.maps[floorId].title;
-    core.lockControl();
-    core.stopAutomaticRoute();
-    core.clearContinueAutomaticRoute();
-    core.status.replay.animate = true;
-    clearInterval(core.interval.onDownInterval);
-    core.interval.onDownInterval = 'tmp';
+  core.dom.floorNameLabel.innerText = core.status.maps[floorId].title;
+  core.lockControl();
+  core.stopAutomaticRoute();
+  core.clearContinueAutomaticRoute();
+  core.status.replay.animate = true;
+  clearInterval(core.interval.onDownInterval);
+  core.interval.onDownInterval = "tmp";
 
-    this._changeFloor_beforeChange(info, callback);
-}
+  this._changeFloor_beforeChange(info, callback);
+};
 
-events.prototype._changeFloor_getInfo = function (floorId, stair, heroLoc, time) {
-    floorId = floorId || core.status.floorId;
-    if (floorId == ':before') {
-        var index = core.floorIds.indexOf(core.status.floorId);
-        if (index > 0) floorId = core.floorIds[index - 1];
-        else floorId = core.status.floorId;
-    }
-    else if (floorId == ':next') {
-        var index = core.floorIds.indexOf(core.status.floorId);
-        if (index < core.floorIds.length - 1) floorId = core.floorIds[index + 1];
-        else floorId = core.status.floorId;
-    } else if (floorId == ':now') {
-        floorId = core.status.floorId;
-    }
-    if (!core.status.maps[floorId]) {
-        console.error("不存在的楼层:" + floorId);
-        return null;
-    }
+events.prototype._changeFloor_getInfo = function (
+  floorId,
+  stair,
+  heroLoc,
+  time
+) {
+  floorId = floorId || core.status.floorId;
+  if (floorId == ":before") {
+    var index = core.floorIds.indexOf(core.status.floorId);
+    if (index > 0) floorId = core.floorIds[index - 1];
+    else floorId = core.status.floorId;
+  } else if (floorId == ":next") {
+    var index = core.floorIds.indexOf(core.status.floorId);
+    if (index < core.floorIds.length - 1) floorId = core.floorIds[index + 1];
+    else floorId = core.status.floorId;
+  } else if (floorId == ":now") {
+    floorId = core.status.floorId;
+  }
+  if (!core.status.maps[floorId]) {
+    console.error("不存在的楼层:" + floorId);
+    return null;
+  }
 
-    if (main.mode != 'play' || core.isReplaying()) time = 0;
-    if (time == null) time = core.values.floorChangeTime;
-    time /= 20;
+  if (main.mode != "play" || core.isReplaying()) time = 0;
+  if (time == null) time = core.values.floorChangeTime;
+  time /= 20;
 
-    return {
-        floorId: floorId,
-        time: time,
-        heroLoc: core.clone(this._changeFloor_getHeroLoc(floorId, stair, heroLoc))
-    };
-}
+  return {
+    floorId: floorId,
+    time: time,
+    heroLoc: core.clone(this._changeFloor_getHeroLoc(floorId, stair, heroLoc)),
+  };
+};
 
 events.prototype._changeFloor_getHeroLoc = function (floorId, stair, heroLoc) {
-    if (!heroLoc)
-        heroLoc = core.clone(core.status.hero.loc);
-    if (stair) {
-        // --- 对称
-        if (stair == ':now')
-            heroLoc = core.clone(core.status.hero.loc);
-        else if (stair == ':symmetry') {
-            heroLoc.x = core.bigmap.width - 1 - core.getHeroLoc('x');
-            heroLoc.y = core.bigmap.height - 1 - core.getHeroLoc('y');
-        }
-        else if (stair == ':symmetry_x')
-            heroLoc.x = core.bigmap.width - 1 - core.getHeroLoc('x');
-        else if (stair == ':symmetry_y')
-            heroLoc.y = core.bigmap.height - 1 - core.getHeroLoc('y');
-        // 检查该层地图的 upFloor & downFloor & flyPoint
-        else if (core.status.maps[floorId][stair]) {
-            heroLoc.x = core.status.maps[floorId][stair][0];
-            heroLoc.y = core.status.maps[floorId][stair][1];
-        }
-        else {
-            core.extractBlocks(floorId);
-            var blocks = core.status.maps[floorId].blocks;
-            for (var i in blocks) {
-                if (!blocks[i].disable && blocks[i].event.id === stair) {
-                    heroLoc.x = blocks[i].x;
-                    heroLoc.y = blocks[i].y;
-                    break;
-                }
-            }
+  if (!heroLoc) heroLoc = core.clone(core.status.hero.loc);
+  if (stair) {
+    // --- 对称
+    if (stair == ":now") heroLoc = core.clone(core.status.hero.loc);
+    else if (stair == ":symmetry") {
+      heroLoc.x = core.bigmap.width - 1 - core.getHeroLoc("x");
+      heroLoc.y = core.bigmap.height - 1 - core.getHeroLoc("y");
+    } else if (stair == ":symmetry_x")
+      heroLoc.x = core.bigmap.width - 1 - core.getHeroLoc("x");
+    else if (stair == ":symmetry_y")
+      heroLoc.y = core.bigmap.height - 1 - core.getHeroLoc("y");
+    // 检查该层地图的 upFloor & downFloor & flyPoint
+    else if (core.status.maps[floorId][stair]) {
+      heroLoc.x = core.status.maps[floorId][stair][0];
+      heroLoc.y = core.status.maps[floorId][stair][1];
+    } else {
+      core.extractBlocks(floorId);
+      var blocks = core.status.maps[floorId].blocks;
+      for (var i in blocks) {
+        if (!blocks[i].disable && blocks[i].event.id === stair) {
+          heroLoc.x = blocks[i].x;
+          heroLoc.y = blocks[i].y;
+          break;
         }
+      }
     }
-    ['x', 'y', 'direction'].forEach(function (name) {
-        if (heroLoc[name] == null)
-            heroLoc[name] = core.getHeroLoc(name);
-    });
-    return heroLoc;
-}
+  }
+  ["x", "y", "direction"].forEach(function (name) {
+    if (heroLoc[name] == null) heroLoc[name] = core.getHeroLoc(name);
+  });
+  return heroLoc;
+};
 
 events.prototype._changeFloor_beforeChange = function (info, callback) {
-    this._changeFloor_playSound();
-    // 需要 setTimeout 执行,不然会出错
-    window.setTimeout(function () {
-        if (info.time == 0)
-            core.events._changeFloor_changing(info, callback);
-        else
-            core.showWithAnimate(core.dom.floorMsgGroup, info.time / 2, function () {
-                core.events._changeFloor_changing(info, callback);
-            });
-    }, 25)
-}
+  this._changeFloor_playSound();
+  // 需要 setTimeout 执行,不然会出错
+  window.setTimeout(function () {
+    if (info.time == 0) core.events._changeFloor_changing(info, callback);
+    else
+      core.showWithAnimate(core.dom.floorMsgGroup, info.time / 2, function () {
+        core.events._changeFloor_changing(info, callback);
+      });
+  }, 25);
+};
 
 events.prototype._changeFloor_playSound = function () {
-    // 播放换层音效
-    if (core.hasFlag('__fromLoad__')) // 是否是读档造成的切换
-        core.playSound('读档');
-    else if (core.hasFlag('__isFlying__')) // 是否是楼传造成的切换
-        core.playSound('飞行器');
-    else
-        core.playSound('上下楼');
-}
+  // 播放换层音效
+  if (core.hasFlag("__fromLoad__"))
+    // 是否是读档造成的切换
+    core.playSound("读档");
+  else if (core.hasFlag("__isFlying__"))
+    // 是否是楼传造成的切换
+    core.playSound("飞行器");
+  else core.playSound("上下楼");
+};
 
 events.prototype._changeFloor_changing = function (info, callback) {
-    this.changingFloor(info.floorId, info.heroLoc);
-    // 回归视角
-    var __lockViewport__ = flags.__lockViewport__;
-    core.setFlag('__lockViewport__', null);
-    core.drawHero();
-    core.setFlag('__lockViewport__', __lockViewport__);
+  this.changingFloor(info.floorId, info.heroLoc);
+  // 回归视角
+  var __lockViewport__ = flags.__lockViewport__;
+  core.setFlag("__lockViewport__", null);
+  core.drawHero();
+  core.setFlag("__lockViewport__", __lockViewport__);
 
-    if (info.time == 0)
-        this._changeFloor_afterChange(info, callback);
-    else
-        core.hideWithAnimate(core.dom.floorMsgGroup, info.time / 4, function () {
-            core.events._changeFloor_afterChange(info, callback);
-        });
-}
+  if (info.time == 0) this._changeFloor_afterChange(info, callback);
+  else
+    core.hideWithAnimate(core.dom.floorMsgGroup, info.time / 4, function () {
+      core.events._changeFloor_afterChange(info, callback);
+    });
+};
 
 events.prototype._changeFloor_afterChange = function (info, callback) {
-    if (!info.locked) core.unlockControl();
-    core.status.replay.animate = false;
-    core.events.afterChangeFloor(info.floorId);
+  if (!info.locked) core.unlockControl();
+  core.status.replay.animate = false;
+  core.events.afterChangeFloor(info.floorId);
 
-    if (callback) callback();
-}
+  if (callback) callback();
+};
 
 events.prototype.changingFloor = function (floorId, heroLoc) {
-    this.eventdata.changingFloor(floorId, heroLoc);
-}
+  this.eventdata.changingFloor(floorId, heroLoc);
+};
 
 ////// 转换楼层结束的事件 //////
 events.prototype.afterChangeFloor = function (floorId) {
-    if (main.mode != 'play') return;
-    return this.eventdata.afterChangeFloor(floorId);
-}
+  if (main.mode != "play") return;
+  return this.eventdata.afterChangeFloor(floorId);
+};
 
 ////// 是否到达过某个楼层 //////
 events.prototype.hasVisitedFloor = function (floorId) {
-    if (!core.hasFlag("__visited__")) core.setFlag("__visited__", {});
-    return core.getFlag("__visited__")[floorId] || false;
-}
+  if (!core.hasFlag("__visited__")) core.setFlag("__visited__", {});
+  return core.getFlag("__visited__")[floorId] || false;
+};
 
 ////// 到达某楼层 //////
 events.prototype.visitFloor = function (floorId) {
-    if (!core.hasFlag("__visited__")) core.setFlag("__visited__", {});
-    core.getFlag("__visited__")[floorId] = true;
-}
+  if (!core.hasFlag("__visited__")) core.setFlag("__visited__", {});
+  core.getFlag("__visited__")[floorId] = true;
+};
 
 events.prototype._sys_pushBox = function (data, callback) {
-    this.pushBox(data);
-    if (callback) callback();
-}
+  this.pushBox(data);
+  if (callback) callback();
+};
 
 ////// 推箱子 //////
 events.prototype.pushBox = function (data) {
-    if (data.event.id != 'box' && data.event.id != 'boxed') return;
+  if (data.event.id != "box" && data.event.id != "boxed") return;
 
-    // 判断还能否前进,看看是否存在事件
-    var direction = core.getHeroLoc('direction'),
-        nx = data.x + core.utils.scan[direction].x, ny = data.y + core.utils.scan[direction].y;
+  // 判断还能否前进,看看是否存在事件
+  var direction = core.getHeroLoc("direction"),
+    nx = data.x + core.utils.scan[direction].x,
+    ny = data.y + core.utils.scan[direction].y;
 
-    // 检测能否推上去
-    if (!core.canMoveHero()) return;
-    var canGoDeadZone = core.flags.canGoDeadZone;
-    core.flags.canGoDeadZone = true;
-    if (!core.canMoveHero(data.x, data.y, direction)) {
-        core.flags.canGoDeadZone = canGoDeadZone;
-        return;
-    }
+  // 检测能否推上去
+  if (!core.canMoveHero()) return;
+  var canGoDeadZone = core.flags.canGoDeadZone;
+  core.flags.canGoDeadZone = true;
+  if (!core.canMoveHero(data.x, data.y, direction)) {
     core.flags.canGoDeadZone = canGoDeadZone;
+    return;
+  }
+  core.flags.canGoDeadZone = canGoDeadZone;
 
-    var nextId = core.getBlockId(nx, ny);
-    if (nextId != null && nextId != 'flower') return;
+  var nextId = core.getBlockId(nx, ny);
+  if (nextId != null && nextId != "flower") return;
 
-    core.setBlock(nextId == null ? 'box' : 'boxed', nx, ny);
+  core.setBlock(nextId == null ? "box" : "boxed", nx, ny);
 
-    if (data.event.id == 'box')
-        core.removeBlock(data.x, data.y);
-    else
-        core.setBlock('flower', data.x, data.y);
-    // 勇士前进一格,然后触发推箱子后事件
-    core.insertAction([
-        { "type": "moveAction" },
-        { "type": "function", "function": "function() { core.afterPushBox(); }" }
-    ]);
-}
+  if (data.event.id == "box") core.removeBlock(data.x, data.y);
+  else core.setBlock("flower", data.x, data.y);
+  // 勇士前进一格,然后触发推箱子后事件
+  core.insertAction([
+    { type: "moveAction" },
+    { type: "function", function: "function() { core.afterPushBox(); }" },
+  ]);
+};
 
 ////// 推箱子后的事件 //////
 events.prototype.afterPushBox = function () {
-    return this.eventdata.afterPushBox();
-}
+  return this.eventdata.afterPushBox();
+};
 
 events.prototype._sys_ski = function (data, callback) {
-    core.insertAction(["V2.6后,请将滑冰放在背景层!"], data.x, data.y);
-    if (callback) callback();
-}
+  core.insertAction(["V2.6后,请将滑冰放在背景层!"], data.x, data.y);
+  if (callback) callback();
+};
 
 /// 当前是否在冰上
 events.prototype.onSki = function (number) {
-    if (number == null) number = core.getBgNumber();
-    var block = core.getBlockByNumber(number);
-    return block && block.event && block.event.trigger == 'ski';
-}
+  if (number == null) number = core.getBgNumber();
+  var block = core.getBlockByNumber(number);
+  return block && block.event && block.event.trigger == "ski";
+};
 
 events.prototype._sys_action = function (data, callback) {
-    var ev = core.clone(data.event.data), ex = data.x, ey = data.y;
-    // 检查是否需要改变朝向
-    if (ex == core.nextX() && ey == core.nextY()) {
-        var dir = core.turnDirection(":back");
-        var id = data.event.id, toId = (data.event.faceIds || {})[dir];
-        if (toId && id != toId) {
-            var number = core.getNumberById(toId);
-            if (number > 0)
-                core.setBlock(number, ex, ey);
-        }
+  var ev = core.clone(data.event.data),
+    ex = data.x,
+    ey = data.y;
+  // 检查是否需要改变朝向
+  if (ex == core.nextX() && ey == core.nextY()) {
+    var dir = core.turnDirection(":back");
+    var id = data.event.id,
+      toId = (data.event.faceIds || {})[dir];
+    if (toId && id != toId) {
+      var number = core.getNumberById(toId);
+      if (number > 0) core.setBlock(number, ex, ey);
     }
-    this.insertAction(ev, ex, ey, callback);
-}
+  }
+  this.insertAction(ev, ex, ey, callback);
+};
 
 events.prototype._sys_custom = function (data, callback) {
-    core.insertAction(["请使用\r[yellow]core.registerSystemEvent('custom', func)\r来处理自己添加的系统触发器!"],
-        data.x, data.y, callback);
-}
+  core.insertAction(
+    [
+      "请使用\r[yellow]core.registerSystemEvent('custom', func)\r来处理自己添加的系统触发器!",
+    ],
+    data.x,
+    data.y,
+    callback
+  );
+};
 
 // ------ 自定义事件的处理 ------ //
 
@@ -933,2856 +1044,3552 @@ events.prototype._sys_custom = function (data, callback) {
 // type为事件名,func为事件的处理函数,可接受(data, x, y, prefix)参数
 // data为事件内容,x和y为当前点坐标(可为null),prefix为当前点前缀
 events.prototype.registerEvent = function (type, func) {
-    this.actions[type] = func;
-}
+  this.actions[type] = func;
+};
 
 ////// 注销一个自定义事件
 events.prototype.unregisterEvent = function (type) {
-    delete this.actions[type];
-}
+  delete this.actions[type];
+};
 
 ////// 执行一个自定义事件
 events.prototype.doEvent = function (data, x, y, prefix) {
-    var type = data.type;
-    if (this.actions[type]) {
-        try {
-            return core.doFunc(this.actions[type], this, data, x, y, prefix);
-        }
-        catch (e) {
-            console.error(e);
-            console.error("ERROR in actions[" + type + "]");
-        }
+  var type = data.type;
+  if (this.actions[type]) {
+    try {
+      return core.doFunc(this.actions[type], this, data, x, y, prefix);
+    } catch (e) {
+      console.error(e);
+      console.error("ERROR in actions[" + type + "]");
     }
-    if (this["_action_" + type]) return this["_action_" + type](data, x, y, prefix);
-    core.insertAction("未知的自定义事件: " + type + "!");
-    core.doAction();
-}
+  }
+  if (this["_action_" + type])
+    return this["_action_" + type](data, x, y, prefix);
+  core.insertAction("未知的自定义事件: " + type + "!");
+  core.doAction();
+};
 
 events.prototype.setEvents = function (list, x, y, callback) {
-    var data = core.status.event.data || {};
-    if (list) {
-        var l = core.clone(list);
-        if (!(l instanceof Array)) l = [l];
-        l.push({ "type": "_label" });
-        data.list = [{ todo: l, total: core.clone(l), condition: "false" }];
-        // 结束所有正在执行的自动事件
-        if (list.length == 0) {
-            core.status.autoEvents.forEach(function (autoEvent) {
-                core.autoEventExecuting(autoEvent.symbol, false);
-            });
-        }
+  var data = core.status.event.data || {};
+  if (list) {
+    var l = core.clone(list);
+    if (!(l instanceof Array)) l = [l];
+    l.push({ type: "_label" });
+    data.list = [{ todo: l, total: core.clone(l), condition: "false" }];
+    // 结束所有正在执行的自动事件
+    if (list.length == 0) {
+      core.status.autoEvents.forEach(function (autoEvent) {
+        core.autoEventExecuting(autoEvent.symbol, false);
+      });
     }
-    if (x != null) data.x = x;
-    if (y != null) data.y = y;
-    if (callback) data.callback = callback;
-    if (!data.appendingEvents) data.appendingEvents = [];
-    if (!data.locStack) data.locStack = [];
-    core.status.event.id = 'action';
-    core.status.event.data = data;
-}
+  }
+  if (x != null) data.x = x;
+  if (y != null) data.y = y;
+  if (callback) data.callback = callback;
+  if (!data.appendingEvents) data.appendingEvents = [];
+  if (!data.locStack) data.locStack = [];
+  core.status.event.id = "action";
+  core.status.event.data = data;
+};
 
 ////// 开始执行一系列自定义事件 //////
 events.prototype.startEvents = function (list, x, y, callback) {
-    if (!list) return;
-    if (!(list instanceof Array)) {
-        list = [list];
-    }
-    this.setEvents(list, x, y, callback);
-    // 停止勇士
-    core.waitHeroToStop(function () {
-        core.lockControl();
-        core.doAction();
-    });
-}
+  if (!list) return;
+  if (!(list instanceof Array)) {
+    list = [list];
+  }
+  this.setEvents(list, x, y, callback);
+  // 停止勇士
+  core.waitHeroToStop(function () {
+    core.lockControl();
+    core.doAction();
+  });
+};
 
 ////// 执行当前自定义事件列表中的下一个事件 //////
 events.prototype.doAction = function () {
-    // 清空boxAnimate和UI层
-    clearInterval(core.status.event.interval);
-    clearTimeout(core.status.event.interval);
-    clearInterval(core.status.event.animateUI);
-    core.status.event.interval = null;
-    delete core.status.event.aniamteUI;
-    if (core.status.gameOver || core.status.replay.failed) return;
-    // 判定是否执行完毕
-    if (this._doAction_finishEvents()) return;
-    core.clearUI();
-    var floorId = core.status.event.data.floorId || core.status.floorId;
-    // 当前点坐标和前缀
-    var x = core.status.event.data.x, y = core.status.event.data.y;
-    var prefix = [floorId || ":f", x != null ? x : "x", y != null ? y : "y"].join("@");
-    var current = core.status.event.data.list[0];
-    if (this._popEvents(current, prefix)) return;
-    // 当前要执行的事件
-    var data = current.todo.shift();
-    core.status.event.data.current = data;
-    if (typeof data == "string")
-        data = { "type": "text", "text": data };
-    // 该事件块已经被禁用
-    if (data._disabled) return core.doAction();
-    data.floorId = data.floorId || floorId;
-    core.status.event.data.type = data.type;
-    this.doEvent(data, x, y, prefix);
-    return;
-}
+  // 清空boxAnimate和UI层
+  clearInterval(core.status.event.interval);
+  clearTimeout(core.status.event.interval);
+  clearInterval(core.status.event.animateUI);
+  core.status.event.interval = null;
+  delete core.status.event.aniamteUI;
+  if (core.status.gameOver || core.status.replay.failed) return;
+  // 判定是否执行完毕
+  if (this._doAction_finishEvents()) return;
+  core.clearUI();
+  var floorId = core.status.event.data.floorId || core.status.floorId;
+  // 当前点坐标和前缀
+  var x = core.status.event.data.x,
+    y = core.status.event.data.y;
+  var prefix = [floorId || ":f", x != null ? x : "x", y != null ? y : "y"].join(
+    "@"
+  );
+  var current = core.status.event.data.list[0];
+  if (this._popEvents(current, prefix)) return;
+  // 当前要执行的事件
+  var data = current.todo.shift();
+  core.status.event.data.current = data;
+  if (typeof data == "string") data = { type: "text", text: data };
+  // 该事件块已经被禁用
+  if (data._disabled) return core.doAction();
+  data.floorId = data.floorId || floorId;
+  core.status.event.data.type = data.type;
+  this.doEvent(data, x, y, prefix);
+  return;
+};
 
 events.prototype._doAction_finishEvents = function () {
-    if (core.status.event.id != 'action') return true;
-    // 事件处理完毕
-    if (core.status.event.data.list.length == 0) {
-        // 检测并执行延迟自动事件
-        if (core.status.event.data.appendingEvents.length > 0) {
-            this.setEvents(core.status.event.data.appendingEvents.shift());
-            return false;
-        }
-        var callback = core.status.event.data.callback;
-        core.ui.closePanel();
-        if (callback) callback();
-        core.replay();
-        return true;
+  if (core.status.event.id != "action") return true;
+  // 事件处理完毕
+  if (core.status.event.data.list.length == 0) {
+    // 检测并执行延迟自动事件
+    if (core.status.event.data.appendingEvents.length > 0) {
+      this.setEvents(core.status.event.data.appendingEvents.shift());
+      return false;
     }
-    return false;
-}
+    var callback = core.status.event.data.callback;
+    core.ui.closePanel();
+    if (callback) callback();
+    core.replay();
+    return true;
+  }
+  return false;
+};
 
 events.prototype._popEvents = function (current, prefix) {
-    if (current.todo.length == 0) { // current list is empty
-        if (core.calValue(current.condition, prefix)) { // check condition
-            current.todo = core.clone(current.total);
-        }
-        else {
-            core.status.event.data.list.shift(); // remove stack
-        }
-        core.doAction();
-        return true;
+  if (current.todo.length == 0) {
+    // current list is empty
+    if (core.calValue(current.condition, prefix)) {
+      // check condition
+      current.todo = core.clone(current.total);
+    } else {
+      core.status.event.data.list.shift(); // remove stack
     }
-    return false;
-}
+    core.doAction();
+    return true;
+  }
+  return false;
+};
 
 ////// 往当前事件列表之前或之后添加一个或多个事件 //////
 events.prototype.insertAction = function (action, x, y, callback, addToLast) {
-    if (core.hasFlag("__statistics__")) return;
-    if (core.status.gameOver) return;
-    if (!action) return;
-    core.clearRouteFolding();
+  if (core.hasFlag("__statistics__")) return;
+  if (core.status.gameOver) return;
+  if (!action) return;
+  core.clearRouteFolding();
 
-    action = this.precompile(action);
+  action = this.precompile(action);
 
-    if (core.status.event.id != 'action') {
-        this.startEvents(action, x, y, callback);
-    }
-    else {
-        if (addToLast) {
-            var list = core.status.event.data.list[0].todo;
-            var index = 0;
-            for (var index = 0; index < list.length; index++) {
-                if (list[index].type == '_label') {
-                    list.splice(index, 0, action);
-                    break;
-                }
-            }
+  if (core.status.event.id != "action") {
+    this.startEvents(action, x, y, callback);
+  } else {
+    if (addToLast) {
+      var list = core.status.event.data.list[0].todo;
+      var index = 0;
+      for (var index = 0; index < list.length; index++) {
+        if (list[index].type == "_label") {
+          list.splice(index, 0, action);
+          break;
         }
-        else core.unshift(core.status.event.data.list[0].todo, action);
-        this.setEvents(null, x, y, callback);
-    }
-}
+      }
+    } else core.unshift(core.status.event.data.list[0].todo, action);
+    this.setEvents(null, x, y, callback);
+  }
+};
 
 ////// 往当前事件列表之前或之后添加一个公共事件 //////
-events.prototype.insertCommonEvent = function (name, args, x, y, callback, addToLast) {
-    var commonEvent = this.getCommonEvent(name);
-    if (!commonEvent) {
-        if (callback) callback();
-        return;
-    }
+events.prototype.insertCommonEvent = function (
+  name,
+  args,
+  x,
+  y,
+  callback,
+  addToLast
+) {
+  var commonEvent = this.getCommonEvent(name);
+  if (!commonEvent) {
+    if (callback) callback();
+    return;
+  }
 
-    // 设置参数
-    core.setFlag('arg0', name);
-    if (args instanceof Array) {
-        for (var i = 0; i < args.length; ++i) {
-            try {
-                if (args[i] != null)
-                    core.setFlag('arg' + (i + 1), args[i]);
-            } catch (ee) { console.error(ee) }
-        }
+  // 设置参数
+  core.setFlag("arg0", name);
+  if (args instanceof Array) {
+    for (var i = 0; i < args.length; ++i) {
+      try {
+        if (args[i] != null) core.setFlag("arg" + (i + 1), args[i]);
+      } catch (ee) {
+        console.error(ee);
+      }
     }
+  }
 
-    this.insertAction({ "type": "dowhile", "condition": "false", "data": commonEvent }, x, y, callback, addToLast);
-}
+  this.insertAction(
+    { type: "dowhile", condition: "false", data: commonEvent },
+    x,
+    y,
+    callback,
+    addToLast
+  );
+};
 
 ////// 获得一个公共事件 //////
 events.prototype.getCommonEvent = function (name) {
-    if (!name || typeof name !== 'string') return null;
-    return this.commonEvent[name] || null;
-}
+  if (!name || typeof name !== "string") return null;
+  return this.commonEvent[name] || null;
+};
 
 ////// 恢复一个事件 //////
 events.prototype.recoverEvents = function (data) {
-    if (data) {
-        core.ui.closePanel();
-        core.lockControl();
-        core.status.event.id = 'action';
-        core.status.event.data = data;
-        setTimeout(function () {
-            core.doAction();
-        }, 30);
-        return true;
-    }
-    return false;
-}
+  if (data) {
+    core.ui.closePanel();
+    core.lockControl();
+    core.status.event.id = "action";
+    core.status.event.data = data;
+    setTimeout(function () {
+      core.doAction();
+    }, 30);
+    return true;
+  }
+  return false;
+};
 
 ////// 检测自动事件 //////
 events.prototype.checkAutoEvents = function () {
-    // 只有在无操作或事件流中才能执行自动事件!
-    if (!core.isPlaying() || (core.status.lockControl && core.status.event.id != 'action')) return;
-    if (core.hasFlag('__doNotCheckAutoEvents__')) return;
-    var todo = [], delay = [];
-    core.status.autoEvents.forEach(function (autoEvent) {
-        var symbol = autoEvent.symbol, x = autoEvent.x, y = autoEvent.y, floorId = autoEvent.floorId;
-        // 不在当前楼层 or 已经执行过 or 已被分区 or 正在执行中
-        if (autoEvent.currentFloor && floorId != core.status.floorId) return;
-        if (!autoEvent.multiExecute && core.autoEventExecuted(symbol)) return;
-        if ((flags.__removed__ || []).indexOf(floorId) >= 0) return;
-        if (core.autoEventExecuting(symbol)) return;
-        var prefix = floorId + "@" + x + "@" + y;
-        try {
-            if (!core.calValue(autoEvent.condition, prefix)) return;
-        } catch (e) {
-            return;
-        }
-
-        core.autoEventExecuting(symbol, true);
-        core.autoEventExecuted(symbol, true);
-
-        var event;
-        if (x == null && y == null) {
-            event = [
-                // 用do-while(0)包一层防止break影响事件流
-                { "type": "dowhile", "condition": "false", "data": autoEvent.data },
-                {
-                    "type": "function", "function":
-                        "function() { core.autoEventExecuting('" + symbol + "', false); }"
-                }
-            ];
-        } else {
-            event = [
-                {
-                    "type": "function", "function":
-                        "function() { core.pushEventLoc(" + x + ", " + y + ", '" + floorId + "' ); }"
-                },
-                // 用do-while(0)包一层防止break影响事件流
-                { "type": "dowhile", "condition": "false", "data": autoEvent.data },
-                {
-                    "type": "function", "function":
-                        "function() { core.popEventLoc(); core.autoEventExecuting('" + symbol + "', false); }"
-                }
-            ];
-        }
-
-        if (autoEvent.delayExecute)
-            delay.push(event);
-        else
-            core.push(todo, event);
-    });
-
-    if (todo.length == 0 && delay.length == 0) return;
-
-    if (core.status.event.id == 'action' || todo.length > 0) {
-        core.insertAction(todo);
-        core.push(core.status.event.data.appendingEvents, delay);
-    } else {
-        core.insertAction(delay[0]);
-        if (delay.length > 0) {
-            core.insertAction(delay.slice(1));
-        }
+  // 只有在无操作或事件流中才能执行自动事件!
+  if (
+    !core.isPlaying() ||
+    (core.status.lockControl && core.status.event.id != "action")
+  )
+    return;
+  if (core.hasFlag("__doNotCheckAutoEvents__")) return;
+  var todo = [],
+    delay = [];
+  core.status.autoEvents.forEach(function (autoEvent) {
+    var symbol = autoEvent.symbol,
+      x = autoEvent.x,
+      y = autoEvent.y,
+      floorId = autoEvent.floorId;
+    // 不在当前楼层 or 已经执行过 or 已被分区 or 正在执行中
+    if (autoEvent.currentFloor && floorId != core.status.floorId) return;
+    if (!autoEvent.multiExecute && core.autoEventExecuted(symbol)) return;
+    if ((flags.__removed__ || []).indexOf(floorId) >= 0) return;
+    if (core.autoEventExecuting(symbol)) return;
+    var prefix = floorId + "@" + x + "@" + y;
+    try {
+      if (!core.calValue(autoEvent.condition, prefix)) return;
+    } catch (e) {
+      return;
     }
 
-}
+    core.autoEventExecuting(symbol, true);
+    core.autoEventExecuted(symbol, true);
+
+    var event;
+    if (x == null && y == null) {
+      event = [
+        // 用do-while(0)包一层防止break影响事件流
+        { type: "dowhile", condition: "false", data: autoEvent.data },
+        {
+          type: "function",
+          function:
+            "function() { core.autoEventExecuting('" + symbol + "', false); }",
+        },
+      ];
+    } else {
+      event = [
+        {
+          type: "function",
+          function:
+            "function() { core.pushEventLoc(" +
+            x +
+            ", " +
+            y +
+            ", '" +
+            floorId +
+            "' ); }",
+        },
+        // 用do-while(0)包一层防止break影响事件流
+        { type: "dowhile", condition: "false", data: autoEvent.data },
+        {
+          type: "function",
+          function:
+            "function() { core.popEventLoc(); core.autoEventExecuting('" +
+            symbol +
+            "', false); }",
+        },
+      ];
+    }
+
+    if (autoEvent.delayExecute) delay.push(event);
+    else core.push(todo, event);
+  });
+
+  if (todo.length == 0 && delay.length == 0) return;
+
+  if (core.status.event.id == "action" || todo.length > 0) {
+    core.insertAction(todo);
+    core.push(core.status.event.data.appendingEvents, delay);
+  } else {
+    core.insertAction(delay[0]);
+    if (delay.length > 0) {
+      core.insertAction(delay.slice(1));
+    }
+  }
+};
 
 events.prototype.autoEventExecuting = function (symbol, value) {
-    var aei = core.getFlag('__aei__', []);
-    if (value == null) return aei.indexOf(symbol) >= 0;
-    else {
-        aei = aei.filter(function (one) { return one != symbol; });
-        if (value) aei.push(symbol);
-        core.setFlag('__aei__', aei);
-    }
-}
+  var aei = core.getFlag("__aei__", []);
+  if (value == null) return aei.indexOf(symbol) >= 0;
+  else {
+    aei = aei.filter(function (one) {
+      return one != symbol;
+    });
+    if (value) aei.push(symbol);
+    core.setFlag("__aei__", aei);
+  }
+};
 
 events.prototype.autoEventExecuted = function (symbol, value) {
-    var aed = core.getFlag('__aed__', []);
-    if (value == null) return aed.indexOf(symbol) >= 0;
-    else {
-        aed = aed.filter(function (one) { return one != symbol; });
-        if (value) aed.push(symbol);
-        core.setFlag('__aed__', aed);
-    }
-}
+  var aed = core.getFlag("__aed__", []);
+  if (value == null) return aed.indexOf(symbol) >= 0;
+  else {
+    aed = aed.filter(function (one) {
+      return one != symbol;
+    });
+    if (value) aed.push(symbol);
+    core.setFlag("__aed__", aed);
+  }
+};
 
 events.prototype.pushEventLoc = function (x, y, floorId) {
-    if (core.status.event.id != 'action') return;
-    core.status.event.data.locStack.push({
-        x: core.status.event.data.x,
-        y: core.status.event.data.y,
-        floorId: core.status.event.data.floorId
-    });
-    core.status.event.data.x = x;
-    core.status.event.data.y = y;
-    core.status.event.data.floorId = floorId;
-}
+  if (core.status.event.id != "action") return;
+  core.status.event.data.locStack.push({
+    x: core.status.event.data.x,
+    y: core.status.event.data.y,
+    floorId: core.status.event.data.floorId,
+  });
+  core.status.event.data.x = x;
+  core.status.event.data.y = y;
+  core.status.event.data.floorId = floorId;
+};
 
 events.prototype.popEventLoc = function () {
-    if (core.status.event.id != 'action') return;
-    var loc = core.status.event.data.locStack.shift();
-    if (loc) {
-        core.status.event.data.x = loc.x;
-        core.status.event.data.y = loc.y;
-        core.status.event.data.floorId = loc.floorId;
-    }
-}
+  if (core.status.event.id != "action") return;
+  var loc = core.status.event.data.locStack.shift();
+  if (loc) {
+    core.status.event.data.x = loc.x;
+    core.status.event.data.y = loc.y;
+    core.status.event.data.floorId = loc.floorId;
+  }
+};
 
 events.prototype.precompile = function (data) {
-    var array = this.__precompile_getArray();
-    if (typeof data == 'string') {
-        return this.__precompile_text(data);
-    }
-    if (data instanceof Array) {
-        for (var i = 0; i < data.length; ++i) {
-            data[i] = this.precompile(data[i]);
-        }
-        return data;
-    }
-    if (data && data.type) {
-        if (this["_precompile_" + data.type]) {
-            data = this["_precompile_" + data.type](data);
-        }
-        if (array.texts.indexOf(data.type) >= 0) {
-            data.text = this.__precompile_text(data.text);
-        }
-        if (array.locs.indexOf(data.type) >= 0) {
-            data.loc = this.__precompile_array(data.loc);
-        }
-        if (array.values.indexOf(data.type) >= 0) {
-            data.value = core.replaceValue(data.value);
-        }
-        if (array.uievents.indexOf(data.type) >= 0) {
-            data.x = core.replaceValue(data.x);
-            data.y = core.replaceValue(data.y);
-            data.width = core.replaceValue(data.width);
-            data.height = core.replaceValue(data.height);
-        }
-        if (data.type in array.others) {
-            array.others[data.type].forEach(function (field) {
-                data[field] = core.replaceValue(data[field]);
-            })
-        }
+  var array = this.__precompile_getArray();
+  if (typeof data == "string") {
+    return this.__precompile_text(data);
+  }
+  if (data instanceof Array) {
+    for (var i = 0; i < data.length; ++i) {
+      data[i] = this.precompile(data[i]);
     }
     return data;
-}
+  }
+  if (data && data.type) {
+    if (this["_precompile_" + data.type]) {
+      data = this["_precompile_" + data.type](data);
+    }
+    if (array.texts.indexOf(data.type) >= 0) {
+      data.text = this.__precompile_text(data.text);
+    }
+    if (array.locs.indexOf(data.type) >= 0) {
+      data.loc = this.__precompile_array(data.loc);
+    }
+    if (array.values.indexOf(data.type) >= 0) {
+      data.value = core.replaceValue(data.value);
+    }
+    if (array.uievents.indexOf(data.type) >= 0) {
+      data.x = core.replaceValue(data.x);
+      data.y = core.replaceValue(data.y);
+      data.width = core.replaceValue(data.width);
+      data.height = core.replaceValue(data.height);
+    }
+    if (data.type in array.others) {
+      array.others[data.type].forEach(function (field) {
+        data[field] = core.replaceValue(data[field]);
+      });
+    }
+  }
+  return data;
+};
 
 events.prototype.__precompile_getArray = function () {
-    var texts = [
-        "text", "autoText", "scrollText", "tip", "textImage", "input", "input2",
-        "choices", "confirm", "fillText", "fillBoldText", "drawTextContent"
-    ];
-    var locs = [
-        "show", "hide", "setBlock", "setBlockOpacity", "showFloorImg", "hideFloorImg", "showBgFgMap",
-        "hideBgFgMap", "setBgFgBlock", "animate", "setViewport", "move", "jumoHero",
-        "changeFloor", "changePos", "showTextImage", "showGif", "openDoor",
-        "closeDoor", "battle", "trigger", "insert", "setEnemyOnPoint", "resetEnemyOnPoint"
-    ];
-    var values = [
-        "setValue", "setEnemy", "setEnemyOnPoint", "setEquip", "setFloor", "setGlobalValue",
-    ];
-    var uievents = [
-        "clearMap", "fillText", "fillBoldText", "fillRect", "strokeRect", "fillEllipse", "strokeEllipse",
-        "fillArc", "strokeArc", "drawIcon", "drawSelector", "drawBackground",
-    ];
-    var others = {
-        "fillEllipse": ["a", "b", "angle"],
-        "strokeEllipse": ["a", "b", "angle"],
-        "fillRect": ["radius", "angle"],
-        "strokeRect": ["radius", "angle"],
-        "fillArc": ["r", "start", "end"],
-        "strokeArc": ["r", "start", "end"],
-        "drawLine": ["x1", "y1", "x2", "y2"],
-        "drawArrow": ["x1", "y1", "x2", "y2"],
-        "drawImage": ["x", "y", "w", "h", "x1", "y1", "w1", "h1", "angle"],
-        "drawTextContent": ["left", "top"],
-    };
-    return {
-        texts: texts,
-        locs: locs,
-        values: values,
-        uievents: uievents,
-        others: others
-    };
-}
+  var texts = [
+    "text",
+    "autoText",
+    "scrollText",
+    "tip",
+    "textImage",
+    "input",
+    "input2",
+    "choices",
+    "confirm",
+    "fillText",
+    "fillBoldText",
+    "drawTextContent",
+  ];
+  var locs = [
+    "show",
+    "hide",
+    "setBlock",
+    "setBlockOpacity",
+    "showFloorImg",
+    "hideFloorImg",
+    "showBgFgMap",
+    "hideBgFgMap",
+    "setBgFgBlock",
+    "animate",
+    "setViewport",
+    "move",
+    "jumoHero",
+    "changeFloor",
+    "changePos",
+    "showTextImage",
+    "showGif",
+    "openDoor",
+    "closeDoor",
+    "battle",
+    "trigger",
+    "insert",
+    "setEnemyOnPoint",
+    "resetEnemyOnPoint",
+  ];
+  var values = [
+    "setValue",
+    "setEnemy",
+    "setEnemyOnPoint",
+    "setEquip",
+    "setFloor",
+    "setGlobalValue",
+  ];
+  var uievents = [
+    "clearMap",
+    "fillText",
+    "fillBoldText",
+    "fillRect",
+    "strokeRect",
+    "fillEllipse",
+    "strokeEllipse",
+    "fillArc",
+    "strokeArc",
+    "drawIcon",
+    "drawSelector",
+    "drawBackground",
+  ];
+  var others = {
+    fillEllipse: ["a", "b", "angle"],
+    strokeEllipse: ["a", "b", "angle"],
+    fillRect: ["radius", "angle"],
+    strokeRect: ["radius", "angle"],
+    fillArc: ["r", "start", "end"],
+    strokeArc: ["r", "start", "end"],
+    drawLine: ["x1", "y1", "x2", "y2"],
+    drawArrow: ["x1", "y1", "x2", "y2"],
+    drawImage: ["x", "y", "w", "h", "x1", "y1", "w1", "h1", "angle"],
+    drawTextContent: ["left", "top"],
+  };
+  return {
+    texts: texts,
+    locs: locs,
+    values: values,
+    uievents: uievents,
+    others: others,
+  };
+};
 
 events.prototype.__precompile_text = function (text) {
-    if (typeof text != 'string') return text;
-    return text.replace(/\${(.*?)}/g, function (word, value) {
-        return "${" + core.replaceValue(value) + "}";
-    });
-}
+  if (typeof text != "string") return text;
+  return text.replace(/\${(.*?)}/g, function (word, value) {
+    return "${" + core.replaceValue(value) + "}";
+  });
+};
 
 events.prototype.__precompile_array = function (value) {
-    if (typeof value == 'string') {
-        value = core.replaceValue(value);
-        return value;
-    }
-    if (value instanceof Array) {
-        for (var i = 0; i < value.length; ++i) {
-            value[i] = this.__precompile_array(value[i]);
-        }
-    }
+  if (typeof value == "string") {
+    value = core.replaceValue(value);
     return value;
-}
+  }
+  if (value instanceof Array) {
+    for (var i = 0; i < value.length; ++i) {
+      value[i] = this.__precompile_array(value[i]);
+    }
+  }
+  return value;
+};
 
 // ------ 样板提供的的自定义事件 ------ //
 
 events.prototype.__action_checkReplaying = function () {
-    if (core.isReplaying()) {
-        core.doAction();
-        return true;
-    }
-    return false;
-}
+  if (core.isReplaying()) {
+    core.doAction();
+    return true;
+  }
+  return false;
+};
 
 events.prototype.__action_getLoc = function (loc, x, y, prefix) {
-    if (loc) {
-        x = core.calValue(loc[0], prefix);
-        y = core.calValue(loc[1], prefix);
-    }
-    return [x, y];
-}
+  if (loc) {
+    x = core.calValue(loc[0], prefix);
+    y = core.calValue(loc[1], prefix);
+  }
+  return [x, y];
+};
 
 events.prototype.__action_getHeroLoc = function (loc, prefix) {
-    return this.__action_getLoc(loc, core.getHeroLoc('x'), core.getHeroLoc('y'), prefix);
-}
+  return this.__action_getLoc(
+    loc,
+    core.getHeroLoc("x"),
+    core.getHeroLoc("y"),
+    prefix
+  );
+};
 
 events.prototype.__action_getLoc2D = function (loc, x, y, prefix) {
-    if (!(loc && loc[0] instanceof Array))
-        loc = [this.__action_getLoc(loc, x, y, prefix)];
-    return loc;
-}
+  if (!(loc && loc[0] instanceof Array))
+    loc = [this.__action_getLoc(loc, x, y, prefix)];
+  return loc;
+};
 
 events.prototype.__action_doAsyncFunc = function (isAsync, func) {
-    var parameters = Array.prototype.slice.call(arguments, 2);
-    if (isAsync) {
-        func.apply(this, parameters);
-        core.doAction();
-    }
-    else {
-        func.apply(this, parameters.concat(core.doAction));
-    }
-}
+  var parameters = Array.prototype.slice.call(arguments, 2);
+  if (isAsync) {
+    func.apply(this, parameters);
+    core.doAction();
+  } else {
+    func.apply(this, parameters.concat(core.doAction));
+  }
+};
 
 events.prototype._action_text = function (data, x, y, prefix) {
-    if (this.__action_checkReplaying()) return;
-    data.text = core.replaceText(data.text, prefix);
-    var ctx = data.code ? ('__text__' + data.code) : null;;
-    data.ctx = ctx;
-    if (core.getContextByName(ctx) && !data.showAll) {
-        core.ui._animateUI('hide', ctx, function () {
-            core.ui.drawTextBox(data.text, data);
-            core.ui._animateUI('show', ctx, function () {
-                if (data.async) core.doAction();
-            });
-        });
-        return;
-    }
-    core.ui.drawTextBox(data.text, data);
-    if (!data.showAll) {
-        core.ui._animateUI('show', ctx, function () {
-            if (data.async) core.doAction();
-        });
-    }
-}
+  if (this.__action_checkReplaying()) return;
+  data.text = core.replaceText(data.text, prefix);
+  var ctx = data.code ? "__text__" + data.code : null;
+  data.ctx = ctx;
+  if (core.getContextByName(ctx) && !data.showAll) {
+    core.ui._animateUI("hide", ctx, function () {
+      core.ui.drawTextBox(data.text, data);
+      core.ui._animateUI("show", ctx, function () {
+        if (data.async) core.doAction();
+      });
+    });
+    return;
+  }
+  core.ui.drawTextBox(data.text, data);
+  if (!data.showAll) {
+    core.ui._animateUI("show", ctx, function () {
+      if (data.async) core.doAction();
+    });
+  }
+};
 
 events.prototype._action_moveTextBox = function (data, x, y, prefix) {
-    if (this.__action_checkReplaying()) return;
-    this.__action_doAsyncFunc(data.async, core.moveTextBox,
-        data.code, this.__action_getLoc(data.loc, x, y, prefix), data.relative, data.moveMode, data.time);
-}
+  if (this.__action_checkReplaying()) return;
+  this.__action_doAsyncFunc(
+    data.async,
+    core.moveTextBox,
+    data.code,
+    this.__action_getLoc(data.loc, x, y, prefix),
+    data.relative,
+    data.moveMode,
+    data.time
+  );
+};
 
 events.prototype._action_clearTextBox = function (data, x, y, prefix) {
-    if (this.__action_checkReplaying()) return;
-    core.clearTextBox(data.code, core.doAction);
-}
+  if (this.__action_checkReplaying()) return;
+  core.clearTextBox(data.code, core.doAction);
+};
 
 events.prototype._action_autoText = function (data, x, y, prefix) {
-    if (this.__action_checkReplaying()) return;
-    data.text = core.replaceText(data.text, prefix);
-    core.ui.drawTextBox(data.text);
-    setTimeout(core.doAction, data.time || 3000);
-}
+  if (this.__action_checkReplaying()) return;
+  data.text = core.replaceText(data.text, prefix);
+  core.ui.drawTextBox(data.text);
+  setTimeout(core.doAction, data.time || 3000);
+};
 
 events.prototype._action_scrollText = function (data, x, y, prefix) {
-    if (this.__action_checkReplaying()) return;
-    data.text = core.replaceText(data.text, prefix);
-    this.__action_doAsyncFunc(data.async, core.drawScrollText, data.text, data.time || 5000, data.lineHeight || 1.4);
-}
+  if (this.__action_checkReplaying()) return;
+  data.text = core.replaceText(data.text, prefix);
+  this.__action_doAsyncFunc(
+    data.async,
+    core.drawScrollText,
+    data.text,
+    data.time || 5000,
+    data.lineHeight || 1.4
+  );
+};
 
 events.prototype._action_comment = function (data, x, y, prefix) {
-    core.doAction();
-}
+  core.doAction();
+};
 
 events.prototype._action__label = function (data, x, y, prefix) {
-    core.doAction();
-}
+  core.doAction();
+};
 
 events.prototype._action_setText = function (data, x, y, prefix) {
-    this.setTextAttribute(data);
-    core.doAction();
-}
+  this.setTextAttribute(data);
+  core.doAction();
+};
 
 events.prototype._action_tip = function (data, x, y, prefix) {
-    core.drawTip(core.replaceText(data.text, prefix), data.icon);
-    core.doAction();
-}
+  core.drawTip(core.replaceText(data.text, prefix), data.icon);
+  core.doAction();
+};
 
 events.prototype._action_show = function (data, x, y, prefix) {
-    data.loc = this.__action_getLoc2D(data.loc, x, y, prefix);
-    if (data.time > 0 && data.floorId == core.status.floorId) {
-        this.__action_doAsyncFunc(data.async, core.animateBlock, data.loc, 'show', data.time);
-    }
-    else {
-        data.loc.forEach(function (t) {
-            core.showBlock(t[0], t[1], data.floorId);
-        });
-        core.doAction();
-    }
-}
+  data.loc = this.__action_getLoc2D(data.loc, x, y, prefix);
+  if (data.time > 0 && data.floorId == core.status.floorId) {
+    this.__action_doAsyncFunc(
+      data.async,
+      core.animateBlock,
+      data.loc,
+      "show",
+      data.time
+    );
+  } else {
+    data.loc.forEach(function (t) {
+      core.showBlock(t[0], t[1], data.floorId);
+    });
+    core.doAction();
+  }
+};
 
 events.prototype._action_hide = function (data, x, y, prefix) {
-    data.loc = this.__action_getLoc2D(data.loc, x, y, prefix);
-    if (data.time > 0 && data.floorId == core.status.floorId) {
-        this.__action_doAsyncFunc(data.async, core.animateBlock, data.loc, data.remove ? 'remove' : 'hide', data.time);
-    }
-    else {
-        data.loc.forEach(function (t) {
-            if (data.remove) core.removeBlock(t[0], t[1], data.floorId);
-            else core.hideBlock(t[0], t[1], data.floorId);
-        });
-        core.doAction();
-    }
-}
+  data.loc = this.__action_getLoc2D(data.loc, x, y, prefix);
+  if (data.time > 0 && data.floorId == core.status.floorId) {
+    this.__action_doAsyncFunc(
+      data.async,
+      core.animateBlock,
+      data.loc,
+      data.remove ? "remove" : "hide",
+      data.time
+    );
+  } else {
+    data.loc.forEach(function (t) {
+      if (data.remove) core.removeBlock(t[0], t[1], data.floorId);
+      else core.hideBlock(t[0], t[1], data.floorId);
+    });
+    core.doAction();
+  }
+};
 
 events.prototype._action_setBlock = function (data, x, y, prefix) {
-    data.loc = this.__action_getLoc2D(data.loc, x, y, prefix);
-    data.time = data.time || 0;
-    data.floorId = data.floorId || core.status.floorId;
-    if (data.time > 0 && data.floorId == core.status.floorId) {
-        this.__action_doAsyncFunc(data.async, core.animateSetBlocks, data.number, data.loc, data.floorId, data.time);
-    } else {
-        data.loc.forEach(function (loc) {
-            core.setBlock(data.number, loc[0], loc[1], data.floorId);
-        });
-        core.doAction();
-    }
-}
+  data.loc = this.__action_getLoc2D(data.loc, x, y, prefix);
+  data.time = data.time || 0;
+  data.floorId = data.floorId || core.status.floorId;
+  if (data.time > 0 && data.floorId == core.status.floorId) {
+    this.__action_doAsyncFunc(
+      data.async,
+      core.animateSetBlocks,
+      data.number,
+      data.loc,
+      data.floorId,
+      data.time
+    );
+  } else {
+    data.loc.forEach(function (loc) {
+      core.setBlock(data.number, loc[0], loc[1], data.floorId);
+    });
+    core.doAction();
+  }
+};
 
 events.prototype._action_setBlockOpacity = function (data, x, y, prefix) {
-    data.loc = this.__action_getLoc2D(data.loc, x, y, prefix);
-    if (data.time > 0 && data.floorId == core.status.floorId) {
-        this.__action_doAsyncFunc(data.async, core.animateBlock, data.loc, data.opacity, data.time);
-    }
-    else {
-        data.loc.forEach(function (t) {
-            core.setBlockOpacity(data.opacity, t[0], t[1], data.floorId);
-        });
-        core.doAction();
-    }
-}
+  data.loc = this.__action_getLoc2D(data.loc, x, y, prefix);
+  if (data.time > 0 && data.floorId == core.status.floorId) {
+    this.__action_doAsyncFunc(
+      data.async,
+      core.animateBlock,
+      data.loc,
+      data.opacity,
+      data.time
+    );
+  } else {
+    data.loc.forEach(function (t) {
+      core.setBlockOpacity(data.opacity, t[0], t[1], data.floorId);
+    });
+    core.doAction();
+  }
+};
 
 events.prototype._action_setBlockFilter = function (data, x, y, prefix) {
-    data.loc = this.__action_getLoc2D(data.loc, x, y, prefix);
-    data.loc.forEach(function (t) {
-        core.setBlockFilter(data, t[0], t[1], data.floorId);
-    });
-    core.doAction();
-}
+  data.loc = this.__action_getLoc2D(data.loc, x, y, prefix);
+  data.loc.forEach(function (t) {
+    core.setBlockFilter(data, t[0], t[1], data.floorId);
+  });
+  core.doAction();
+};
 
 events.prototype._action_turnBlock = function (data, x, y, prefix) {
-    data.loc = this.__action_getLoc2D(data.loc, x, y, prefix);
-    data.loc.forEach(function (t) {
-        core.turnBlock(data.direction, t[0], t[1], data.floorId);
-    });
-    core.doAction();
-}
+  data.loc = this.__action_getLoc2D(data.loc, x, y, prefix);
+  data.loc.forEach(function (t) {
+    core.turnBlock(data.direction, t[0], t[1], data.floorId);
+  });
+  core.doAction();
+};
 
 events.prototype._action_showFloorImg = function (data, x, y, prefix) {
-    core.maps.showFloorImage(this.__action_getLoc2D(data.loc, x, y, prefix), data.floorId, core.doAction);
-}
+  core.maps.showFloorImage(
+    this.__action_getLoc2D(data.loc, x, y, prefix),
+    data.floorId,
+    core.doAction
+  );
+};
 
 events.prototype._action_hideFloorImg = function (data, x, y, prefix) {
-    core.maps.hideFloorImage(this.__action_getLoc2D(data.loc, x, y, prefix), data.floorId, core.doAction);
-}
+  core.maps.hideFloorImage(
+    this.__action_getLoc2D(data.loc, x, y, prefix),
+    data.floorId,
+    core.doAction
+  );
+};
 
 events.prototype._action_showBgFgMap = function (data, x, y, prefix) {
-    core.maps.showBgFgMap(data.name, this.__action_getLoc2D(data.loc, x, y, prefix), data.floorId, core.doAction)
-}
+  core.maps.showBgFgMap(
+    data.name,
+    this.__action_getLoc2D(data.loc, x, y, prefix),
+    data.floorId,
+    core.doAction
+  );
+};
 
 events.prototype._action_hideBgFgMap = function (data, x, y, prefix) {
-    core.maps.hideBgFgMap(data.name, this.__action_getLoc2D(data.loc, x, y, prefix), data.floorId, core.doAction);
-}
+  core.maps.hideBgFgMap(
+    data.name,
+    this.__action_getLoc2D(data.loc, x, y, prefix),
+    data.floorId,
+    core.doAction
+  );
+};
 
 events.prototype._action_setBgFgBlock = function (data, x, y, prefix) {
-    data.loc = this.__action_getLoc2D(data.loc, x, y, prefix);
-    data.loc.forEach(function (t) {
-        core.setBgFgBlock(data.name, data.number, t[0], t[1], data.floorId);
-    });
-    core.doAction();
-}
+  data.loc = this.__action_getLoc2D(data.loc, x, y, prefix);
+  data.loc.forEach(function (t) {
+    core.setBgFgBlock(data.name, data.number, t[0], t[1], data.floorId);
+  });
+  core.doAction();
+};
 
 events.prototype._action_follow = function (data, x, y, prefix) {
-    this.follow(data.name);
-    core.doAction();
-}
+  this.follow(data.name);
+  core.doAction();
+};
 
 events.prototype._action_unfollow = function (data, x, y, prefix) {
-    this.unfollow(data.name);
-    core.doAction();
-}
+  this.unfollow(data.name);
+  core.doAction();
+};
 
 events.prototype._action_animate = function (data, x, y, prefix) {
-    if (data.loc == 'hero') {
-        this.__action_doAsyncFunc(data.async, core.drawHeroAnimate, data.name);
-    } else {
-        data.loc = this.__action_getLoc(data.loc, x, y, prefix);
-        this.__action_doAsyncFunc(data.async, core.drawAnimate, data.name, data.loc[0], data.loc[1], data.alignWindow);
-    }
-}
+  if (data.loc == "hero") {
+    this.__action_doAsyncFunc(data.async, core.drawHeroAnimate, data.name);
+  } else {
+    data.loc = this.__action_getLoc(data.loc, x, y, prefix);
+    this.__action_doAsyncFunc(
+      data.async,
+      core.drawAnimate,
+      data.name,
+      data.loc[0],
+      data.loc[1],
+      data.alignWindow
+    );
+  }
+};
 
 events.prototype._action_stopAnimate = function (data, x, y, prefix) {
-    core.stopAnimate(null, data.doCallback);
-    core.doAction();
-}
+  core.stopAnimate(data.id, data.doCallback);
+  core.doAction();
+};
 
 events.prototype._action_setViewport = function (data, x, y, prefix) {
-    if (data.dxy != null) {
-        data.loc = [core.bigmap.offsetX / 32 + (core.calValue(data.dxy[0], prefix) || 0), core.bigmap.offsetY / 32 + (core.calValue(data.dxy[1], prefix) || 0)];
-    } else if (data.loc == null) {
-        data.loc = [core.getHeroLoc('x') - core._HALF_WIDTH_, core.getHeroLoc('y') - core._HALF_HEIGHT_];
-    } else {
-        data.loc = this.__action_getLoc(data.loc, x, y, prefix);
-    }
-    this.__action_doAsyncFunc(data.async, core.moveViewport, data.loc[0], data.loc[1], data.moveMode, data.time);
-}
+  if (data.dxy != null) {
+    data.loc = [
+      core.bigmap.offsetX / 32 + (core.calValue(data.dxy[0], prefix) || 0),
+      core.bigmap.offsetY / 32 + (core.calValue(data.dxy[1], prefix) || 0),
+    ];
+  } else if (data.loc == null) {
+    data.loc = [
+      core.getHeroLoc("x") - core._HALF_WIDTH_,
+      core.getHeroLoc("y") - core._HALF_HEIGHT_,
+    ];
+  } else {
+    data.loc = this.__action_getLoc(data.loc, x, y, prefix);
+  }
+  this.__action_doAsyncFunc(
+    data.async,
+    core.moveViewport,
+    data.loc[0],
+    data.loc[1],
+    data.moveMode,
+    data.time
+  );
+};
 
 events.prototype._action_lockViewport = function (data, x, y, prefix) {
-    core.setFlag('__lockViewport__', data.lock || null);
-    core.doAction();
-}
+  core.setFlag("__lockViewport__", data.lock || null);
+  core.doAction();
+};
 
 events.prototype._action_move = function (data, x, y, prefix) {
-    var loc = this.__action_getLoc(data.loc, x, y, prefix);
-    this.__action_doAsyncFunc(data.async, core.moveBlock, loc[0], loc[1], data.steps, data.time, data.keep);
-}
+  var loc = this.__action_getLoc(data.loc, x, y, prefix);
+  this.__action_doAsyncFunc(
+    data.async,
+    core.moveBlock,
+    loc[0],
+    loc[1],
+    data.steps,
+    data.time,
+    data.keep
+  );
+};
 
 events.prototype._action_moveAction = function (data, x, y, prefix) {
-    // 检查下一个点是否可通行
-    if (core.canMoveHero()) {
-        var nx = core.nextX(), ny = core.nextY();
-        // 检查noPass决定是撞击还是移动
-        if (core.noPass(nx, ny)) {
-            core.insertAction([
-                { "type": "trigger", "loc": [nx, ny] }
-            ]);
-        } else {
-            // 先移动一格,然后尝试触发事件
-            core.insertAction([
-                { "type": "moveHero", "steps": ["forward"] },
-                { "type": "function", "function": "function() { core.moveOneStep(core.doAction); }", "async": true },
-                { "type": "_label" },
-            ]);
-        }
+  // 检查下一个点是否可通行
+  if (core.canMoveHero()) {
+    var nx = core.nextX(),
+      ny = core.nextY();
+    // 检查noPass决定是撞击还是移动
+    if (core.noPass(nx, ny)) {
+      core.insertAction([{ type: "trigger", loc: [nx, ny] }]);
+    } else {
+      // 先移动一格,然后尝试触发事件
+      core.insertAction([
+        { type: "moveHero", steps: ["forward"] },
+        {
+          type: "function",
+          function: "function() { core.moveOneStep(core.doAction); }",
+          async: true,
+        },
+        { type: "_label" },
+      ]);
     }
-    core.doAction();
-}
+  }
+  core.doAction();
+};
 
 events.prototype._action_moveHero = function (data, x, y, prefix) {
-    this.__action_doAsyncFunc(data.async, core.eventMoveHero, data.steps, data.time);
-}
+  this.__action_doAsyncFunc(
+    data.async,
+    core.eventMoveHero,
+    data.steps,
+    data.time
+  );
+};
 
 events.prototype._action_jump = function (data, x, y, prefix) {
-    var from = this.__action_getLoc(data.from, x, y, prefix), to;
-    if (data.dxy) {
-        to = [from[0] + (core.calValue(data.dxy[0], prefix) || 0), from[1] + (core.calValue(data.dxy[1], prefix) || 0)];
-    } else {
-        to = this.__action_getLoc(data.to, x, y, prefix);
-    }
-    this.__action_doAsyncFunc(data.async, core.jumpBlock, from[0], from[1], to[0], to[1], data.time, data.keep);
-}
+  var from = this.__action_getLoc(data.from, x, y, prefix),
+    to;
+  if (data.dxy) {
+    to = [
+      from[0] + (core.calValue(data.dxy[0], prefix) || 0),
+      from[1] + (core.calValue(data.dxy[1], prefix) || 0),
+    ];
+  } else {
+    to = this.__action_getLoc(data.to, x, y, prefix);
+  }
+  this.__action_doAsyncFunc(
+    data.async,
+    core.jumpBlock,
+    from[0],
+    from[1],
+    to[0],
+    to[1],
+    data.time,
+    data.keep
+  );
+};
 
 events.prototype._precompile_jump = function (data) {
-    data.from = this.__precompile_array(data.from);
-    data.to = this.__precompile_array(data.to);
-    data.dxy = this.__precompile_array(data.dxy);
-    return data;
-}
+  data.from = this.__precompile_array(data.from);
+  data.to = this.__precompile_array(data.to);
+  data.dxy = this.__precompile_array(data.dxy);
+  return data;
+};
 
 events.prototype._action_jumpHero = function (data, x, y, prefix) {
-    var loc;
-    if (data.dxy) {
-        loc = [core.getHeroLoc('x') + (core.calValue(data.dxy[0], prefix) || 0), core.getHeroLoc('y') + (core.calValue(data.dxy[1], prefix) || 0)];
-    } else {
-        loc = this.__action_getHeroLoc(data.loc, prefix);
-    }
-    this.__action_doAsyncFunc(data.async, core.jumpHero, loc[0], loc[1], data.time);
-}
+  var loc;
+  if (data.dxy) {
+    loc = [
+      core.getHeroLoc("x") + (core.calValue(data.dxy[0], prefix) || 0),
+      core.getHeroLoc("y") + (core.calValue(data.dxy[1], prefix) || 0),
+    ];
+  } else {
+    loc = this.__action_getHeroLoc(data.loc, prefix);
+  }
+  this.__action_doAsyncFunc(
+    data.async,
+    core.jumpHero,
+    loc[0],
+    loc[1],
+    data.time
+  );
+};
 
 events.prototype._action_changeFloor = function (data, x, y, prefix) {
-    var loc = this.__action_getHeroLoc(data.loc, prefix);
-    var heroLoc = { x: loc[0], y: loc[1], direction: data.direction };
-    core.changeFloor(data.floorId, data.stair, heroLoc, data.time, core.doAction);
-}
+  var loc = this.__action_getHeroLoc(data.loc, prefix);
+  var heroLoc = { x: loc[0], y: loc[1], direction: data.direction };
+  core.changeFloor(data.floorId, data.stair, heroLoc, data.time, core.doAction);
+};
 
 events.prototype._action_changePos = function (data, x, y, prefix) {
-    core.clearMap('hero');
-    if (!data.loc && data.direction) {
-        core.setHeroLoc('direction', core.turnDirection(data.direction), true);
-        core.drawHero();
-        return core.doAction();
-    }
-
-    var loc = this.__action_getHeroLoc(data.loc, prefix);
-    core.setHeroLoc('x', loc[0]);
-    core.setHeroLoc('y', loc[1]);
-    if (data.direction) core.setHeroLoc('direction', core.turnDirection(data.direction));
+  core.clearMap("hero");
+  if (!data.loc && data.direction) {
+    core.setHeroLoc("direction", core.turnDirection(data.direction), true);
     core.drawHero();
-    core.doAction();
-}
+    return core.doAction();
+  }
+
+  var loc = this.__action_getHeroLoc(data.loc, prefix);
+  core.setHeroLoc("x", loc[0]);
+  core.setHeroLoc("y", loc[1]);
+  if (data.direction)
+    core.setHeroLoc("direction", core.turnDirection(data.direction));
+  core.drawHero();
+  core.doAction();
+};
 
 events.prototype._action_showImage = function (data, x, y, prefix) {
-    if (core.isReplaying()) data.time = 0;
-    this.__action_doAsyncFunc(data.async || data.time == 0, core.showImage,
-        data.code, data.image + (data.reverse || ''), data.sloc, data.loc, data.opacity, data.time);
-}
+  if (core.isReplaying()) data.time = 0;
+  this.__action_doAsyncFunc(
+    data.async || data.time == 0,
+    core.showImage,
+    data.code,
+    data.image + (data.reverse || ""),
+    data.sloc,
+    data.loc,
+    data.opacity,
+    data.time
+  );
+};
 
 events.prototype._precompile_showImage = function (data) {
-    data.sloc = this.__precompile_array(data.sloc);
-    data.loc = this.__precompile_array(data.loc);
-    return data;
-}
+  data.sloc = this.__precompile_array(data.sloc);
+  data.loc = this.__precompile_array(data.loc);
+  return data;
+};
 
 events.prototype._action_showTextImage = function (data, x, y, prefix) {
-    var loc = this.__action_getLoc(data.loc, 0, 0, prefix);
-    if (core.isReplaying()) data.time = 0;
-    data.text = core.replaceText(data.text, prefix);
-    var __tmpName = (Math.random() + "_" + Math.random()).replace(/\./g, "") + ".png";
-    core.material.images.images[__tmpName] = core.ui.textImage(data.text);
-    this.__action_doAsyncFunc(data.async || data.time == 0, core.showImage,
-        data.code, __tmpName + (data.reverse || ""), null, loc, data.opacity, data.time);
-    delete core.material.images.images[__tmpName];
-}
+  var loc = this.__action_getLoc(data.loc, 0, 0, prefix);
+  if (core.isReplaying()) data.time = 0;
+  data.text = core.replaceText(data.text, prefix);
+  var __tmpName =
+    (Math.random() + "_" + Math.random()).replace(/\./g, "") + ".png";
+  core.material.images.images[__tmpName] = core.ui.textImage(data.text);
+  this.__action_doAsyncFunc(
+    data.async || data.time == 0,
+    core.showImage,
+    data.code,
+    __tmpName + (data.reverse || ""),
+    null,
+    loc,
+    data.opacity,
+    data.time
+  );
+  delete core.material.images.images[__tmpName];
+};
 
 events.prototype._action_hideImage = function (data, x, y, prefix) {
-    if (core.isReplaying()) data.time = 0;
-    this.__action_doAsyncFunc(data.async || data.time == 0, core.hideImage, data.code, data.time);
-}
+  if (core.isReplaying()) data.time = 0;
+  this.__action_doAsyncFunc(
+    data.async || data.time == 0,
+    core.hideImage,
+    data.code,
+    data.time
+  );
+};
 
 events.prototype._action_showGif = function (data, x, y, prefix) {
-    var loc = this.__action_getLoc(data.loc, 0, 0, prefix);
-    this.showGif(data.name, loc[0], loc[1]);
-    core.doAction();
-}
+  var loc = this.__action_getLoc(data.loc, 0, 0, prefix);
+  this.showGif(data.name, loc[0], loc[1]);
+  core.doAction();
+};
 
 events.prototype._action_moveImage = function (data, x, y, prefix) {
-    if (this.__action_checkReplaying()) return;
-    this.__action_doAsyncFunc(data.async, core.moveImage, data.code, data.to, data.opacity, data.moveMode, data.time);
-}
+  if (this.__action_checkReplaying()) return;
+  this.__action_doAsyncFunc(
+    data.async,
+    core.moveImage,
+    data.code,
+    data.to,
+    data.opacity,
+    data.moveMode,
+    data.time
+  );
+};
 
 events.prototype._precompile_moveImage = function (data) {
-    data.to = this.__precompile_array(data.to);
-    return data;
-}
+  data.to = this.__precompile_array(data.to);
+  return data;
+};
 
 events.prototype._action_rotateImage = function (data, x, y, prefix) {
-    if (this.__action_checkReplaying()) return;
-    this.__action_doAsyncFunc(data.async, core.rotateImage, data.code, data.center, data.angle, data.moveMode, data.time);
-}
+  if (this.__action_checkReplaying()) return;
+  this.__action_doAsyncFunc(
+    data.async,
+    core.rotateImage,
+    data.code,
+    data.center,
+    data.angle,
+    data.moveMode,
+    data.time
+  );
+};
 
 events.prototype._precompile_rotateImage = function (data) {
-    data.center = this.__precompile_array(data.center);
-    return data;
-}
+  data.center = this.__precompile_array(data.center);
+  return data;
+};
 
 events.prototype._action_scaleImage = function (data, x, y, prefix) {
-    if (this.__action_checkReplaying()) return;
-    this.__action_doAsyncFunc(data.async, core.scaleImage, data.code, data.center, data.scale, data.moveMode, data.time);
-}
+  if (this.__action_checkReplaying()) return;
+  this.__action_doAsyncFunc(
+    data.async,
+    core.scaleImage,
+    data.code,
+    data.center,
+    data.scale,
+    data.moveMode,
+    data.time
+  );
+};
 
 events.prototype._precompile_scaleImage = function (data) {
-    data.center = this.__precompile_array(data.center);
-    return data;
-}
+  data.center = this.__precompile_array(data.center);
+  return data;
+};
 
 events.prototype._action_setCurtain = function (data, x, y, prefix) {
-    if (data.async) {
-        core.setCurtain(data.color || core.status.thisMap.color, data.time, data.moveMode);
-        if (data.color == null || data.keep) core.setFlag('__color__', data.color || null);
+  if (data.async) {
+    core.setCurtain(
+      data.color || core.status.thisMap.color,
+      data.time,
+      data.moveMode
+    );
+    if (data.color == null || data.keep)
+      core.setFlag("__color__", data.color || null);
+    core.doAction();
+  } else {
+    core.setCurtain(
+      data.color || core.status.thisMap.color,
+      data.time,
+      data.moveMode,
+      function () {
+        if (data.color == null || data.keep)
+          core.setFlag("__color__", data.color || null);
         core.doAction();
-    }
-    else {
-        core.setCurtain(data.color || core.status.thisMap.color, data.time, data.moveMode, function () {
-            if (data.color == null || data.keep) core.setFlag('__color__', data.color || null);
-            core.doAction();
-        });
-    }
-}
+      }
+    );
+  }
+};
 
 events.prototype._action_screenFlash = function (data, x, y, prefix) {
-    this.__action_doAsyncFunc(data.async, core.screenFlash, data.color, data.time, data.times, data.moveMode);
-}
+  this.__action_doAsyncFunc(
+    data.async,
+    core.screenFlash,
+    data.color,
+    data.time,
+    data.times,
+    data.moveMode
+  );
+};
 
 events.prototype._action_setWeather = function (data, x, y, prefix) {
-    core.setWeather(data.name, data.level);
-    if (data.keep && ['rain', 'snow', 'sun', 'fog', 'cloud'].indexOf(data.name) >= 0)
-        core.setFlag('__weather__', [data.name, data.level]);
-    else core.removeFlag('__weather__');
-    core.doAction();
-}
+  core.setWeather(data.name, data.level);
+  if (
+    data.keep &&
+    ["rain", "snow", "sun", "fog", "cloud"].indexOf(data.name) >= 0
+  )
+    core.setFlag("__weather__", [data.name, data.level]);
+  else core.removeFlag("__weather__");
+  core.doAction();
+};
 
 events.prototype._action_openDoor = function (data, x, y, prefix) {
-    var loc = this.__action_getLoc(data.loc, x, y, prefix);
-    var floorId = data.floorId;
-    if (floorId == core.status.floorId) {
-        this.__action_doAsyncFunc(data.async, core.openDoor, loc[0], loc[1], data.needKey);
-    }
-    else {
-        core.removeBlock(loc[0], loc[1], floorId);
-        core.doAction();
-    }
-}
+  var loc = this.__action_getLoc(data.loc, x, y, prefix);
+  var floorId = data.floorId;
+  if (floorId == core.status.floorId) {
+    this.__action_doAsyncFunc(
+      data.async,
+      core.openDoor,
+      loc[0],
+      loc[1],
+      data.needKey
+    );
+  } else {
+    core.removeBlock(loc[0], loc[1], floorId);
+    core.doAction();
+  }
+};
 
 events.prototype._action_closeDoor = function (data, x, y, prefix) {
-    var loc = this.__action_getLoc(data.loc, x, y, prefix);
-    this.__action_doAsyncFunc(data.async, core.closeDoor, loc[0], loc[1], data.id);
-}
+  var loc = this.__action_getLoc(data.loc, x, y, prefix);
+  this.__action_doAsyncFunc(
+    data.async,
+    core.closeDoor,
+    loc[0],
+    loc[1],
+    data.id
+  );
+};
 
 events.prototype._action_useItem = function (data, x, y, prefix) {
-    // 考虑到可能覆盖楼传事件的问题,这里不对fly进行检查。
-    if (data.id != 'book' && core.canUseItem(data.id)) {
-        core.useItem(data.id, true, core.doAction);
-    }
-    else {
-        core.playSound('操作失败');
-        core.drawTip("当前无法使用" + ((core.material.items[data.id] || {}).name || "未知道具"));
-        core.doAction();
-    }
-}
-
-events.prototype._action_loadEquip = function (data, x, y, prefix) {
-    core.loadEquip(data.id);
-    core.doAction();
-}
-
-events.prototype._action_unloadEquip = function (data, x, y, prefix) {
-    core.unloadEquip(data.pos);
-    core.doAction();
-}
-
-events.prototype._action_openShop = function (data, x, y, prefix) {
-    core.setShopVisited(data.id, true);
-    if (data.open) core.openShop(data.id, true);
-    core.doAction();
-}
-
-events.prototype._action_disableShop = function (data, x, y, prefix) {
-    core.setShopVisited(data.id, false);
-    core.doAction();
-}
-
-events.prototype._action_battle = function (data, x, y, prefix) {
-    if (data.id) {
-        this.battle(data.id, null, null, true, core.doAction);
-    }
-    else {
-        if (data.floorId != core.status.floorId) {
-            core.doAction();
-            return;
-        }
-        var loc = this.__action_getLoc(data.loc, x, y, prefix);
-        this.battle(null, loc[0], loc[1], true, core.doAction);
-    }
-}
-
-events.prototype._action_trigger = function (data, x, y, prefix) {
-    var loc = this.__action_getLoc(data.loc, x, y, prefix);
-    this._trigger_inAction(loc[0], loc[1]);
-}
-
-events.prototype._action_insert = function (data, x, y, prefix) {
-    if (data.name) { // 公共事件
-        core.insertCommonEvent(data.name, data.args);
-    }
-    else {
-        // 设置参数
-        if (data.args instanceof Array) {
-            for (var i = 0; i < data.args.length; ++i) {
-                try {
-                    if (data.args[i] != null)
-                        core.setFlag('arg' + (i + 1), data.args[i]);
-                } catch (ee) { console.error(ee) }
-            }
-        }
-        var loc = this.__action_getLoc(data.loc, x, y, prefix);
-        core.setFlag('arg0', loc);
-        var floorId = data.floorId;
-        var which = data.which || "events";
-        var event = (core.floors[floorId][which] || [])[loc[0] + "," + loc[1]];
-        if (event) this.insertAction(event.data || event);
-    }
-    core.doAction();
-}
-
-events.prototype._action_playBgm = function (data, x, y, prefix) {
-    core.playBgm(data.name, data.startTime || 0);
-    core.setFlag("__bgm__", data.keep ? data.name : null);
-    core.doAction();
-}
-
-events.prototype._action_pauseBgm = function (data, x, y, prefix) {
-    core.pauseBgm();
-    core.doAction();
-}
-
-events.prototype._action_resumeBgm = function (data, x, y, prefix) {
-    core.resumeBgm(data.resume);
-    core.doAction();
-}
-
-events.prototype._action_loadBgm = function (data, x, y, prefix) {
-    core.loadBgm(data.name);
-    core.doAction();
-}
-
-events.prototype._action_freeBgm = function (data, x, y, prefix) {
-    core.freeBgm(data.name);
-    core.doAction();
-}
-
-events.prototype._action_playSound = function (data, x, y, prefix) {
-    if (data.stop) core.stopSound();
-    if (data.sync) {
-        core.playSound(data.name, data.pitch, core.doAction);
-    } else {
-        core.playSound(data.name, data.pitch);
-        core.doAction();
-    }
-}
-
-events.prototype._action_stopSound = function (data, x, y, prefix) {
-    core.stopSound();
-    core.doAction();
-}
-
-events.prototype._action_setVolume = function (data, x, y, prefix) {
-    data.value = core.clamp(parseInt(data.value) / 100, 0, 1);
-    core.setFlag("__volume__", data.value);
-    this.__action_doAsyncFunc(data.async, core.setVolume, data.value, data.time || 0);
-}
-
-events.prototype._action_setBgmSpeed = function (data, x, y, prefix) {
-    core.setBgmSpeed(data.value, data.pitch || false);
-    core.doAction();
-}
-
-events.prototype._action_setValue = function (data, x, y, prefix) {
-    this.setValue(data.name, data.operator, data.value, prefix);
-    if (!data.norefresh) {
-        if (core.status.hero.hp <= 0) {
-            core.status.hero.hp = 0;
-            core.updateStatusBar();
-            core.events.lose();
-        } else {
-            core.updateStatusBar();
-        }
-    }
-    core.doAction();
-}
-
-events.prototype._action_addValue = function (data, x, y, prefix) {
-    data.operator = '+=';
-    this._action_setValue(data, x, y, prefix);
-}
-
-events.prototype._action_setEnemy = function (data, x, y, prefix) {
-    this.setEnemy(data.id, data.name, data.value, data.operator, prefix, data.norefresh);
-    core.doAction();
-}
-
-events.prototype._action_setEnemyOnPoint = function (data, x, y, prefix) {
-    var loc = this.__action_getLoc2D(data.loc, x, y, prefix);
-    loc.forEach(function (one) {
-        core.setEnemyOnPoint(one[0], one[1], data.floorId, data.name, data.value, data.operator, prefix, data.norefresh);
-    });
-    core.doAction();
-}
-
-events.prototype._action_resetEnemyOnPoint = function (data, x, y, prefix) {
-    var loc = this.__action_getLoc2D(data.loc, x, y, prefix);
-    loc.forEach(function (one) {
-        core.resetEnemyOnPoint(one[0], one[1], data.floorId, data.norefresh);
-    });
-    core.doAction();
-}
-
-events.prototype._precompile_moveEnemyOnPoint = function (data) {
-    data.from = this.__precompile_array(data.from);
-    data.to = this.__precompile_array(data.to);
-    data.dxy = this.__precompile_array(data.dxy);
-    return data;
-}
-
-events.prototype._action_moveEnemyOnPoint = function (data, x, y, prefix) {
-    var from = this.__action_getLoc(data.from, x, y, prefix), to;
-    if (data.dxy) {
-        to = [from[0] + (core.calValue(data.dxy[0], prefix) || 0), from[1] + (core.calValue(data.dxy[1], prefix) || 0)];
-    } else {
-        to = this.__action_getLoc(data.to, x, y, prefix);
-    }
-    this.moveEnemyOnPoint(from[0], from[1], to[0], to[1], data.floorId, data.norefresh);
-    core.doAction();
-}
-
-events.prototype._action_setEquip = function (data, x, y, prefix) {
-    core.setEquip(data.id, data.valueType, data.name, data.value, data.operator, prefix);
-    core.doAction();
-}
-
-events.prototype._action_setFloor = function (data, x, y, prefix) {
-    this.setFloorInfo(data.name, data.value, data.floorId, prefix);
-    core.doAction();
-}
-
-events.prototype._action_setGlobalAttribute = function (data, x, y, prefix) {
-    this.setGlobalAttribute(data.name, data.value);
-    core.doAction();
-}
-
-events.prototype._action_setGlobalValue = function (data, x, y, prefix) {
-    core.values[data.name] = data.value;
-    core.doAction();
-}
-
-events.prototype._action_setGlobalFlag = function (data, x, y, prefix) {
-    this.setGlobalFlag(data.name, data.value);
-    core.doAction();
-}
-
-events.prototype._action_setNameMap = function (data, x, y, floorId) {
-    this.setNameMap(data.name, data.value);
-    core.doAction();
-}
-
-events.prototype._action_setHeroIcon = function (data, x, y, prefix) {
-    this.setHeroIcon(data.name, data.noDraw);
-    core.doAction();
-}
-
-events.prototype._action_input = function (data, x, y, prefix) {
-    this.__action_getInput(core.replaceText(data.text, prefix), false, function (value) {
-        value = parseInt(value) || 0; // 允许负整数
-        core.status.route.push("input:" + value);
-        core.setFlag("input", value);
-        core.doAction();
-    });
-}
-
-events.prototype._action_input2 = function (data, x, y, prefix) {
-    this.__action_getInput(core.replaceText(data.text, prefix), true, function (value) {
-        value = value || "";
-        core.status.route.push("input2:" + core.encodeBase64(value));
-        core.setFlag("input", value);
-        core.doAction();
-    });
-}
-
-events.prototype.__action_getInput = function (hint, isText, callback) {
-    var value, prefix = isText ? "input2:" : "input:";
-    if (core.isReplaying()) {
-        var action = core.status.replay.toReplay.shift();
-        try {
-            if (action.indexOf(prefix) != 0) {
-                console.warn("警告!当前需要一个 " + prefix + " 项,实际为 " + action);
-                core.status.replay.toReplay.unshift(action);
-                return callback(isText ? '' : 0);
-            }
-            if (isText) value = core.decodeBase64(action.substring(7));
-            else value = parseInt(action.substring(6));
-            callback(value);
-        }
-        catch (e) {
-            core.control._replay_error(action);
-            return;
-        }
-    }
-    else {
-        core.myprompt(core.replaceText(hint), null, callback);
-    }
-}
-
-events.prototype._action_if = function (data, x, y, prefix) {
-    if (core.calValue(data.condition, prefix))
-        core.events.insertAction(data["true"])
-    else
-        core.events.insertAction(data["false"])
-    core.doAction();
-}
-
-events.prototype._precompile_if = function (data) {
-    data.condition = core.replaceValue(data.condition);
-    data["true"] = this.precompile(data["true"]);
-    data["false"] = this.precompile(data["false"]);
-    return data;
-}
-
-events.prototype._action_switch = function (data, x, y, prefix) {
-    var key = core.calValue(data.condition, prefix)
-    var list = [];
-    for (var i = 0; i < data.caseList.length; i++) {
-        if (data.caseList[i]._disabled) continue;
-        var condition = data.caseList[i]["case"];
-        if (condition == "default" || core.calValue(condition, prefix) === key) {
-            core.push(list, data.caseList[i].action);
-            if (!data.caseList[i].nobreak)
-                break;
-        }
-    }
-    core.insertAction(list);
-    core.doAction();
-}
-
-events.prototype._precompile_switch = function (data) {
-    data.condition = core.replaceValue(data.condition);
-    for (var i = 0; i < data.caseList.length; i++) {
-        data.caseList[i]["case"] = core.replaceValue(data.caseList[i]["case"]);
-        data.caseList[i].action = this.precompile(data.caseList[i].action);
-    }
-    return data;
-}
-
-events.prototype._action_choices = function (data, x, y, prefix) {
-    data.choices = data.choices.filter(function (x) {
-        if (x._disabled) return false;
-        if (x.condition == null || x.condition == '') return true;
-        try { return core.calValue(x.condition, prefix); } catch (e) { return true; }
-    })
-    if (data.choices.length == 0) return this.doAction();
-    if (core.isReplaying()) {
-        var action = core.status.replay.toReplay.shift();
-        if (action.indexOf('choices:') == 0 && !(action == 'choices:none' && !data.timeout)) {
-            var index = action.substring(8);
-            if (!this.__action_choices_replaying(data, index)) {
-                core.control._replay_error(action);
-                return;
-            }
-        } else {
-            // 容错录像
-            if (main.replayChecking) {
-                // 录像验证系统中选最后一项
-                if (action != 'choices:none') core.status.replay.toReplay.unshift(action); // 首先归还刚才读出的下一步操作
-                core.events.__action_choices_replaying(data, -1);
-            } else {
-                // 正常游戏中弹窗选择
-                core.myprompt('录像回放出错!当前需要执行选择项但录像中未记录。\n如需修复请输入您要选的项(从0起),点击取消将不会修复。', 0, function (value) {
-                    if (value == null) {
-                        core.control._replay_error(action);
-                        return;
-                    }
-                    if (action != 'choices:none') core.status.replay.toReplay.unshift(action); // 首先归还刚才读出的下一步操作
-                    core.events.__action_choices_replaying(data, ((parseInt(value) || 0) + data.choices.length) % data.choices.length);
-                });
-            }
-        }
-    } else {
-        if (data.timeout) {
-            core.status.event.interval = setTimeout(function () {
-                core.status.route.push("choices:none");
-                core.setFlag('timeout', 0);
-                core.doAction();
-            }, data.timeout);
-        }
-        core.status.event.timeout = new Date().getTime() + (data.timeout || 0);
-    }
-    for (var i = 0; i < data.choices.length; i++) {
-        if (typeof data.choices[i] === 'string')
-            data.choices[i] = { "text": data.choices[i] };
-        data.choices[i].text = core.replaceText(data.choices[i].text, prefix);
-    }
-    core.ui.drawChoices(core.replaceText(data.text, prefix), data.choices, data.width);
-}
-
-events.prototype.__action_choices_replaying = function (data, index) {
-    var selection = index;
-    if (index != 'none') {
-        selection = parseInt(index);
-        if (isNaN(selection)) return false;
-        if (selection < 0) selection += data.choices.length;
-        if (selection < 0) return false;
-        if (selection % 100 > 50) selection += data.choices.length;
-        if (selection % 100 > data.choices.length) return false;
-        var timeout = Math.floor(selection / 100) || 0;
-        core.setFlag('timeout', timeout);
-        selection %= 100;
-    } else core.setFlag('timeout', 0);
-    core.status.event.selection = selection;
-    setTimeout(function () {
-        core.status.route.push("choices:" + index);
-        if (selection != 'none') {
-            // 检查
-            var choice = data.choices[selection];
-            if (choice.need != null && choice.need != '' && !core.calValue(choice.need)) {
-                // 无法选择此项
-                core.control._replay_error("无法选择项:" + index);
-                return;
-            } else {
-                core.insertAction(choice.action);
-            }
-        }
-        core.doAction();
-    }, core.status.replay.speed == 24 ? 1 : 750 / Math.max(1, core.status.replay.speed));
-    return true;
-}
-
-events.prototype._precompile_choices = function (data) {
-    if (!(data.choices instanceof Array)) return data;
-    for (var i = 0; i < data.choices.length; ++i) {
-        data.choices[i].condition = core.replaceValue(data.choices[i].condition);
-        data.choices[i].text = this.__precompile_text(data.choices[i].text);
-        data.choices[i].action = this.precompile(data.choices[i].action);
-    }
-    return data;
-}
-
-events.prototype._action_confirm = function (data, x, y, prefix) {
-    data.text = core.replaceText(data.text, prefix);
-    core.status.event.ui = { "text": data.text, "yes": data.yes, "no": data.no };
-    if (core.isReplaying()) {
-        var action = core.status.replay.toReplay.shift();
-        if (action.indexOf('choices:') == 0 && !(action == 'choices:none' && !data.timeout)) {
-            var index = action.substring(8);
-            if (index == 'none' || ((index = parseInt(index)) >= 0) && index % 100 < 2) {
-                this.__action_confirm_replaying(data, index);
-            } else {
-                core.control._replay_error(action);
-                return;
-            }
-        } else {
-            // 录像中未记录选了哪个,则选默认值,而不是直接报错
-            if (action != 'choices:none') core.status.replay.toReplay.unshift(action);
-            this.__action_confirm_replaying(data, data["default"] ? 0 : 1);
-        }
-    }
-    else {
-        core.status.event.selection = data["default"] ? 0 : 1;
-        if (data.timeout) {
-            core.status.event.interval = setTimeout(function () {
-                core.status.route.push("choices:none");
-                core.setFlag('timeout', 0);
-                core.doAction();
-            }, data.timeout);
-        }
-        core.status.event.timeout = new Date().getTime() + (data.timeout || 0);
-    }
-    core.ui.drawConfirmBox(data.text);
-}
-
-events.prototype.__action_confirm_replaying = function (data, index) {
-    if (index != 'none') {
-        var timeout = Math.floor(index / 100) || 0;
-        core.setFlag('timeout', timeout);
-        index %= 100;
-    } else core.setFlag('timeout', 0);
-    core.status.event.selection = index;
-    setTimeout(function () {
-        core.status.route.push("choices:" + index);
-        if (index != 'none') {
-            if (index == 0) core.insertAction(data.yes);
-            else core.insertAction(data.no);
-        }
-        core.doAction();
-    }, core.status.replay.speed == 24 ? 1 : 750 / Math.max(1, core.status.replay.speed));
-}
-
-events.prototype._precompile_confirm = function (data) {
-    data.yes = this.precompile(data.yes);
-    data.no = this.precompile(data.no);
-    return data;
-}
-
-events.prototype._action_for = function (data, x, y, prefix) {
-    // Only support temp:A
-    if (!/^temp:[A-Z]$/.test(data.name)) {
-        core.insertAction('循环遍历事件只支持临时变量!');
-        return core.doAction();
-    }
-    var from = core.calValue(data.from);
-    var to = core.calValue(data.to);
-    var step = core.calValue(data.step);
-    if (typeof from != 'number' || typeof to != 'number' || typeof step != 'number') {
-        core.insertAction('循环遍历事件要求【起始点】【终止点】【每步】仅能是数字!');
-        return core.doAction();
-    }
-    // 首次判定
-    if ((step > 0 && from > to) || (step < 0 && from < to)) {
-        core.doAction();
-        return;
-    }
-
-    var letter = data.name.substring(5);
-    core.setFlag('@temp@' + letter, from);
-    var toName = '@temp@for-to@' + letter;
-    var stepName = '@temp@for-step@' + letter;
-    core.setFlag(toName, data.to);
-    core.setFlag(stepName, data.step);
-    var condition = "(function () {" +
-        "var to = core.calValue(core.getFlag('" + toName + "'));" +
-        "var step = core.calValue(core.getFlag('" + stepName + "'));" +
-        "if (typeof step != 'number' || typeof to != 'number') return false;" +
-        "if (step == 0) return true;" +
-        "var currentValue = core.getFlag('@temp@" + letter + "');" +
-        "currentValue += step;" +
-        "core.setFlag('@temp@" + letter + "', currentValue);" +
-        "if (step > 0) { return currentValue <= to; }" +
-        "else { return currentValue >= to; }" +
-        "})()";
-    return this._action_dowhile({ "condition": condition, "data": data.data }, x, y, prefix);
-}
-
-events.prototype._precompile_for = function (data) {
-    data.from = core.replaceValue(data.from);
-    data.to = core.replaceValue(data.to);
-    data.step = core.replaceValue(data.step);
-    data.data = this.precompile(data.data);
-    return data;
-}
-
-events.prototype._action_forEach = function (data, x, y, prefix) {
-    // Only support temp:A
-    if (!/^temp:[A-Z]$/.test(data.name)) {
-        core.insertAction(['循环遍历事件只支持临时变量!']);
-        return core.doAction();
-    }
-    var listName = '@temp@forEach@' + data.name.substring(5);
-    core.setFlag(listName, core.clone(data.list));
-    var condition = "(function () {" +
-        "var list = core.getFlag('" + listName + "', []);" +
-        "if (list.length == 0) return false;" +
-        "core.setFlag('@temp@'+'" + data.name.substring(5) + "', list.shift());" +
-        "return true;" +
-        "})()";
-    return this._action_while({ "condition": condition, "data": data.data }, x, y, prefix);
-}
-
-events.prototype._precompile_forEach = function (data) {
-    data.data = this.precompile(data.data);
-    return data;
-}
-
-events.prototype._action_while = function (data, x, y, prefix) {
-    if (core.calValue(data.condition, prefix)) {
-        var list = core.clone(data.data);
-        if (!(list instanceof Array)) list = [list];
-        list.push({ "type": "_label" });
-        core.unshift(core.status.event.data.list,
-            { "todo": list, "total": core.clone(list), "condition": data.condition }
-        );
-    }
-    core.doAction();
-}
-
-events.prototype._precompile_while = function (data) {
-    data.condition = core.replaceValue(data.condition);
-    data.data = this.precompile(data.data);
-    return data;
-}
-
-events.prototype._action_dowhile = function (data, x, y, prefix) {
-    var list = core.clone(data.data);
-    if (!(list instanceof Array)) list = [list];
-    list.push({ "type": "_label" });
-    core.unshift(core.status.event.data.list,
-        { "todo": list, "total": core.clone(list), "condition": data.condition }
+  // 考虑到可能覆盖楼传事件的问题,这里不对fly进行检查。
+  if (data.id != "book" && core.canUseItem(data.id)) {
+    core.useItem(data.id, true, core.doAction);
+  } else {
+    core.playSound("操作失败");
+    core.drawTip(
+      "当前无法使用" + ((core.material.items[data.id] || {}).name || "未知道具")
     );
     core.doAction();
-}
+  }
+};
 
-events.prototype._precompile_dowhile = function (data) {
-    data.condition = core.replaceValue(data.condition);
-    data.data = this.precompile(data.data);
-    return data;
-}
+events.prototype._action_loadEquip = function (data, x, y, prefix) {
+  core.loadEquip(data.id);
+  core.doAction();
+};
 
-events.prototype._action_break = function (data, x, y, prefix) {
-    var n = data.n || 1;
-    while (n--) {
-        if (core.status.event.data.list.length > 1)
-            core.status.event.data.list.shift();
+events.prototype._action_unloadEquip = function (data, x, y, prefix) {
+  core.unloadEquip(data.pos);
+  core.doAction();
+};
+
+events.prototype._action_openShop = function (data, x, y, prefix) {
+  core.setShopVisited(data.id, true);
+  if (data.open) core.openShop(data.id, true);
+  core.doAction();
+};
+
+events.prototype._action_disableShop = function (data, x, y, prefix) {
+  core.setShopVisited(data.id, false);
+  core.doAction();
+};
+
+events.prototype._action_battle = function (data, x, y, prefix) {
+  if (data.id) {
+    this.battle(data.id, null, null, true, core.doAction);
+  } else {
+    if (data.floorId != core.status.floorId) {
+      core.doAction();
+      return;
     }
-    core.doAction();
-}
+    var loc = this.__action_getLoc(data.loc, x, y, prefix);
+    this.battle(null, loc[0], loc[1], true, core.doAction);
+  }
+};
 
-events.prototype._action_continue = function (data, x, y, prefix) {
-    var n = data.n || 1;
-    while (n-- > 1) {
-        if (core.status.event.data.list.length > 1)
-            core.status.event.data.list.shift();
-    }
-    if (core.status.event.data.list.length > 1) {
-        if (core.calValue(core.status.event.data.list[0].condition, prefix)) {
-            core.status.event.data.list[0].todo = core.clone(core.status.event.data.list[0].total);
-        }
-        else {
-            core.status.event.data.list.shift();
+events.prototype._action_trigger = function (data, x, y, prefix) {
+  var loc = this.__action_getLoc(data.loc, x, y, prefix);
+  this._trigger_inAction(loc[0], loc[1]);
+};
+
+events.prototype._action_insert = function (data, x, y, prefix) {
+  if (data.name) {
+    // 公共事件
+    core.insertCommonEvent(data.name, data.args);
+  } else {
+    // 设置参数
+    if (data.args instanceof Array) {
+      for (var i = 0; i < data.args.length; ++i) {
+        try {
+          if (data.args[i] != null) core.setFlag("arg" + (i + 1), data.args[i]);
+        } catch (ee) {
+          console.error(ee);
         }
+      }
     }
+    var loc = this.__action_getLoc(data.loc, x, y, prefix);
+    core.setFlag("arg0", loc);
+    var floorId = data.floorId;
+    var which = data.which || "events";
+    var event = (core.floors[floorId][which] || [])[loc[0] + "," + loc[1]];
+    if (event) this.insertAction(event.data || event);
+  }
+  core.doAction();
+};
+
+events.prototype._action_playBgm = function (data, x, y, prefix) {
+  core.playBgm(data.name, data.startTime || 0);
+  core.setFlag("__bgm__", data.keep ? data.name : null);
+  core.doAction();
+};
+
+events.prototype._action_pauseBgm = function (data, x, y, prefix) {
+  core.pauseBgm();
+  core.doAction();
+};
+
+events.prototype._action_resumeBgm = function (data, x, y, prefix) {
+  core.resumeBgm(data.resume);
+  core.doAction();
+};
+
+events.prototype._action_loadBgm = function (data, x, y, prefix) {
+  core.loadBgm(data.name);
+  core.doAction();
+};
+
+events.prototype._action_freeBgm = function (data, x, y, prefix) {
+  core.freeBgm(data.name);
+  core.doAction();
+};
+
+events.prototype._action_playSound = function (data, x, y, prefix) {
+  if (data.stop) core.stopSound();
+  if (data.sync) {
+    core.playSound(data.name, data.pitch, core.doAction);
+  } else {
+    core.playSound(data.name, data.pitch);
     core.doAction();
-}
+  }
+};
 
-events.prototype._action_win = function (data, x, y, prefix) {
-    this.win(core.replaceText(data.reason, prefix), data.norank, data.noexit);
-}
+events.prototype._action_stopSound = function (data, x, y, prefix) {
+  core.stopSound();
+  core.doAction();
+};
 
-events.prototype._action_lose = function (data, x, y, prefix) {
-    this.lose(core.replaceText(data.reason, prefix));
-}
+events.prototype._action_setVolume = function (data, x, y, prefix) {
+  data.value = core.clamp(parseInt(data.value) / 100, 0, 1);
+  core.setFlag("__volume__", data.value);
+  this.__action_doAsyncFunc(
+    data.async,
+    core.setVolume,
+    data.value,
+    data.time || 0
+  );
+};
 
-events.prototype._action_restart = function (data, x, y, prefix) {
-    core.restart();
-}
+events.prototype._action_setBgmSpeed = function (data, x, y, prefix) {
+  core.setBgmSpeed(data.value, data.pitch || false);
+  core.doAction();
+};
 
-events.prototype._action_function = function (data, x, y, prefix) {
-    var func = data["function"];
-    try {
-        if (typeof func == "string" && func.indexOf("function") == 0) {
-            eval('(' + func + ')()');
-        }
-    } catch (e) {
-        console.error(e);
-    }
-    if (!data.async)
-        core.doAction();
-}
-
-events.prototype._action_update = function (data, x, y, prefix) {
-    core.updateStatusBar(data.doNotCheckAutoEvents, true);
-    core.doAction();
-}
-
-events.prototype._action_showStatusBar = function (data, x, y, prefix) {
-    core.showStatusBar();
-    core.doAction();
-}
-
-events.prototype._action_hideStatusBar = function (data, x, y, prefix) {
-    core.hideStatusBar(data.toolbox);
-    core.doAction();
-}
-
-events.prototype._action_showHero = function (data, x, y, prefix) {
-    data.opacity = 1;
-    return this._action_setHeroOpacity(data, x, y, prefix);
-}
-
-events.prototype._action_hideHero = function (data, x, y, prefix) {
-    data.opacity = 0;
-    return this._action_setHeroOpacity(data, x, y, prefix);
-}
-
-events.prototype._action_setHeroOpacity = function (data, x, y, prefix) {
-    data.time = data.time || 0;
-    if (data.opacity == null) data.opacity = 1;
-    if (data.time > 0) {
-        this.__action_doAsyncFunc(data.async, core.setHeroOpacity, data.opacity, data.moveMode, data.time);
+events.prototype._action_setValue = function (data, x, y, prefix) {
+  this.setValue(data.name, data.operator, data.value, prefix);
+  if (!data.norefresh) {
+    if (core.status.hero.hp <= 0) {
+      core.status.hero.hp = 0;
+      core.updateStatusBar();
+      core.events.lose();
     } else {
-        core.setFlag('__heroOpacity__', data.opacity);
-        core.drawHero();
-        core.doAction();
+      core.updateStatusBar();
     }
-}
+  }
+  core.doAction();
+};
 
-events.prototype._action_vibrate = function (data, x, y, prefix) {
-    this.__action_doAsyncFunc(data.async, core.vibrate, data.direction, data.time, data.speed, data.power);
-}
+events.prototype._action_addValue = function (data, x, y, prefix) {
+  data.operator = "+=";
+  this._action_setValue(data, x, y, prefix);
+};
 
-events.prototype._action_sleep = function (data, x, y, prefix) {
-    core.timeout.sleepTimeout = setTimeout(function () {
-        core.timeout.sleepTimeout = null;
-        core.doAction();
-    }, core.isReplaying() ? Math.min(data.time, 20) : data.time);
-}
+events.prototype._action_setEnemy = function (data, x, y, prefix) {
+  this.setEnemy(
+    data.id,
+    data.name,
+    data.value,
+    data.operator,
+    prefix,
+    data.norefresh
+  );
+  core.doAction();
+};
 
-events.prototype._action_wait = function (data, x, y, prefix) {
-    if (core.isReplaying()) {
-        var code = core.status.replay.toReplay.shift();
-        if (code.indexOf("input:") == 0 && !(code == "input:none" && !data.timeout)) {
-            if (code == "input:none") {
-                core.status.route.push("input:none");
-                core.setFlag("type", -1);
-                core.setFlag("timeout", 0);
-                this.__action_wait_afterGet(data);
-                return core.doAction();
-            } else {
-                var value = parseInt(code.substring(6));
-                core.status.route.push("input:" + value);
-                this.__action_wait_getValue(value);
-                if (this.__action_wait_afterGet(data) || !data.forceChild) return core.doAction();
-            }
-        }
-        core.control._replay_error(code);
+events.prototype._action_setEnemyOnPoint = function (data, x, y, prefix) {
+  var loc = this.__action_getLoc2D(data.loc, x, y, prefix);
+  loc.forEach(function (one) {
+    core.setEnemyOnPoint(
+      one[0],
+      one[1],
+      data.floorId,
+      data.name,
+      data.value,
+      data.operator,
+      prefix,
+      data.norefresh
+    );
+  });
+  core.doAction();
+};
+
+events.prototype._action_resetEnemyOnPoint = function (data, x, y, prefix) {
+  var loc = this.__action_getLoc2D(data.loc, x, y, prefix);
+  loc.forEach(function (one) {
+    core.resetEnemyOnPoint(one[0], one[1], data.floorId, data.norefresh);
+  });
+  core.doAction();
+};
+
+events.prototype._precompile_moveEnemyOnPoint = function (data) {
+  data.from = this.__precompile_array(data.from);
+  data.to = this.__precompile_array(data.to);
+  data.dxy = this.__precompile_array(data.dxy);
+  return data;
+};
+
+events.prototype._action_moveEnemyOnPoint = function (data, x, y, prefix) {
+  var from = this.__action_getLoc(data.from, x, y, prefix),
+    to;
+  if (data.dxy) {
+    to = [
+      from[0] + (core.calValue(data.dxy[0], prefix) || 0),
+      from[1] + (core.calValue(data.dxy[1], prefix) || 0),
+    ];
+  } else {
+    to = this.__action_getLoc(data.to, x, y, prefix);
+  }
+  this.moveEnemyOnPoint(
+    from[0],
+    from[1],
+    to[0],
+    to[1],
+    data.floorId,
+    data.norefresh
+  );
+  core.doAction();
+};
+
+events.prototype._action_setEquip = function (data, x, y, prefix) {
+  core.setEquip(
+    data.id,
+    data.valueType,
+    data.name,
+    data.value,
+    data.operator,
+    prefix
+  );
+  core.doAction();
+};
+
+events.prototype._action_setFloor = function (data, x, y, prefix) {
+  this.setFloorInfo(data.name, data.value, data.floorId, prefix);
+  core.doAction();
+};
+
+events.prototype._action_setGlobalAttribute = function (data, x, y, prefix) {
+  this.setGlobalAttribute(data.name, data.value);
+  core.doAction();
+};
+
+events.prototype._action_setGlobalValue = function (data, x, y, prefix) {
+  core.values[data.name] = data.value;
+  core.doAction();
+};
+
+events.prototype._action_setGlobalFlag = function (data, x, y, prefix) {
+  this.setGlobalFlag(data.name, data.value);
+  core.doAction();
+};
+
+events.prototype._action_setNameMap = function (data, x, y, floorId) {
+  this.setNameMap(data.name, data.value);
+  core.doAction();
+};
+
+events.prototype._action_setHeroIcon = function (data, x, y, prefix) {
+  this.setHeroIcon(data.name, data.noDraw);
+  core.doAction();
+};
+
+events.prototype._action_input = function (data, x, y, prefix) {
+  this.__action_getInput(
+    core.replaceText(data.text, prefix),
+    false,
+    function (value) {
+      value = parseInt(value) || 0; // 允许负整数
+      core.status.route.push("input:" + value);
+      core.setFlag("input", value);
+      core.doAction();
+    }
+  );
+};
+
+events.prototype._action_input2 = function (data, x, y, prefix) {
+  this.__action_getInput(
+    core.replaceText(data.text, prefix),
+    true,
+    function (value) {
+      value = value || "";
+      core.status.route.push("input2:" + core.encodeBase64(value));
+      core.setFlag("input", value);
+      core.doAction();
+    }
+  );
+};
+
+events.prototype.__action_getInput = function (hint, isText, callback) {
+  var value,
+    prefix = isText ? "input2:" : "input:";
+  if (core.isReplaying()) {
+    var action = core.status.replay.toReplay.shift();
+    try {
+      if (action.indexOf(prefix) != 0) {
+        console.warn("警告!当前需要一个 " + prefix + " 项,实际为 " + action);
+        core.status.replay.toReplay.unshift(action);
+        return callback(isText ? "" : 0);
+      }
+      if (isText) value = core.decodeBase64(action.substring(7));
+      else value = parseInt(action.substring(6));
+      callback(value);
+    } catch (e) {
+      core.control._replay_error(action);
+      return;
+    }
+  } else {
+    core.myprompt(core.replaceText(hint), null, callback);
+  }
+};
+
+events.prototype._action_if = function (data, x, y, prefix) {
+  if (core.calValue(data.condition, prefix))
+    core.events.insertAction(data["true"]);
+  else core.events.insertAction(data["false"]);
+  core.doAction();
+};
+
+events.prototype._precompile_if = function (data) {
+  data.condition = core.replaceValue(data.condition);
+  data["true"] = this.precompile(data["true"]);
+  data["false"] = this.precompile(data["false"]);
+  return data;
+};
+
+events.prototype._action_switch = function (data, x, y, prefix) {
+  var key = core.calValue(data.condition, prefix);
+  var list = [];
+  for (var i = 0; i < data.caseList.length; i++) {
+    if (data.caseList[i]._disabled) continue;
+    var condition = data.caseList[i]["case"];
+    if (condition == "default" || core.calValue(condition, prefix) === key) {
+      core.push(list, data.caseList[i].action);
+      if (!data.caseList[i].nobreak) break;
+    }
+  }
+  core.insertAction(list);
+  core.doAction();
+};
+
+events.prototype._precompile_switch = function (data) {
+  data.condition = core.replaceValue(data.condition);
+  for (var i = 0; i < data.caseList.length; i++) {
+    data.caseList[i]["case"] = core.replaceValue(data.caseList[i]["case"]);
+    data.caseList[i].action = this.precompile(data.caseList[i].action);
+  }
+  return data;
+};
+
+events.prototype._action_choices = function (data, x, y, prefix) {
+  data.choices = data.choices.filter(function (x) {
+    if (x._disabled) return false;
+    if (x.condition == null || x.condition == "") return true;
+    try {
+      return core.calValue(x.condition, prefix);
+    } catch (e) {
+      return true;
+    }
+  });
+  if (data.choices.length == 0) return this.doAction();
+  if (core.isReplaying()) {
+    var action = core.status.replay.toReplay.shift();
+    if (
+      action.indexOf("choices:") == 0 &&
+      !(action == "choices:none" && !data.timeout)
+    ) {
+      var index = action.substring(8);
+      if (!this.__action_choices_replaying(data, index)) {
+        core.control._replay_error(action);
         return;
-    } else if (data.timeout) {
-        core.status.event.interval = setTimeout(function () {
-            core.status.route.push("input:none");
-            core.setFlag("type", -1);
-            core.setFlag("timeout", 0);
-            core.events.__action_wait_afterGet(data);
-            core.doAction();
-        }, data.timeout);
+      }
+    } else {
+      // 容错录像
+      if (main.replayChecking) {
+        // 录像验证系统中选最后一项
+        if (action != "choices:none")
+          core.status.replay.toReplay.unshift(action); // 首先归还刚才读出的下一步操作
+        core.events.__action_choices_replaying(data, -1);
+      } else {
+        // 正常游戏中弹窗选择
+        core.myprompt(
+          "录像回放出错!当前需要执行选择项但录像中未记录。\n如需修复请输入您要选的项(从0起),点击取消将不会修复。",
+          0,
+          function (value) {
+            if (value == null) {
+              core.control._replay_error(action);
+              return;
+            }
+            if (action != "choices:none")
+              core.status.replay.toReplay.unshift(action); // 首先归还刚才读出的下一步操作
+            core.events.__action_choices_replaying(
+              data,
+              ((parseInt(value) || 0) + data.choices.length) %
+                data.choices.length
+            );
+          }
+        );
+      }
+    }
+  } else {
+    if (data.timeout) {
+      core.status.event.interval = setTimeout(function () {
+        core.status.route.push("choices:none");
+        core.setFlag("timeout", 0);
+        core.doAction();
+      }, data.timeout);
     }
     core.status.event.timeout = new Date().getTime() + (data.timeout || 0);
-}
+  }
+  for (var i = 0; i < data.choices.length; i++) {
+    if (typeof data.choices[i] === "string")
+      data.choices[i] = { text: data.choices[i] };
+    data.choices[i].text = core.replaceText(data.choices[i].text, prefix);
+  }
+  core.ui.drawChoices(
+    core.replaceText(data.text, prefix),
+    data.choices,
+    data.width
+  );
+};
+
+events.prototype.__action_choices_replaying = function (data, index) {
+  var selection = index;
+  if (index != "none") {
+    selection = parseInt(index);
+    if (isNaN(selection)) return false;
+    if (selection < 0) selection += data.choices.length;
+    if (selection < 0) return false;
+    if (selection % 100 > 50) selection += data.choices.length;
+    if (selection % 100 > data.choices.length) return false;
+    var timeout = Math.floor(selection / 100) || 0;
+    core.setFlag("timeout", timeout);
+    selection %= 100;
+  } else core.setFlag("timeout", 0);
+  core.status.event.selection = selection;
+  setTimeout(
+    function () {
+      core.status.route.push("choices:" + index);
+      if (selection != "none") {
+        // 检查
+        var choice = data.choices[selection];
+        if (
+          choice.need != null &&
+          choice.need != "" &&
+          !core.calValue(choice.need)
+        ) {
+          // 无法选择此项
+          core.control._replay_error("无法选择项:" + index);
+          return;
+        } else {
+          core.insertAction(choice.action);
+        }
+      }
+      core.doAction();
+    },
+    core.status.replay.speed == 24
+      ? 1
+      : 750 / Math.max(1, core.status.replay.speed)
+  );
+  return true;
+};
+
+events.prototype._precompile_choices = function (data) {
+  if (!(data.choices instanceof Array)) return data;
+  for (var i = 0; i < data.choices.length; ++i) {
+    data.choices[i].condition = core.replaceValue(data.choices[i].condition);
+    data.choices[i].text = this.__precompile_text(data.choices[i].text);
+    data.choices[i].action = this.precompile(data.choices[i].action);
+  }
+  return data;
+};
+
+events.prototype._action_confirm = function (data, x, y, prefix) {
+  data.text = core.replaceText(data.text, prefix);
+  core.status.event.ui = { text: data.text, yes: data.yes, no: data.no };
+  if (core.isReplaying()) {
+    var action = core.status.replay.toReplay.shift();
+    if (
+      action.indexOf("choices:") == 0 &&
+      !(action == "choices:none" && !data.timeout)
+    ) {
+      var index = action.substring(8);
+      if (
+        index == "none" ||
+        ((index = parseInt(index)) >= 0 && index % 100 < 2)
+      ) {
+        this.__action_confirm_replaying(data, index);
+      } else {
+        core.control._replay_error(action);
+        return;
+      }
+    } else {
+      // 录像中未记录选了哪个,则选默认值,而不是直接报错
+      if (action != "choices:none") core.status.replay.toReplay.unshift(action);
+      this.__action_confirm_replaying(data, data["default"] ? 0 : 1);
+    }
+  } else {
+    core.status.event.selection = data["default"] ? 0 : 1;
+    if (data.timeout) {
+      core.status.event.interval = setTimeout(function () {
+        core.status.route.push("choices:none");
+        core.setFlag("timeout", 0);
+        core.doAction();
+      }, data.timeout);
+    }
+    core.status.event.timeout = new Date().getTime() + (data.timeout || 0);
+  }
+  core.ui.drawConfirmBox(data.text);
+};
+
+events.prototype.__action_confirm_replaying = function (data, index) {
+  if (index != "none") {
+    var timeout = Math.floor(index / 100) || 0;
+    core.setFlag("timeout", timeout);
+    index %= 100;
+  } else core.setFlag("timeout", 0);
+  core.status.event.selection = index;
+  setTimeout(
+    function () {
+      core.status.route.push("choices:" + index);
+      if (index != "none") {
+        if (index == 0) core.insertAction(data.yes);
+        else core.insertAction(data.no);
+      }
+      core.doAction();
+    },
+    core.status.replay.speed == 24
+      ? 1
+      : 750 / Math.max(1, core.status.replay.speed)
+  );
+};
+
+events.prototype._precompile_confirm = function (data) {
+  data.yes = this.precompile(data.yes);
+  data.no = this.precompile(data.no);
+  return data;
+};
+
+events.prototype._action_for = function (data, x, y, prefix) {
+  // Only support temp:A
+  if (!/^temp:[A-Z]$/.test(data.name)) {
+    core.insertAction("循环遍历事件只支持临时变量!");
+    return core.doAction();
+  }
+  var from = core.calValue(data.from);
+  var to = core.calValue(data.to);
+  var step = core.calValue(data.step);
+  if (
+    typeof from != "number" ||
+    typeof to != "number" ||
+    typeof step != "number"
+  ) {
+    core.insertAction(
+      "循环遍历事件要求【起始点】【终止点】【每步】仅能是数字!"
+    );
+    return core.doAction();
+  }
+  // 首次判定
+  if ((step > 0 && from > to) || (step < 0 && from < to)) {
+    core.doAction();
+    return;
+  }
+
+  var letter = data.name.substring(5);
+  core.setFlag("@temp@" + letter, from);
+  var toName = "@temp@for-to@" + letter;
+  var stepName = "@temp@for-step@" + letter;
+  core.setFlag(toName, data.to);
+  core.setFlag(stepName, data.step);
+  var condition =
+    "(function () {" +
+    "var to = core.calValue(core.getFlag('" +
+    toName +
+    "'));" +
+    "var step = core.calValue(core.getFlag('" +
+    stepName +
+    "'));" +
+    "if (typeof step != 'number' || typeof to != 'number') return false;" +
+    "if (step == 0) return true;" +
+    "var currentValue = core.getFlag('@temp@" +
+    letter +
+    "');" +
+    "currentValue += step;" +
+    "core.setFlag('@temp@" +
+    letter +
+    "', currentValue);" +
+    "if (step > 0) { return currentValue <= to; }" +
+    "else { return currentValue >= to; }" +
+    "})()";
+  return this._action_dowhile(
+    { condition: condition, data: data.data },
+    x,
+    y,
+    prefix
+  );
+};
+
+events.prototype._precompile_for = function (data) {
+  data.from = core.replaceValue(data.from);
+  data.to = core.replaceValue(data.to);
+  data.step = core.replaceValue(data.step);
+  data.data = this.precompile(data.data);
+  return data;
+};
+
+events.prototype._action_forEach = function (data, x, y, prefix) {
+  // Only support temp:A
+  if (!/^temp:[A-Z]$/.test(data.name)) {
+    core.insertAction(["循环遍历事件只支持临时变量!"]);
+    return core.doAction();
+  }
+  var listName = "@temp@forEach@" + data.name.substring(5);
+  core.setFlag(listName, core.clone(data.list));
+  var condition =
+    "(function () {" +
+    "var list = core.getFlag('" +
+    listName +
+    "', []);" +
+    "if (list.length == 0) return false;" +
+    "core.setFlag('@temp@'+'" +
+    data.name.substring(5) +
+    "', list.shift());" +
+    "return true;" +
+    "})()";
+  return this._action_while(
+    { condition: condition, data: data.data },
+    x,
+    y,
+    prefix
+  );
+};
+
+events.prototype._precompile_forEach = function (data) {
+  data.data = this.precompile(data.data);
+  return data;
+};
+
+events.prototype._action_while = function (data, x, y, prefix) {
+  if (core.calValue(data.condition, prefix)) {
+    var list = core.clone(data.data);
+    if (!(list instanceof Array)) list = [list];
+    list.push({ type: "_label" });
+    core.unshift(core.status.event.data.list, {
+      todo: list,
+      total: core.clone(list),
+      condition: data.condition,
+    });
+  }
+  core.doAction();
+};
+
+events.prototype._precompile_while = function (data) {
+  data.condition = core.replaceValue(data.condition);
+  data.data = this.precompile(data.data);
+  return data;
+};
+
+events.prototype._action_dowhile = function (data, x, y, prefix) {
+  var list = core.clone(data.data);
+  if (!(list instanceof Array)) list = [list];
+  list.push({ type: "_label" });
+  core.unshift(core.status.event.data.list, {
+    todo: list,
+    total: core.clone(list),
+    condition: data.condition,
+  });
+  core.doAction();
+};
+
+events.prototype._precompile_dowhile = function (data) {
+  data.condition = core.replaceValue(data.condition);
+  data.data = this.precompile(data.data);
+  return data;
+};
+
+events.prototype._action_break = function (data, x, y, prefix) {
+  var n = data.n || 1;
+  while (n--) {
+    if (core.status.event.data.list.length > 1)
+      core.status.event.data.list.shift();
+  }
+  core.doAction();
+};
+
+events.prototype._action_continue = function (data, x, y, prefix) {
+  var n = data.n || 1;
+  while (n-- > 1) {
+    if (core.status.event.data.list.length > 1)
+      core.status.event.data.list.shift();
+  }
+  if (core.status.event.data.list.length > 1) {
+    if (core.calValue(core.status.event.data.list[0].condition, prefix)) {
+      core.status.event.data.list[0].todo = core.clone(
+        core.status.event.data.list[0].total
+      );
+    } else {
+      core.status.event.data.list.shift();
+    }
+  }
+  core.doAction();
+};
+
+events.prototype._action_win = function (data, x, y, prefix) {
+  this.win(core.replaceText(data.reason, prefix), data.norank, data.noexit);
+};
+
+events.prototype._action_lose = function (data, x, y, prefix) {
+  this.lose(core.replaceText(data.reason, prefix));
+};
+
+events.prototype._action_restart = function (data, x, y, prefix) {
+  core.restart();
+};
+
+events.prototype._action_function = function (data, x, y, prefix) {
+  var func = data["function"];
+  try {
+    if (typeof func == "string" && func.indexOf("function") == 0) {
+      eval("(" + func + ")()");
+    }
+  } catch (e) {
+    console.error(e);
+  }
+  if (!data.async) core.doAction();
+};
+
+events.prototype._action_update = function (data, x, y, prefix) {
+  core.updateStatusBar(data.doNotCheckAutoEvents, true);
+  core.doAction();
+};
+
+events.prototype._action_showStatusBar = function (data, x, y, prefix) {
+  core.showStatusBar();
+  core.doAction();
+};
+
+events.prototype._action_hideStatusBar = function (data, x, y, prefix) {
+  core.hideStatusBar(data.toolbox);
+  core.doAction();
+};
+
+events.prototype._action_showHero = function (data, x, y, prefix) {
+  data.opacity = 1;
+  return this._action_setHeroOpacity(data, x, y, prefix);
+};
+
+events.prototype._action_hideHero = function (data, x, y, prefix) {
+  data.opacity = 0;
+  return this._action_setHeroOpacity(data, x, y, prefix);
+};
+
+events.prototype._action_setHeroOpacity = function (data, x, y, prefix) {
+  data.time = data.time || 0;
+  if (data.opacity == null) data.opacity = 1;
+  if (data.time > 0) {
+    this.__action_doAsyncFunc(
+      data.async,
+      core.setHeroOpacity,
+      data.opacity,
+      data.moveMode,
+      data.time
+    );
+  } else {
+    core.setFlag("__heroOpacity__", data.opacity);
+    core.drawHero();
+    core.doAction();
+  }
+};
+
+events.prototype._action_vibrate = function (data, x, y, prefix) {
+  this.__action_doAsyncFunc(
+    data.async,
+    core.vibrate,
+    data.direction,
+    data.time,
+    data.speed,
+    data.power
+  );
+};
+
+events.prototype._action_sleep = function (data, x, y, prefix) {
+  core.timeout.sleepTimeout = setTimeout(
+    function () {
+      core.timeout.sleepTimeout = null;
+      core.doAction();
+    },
+    core.isReplaying() ? Math.min(data.time, 20) : data.time
+  );
+};
+
+events.prototype._action_wait = function (data, x, y, prefix) {
+  if (core.isReplaying()) {
+    var code = core.status.replay.toReplay.shift();
+    if (
+      code.indexOf("input:") == 0 &&
+      !(code == "input:none" && !data.timeout)
+    ) {
+      if (code == "input:none") {
+        core.status.route.push("input:none");
+        core.setFlag("type", -1);
+        core.setFlag("timeout", 0);
+        this.__action_wait_afterGet(data);
+        return core.doAction();
+      } else {
+        var value = parseInt(code.substring(6));
+        core.status.route.push("input:" + value);
+        this.__action_wait_getValue(value);
+        if (this.__action_wait_afterGet(data) || !data.forceChild)
+          return core.doAction();
+      }
+    }
+    core.control._replay_error(code);
+    return;
+  } else if (data.timeout) {
+    core.status.event.interval = setTimeout(function () {
+      core.status.route.push("input:none");
+      core.setFlag("type", -1);
+      core.setFlag("timeout", 0);
+      core.events.__action_wait_afterGet(data);
+      core.doAction();
+    }, data.timeout);
+  }
+  core.status.event.timeout = new Date().getTime() + (data.timeout || 0);
+};
 
 events.prototype.__action_wait_getValue = function (value) {
-    core.setFlag("timeout", Math.floor(value / 1e8) || 0);
-    value %= 1e8;
-    if (value >= 1000000) {
-        core.setFlag('type', 1);
-        var px = parseInt((value - 1000000) / 1000), py = value % 1000;
-        core.setFlag('px', px);
-        core.setFlag('py', py);
-        core.setFlag('x', parseInt(px / 32));
-        core.setFlag('y', parseInt(py / 32));
-    }
-    else if (value >= 10000) {
-        core.setFlag('type', 1);
-        var x = parseInt((value - 10000) / 100), y = value % 100;
-        core.setFlag('px', 32 * x + 16);
-        core.setFlag('py', 32 * y + 16);
-        core.setFlag('x', x);
-        core.setFlag('y', y);
-    }
-    else if (value > 0) {
-        core.setFlag('type', 0);
-        core.setFlag('keycode', value);
-    }
-}
+  core.setFlag("timeout", Math.floor(value / 1e8) || 0);
+  value %= 1e8;
+  if (value >= 1000000) {
+    core.setFlag("type", 1);
+    var px = parseInt((value - 1000000) / 1000),
+      py = value % 1000;
+    core.setFlag("px", px);
+    core.setFlag("py", py);
+    core.setFlag("x", parseInt(px / 32));
+    core.setFlag("y", parseInt(py / 32));
+  } else if (value >= 10000) {
+    core.setFlag("type", 1);
+    var x = parseInt((value - 10000) / 100),
+      y = value % 100;
+    core.setFlag("px", 32 * x + 16);
+    core.setFlag("py", 32 * y + 16);
+    core.setFlag("x", x);
+    core.setFlag("y", y);
+  } else if (value > 0) {
+    core.setFlag("type", 0);
+    core.setFlag("keycode", value);
+  }
+};
 
 events.prototype.__action_wait_afterGet = function (data) {
-    if (!data.data) return false;
-    var todo = [];
-    var stop = false;
-    var found = false;
-    data.data.forEach(function (one) {
-        if (one._disabled || stop) return;
-        if (one["case"] == "keyboard" && core.getFlag("type") == 0) {
-            (one.keycode + "").split(",").forEach(function (keycode) {
-                if (core.getFlag("keycode", 0) == keycode) {
-                    found = true;
-                    core.push(todo, one.action);
-                    if (one["break"]) stop = true;
-                }
-            });
+  if (!data.data) return false;
+  var todo = [];
+  var stop = false;
+  var found = false;
+  data.data.forEach(function (one) {
+    if (one._disabled || stop) return;
+    if (one["case"] == "keyboard" && core.getFlag("type") == 0) {
+      (one.keycode + "").split(",").forEach(function (keycode) {
+        if (core.getFlag("keycode", 0) == keycode) {
+          found = true;
+          core.push(todo, one.action);
+          if (one["break"]) stop = true;
         }
-        if (one["case"] == "mouse" && one.px instanceof Array
-            && one.py instanceof Array && core.getFlag("type") == 1) {
-            var pxmin = core.calValue(one.px[0]);
-            var pxmax = core.calValue(one.px[1]);
-            var pymin = core.calValue(one.py[0]);
-            var pymax = core.calValue(one.py[1]);
-            var px = core.getFlag("px", 0), py = core.getFlag("py", 0);
-            if (px >= pxmin && px <= pxmax && py >= pymin && py <= pymax) {
-                found = true;
-                core.push(todo, one.action);
-                if (one["break"]) stop = true;
-            }
-        }
-        if (one["case"] == "condition") {
-            var condition = false;
-            try { condition = core.calValue(one.condition); } catch (e) { }
-            if (condition) {
-                found = true;
-                core.push(todo, one.action);
-                if (one["break"]) stop = true;
-            }
-        }
-        if (one["case"] == "timeout" && core.getFlag("type") == -1) {
-            found = true;
-            core.push(todo, one.action);
-            if (one["break"]) stop = true;
-        }
-    })
-    if (found) {
-        core.insertAction(todo);
-        return true;
+      });
     }
-    return false;
-}
+    if (
+      one["case"] == "mouse" &&
+      one.px instanceof Array &&
+      one.py instanceof Array &&
+      core.getFlag("type") == 1
+    ) {
+      var pxmin = core.calValue(one.px[0]);
+      var pxmax = core.calValue(one.px[1]);
+      var pymin = core.calValue(one.py[0]);
+      var pymax = core.calValue(one.py[1]);
+      var px = core.getFlag("px", 0),
+        py = core.getFlag("py", 0);
+      if (px >= pxmin && px <= pxmax && py >= pymin && py <= pymax) {
+        found = true;
+        core.push(todo, one.action);
+        if (one["break"]) stop = true;
+      }
+    }
+    if (one["case"] == "condition") {
+      var condition = false;
+      try {
+        condition = core.calValue(one.condition);
+      } catch (e) {}
+      if (condition) {
+        found = true;
+        core.push(todo, one.action);
+        if (one["break"]) stop = true;
+      }
+    }
+    if (one["case"] == "timeout" && core.getFlag("type") == -1) {
+      found = true;
+      core.push(todo, one.action);
+      if (one["break"]) stop = true;
+    }
+  });
+  if (found) {
+    core.insertAction(todo);
+    return true;
+  }
+  return false;
+};
 
 events.prototype._precompile_wait = function (data) {
-    if (data.data) {
-        data.data.forEach(function (v) {
-            if (v.px != null) v.px = this.__precompile_array(v.px);
-            if (v.py != null) v.py = this.__precompile_array(v.py);
-            if (v.condition != null) v.condition = this.__precompile_array(v.condition);
-            v.action = this.precompile(v.action);
-        }, this);
-    }
-    return data;
-}
+  if (data.data) {
+    data.data.forEach(function (v) {
+      if (v.px != null) v.px = this.__precompile_array(v.px);
+      if (v.py != null) v.py = this.__precompile_array(v.py);
+      if (v.condition != null)
+        v.condition = this.__precompile_array(v.condition);
+      v.action = this.precompile(v.action);
+    }, this);
+  }
+  return data;
+};
 
 events.prototype._action_waitAsync = function (data, x, y, prefix) {
-    var test = window.setInterval(function () {
-        if (!core.hasAsync()
-            && (data.excludeAnimates || core.isReplaying() || core.getPlayingAnimates().length == 0)
-            && (!data.includeSounds || core.isReplaying() || core.getPlayingSounds().length == 0)) {
-            clearInterval(test);
-            core.doAction();
-        }
-    }, 50 / core.status.replay.speed);
-}
+  var test = window.setInterval(function () {
+    if (
+      !core.hasAsync() &&
+      (data.excludeAnimates ||
+        core.isReplaying() ||
+        core.getPlayingAnimates().length == 0) &&
+      (!data.includeSounds ||
+        core.isReplaying() ||
+        core.getPlayingSounds().length == 0)
+    ) {
+      clearInterval(test);
+      core.doAction();
+    }
+  }, 50 / core.status.replay.speed);
+};
 
 events.prototype._action_stopAsync = function (data, x, y, prefix) {
-    core.stopAsync();
-    core.doAction();
-}
+  core.stopAsync();
+  core.doAction();
+};
 
 events.prototype._action_callBook = function (data, x, y, prefix) {
-    if (core.isReplaying() || !core.hasItem('book')) {
-        core.doAction();
-    }
-    else {
-        var e = core.clone(core.status.event.data);
-        core.ui.closePanel();
-        core.openBook();
-        core.status.event.interval = e;
-    }
-}
-
-events.prototype._action_callSave = function (data, x, y, prefix) {
-    if (core.isReplaying() || core.hasFlag("__events__")) {
-        core.removeFlag("__events__");
-        core.doAction();
-    }
-    else {
-        var e = core.clone(core.status.event.data);
-        core.ui.closePanel();
-        var forbidSave = core.hasFlag('__forbidSave__');
-        core.removeFlag('__forbidSave__');
-        core.save();
-        if (forbidSave) core.setFlag('__forbidSave__', true);
-        core.status.event.interval = e;
-    }
-}
-
-events.prototype._action_autoSave = function (data, x, y, prefix) {
-    var forbidSave = core.hasFlag('__forbidSave__');
-    core.removeFlag('__forbidSave__');
-    core.autosave(data.removeLast);
-    if (forbidSave) core.setFlag('__forbidSave__', true);
+  if (core.isReplaying() || !core.hasItem("book")) {
     core.doAction();
-}
-
-events.prototype._action_forbidSave = function (data, x, y, prefix) {
-    core.setFlag('__forbidSave__', data.forbid || null);
-    core.doAction();
-}
-
-events.prototype._action_callLoad = function (data, x, y, prefix) {
-    if (this.__action_checkReplaying()) return;
+  } else {
     var e = core.clone(core.status.event.data);
     core.ui.closePanel();
-    core.load();
+    core.openBook();
     core.status.event.interval = e;
-}
+  }
+};
+
+events.prototype._action_callSave = function (data, x, y, prefix) {
+  if (core.isReplaying() || core.hasFlag("__events__")) {
+    core.removeFlag("__events__");
+    core.doAction();
+  } else {
+    var e = core.clone(core.status.event.data);
+    core.ui.closePanel();
+    var forbidSave = core.hasFlag("__forbidSave__");
+    core.removeFlag("__forbidSave__");
+    core.save();
+    if (forbidSave) core.setFlag("__forbidSave__", true);
+    core.status.event.interval = e;
+  }
+};
+
+events.prototype._action_autoSave = function (data, x, y, prefix) {
+  var forbidSave = core.hasFlag("__forbidSave__");
+  core.removeFlag("__forbidSave__");
+  core.autosave(data.removeLast);
+  if (forbidSave) core.setFlag("__forbidSave__", true);
+  core.doAction();
+};
+
+events.prototype._action_forbidSave = function (data, x, y, prefix) {
+  core.setFlag("__forbidSave__", data.forbid || null);
+  core.doAction();
+};
+
+events.prototype._action_callLoad = function (data, x, y, prefix) {
+  if (this.__action_checkReplaying()) return;
+  var e = core.clone(core.status.event.data);
+  core.ui.closePanel();
+  core.load();
+  core.status.event.interval = e;
+};
 
 events.prototype._action_exit = function (data, x, y, prefix) {
-    this.setEvents([]);
-    core.doAction();
-}
+  this.setEvents([]);
+  core.doAction();
+};
 
 events.prototype._action_previewUI = function (data, x, y, prefix) {
-    this.insertAction(data.action);
-    core.doAction();
-}
+  this.insertAction(data.action);
+  core.doAction();
+};
 
 events.prototype._precompile_previewUI = function (data) {
-    data.action = this.precompile(data.action);
-    return data;
-}
+  data.action = this.precompile(data.action);
+  return data;
+};
 
 events.prototype.__action_doUIEvent = function (data) {
-    this.__action_doUIEvent_doOne(data);
-    var current = core.status.event.data.list[0];
-    while (current.todo.length > 0) {
-        data = current.todo[0];
-        if (this.__action_doUIEvent_doOne(current.todo[0]))
-            current.todo.shift();
-        else break;
-    }
-    core.doAction();
-}
+  this.__action_doUIEvent_doOne(data);
+  var current = core.status.event.data.list[0];
+  while (current.todo.length > 0) {
+    data = current.todo[0];
+    if (this.__action_doUIEvent_doOne(current.todo[0])) current.todo.shift();
+    else break;
+  }
+  core.doAction();
+};
 
 events.prototype.__action_doUIEvent_doOne = function (data) {
-    if (core.ui['_uievent_' + data.type]) {
-        core.ui['_uievent_' + data.type](data);
-        return true;
-    }
-    return false;
-}
+  if (core.ui["_uievent_" + data.type]) {
+    core.ui["_uievent_" + data.type](data);
+    return true;
+  }
+  return false;
+};
 
 events.prototype._action_clearMap = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_fillText = function (data, x, y, prefix) {
-    data.text = core.replaceText(data.text, prefix);
-    this.__action_doUIEvent(data);
-}
+  data.text = core.replaceText(data.text, prefix);
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_fillBoldText = function (data, x, y, prefix) {
-    data.text = core.replaceText(data.text, prefix);
-    this.__action_doUIEvent(data);
-}
+  data.text = core.replaceText(data.text, prefix);
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_fillRect = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_fillPolygon = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._precompile_fillPolygon = function (data) {
-    data.nodes = this.__precompile_array(data.nodes);
-    return data;
-}
+  data.nodes = this.__precompile_array(data.nodes);
+  return data;
+};
 
 events.prototype._action_strokeRect = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_strokePolygon = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._precompile_strokePolygon = function (data) {
-    data.nodes = this.__precompile_array(data.nodes);
-    return data;
-}
+  data.nodes = this.__precompile_array(data.nodes);
+  return data;
+};
 
 events.prototype._action_fillEllipse = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_strokeEllipse = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_fillArc = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_strokeArc = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_drawLine = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_drawArrow = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_setAttribute = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_setFilter = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_drawImage = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_drawIcon = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_drawSelector = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_drawBackground = function (data, x, y, prefix) {
-    this.__action_doUIEvent(data);
-}
+  this.__action_doUIEvent(data);
+};
 
 events.prototype._action_drawTextContent = function (data, x, y, prefix) {
-    data.text = core.replaceText(data.text, prefix);
-    this.__action_doUIEvent(data);
-}
+  data.text = core.replaceText(data.text, prefix);
+  this.__action_doUIEvent(data);
+};
 
 // ------ 点击状态栏图标所进行的一些操作 ------ //
 
 ////// 判断当前能否进入某个事件 //////
 events.prototype._checkStatus = function (name, fromUserAction, checkItem) {
-    if (fromUserAction && core.status.event.id == name) {
-        core.ui.closePanel();
-        return false;
-    }
-    if (fromUserAction && core.status.lockControl) return false;
-    if (checkItem && !core.hasItem(name)) {
-        core.playSound('操作失败');
-        core.drawTip("你没有" + core.material.items[name].name, name);
-        return false;
-    }
-    if (core.isMoving()) {
-        core.playSound('操作失败');
-        core.drawTip("请先停止勇士行动");
-        return false;
-    }
-    core.lockControl();
-    core.status.event.id = name;
-    return true;
-}
+  if (fromUserAction && core.status.event.id == name) {
+    core.ui.closePanel();
+    return false;
+  }
+  if (fromUserAction && core.status.lockControl) return false;
+  if (checkItem && !core.hasItem(name)) {
+    core.playSound("操作失败");
+    core.drawTip("你没有" + core.material.items[name].name, name);
+    return false;
+  }
+  if (core.isMoving()) {
+    core.playSound("操作失败");
+    core.drawTip("请先停止勇士行动");
+    return false;
+  }
+  core.lockControl();
+  core.status.event.id = name;
+  return true;
+};
 
 ////// 点击怪物手册时的打开操作 //////
 events.prototype.openBook = function (fromUserAction) {
-    if (core.isReplaying()) return;
-    // 如果能恢复事件(从callBook事件触发)
-    if (core.status.event.id == 'book' && core.events.recoverEvents(core.status.event.interval))
-        return;
-    // 当前是book,且从“浏览地图”打开
-    if (core.status.event.id == 'book' && core.status.event.ui) {
-        core.status.boxAnimateObjs = [];
-        core.ui._drawViewMaps(core.status.event.ui);
-        return;
-    }
-    // 从“浏览地图”页面打开
-    if (core.status.event.id == 'viewMaps') {
-        fromUserAction = false;
-        core.status.event.ui = core.status.event.data;
-    }
-    if (!this._checkStatus('book', fromUserAction, true)) return;
-    core.playSound('打开界面');
-    core.useItem('book', true);
-}
+  if (core.isReplaying()) return;
+  // 如果能恢复事件(从callBook事件触发)
+  if (
+    core.status.event.id == "book" &&
+    core.events.recoverEvents(core.status.event.interval)
+  )
+    return;
+  // 当前是book,且从“浏览地图”打开
+  if (core.status.event.id == "book" && core.status.event.ui) {
+    core.status.boxAnimateObjs = [];
+    core.ui._drawViewMaps(core.status.event.ui);
+    return;
+  }
+  // 从“浏览地图”页面打开
+  if (core.status.event.id == "viewMaps") {
+    fromUserAction = false;
+    core.status.event.ui = core.status.event.data;
+  }
+  if (!this._checkStatus("book", fromUserAction, true)) return;
+  core.playSound("打开界面");
+  core.useItem("book", true);
+};
 
 ////// 点击楼层传送器时的打开操作 //////
 events.prototype.useFly = function (fromUserAction) {
-    if (core.isReplaying()) return;
-    // 从“浏览地图”页面:尝试直接传送到该层
-    if (core.status.event.id == 'viewMaps') {
-        if (!core.hasItem('fly')) {
-            core.playSound('操作失败');
-            core.drawTip('你没有' + core.material.items['fly'].name, 'fly');
-        } else if (!core.canUseItem('fly') || (core.flags.flyNearStair && !core.nearStair())) {
-            core.playSound('操作失败');
-            core.drawTip('无法传送到当前层', 'fly');
-        } else {
-            core.flyTo(core.status.event.data.floorId);
-        }
-        return;
+  if (core.isReplaying()) return;
+  // 从“浏览地图”页面:尝试直接传送到该层
+  if (core.status.event.id == "viewMaps") {
+    if (!core.hasItem("fly")) {
+      core.playSound("操作失败");
+      core.drawTip("你没有" + core.material.items["fly"].name, "fly");
+    } else if (
+      !core.canUseItem("fly") ||
+      (core.flags.flyNearStair && !core.nearStair())
+    ) {
+      core.playSound("操作失败");
+      core.drawTip("无法传送到当前层", "fly");
+    } else {
+      core.flyTo(core.status.event.data.floorId);
     }
-
-    if (!this._checkStatus('fly', fromUserAction, true)) return;
-    if (core.flags.flyNearStair && !core.nearStair()) {
-        core.playSound('操作失败');
-        core.drawTip("只有在楼梯边才能使用" + core.material.items['fly'].name, 'fly');
-        core.unlockControl();
-        core.status.event.data = null;
-        core.status.event.id = null;
-        return;
-    }
-    if (!core.canUseItem('fly')) {
-        core.playSound('操作失败');
-        core.drawTip(core.material.items['fly'].name + "好像失效了", 'fly');
-        core.unlockControl();
-        core.status.event.data = null;
-        core.status.event.id = null;
-        return;
-    }
-    core.playSound('打开界面');
-    core.useItem('fly', true);
     return;
-}
+  }
+
+  if (!this._checkStatus("fly", fromUserAction, true)) return;
+  if (core.flags.flyNearStair && !core.nearStair()) {
+    core.playSound("操作失败");
+    core.drawTip(
+      "只有在楼梯边才能使用" + core.material.items["fly"].name,
+      "fly"
+    );
+    core.unlockControl();
+    core.status.event.data = null;
+    core.status.event.id = null;
+    return;
+  }
+  if (!core.canUseItem("fly")) {
+    core.playSound("操作失败");
+    core.drawTip(core.material.items["fly"].name + "好像失效了", "fly");
+    core.unlockControl();
+    core.status.event.data = null;
+    core.status.event.id = null;
+    return;
+  }
+  core.playSound("打开界面");
+  core.useItem("fly", true);
+  return;
+};
 
 events.prototype.flyTo = function (toId, callback) {
-    return this.eventdata.flyTo(toId, callback);
-}
+  return this.eventdata.flyTo(toId, callback);
+};
 
 ////// 点击装备栏时的打开操作 //////
 events.prototype.openEquipbox = function (fromUserAction) {
-    if (core.isReplaying()) return;
-    if (!this._checkStatus('equipbox', fromUserAction)) return;
-    core.playSound('打开界面');
-    core.ui._drawEquipbox();
-}
+  if (core.isReplaying()) return;
+  if (!this._checkStatus("equipbox", fromUserAction)) return;
+  core.playSound("打开界面");
+  core.ui._drawEquipbox();
+};
 
 ////// 点击工具栏时的打开操作 //////
 events.prototype.openToolbox = function (fromUserAction) {
-    if (core.isReplaying()) return;
-    if (!this._checkStatus('toolbox', fromUserAction)) return;
-    core.playSound('打开界面');
-    core.ui._drawToolbox();
-}
+  if (core.isReplaying()) return;
+  if (!this._checkStatus("toolbox", fromUserAction)) return;
+  core.playSound("打开界面");
+  core.ui._drawToolbox();
+};
 
 ////// 点击快捷商店按钮时的打开操作 //////
 events.prototype.openQuickShop = function (fromUserAction) {
-    if (core.isReplaying()) return;
+  if (core.isReplaying()) return;
 
-    if (Object.keys(core.status.shops).length == 0) {
-        core.playSound('操作失败');
-        core.drawTip("本游戏没有快捷商店!");
-        return;
+  if (Object.keys(core.status.shops).length == 0) {
+    core.playSound("操作失败");
+    core.drawTip("本游戏没有快捷商店!");
+    return;
+  }
+
+  // --- 如果只有一个商店,则直接打开之
+  if (Object.keys(core.status.shops).length == 1) {
+    var shopId = Object.keys(core.status.shops)[0];
+    if (core.status.event.id != null) return;
+    if (!core.canOpenShop(shopId)) {
+      core.playSound("操作失败");
+      core.drawTip("当前无法打开快捷商店!");
+      return;
     }
-
-    // --- 如果只有一个商店,则直接打开之
-    if (Object.keys(core.status.shops).length == 1) {
-        var shopId = Object.keys(core.status.shops)[0];
-        if (core.status.event.id != null) return;
-        if (!core.canOpenShop(shopId)) {
-            core.playSound('操作失败');
-            core.drawTip("当前无法打开快捷商店!");
-            return;
-        }
-        var message = core.canUseQuickShop(shopId);
-        if (message != null) {
-            core.playSound('操作失败');
-            core.drawTip(message);
-            return;
-        }
-        core.openShop(shopId, false);
-        return;
+    var message = core.canUseQuickShop(shopId);
+    if (message != null) {
+      core.playSound("操作失败");
+      core.drawTip(message);
+      return;
     }
+    core.openShop(shopId, false);
+    return;
+  }
 
-    if (!this._checkStatus('selectShop', fromUserAction)) return;
-    core.ui._drawQuickShop();
-}
+  if (!this._checkStatus("selectShop", fromUserAction)) return;
+  core.ui._drawQuickShop();
+};
 
 events.prototype.openKeyBoard = function (fromUserAction) {
-    if (core.isReplaying()) return;
-    if (!this._checkStatus('keyBoard', fromUserAction)) return;
-    core.ui._drawKeyBoard();
-}
+  if (core.isReplaying()) return;
+  if (!this._checkStatus("keyBoard", fromUserAction)) return;
+  core.ui._drawKeyBoard();
+};
 
 ////// 点击保存按钮时的打开操作 //////
 events.prototype.save = function (fromUserAction) {
-    if (core.isReplaying()) return;
-    if (core.hasFlag('__forbidSave__')) {
-        core.playSound('操作失败');
-        core.drawTip('当前禁止存档');
-        return;
-    }
-    if (core.status.event.id == 'save' && core.events.recoverEvents(core.status.event.interval))
-        return;
-    if (!this._checkStatus('save', fromUserAction)) return;
-    var saveIndex = core.saves.saveIndex;
-    var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page;
-    core.playSound('打开界面');
-    core.ui._drawSLPanel(10 * page + offset);
-}
+  if (core.isReplaying()) return;
+  if (core.hasFlag("__forbidSave__")) {
+    core.playSound("操作失败");
+    core.drawTip("当前禁止存档");
+    return;
+  }
+  if (
+    core.status.event.id == "save" &&
+    core.events.recoverEvents(core.status.event.interval)
+  )
+    return;
+  if (!this._checkStatus("save", fromUserAction)) return;
+  var saveIndex = core.saves.saveIndex;
+  var page = parseInt((saveIndex - 1) / 5),
+    offset = saveIndex - 5 * page;
+  core.playSound("打开界面");
+  core.ui._drawSLPanel(10 * page + offset);
+};
 
 ////// 点击读取按钮时的打开操作 //////
 events.prototype.load = function (fromUserAction) {
-    if (core.isReplaying()) return;
-    var saveIndex = core.saves.saveIndex;
-    var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page;
-    // 游戏开始前读档
-    if (!core.isPlaying()) {
-        core.dom.startPanel.style.display = 'none';
-        core.clearStatus();
-        core.clearMap('all');
-        core.status.event = { 'id': 'load', 'data': null };
-        core.status.lockControl = true;
-        core.playSound('打开界面');
-        core.ui._drawSLPanel(10 * page + offset);
-        return;
-    }
-    if (core.status.event.id == 'load' && core.events.recoverEvents(core.status.event.interval))
-        return;
-    if (!this._checkStatus('load', fromUserAction)) return;
-    core.playSound('打开界面');
+  if (core.isReplaying()) return;
+  var saveIndex = core.saves.saveIndex;
+  var page = parseInt((saveIndex - 1) / 5),
+    offset = saveIndex - 5 * page;
+  // 游戏开始前读档
+  if (!core.isPlaying()) {
+    core.dom.startPanel.style.display = "none";
+    core.clearStatus();
+    core.clearMap("all");
+    core.status.event = { id: "load", data: null };
+    core.status.lockControl = true;
+    core.playSound("打开界面");
     core.ui._drawSLPanel(10 * page + offset);
-}
+    return;
+  }
+  if (
+    core.status.event.id == "load" &&
+    core.events.recoverEvents(core.status.event.interval)
+  )
+    return;
+  if (!this._checkStatus("load", fromUserAction)) return;
+  core.playSound("打开界面");
+  core.ui._drawSLPanel(10 * page + offset);
+};
 
 ////// 点击设置按钮时的操作 //////
 events.prototype.openSettings = function (fromUserAction) {
-    if (core.isReplaying()) return;
-    if (!this._checkStatus('settings', fromUserAction))
-        return;
-    core.playSound('打开界面');
-    core.ui._drawSettings();
-}
+  if (core.isReplaying()) return;
+  if (!this._checkStatus("settings", fromUserAction)) return;
+  core.playSound("打开界面");
+  core.ui._drawSettings();
+};
 
 // ------ 一些事件的具体执行过程 ------ //
 
 events.prototype.hasAsync = function () {
-    return Object.keys(core.animateFrame.asyncId).length > 0;
-}
+  return Object.keys(core.animateFrame.asyncId).length > 0;
+};
 
 ////// 立刻停止所有异步事件 //////
 events.prototype.stopAsync = function () {
-    var callbacks = [];
-    for (var id in core.animateFrame.asyncId) {
-        clearInterval(id);
-        callbacks.push(core.animateFrame.asyncId[id]);
-    }
-    core.animateFrame.asyncId = {};
-    callbacks.forEach(function (cb) {
-        if (cb && cb instanceof Function) cb();
-    });
-}
+  var callbacks = [];
+  for (var id in core.animateFrame.asyncId) {
+    clearInterval(id);
+    callbacks.push(core.animateFrame.asyncId[id]);
+  }
+  core.animateFrame.asyncId = {};
+  callbacks.forEach(function (cb) {
+    if (cb && cb instanceof Function) cb();
+  });
+};
 
 events.prototype.hasAsyncAnimate = function () {
-    return (core.status.animateObjs || []).length > 0;
-}
+  return (core.status.animateObjs || []).length > 0;
+};
 
 ////// 跟随 //////
 events.prototype.follow = function (name) {
-    name = core.getMappedName(name);
-    if (core.material.images.images[name]) {
-        core.status.hero.followers.push({ "name": name });
-        core.gatherFollowers();
-        core.clearMap('hero');
-        core.drawHero();
-    }
-    core.clearRouteFolding();
-}
+  name = core.getMappedName(name);
+  if (core.material.images.images[name]) {
+    core.status.hero.followers.push({ name: name });
+    core.gatherFollowers();
+    core.clearMap("hero");
+    core.drawHero();
+  }
+  core.clearRouteFolding();
+};
 
 ////// 取消跟随 //////
 events.prototype.unfollow = function (name) {
-    if (!name) {
-        core.status.hero.followers = [];
+  if (!name) {
+    core.status.hero.followers = [];
+  } else {
+    name = core.getMappedName(name);
+    for (var i = 0; i < core.status.hero.followers.length; i++) {
+      if (core.status.hero.followers[i].name == name) {
+        core.status.hero.followers.splice(i, 1);
+        break;
+      }
     }
-    else {
-        name = core.getMappedName(name);
-        for (var i = 0; i < core.status.hero.followers.length; i++) {
-            if (core.status.hero.followers[i].name == name) {
-                core.status.hero.followers.splice(i, 1);
-                break;
-            }
-        }
-    }
-    core.gatherFollowers();
-    core.clearMap('hero');
-    core.drawHero();
-    core.clearRouteFolding();
-}
+  }
+  core.gatherFollowers();
+  core.clearMap("hero");
+  core.drawHero();
+  core.clearRouteFolding();
+};
 
-events.prototype._updateValueByOperator = function (value, originValue, operator) {
-    switch (operator) {
-        case '+=': value = originValue + value; break;
-        case '-=': value = originValue - value; break;
-        case '*=': value = originValue * value; break;
-        case '/=': value = originValue / value; break;
-        case '**=': value = Math.pow(originValue, value); break;
-        case '//=': value = Math.trunc(originValue / value); break;
-        case '%=': value = originValue % value; break;
-        case 'min=': value = Math.min(originValue, value); break;
-        case 'max=': value = Math.max(originValue, value); break;
-        default: break;
-    }
-    return value;
-}
+events.prototype._updateValueByOperator = function (
+  value,
+  originValue,
+  operator
+) {
+  switch (operator) {
+    case "+=":
+      value = originValue + value;
+      break;
+    case "-=":
+      value = originValue - value;
+      break;
+    case "*=":
+      value = originValue * value;
+      break;
+    case "/=":
+      value = originValue / value;
+      break;
+    case "**=":
+      value = Math.pow(originValue, value);
+      break;
+    case "//=":
+      value = Math.trunc(originValue / value);
+      break;
+    case "%=":
+      value = originValue % value;
+      break;
+    case "min=":
+      value = Math.min(originValue, value);
+      break;
+    case "max=":
+      value = Math.max(originValue, value);
+      break;
+    default:
+      break;
+  }
+  return value;
+};
 
 ////// 数值操作 //////
 events.prototype.setValue = function (name, operator, value, prefix) {
-    value = this._updateValueByOperator(core.calValue(value, prefix), core.calValue(name, prefix), operator);
-    this._setValue_setStatus(name, value);
-    this._setValue_setBuff(name, value);
-    this._setValue_setItem(name, value);
-    this._setValue_setFlag(name, value);
-    this._setValue_setSwitch(name, value, prefix);
-    this._setValue_setTemp(name, value, prefix);
-    this._setValue_setGlobal(name, value);
-}
+  value = this._updateValueByOperator(
+    core.calValue(value, prefix),
+    core.calValue(name, prefix),
+    operator
+  );
+  this._setValue_setStatus(name, value);
+  this._setValue_setBuff(name, value);
+  this._setValue_setItem(name, value);
+  this._setValue_setFlag(name, value);
+  this._setValue_setSwitch(name, value, prefix);
+  this._setValue_setTemp(name, value, prefix);
+  this._setValue_setGlobal(name, value);
+};
 
 events.prototype._setValue_setStatus = function (name, value) {
-    if (name.indexOf("status:") !== 0) return;
-    core.setStatus(name.substring(7), value);
-}
+  if (name.indexOf("status:") !== 0) return;
+  core.setStatus(name.substring(7), value);
+};
 
 events.prototype._setValue_setBuff = function (name, value) {
-    if (name.indexOf('buff:') !== 0) return;
-    core.setBuff(name.substring(5), value);
-}
+  if (name.indexOf("buff:") !== 0) return;
+  core.setBuff(name.substring(5), value);
+};
 
 events.prototype._setValue_setItem = function (name, value) {
-    if (name.indexOf("item:") !== 0) return;
-    var itemId = name.substring(5), count = core.itemCount(itemId);
-    if (value > count) core.getItem(itemId, value - count);
-    else core.setItem(itemId, value);
-}
+  if (name.indexOf("item:") !== 0) return;
+  var itemId = name.substring(5),
+    count = core.itemCount(itemId);
+  if (value > count) core.getItem(itemId, value - count);
+  else core.setItem(itemId, value);
+};
 
 events.prototype._setValue_setFlag = function (name, value) {
-    if (name.indexOf("flag:") !== 0) return;
-    core.setFlag(name.substring(5), value);
-}
+  if (name.indexOf("flag:") !== 0) return;
+  core.setFlag(name.substring(5), value);
+};
 
 events.prototype._setValue_setSwitch = function (name, value, prefix) {
-    if (name.indexOf("switch:") !== 0) return;
-    core.setFlag((prefix || ":f@x@y") + "@" + name.substring(7), value);
-}
+  if (name.indexOf("switch:") !== 0) return;
+  core.setFlag((prefix || ":f@x@y") + "@" + name.substring(7), value);
+};
 
 events.prototype._setValue_setTemp = function (name, value) {
-    if (name.indexOf("temp:") !== 0) return;
-    core.setFlag("@temp@" + name.substring(5), value);
-}
+  if (name.indexOf("temp:") !== 0) return;
+  core.setFlag("@temp@" + name.substring(5), value);
+};
 
 events.prototype._setValue_setGlobal = function (name, value) {
-    if (name.indexOf("global:") !== 0) return;
-    core.setGlobal(name.substring(7), value);
-}
+  if (name.indexOf("global:") !== 0) return;
+  core.setGlobal(name.substring(7), value);
+};
 
 ////// 设置一个怪物属性 //////
-events.prototype.setEnemy = function (id, name, value, operator, prefix, norefresh) {
-    if (!core.hasFlag('enemyInfo')) {
-        core.setFlag('enemyInfo', {});
-    }
-    var enemyInfo = core.getFlag('enemyInfo');
-    if (!enemyInfo[id]) enemyInfo[id] = {};
-    if (typeof value === 'string' && name == 'name') value = value.replace(/\r/g, '\\r');
-    value = this._updateValueByOperator(core.calValue(value, prefix), (core.material.enemys[id] || {})[name], operator);
-    enemyInfo[id][name] = value;
-    (core.material.enemys[id] || {})[name] = core.clone(value);
-    if (!norefresh) core.updateStatusBar();
-}
+events.prototype.setEnemy = function (
+  id,
+  name,
+  value,
+  operator,
+  prefix,
+  norefresh
+) {
+  if (!core.hasFlag("enemyInfo")) {
+    core.setFlag("enemyInfo", {});
+  }
+  var enemyInfo = core.getFlag("enemyInfo");
+  if (!enemyInfo[id]) enemyInfo[id] = {};
+  if (typeof value === "string" && name == "name")
+    value = value.replace(/\r/g, "\\r");
+  value = this._updateValueByOperator(
+    core.calValue(value, prefix),
+    (core.material.enemys[id] || {})[name],
+    operator
+  );
+  enemyInfo[id][name] = value;
+  (core.material.enemys[id] || {})[name] = core.clone(value);
+  if (!norefresh) core.updateStatusBar();
+};
 
 ////// 设置某个点上的怪物属性 //////
-events.prototype.setEnemyOnPoint = function (x, y, floorId, name, value, operator, prefix, norefresh) {
-    floorId = floorId || core.status.floorId;
-    var block = core.getBlock(x, y, floorId);
-    if (block == null) return;
-    if (block.event.cls.indexOf('enemy') != 0) return;
-    var enemy = core.material.enemys[block.event.id];
-    if (enemy == null) return;
-    if (typeof value === 'string' && name == 'name') value = value.replaceAll(/\r/g, '\\r');
-    value = this._updateValueByOperator(core.calValue(value, prefix), core.getEnemyValue(enemy, name, x, y, floorId), operator);
-    flags.enemyOnPoint = flags.enemyOnPoint || {};
-    flags.enemyOnPoint[floorId] = flags.enemyOnPoint[floorId] || {};
-    flags.enemyOnPoint[floorId][x + "," + y] = flags.enemyOnPoint[floorId][x + "," + y] || {};
-    flags.enemyOnPoint[floorId][x + "," + y][name] = value;
-    if (!norefresh) core.updateStatusBar();
-}
+events.prototype.setEnemyOnPoint = function (
+  x,
+  y,
+  floorId,
+  name,
+  value,
+  operator,
+  prefix,
+  norefresh
+) {
+  floorId = floorId || core.status.floorId;
+  var block = core.getBlock(x, y, floorId);
+  if (block == null) return;
+  if (block.event.cls.indexOf("enemy") != 0) return;
+  var enemy = core.material.enemys[block.event.id];
+  if (enemy == null) return;
+  if (typeof value === "string" && name == "name")
+    value = value.replaceAll(/\r/g, "\\r");
+  value = this._updateValueByOperator(
+    core.calValue(value, prefix),
+    core.getEnemyValue(enemy, name, x, y, floorId),
+    operator
+  );
+  flags.enemyOnPoint = flags.enemyOnPoint || {};
+  flags.enemyOnPoint[floorId] = flags.enemyOnPoint[floorId] || {};
+  flags.enemyOnPoint[floorId][x + "," + y] =
+    flags.enemyOnPoint[floorId][x + "," + y] || {};
+  flags.enemyOnPoint[floorId][x + "," + y][name] = value;
+  if (!norefresh) core.updateStatusBar();
+};
 
 ////// 重置某个点上的怪物属性 //////
 events.prototype.resetEnemyOnPoint = function (x, y, floorId, norefresh) {
-    delete ((flags.enemyOnPoint || {})[floorId || core.status.floorId] || {})[x + "," + y];
-    if (!norefresh) core.updateStatusBar();
-}
+  delete ((flags.enemyOnPoint || {})[floorId || core.status.floorId] || {})[
+    x + "," + y
+  ];
+  if (!norefresh) core.updateStatusBar();
+};
 
 ////// 将某个点上已经设置的怪物属性移动到其他点 //////
-events.prototype.moveEnemyOnPoint = function (fromX, fromY, toX, toY, floorId, norefresh) {
-    floorId = floorId || core.status.floorId;
-    if (((flags.enemyOnPoint || {})[floorId] || {})[fromX + "," + fromY]) {
-        flags.enemyOnPoint[floorId][toX + "," + toY] = flags.enemyOnPoint[floorId][fromX + "," + fromY];
-        delete flags.enemyOnPoint[floorId][fromX + "," + fromY];
-        if (!norefresh) core.updateStatusBar();
-    }
-}
+events.prototype.moveEnemyOnPoint = function (
+  fromX,
+  fromY,
+  toX,
+  toY,
+  floorId,
+  norefresh
+) {
+  floorId = floorId || core.status.floorId;
+  if (((flags.enemyOnPoint || {})[floorId] || {})[fromX + "," + fromY]) {
+    flags.enemyOnPoint[floorId][toX + "," + toY] =
+      flags.enemyOnPoint[floorId][fromX + "," + fromY];
+    delete flags.enemyOnPoint[floorId][fromX + "," + fromY];
+    if (!norefresh) core.updateStatusBar();
+  }
+};
 
 ////// 设置楼层属性 //////
 events.prototype.setFloorInfo = function (name, value, floorId, prefix) {
-    floorId = floorId || core.status.floorId;
-    core.status.maps[floorId][name] = value;
-    core.updateStatusBar();
-}
+  floorId = floorId || core.status.floorId;
+  core.status.maps[floorId][name] = value;
+  core.updateStatusBar();
+};
 
 ////// 设置全塔属性 //////
 events.prototype.setGlobalAttribute = function (name, value) {
-    if (typeof value == 'string') {
-        if ((value.charAt(0) == '"' && value.charAt(value.length - 1) == '"')
-            || (value.charAt(0) == "'" && value.charAt(value.length - 1) == "'"))
-            value = value.substring(1, value.length - 1);
-        // --- 检查 []
-        if (value.charAt(0) == '[' && value.charAt(value.length - 1) == ']')
-            value = eval(value);
-        // --- 检查颜色
-        if (/^[0-9 ]+,[0-9 ]+,[0-9 ]+(,[0-9. ]+)?$/.test(value)) {
-            value = 'rgba(' + value + ')';
-        }
+  if (typeof value == "string") {
+    if (
+      (value.charAt(0) == '"' && value.charAt(value.length - 1) == '"') ||
+      (value.charAt(0) == "'" && value.charAt(value.length - 1) == "'")
+    )
+      value = value.substring(1, value.length - 1);
+    // --- 检查 []
+    if (value.charAt(0) == "[" && value.charAt(value.length - 1) == "]")
+      value = eval(value);
+    // --- 检查颜色
+    if (/^[0-9 ]+,[0-9 ]+,[0-9 ]+(,[0-9. ]+)?$/.test(value)) {
+      value = "rgba(" + value + ")";
     }
-    core.status.globalAttribute[name] = value;
-    core.setFlag('globalAttribute', core.status.globalAttribute);
-    core.resize();
-}
+  }
+  core.status.globalAttribute[name] = value;
+  core.setFlag("globalAttribute", core.status.globalAttribute);
+  core.resize();
+};
 
 ////// 设置全局开关 //////
 events.prototype.setGlobalFlag = function (name, value) {
-    var flags = core.getFlag("globalFlags", {});
-    if (name.startsWith('s:')) {
-        name = name.substring(2);
-        var statusBarItems = core.flags.statusBarItems.filter(function (v) { return v != name; });
-        if (value) statusBarItems.push(name);
-        core.flags.statusBarItems = statusBarItems;
-        flags.statusBarItems = core.clone(statusBarItems);
-    } else {
-        flags[name] = core.flags[name] = value;
-    }
-    core.setFlag("globalFlags", flags);
-    core.resize();
-    if (name == 'blurFg')
-        core.redrawMap();
-}
+  var flags = core.getFlag("globalFlags", {});
+  if (name.startsWith("s:")) {
+    name = name.substring(2);
+    var statusBarItems = core.flags.statusBarItems.filter(function (v) {
+      return v != name;
+    });
+    if (value) statusBarItems.push(name);
+    core.flags.statusBarItems = statusBarItems;
+    flags.statusBarItems = core.clone(statusBarItems);
+  } else {
+    flags[name] = core.flags[name] = value;
+  }
+  core.setFlag("globalFlags", flags);
+  core.resize();
+  if (name == "blurFg") core.redrawMap();
+};
 
 ////// 设置文件别名 //////
 events.prototype.setNameMap = function (name, value) {
-    if (!core.hasFlag('__nameMap__')) core.setFlag('__nameMap__', {});
-    flags.__nameMap__[name] = value;
-}
+  if (!core.hasFlag("__nameMap__")) core.setFlag("__nameMap__", {});
+  flags.__nameMap__[name] = value;
+};
 
 ////// 设置剧情文本的属性 //////
 events.prototype.setTextAttribute = function (data) {
-    if (!core.isPlaying()) return;
-    ["position", "offset", "align", "bold", "titlefont", "textfont", "lineHeight", "time", "letterSpacing", "animateTime"].forEach(function (t) {
-        if (data[t] != null) core.status.textAttribute[t] = data[t];
-    });
-    ["background", "title", "text"].forEach(function (t) {
-        if ((data[t] instanceof Array) && data[t].length >= 3) {
-            if (data[t].length == 3) data[t].push(1);
-            core.status.textAttribute[t] = data[t];
-        }
-        if (t == 'background') {
-            var name = core.getMappedName(data[t]);
-            var img = core.material.images.images[name];
-            if (img && img.width == 192 && img.height == 128) {
-                core.status.textAttribute[t] = name;
-            }
-        }
-    });
-    if (main.mode == 'play') core.setFlag('textAttribute', core.status.textAttribute);
-}
-
-events.prototype.moveTextBox = function (code, loc, relative, moveMode, time, callback) {
-    var ctx = core.getContextByName('__text__' + code);
-    if (!ctx) {
-        if (callback) callback();
-        return;
+  if (!core.isPlaying()) return;
+  [
+    "position",
+    "offset",
+    "align",
+    "bold",
+    "titlefont",
+    "textfont",
+    "lineHeight",
+    "time",
+    "letterSpacing",
+    "animateTime",
+  ].forEach(function (t) {
+    if (data[t] != null) core.status.textAttribute[t] = data[t];
+  });
+  ["background", "title", "text"].forEach(function (t) {
+    if (data[t] instanceof Array && data[t].length >= 3) {
+      if (data[t].length == 3) data[t].push(1);
+      core.status.textAttribute[t] = data[t];
     }
-    var sx = parseInt(ctx.canvas.getAttribute('_text_left')) || 0;
-    var sy = parseInt(ctx.canvas.getAttribute('_text_top')) || 0;
-    var dx = relative ? loc[0] : (loc[0] - sx);
-    var dy = relative ? loc[1] : (loc[1] - sy);
-    var ox = parseInt(ctx.canvas.getAttribute('_left')) || 0;
-    var oy = parseInt(ctx.canvas.getAttribute('_top')) || 0;
-
-    if (!time) {
-        core.relocateCanvas(ctx, ox + dx, oy + dy);
-        ctx.canvas.setAttribute('_text_left', loc[0]);
-        ctx.canvas.setAttribute('_text_top', loc[1]);
-        if (callback) callback();
-        return;
+    if (t == "background") {
+      var name = core.getMappedName(data[t]);
+      var img = core.material.images.images[name];
+      if (img && img.width == 192 && img.height == 128) {
+        core.status.textAttribute[t] = name;
+      }
     }
+  });
+  if (main.mode == "play")
+    core.setFlag("textAttribute", core.status.textAttribute);
+};
 
-    var moveInfo = {
-        sx: sx, sy: sy, dx: dx, dy: dy, ox: ox, oy: oy,
-        moveMode: moveMode, time: time / Math.max(core.status.replay.speed, 1)
-    };
-    this._moveTextBox_moving(ctx, moveInfo, callback);
-}
+events.prototype.moveTextBox = function (
+  code,
+  loc,
+  relative,
+  moveMode,
+  time,
+  callback
+) {
+  var ctx = core.getContextByName("__text__" + code);
+  if (!ctx) {
+    if (callback) callback();
+    return;
+  }
+  var sx = parseInt(ctx.canvas.getAttribute("_text_left")) || 0;
+  var sy = parseInt(ctx.canvas.getAttribute("_text_top")) || 0;
+  var dx = relative ? loc[0] : loc[0] - sx;
+  var dy = relative ? loc[1] : loc[1] - sy;
+  var ox = parseInt(ctx.canvas.getAttribute("_left")) || 0;
+  var oy = parseInt(ctx.canvas.getAttribute("_top")) || 0;
+
+  if (!time) {
+    core.relocateCanvas(ctx, ox + dx, oy + dy);
+    ctx.canvas.setAttribute("_text_left", loc[0]);
+    ctx.canvas.setAttribute("_text_top", loc[1]);
+    if (callback) callback();
+    return;
+  }
+
+  var moveInfo = {
+    sx: sx,
+    sy: sy,
+    dx: dx,
+    dy: dy,
+    ox: ox,
+    oy: oy,
+    moveMode: moveMode,
+    time: time / Math.max(core.status.replay.speed, 1),
+  };
+  this._moveTextBox_moving(ctx, moveInfo, callback);
+};
 
 events.prototype._moveTextBox_moving = function (ctx, moveInfo, callback) {
-    var step = 0, steps = moveInfo.time / 10;
-    if (steps <= 0) steps = 1;
-    var moveFunc = core.applyEasing(moveInfo.moveMode);
-    var animate = setInterval(function () {
-        step++;
-        var dx = moveInfo.dx * moveFunc(step / steps);
-        var dy = moveInfo.dy * moveFunc(step / steps);
-        core.relocateCanvas(ctx, parseInt(moveInfo.ox + dx), parseInt(moveInfo.oy + dy));
-        ctx.canvas.setAttribute('_text_left', moveInfo.sx + dx);
-        ctx.canvas.setAttribute('_text_top', moveInfo.sy + dy);
-        if (step == steps) {
-            delete core.animateFrame.asyncId[animate];
-            clearInterval(animate);
-            if (callback) callback();
-        }
-    }, 10);
+  var step = 0,
+    steps = moveInfo.time / 10;
+  if (steps <= 0) steps = 1;
+  var moveFunc = core.applyEasing(moveInfo.moveMode);
+  var animate = setInterval(function () {
+    step++;
+    var dx = moveInfo.dx * moveFunc(step / steps);
+    var dy = moveInfo.dy * moveFunc(step / steps);
+    core.relocateCanvas(
+      ctx,
+      parseInt(moveInfo.ox + dx),
+      parseInt(moveInfo.oy + dy)
+    );
+    ctx.canvas.setAttribute("_text_left", moveInfo.sx + dx);
+    ctx.canvas.setAttribute("_text_top", moveInfo.sy + dy);
+    if (step == steps) {
+      delete core.animateFrame.asyncId[animate];
+      clearInterval(animate);
+      if (callback) callback();
+    }
+  }, 10);
 
-    core.animateFrame.lastAsyncId = animate;
-    core.animateFrame.asyncId[animate] = callback;
-}
+  core.animateFrame.lastAsyncId = animate;
+  core.animateFrame.asyncId[animate] = callback;
+};
 
 ////// 清除对话框 //////
 events.prototype.clearTextBox = function (code, callback) {
-    if (code == null) {
-        code = Object.keys(core.dymCanvas).filter(function (one) { return one.startsWith('__text__') })
-            .map(function (one) { return one.substring('__text__'.length); })
-    }
+  if (code == null) {
+    code = Object.keys(core.dymCanvas)
+      .filter(function (one) {
+        return one.startsWith("__text__");
+      })
+      .map(function (one) {
+        return one.substring("__text__".length);
+      });
+  }
 
-    if (!(code instanceof Array)) code = [code];
-    var index = 0;
-    var _work = function () {
-        if (index == code.length) {
-            if (callback) callback();
-            return;
-        }
-        var ctx = '__text__' + code[index++];
-        if (!core.getContextByName(ctx)) return _work();
-        core.ui._animateUI('hide', ctx, function () {
-            core.deleteCanvas(ctx);
-            _work();
-        });
-    };
-    _work();
-}
+  if (!(code instanceof Array)) code = [code];
+  var index = 0;
+  var _work = function () {
+    if (index == code.length) {
+      if (callback) callback();
+      return;
+    }
+    var ctx = "__text__" + code[index++];
+    if (!core.getContextByName(ctx)) return _work();
+    core.ui._animateUI("hide", ctx, function () {
+      core.deleteCanvas(ctx);
+      _work();
+    });
+  };
+  _work();
+};
 
 ////// 关门 //////
 events.prototype.closeDoor = function (x, y, id, callback) {
-    id = id || "";
-    if ((core.material.icons.animates[id] == null && core.material.icons.npc48[id] == null)
-        || core.getBlock(x, y) != null) {
-        if (callback) callback();
+  id = id || "";
+  if (
+    (core.material.icons.animates[id] == null &&
+      core.material.icons.npc48[id] == null) ||
+    core.getBlock(x, y) != null
+  ) {
+    if (callback) callback();
+    return;
+  }
+  var block = core.getBlockById(id);
+  var doorInfo = (block.event || {}).doorInfo;
+  if (!doorInfo) {
+    if (callback) callback();
+    return;
+  }
+
+  core.playSound(doorInfo.closeSound);
+  var blockInfo = core.getBlockInfo(block);
+  var speed = (doorInfo.time || 160) / 4;
+  blockInfo.posX = 3;
+  core.maps._drawBlockInfo(blockInfo, x, y);
+
+  var cb = function () {
+    core.setBlock(id, x, y);
+    core.showBlock(x, y);
+    if (callback) callback();
+  };
+
+  var animate = window.setInterval(
+    function () {
+      blockInfo.posX--;
+      if (blockInfo.posX < 0) {
+        clearInterval(animate);
+        delete core.animateFrame.asyncId[animate];
+        cb();
         return;
-    }
-    var block = core.getBlockById(id);
-    var doorInfo = (block.event || {}).doorInfo;
-    if (!doorInfo) {
-        if (callback) callback();
-        return;
-    }
+      }
+      core.maps._drawBlockInfo(blockInfo, x, y);
+    },
+    core.status.replay.speed == 24
+      ? 1
+      : speed / Math.max(core.status.replay.speed, 1)
+  );
 
-    core.playSound(doorInfo.closeSound);
-    var blockInfo = core.getBlockInfo(block);
-    var speed = (doorInfo.time || 160) / 4;
-    blockInfo.posX = 3;
-    core.maps._drawBlockInfo(blockInfo, x, y);
-
-    var cb = function () {
-        core.setBlock(id, x, y);
-        core.showBlock(x, y);
-        if (callback) callback();
-    }
-
-    var animate = window.setInterval(function () {
-        blockInfo.posX--;
-        if (blockInfo.posX < 0) {
-            clearInterval(animate);
-            delete core.animateFrame.asyncId[animate];
-            cb();
-            return;
-        }
-        core.maps._drawBlockInfo(blockInfo, x, y);
-    }, core.status.replay.speed == 24 ? 1 : speed / Math.max(core.status.replay.speed, 1));
-
-    core.animateFrame.lastAsyncId = animate;
-    core.animateFrame.asyncId[animate] = cb;
-}
+  core.animateFrame.lastAsyncId = animate;
+  core.animateFrame.asyncId[animate] = cb;
+};
 
 ////// 显示图片 //////
-events.prototype.showImage = function (code, image, sloc, loc, opacityVal, time, callback) {
-    var imageName = null;
-    if (typeof image == 'string') {
-        imageName = image;
-        if (image.endsWith(':x') || image.endsWith(':y') || image.endsWith(':o')) {
-            image = image.substring(0, image.length - 2);
-        }
-        image = core.getMappedName(image);
-        image = core.material.images.images[image];
+events.prototype.showImage = function (
+  code,
+  image,
+  sloc,
+  loc,
+  opacityVal,
+  time,
+  callback
+) {
+  var imageName = null;
+  if (typeof image == "string") {
+    imageName = image;
+    if (image.endsWith(":x") || image.endsWith(":y") || image.endsWith(":o")) {
+      image = image.substring(0, image.length - 2);
     }
-    if (!image) {
-        if (callback) callback();
-        return;
-    }
-    sloc = sloc || [];
-    var sx = core.calValue(sloc[0]) || 0, sy = core.calValue(sloc[1]) || 0;
-    var sw = core.calValue(sloc[2]), sh = core.calValue(sloc[3]);
-    if (sw == null) sw = image.width;
-    if (sh == null) sh = image.height;
-    loc = loc || [];
-    var x = core.calValue(loc[0]) || 0, y = core.calValue(loc[1]) || 0;
-    var w = core.calValue(loc[2]), h = core.calValue(loc[3]);
-    if (w == null) w = sw;
-    if (h == null) h = sh;
-    var zIndex = code + 100;
-    time = time || 0;
-    var name = "image" + zIndex;
-    var ctx = core.createCanvas(name, x, y, w, h, zIndex);
-    core.drawImage(ctx, imageName == null ? image : imageName, sx, sy, sw, sh, 0, 0, w, h);
-    if (time == 0) {
-        core.setOpacity(name, opacityVal);
-        if (callback) callback();
-        return;
-    }
-    core.setOpacity(name, 0);
-    this.moveImage(code, null, opacityVal, null, time, callback);
-}
+    image = core.getMappedName(image);
+    image = core.material.images.images[image];
+  }
+  if (!image) {
+    if (callback) callback();
+    return;
+  }
+  sloc = sloc || [];
+  var sx = core.calValue(sloc[0]) || 0,
+    sy = core.calValue(sloc[1]) || 0;
+  var sw = core.calValue(sloc[2]),
+    sh = core.calValue(sloc[3]);
+  if (sw == null) sw = image.width;
+  if (sh == null) sh = image.height;
+  loc = loc || [];
+  var x = core.calValue(loc[0]) || 0,
+    y = core.calValue(loc[1]) || 0;
+  var w = core.calValue(loc[2]),
+    h = core.calValue(loc[3]);
+  if (w == null) w = sw;
+  if (h == null) h = sh;
+  var zIndex = code + 100;
+  time = time || 0;
+  var name = "image" + zIndex;
+  var ctx = core.createCanvas(name, x, y, w, h, zIndex);
+  core.drawImage(
+    ctx,
+    imageName == null ? image : imageName,
+    sx,
+    sy,
+    sw,
+    sh,
+    0,
+    0,
+    w,
+    h
+  );
+  if (time == 0) {
+    core.setOpacity(name, opacityVal);
+    if (callback) callback();
+    return;
+  }
+  core.setOpacity(name, 0);
+  this.moveImage(code, null, opacityVal, null, time, callback);
+};
 
 ////// 隐藏图片 //////
 events.prototype.hideImage = function (code, time, callback) {
-    time = time || 0;
-    var name = "image" + (code + 100);
-    if (time == 0 || !core.dymCanvas[name]) {
-        core.deleteCanvas(name);
-        if (callback) callback();
-        return;
-    }
-    this.moveImage(code, null, 0, null, time, function () {
-        core.deleteCanvas(name);
-        if (callback) callback();
-    });
-}
+  time = time || 0;
+  var name = "image" + (code + 100);
+  if (time == 0 || !core.dymCanvas[name]) {
+    core.deleteCanvas(name);
+    if (callback) callback();
+    return;
+  }
+  this.moveImage(code, null, 0, null, time, function () {
+    core.deleteCanvas(name);
+    if (callback) callback();
+  });
+};
 
 ////// 移动图片 //////
-events.prototype.moveImage = function (code, to, opacityVal, moveMode, time, callback) {
-    to = to || [];
-    var name = "image" + (code + 100);
-    if (!core.dymCanvas[name]) {
-        if (callback) callback();
-        return;
-    }
-    var getOrDefault = function (a, b) {
-        a = core.calValue(a);
-        return a != null ? a : b;
-    }
-    var canvas = core.dymCanvas[name].canvas;
-    var fromX = parseFloat(canvas.getAttribute("_left")),
-        fromY = parseFloat(canvas.getAttribute("_top")),
-        toX = getOrDefault(to[0], fromX), toY = getOrDefault(to[1], fromY);
+events.prototype.moveImage = function (
+  code,
+  to,
+  opacityVal,
+  moveMode,
+  time,
+  callback
+) {
+  to = to || [];
+  var name = "image" + (code + 100);
+  if (!core.dymCanvas[name]) {
+    if (callback) callback();
+    return;
+  }
+  var getOrDefault = function (a, b) {
+    a = core.calValue(a);
+    return a != null ? a : b;
+  };
+  var canvas = core.dymCanvas[name].canvas;
+  var fromX = parseFloat(canvas.getAttribute("_left")),
+    fromY = parseFloat(canvas.getAttribute("_top")),
+    toX = getOrDefault(to[0], fromX),
+    toY = getOrDefault(to[1], fromY);
 
-    var opacity = parseFloat(canvas.style.opacity), toOpacity = getOrDefault(opacityVal, opacity);
+  var opacity = parseFloat(canvas.style.opacity),
+    toOpacity = getOrDefault(opacityVal, opacity);
 
-    if (!time) {
-        core.relocateCanvas(name, toX, toY);
-        core.setOpacity(toOpacity);
-        if (callback) callback();
-        return;
-    }
+  if (!time) {
+    core.relocateCanvas(name, toX, toY);
+    core.setOpacity(toOpacity);
+    if (callback) callback();
+    return;
+  }
 
-    this._moveImage_moving(name, {
-        fromX: fromX, fromY: fromY, toX: toX, toY: toY, opacity: opacity, toOpacity: toOpacity,
-        moveMode: moveMode, time: time / Math.max(core.status.replay.speed, 1)
-    }, callback)
-}
+  this._moveImage_moving(
+    name,
+    {
+      fromX: fromX,
+      fromY: fromY,
+      toX: toX,
+      toY: toY,
+      opacity: opacity,
+      toOpacity: toOpacity,
+      moveMode: moveMode,
+      time: time / Math.max(core.status.replay.speed, 1),
+    },
+    callback
+  );
+};
 
 events.prototype._moveImage_moving = function (name, moveInfo, callback) {
-    var per_time = 10, step = 0, steps = parseInt(moveInfo.time / per_time);
-    if (steps <= 0) steps = 1;
-    var fromX = moveInfo.fromX, fromY = moveInfo.fromY, toX = moveInfo.toX, toY = moveInfo.toY,
-        opacity = moveInfo.opacity, toOpacity = moveInfo.toOpacity;
-    var currX = fromX, currY = fromY, currOpacity = opacity;
-    var moveFunc = core.applyEasing(moveInfo.moveMode);
-    var animate = setInterval(function () {
-        step++;
-        currOpacity = opacity + (toOpacity - opacity) * moveFunc(step / steps);
-        currX = parseInt(fromX + (toX - fromX) * moveFunc(step / steps));
-        currY = parseInt(fromY + (toY - fromY) * moveFunc(step / steps));
-        core.setOpacity(name, currOpacity);
-        core.relocateCanvas(name, currX, currY);
-        if (step == steps) {
-            delete core.animateFrame.asyncId[animate];
-            clearInterval(animate);
-            if (callback) callback();
-        }
-    }, per_time);
+  var per_time = 10,
+    step = 0,
+    steps = parseInt(moveInfo.time / per_time);
+  if (steps <= 0) steps = 1;
+  var fromX = moveInfo.fromX,
+    fromY = moveInfo.fromY,
+    toX = moveInfo.toX,
+    toY = moveInfo.toY,
+    opacity = moveInfo.opacity,
+    toOpacity = moveInfo.toOpacity;
+  var currX = fromX,
+    currY = fromY,
+    currOpacity = opacity;
+  var moveFunc = core.applyEasing(moveInfo.moveMode);
+  var animate = setInterval(function () {
+    step++;
+    currOpacity = opacity + (toOpacity - opacity) * moveFunc(step / steps);
+    currX = parseInt(fromX + (toX - fromX) * moveFunc(step / steps));
+    currY = parseInt(fromY + (toY - fromY) * moveFunc(step / steps));
+    core.setOpacity(name, currOpacity);
+    core.relocateCanvas(name, currX, currY);
+    if (step == steps) {
+      delete core.animateFrame.asyncId[animate];
+      clearInterval(animate);
+      if (callback) callback();
+    }
+  }, per_time);
 
-    core.animateFrame.lastAsyncId = animate;
-    core.animateFrame.asyncId[animate] = callback;
-}
+  core.animateFrame.lastAsyncId = animate;
+  core.animateFrame.asyncId[animate] = callback;
+};
 
 ////// 旋转图片 //////
-events.prototype.rotateImage = function (code, center, angle, moveMode, time, callback) {
-    center = center || [];
-    var name = "image" + (code + 100);
-    if (!core.dymCanvas[name]) {
-        if (callback) callback();
-        return;
-    }
-    var canvas = core.dymCanvas[name].canvas;
-    var centerX = core.calValue(center[0]), centerY = core.calValue(center[1]);
+events.prototype.rotateImage = function (
+  code,
+  center,
+  angle,
+  moveMode,
+  time,
+  callback
+) {
+  center = center || [];
+  var name = "image" + (code + 100);
+  if (!core.dymCanvas[name]) {
+    if (callback) callback();
+    return;
+  }
+  var canvas = core.dymCanvas[name].canvas;
+  var centerX = core.calValue(center[0]),
+    centerY = core.calValue(center[1]);
 
-    var fromAngle = parseFloat(canvas.getAttribute('_angle')) || 0;
+  var fromAngle = parseFloat(canvas.getAttribute("_angle")) || 0;
 
-    if (!time) {
-        core.rotateCanvas(name, fromAngle + angle, centerX, centerY);
-        if (callback) callback();
-        return;
-    }
+  if (!time) {
+    core.rotateCanvas(name, fromAngle + angle, centerX, centerY);
+    if (callback) callback();
+    return;
+  }
 
-    var rotateInfo = {
-        fromAngle: fromAngle, angle: angle, centerX: centerX, centerY: centerY,
-        moveMode: moveMode, time: time / Math.max(core.status.replay.speed, 1)
-    }
-    this._rotateImage_rotating(name, rotateInfo, callback);
-}
+  var rotateInfo = {
+    fromAngle: fromAngle,
+    angle: angle,
+    centerX: centerX,
+    centerY: centerY,
+    moveMode: moveMode,
+    time: time / Math.max(core.status.replay.speed, 1),
+  };
+  this._rotateImage_rotating(name, rotateInfo, callback);
+};
 
 events.prototype._rotateImage_rotating = function (name, rotateInfo, callback) {
-    var per_time = 10, step = 0, steps = parseInt(rotateInfo.time / per_time);
-    if (steps <= 0) steps = 1;
-    var moveFunc = core.applyEasing(rotateInfo.moveMode);
-    var animate = setInterval(function () {
-        step++;
-        var currAngle = rotateInfo.fromAngle + rotateInfo.angle * moveFunc(step / steps);
-        core.rotateCanvas(name, currAngle, rotateInfo.centerX, rotateInfo.centerY);
-        if (step == steps) {
-            delete core.animateFrame.asyncId[animate];
-            clearInterval(animate);
-            if (callback) callback();
-        }
-    }, per_time);
+  var per_time = 10,
+    step = 0,
+    steps = parseInt(rotateInfo.time / per_time);
+  if (steps <= 0) steps = 1;
+  var moveFunc = core.applyEasing(rotateInfo.moveMode);
+  var animate = setInterval(function () {
+    step++;
+    var currAngle =
+      rotateInfo.fromAngle + rotateInfo.angle * moveFunc(step / steps);
+    core.rotateCanvas(name, currAngle, rotateInfo.centerX, rotateInfo.centerY);
+    if (step == steps) {
+      delete core.animateFrame.asyncId[animate];
+      clearInterval(animate);
+      if (callback) callback();
+    }
+  }, per_time);
 
-    core.animateFrame.lastAsyncId = animate;
-    core.animateFrame.asyncId[animate] = callback;
-}
+  core.animateFrame.lastAsyncId = animate;
+  core.animateFrame.asyncId[animate] = callback;
+};
 
 ////// 放缩一张图片 //////
-events.prototype.scaleImage = function (code, center, scale, moveMode, time, callback) {
-    center = center || [];
-    var name = "image" + (code + 100);
-    if (!core.dymCanvas[name]) {
-        if (callback) callback();
-        return;
-    }
-    var ctx = core.dymCanvas[name];
-    var currScale = 1.0;
-    if (ctx.canvas.hasAttribute('_scale')) {
-        currScale = parseFloat(ctx.canvas.getAttribute('_scale'));
-    }
-    var ratio = ctx.canvas.hasAttribute('isHD') ? core.domStyle.ratio : 1;
-    var width = ctx.canvas.width / ratio, height = ctx.canvas.height / ratio;
-    var currLeft = parseFloat(ctx.canvas.getAttribute("_left"));
-    var currTop = parseFloat(ctx.canvas.getAttribute("_top"));
-    var centerX = core.calValue(center[0]), centerY = core.calValue(center[1]);
-    if (centerX == null || centerY == null) {
-        centerX = currLeft + width * currScale / 2;
-        centerY = currTop + height * currScale / 2;
-    }
-    var scaleInfo = {
-        x: (currLeft - centerX) / currScale, y: (currTop - centerY) / currScale, centerX: centerX, centerY: centerY,
-        width: width, height: height, currScale: currScale, scale: scale, moveMode: moveMode, time: time
-    }
-    this._scaleImage_scale(ctx, scaleInfo, callback);
-}
+events.prototype.scaleImage = function (
+  code,
+  center,
+  scale,
+  moveMode,
+  time,
+  callback
+) {
+  center = center || [];
+  var name = "image" + (code + 100);
+  if (!core.dymCanvas[name]) {
+    if (callback) callback();
+    return;
+  }
+  var ctx = core.dymCanvas[name];
+  var currScale = 1.0;
+  if (ctx.canvas.hasAttribute("_scale")) {
+    currScale = parseFloat(ctx.canvas.getAttribute("_scale"));
+  }
+  var ratio = ctx.canvas.hasAttribute("isHD") ? core.domStyle.ratio : 1;
+  var width = ctx.canvas.width / ratio,
+    height = ctx.canvas.height / ratio;
+  var currLeft = parseFloat(ctx.canvas.getAttribute("_left"));
+  var currTop = parseFloat(ctx.canvas.getAttribute("_top"));
+  var centerX = core.calValue(center[0]),
+    centerY = core.calValue(center[1]);
+  if (centerX == null || centerY == null) {
+    centerX = currLeft + (width * currScale) / 2;
+    centerY = currTop + (height * currScale) / 2;
+  }
+  var scaleInfo = {
+    x: (currLeft - centerX) / currScale,
+    y: (currTop - centerY) / currScale,
+    centerX: centerX,
+    centerY: centerY,
+    width: width,
+    height: height,
+    currScale: currScale,
+    scale: scale,
+    moveMode: moveMode,
+    time: time,
+  };
+  this._scaleImage_scale(ctx, scaleInfo, callback);
+};
 
 events.prototype._scaleInfo_scale = function (ctx, scaleInfo, scale) {
-    core.resizeCanvas(ctx, scaleInfo.width * scale, scaleInfo.height * scale, true);
-    core.relocateCanvas(ctx, scaleInfo.centerX + scaleInfo.x * scale, scaleInfo.centerY + scaleInfo.y * scale);
-    ctx.canvas.setAttribute('_scale', scale);
-}
+  core.resizeCanvas(
+    ctx,
+    scaleInfo.width * scale,
+    scaleInfo.height * scale,
+    true
+  );
+  core.relocateCanvas(
+    ctx,
+    scaleInfo.centerX + scaleInfo.x * scale,
+    scaleInfo.centerY + scaleInfo.y * scale
+  );
+  ctx.canvas.setAttribute("_scale", scale);
+};
 
 events.prototype._scaleImage_scale = function (ctx, scaleInfo, callback) {
-    if (!scaleInfo.time) {
-        this._scaleInfo_scale(ctx, scaleInfo, scaleInfo.scale);
-        if (callback) callback();
-        return;
+  if (!scaleInfo.time) {
+    this._scaleInfo_scale(ctx, scaleInfo, scaleInfo.scale);
+    if (callback) callback();
+    return;
+  }
+
+  var per_time = 10,
+    step = 0,
+    steps = parseInt(scaleInfo.time / per_time);
+  if (steps <= 0) steps = 1;
+  var moveFunc = core.applyEasing(scaleInfo.moveMode);
+
+  var animate = setInterval(function () {
+    step++;
+    var scale =
+      scaleInfo.currScale +
+      (scaleInfo.scale - scaleInfo.currScale) * moveFunc(step / steps);
+    core.events._scaleInfo_scale(ctx, scaleInfo, scale);
+    if (step == steps) {
+      delete core.animateFrame.asyncId[animate];
+      clearInterval(animate);
+      if (callback) callback();
     }
+  }, per_time);
 
-    var per_time = 10, step = 0, steps = parseInt(scaleInfo.time / per_time);
-    if (steps <= 0) steps = 1;
-    var moveFunc = core.applyEasing(scaleInfo.moveMode);
-
-    var animate = setInterval(function () {
-        step++;
-        var scale = scaleInfo.currScale + (scaleInfo.scale - scaleInfo.currScale) * moveFunc(step / steps);
-        core.events._scaleInfo_scale(ctx, scaleInfo, scale);
-        if (step == steps) {
-            delete core.animateFrame.asyncId[animate];
-            clearInterval(animate);
-            if (callback) callback();
-        }
-    }, per_time);
-
-    core.animateFrame.lastAsyncId = animate;
-    core.animateFrame.asyncId[animate] = callback;
-}
+  core.animateFrame.lastAsyncId = animate;
+  core.animateFrame.asyncId[animate] = callback;
+};
 
 ////// 绘制或取消一张gif图片 //////
 events.prototype.showGif = function (name, x, y) {
-    name = core.getMappedName(name);
-    var image = core.material.images.images[name];
-    if (image) {
-        var gif = new Image();
-        gif.src = image.src;
-        gif.style.position = 'absolute';
-        gif.style.left = x * core.domStyle.scale + "px";
-        gif.style.top = y * core.domStyle.scale + "px";
-        gif.style.width = image.width * core.domStyle.scale + "px";
-        gif.style.height = image.height * core.domStyle.scale + "px";
-        core.dom.gif2.appendChild(gif);
-    }
-    else {
-        core.dom.gif2.innerHTML = "";
-    }
-}
+  name = core.getMappedName(name);
+  var image = core.material.images.images[name];
+  if (image) {
+    var gif = new Image();
+    gif.src = image.src;
+    gif.style.position = "absolute";
+    gif.style.left = x * core.domStyle.scale + "px";
+    gif.style.top = y * core.domStyle.scale + "px";
+    gif.style.width = image.width * core.domStyle.scale + "px";
+    gif.style.height = image.height * core.domStyle.scale + "px";
+    core.dom.gif2.appendChild(gif);
+  } else {
+    core.dom.gif2.innerHTML = "";
+  }
+};
 
 ////// 淡入淡出音乐 //////
 events.prototype.setVolume = function (value, time, callback) {
-    var set = function (value) {
-        core.musicStatus.designVolume = value;
-        if (core.musicStatus.playingBgm)
-            core.material.bgms[core.musicStatus.playingBgm].volume = core.musicStatus.userVolume * core.musicStatus.designVolume;
+  var set = function (value) {
+    core.musicStatus.designVolume = value;
+    if (core.musicStatus.playingBgm)
+      core.material.bgms[core.musicStatus.playingBgm].volume =
+        core.musicStatus.userVolume * core.musicStatus.designVolume;
+  };
+  if (!time || time < 100) {
+    set(value);
+    if (callback) callback();
+    return;
+  }
+  var currVolume = core.musicStatus.designVolume;
+  time /= Math.max(core.status.replay.speed, 1);
+  var per_time = 10,
+    step = 0,
+    steps = parseInt(time / per_time);
+  if (steps <= 0) steps = 1;
+  var animate = setInterval(function () {
+    step++;
+    set(currVolume + ((value - currVolume) * step) / steps);
+    if (step >= steps) {
+      delete core.animateFrame.asyncId[animate];
+      clearInterval(animate);
+      if (callback) callback();
     }
-    if (!time || time < 100) {
-        set(value);
-        if (callback) callback();
-        return;
-    }
-    var currVolume = core.musicStatus.designVolume;
-    time /= Math.max(core.status.replay.speed, 1);
-    var per_time = 10, step = 0, steps = parseInt(time / per_time);
-    if (steps <= 0) steps = 1;
-    var animate = setInterval(function () {
-        step++;
-        set(currVolume + (value - currVolume) * step / steps);
-        if (step >= steps) {
-            delete core.animateFrame.asyncId[animate];
-            clearInterval(animate);
-            if (callback) callback();
-        }
-    }, per_time);
+  }, per_time);
 
-    core.animateFrame.lastAsyncId = animate;
-    core.animateFrame.asyncId[animate] = callback;
-}
+  core.animateFrame.lastAsyncId = animate;
+  core.animateFrame.asyncId[animate] = callback;
+};
 
 ////// 画面震动 //////
 events.prototype.vibrate = function (direction, time, speed, power, callback) {
-    if (core.isReplaying()) {
-        if (callback) callback();
-        return;
+  if (core.isReplaying()) {
+    if (callback) callback();
+    return;
+  }
+  if (!time) time = 1000;
+  speed = speed || 10;
+  power = power || 10;
+  var shakeInfo = {
+    duration: parseInt(time / 10),
+    speed: speed,
+    power: power,
+    direction: 1,
+    shake: 0,
+  };
+  if (direction == "random") {
+    direction = ["horizontal", "vertical", "diagonal1", "diagonal2"][
+      Math.floor(Math.random() * 4)
+    ];
+  }
+  var cb = function () {
+    core.addGameCanvasTranslate(0, 0);
+    if (callback) callback();
+  };
+  var animate = setInterval(function () {
+    core.events._vibrate_update(shakeInfo);
+    switch (direction) {
+      case "vertical":
+        core.addGameCanvasTranslate(0, shakeInfo.shake);
+        break;
+      case "diagonal1":
+        core.addGameCanvasTranslate(shakeInfo.shake, shakeInfo.shake);
+        break;
+      case "diagonal2":
+        core.addGameCanvasTranslate(-shakeInfo.shake, shakeInfo.shake);
+        break;
+      default:
+        core.addGameCanvasTranslate(shakeInfo.shake, 0);
     }
-    if (!time) time = 1000;
-    speed = speed || 10;
-    power = power || 10;
-    var shakeInfo = { duration: parseInt(time / 10), speed: speed, power: power, direction: 1, shake: 0 };
-    if (direction == 'random') {
-        direction = ['horizontal', 'vertical', 'diagonal1', 'diagonal2'][Math.floor(Math.random() * 4)];
+    if (shakeInfo.duration === 0 && shakeInfo.shake == 0) {
+      delete core.animateFrame.asyncId[animate];
+      clearInterval(animate);
+      cb();
     }
-    var cb = function () {
-        core.addGameCanvasTranslate(0, 0);
-        if (callback) callback();
-    }
-    var animate = setInterval(function () {
-        core.events._vibrate_update(shakeInfo);
-        switch (direction) {
-            case 'vertical': core.addGameCanvasTranslate(0, shakeInfo.shake); break;
-            case 'diagonal1': core.addGameCanvasTranslate(shakeInfo.shake, shakeInfo.shake); break;
-            case 'diagonal2': core.addGameCanvasTranslate(-shakeInfo.shake, shakeInfo.shake); break;
-            default: core.addGameCanvasTranslate(shakeInfo.shake, 0);
-        }
-        if (shakeInfo.duration === 0 && shakeInfo.shake == 0) {
-            delete core.animateFrame.asyncId[animate];
-            clearInterval(animate);
-            cb();
-        }
-    }, 10);
+  }, 10);
 
-    core.animateFrame.lastAsyncId = animate;
-    core.animateFrame.asyncId[animate] = cb;
-}
+  core.animateFrame.lastAsyncId = animate;
+  core.animateFrame.asyncId[animate] = cb;
+};
 
 events.prototype._vibrate_update = function (shakeInfo) {
-    if (shakeInfo.duration >= 1 || shakeInfo.shake != 0) {
-        var delta = shakeInfo.speed * shakeInfo.direction / 6;
-        if (shakeInfo.duration <= 1 && shakeInfo.shake * (shakeInfo.shake + delta) < 0) {
-            shakeInfo.shake = 0;
-        } else {
-            shakeInfo.shake += delta;
-        }
-        if (shakeInfo.shake > shakeInfo.power) {
-            shakeInfo.direction = -1;
-        }
-        if (shakeInfo.shake < -shakeInfo.power) {
-            shakeInfo.direction = 1;
-        }
-        if (shakeInfo.duration >= 1) {
-            shakeInfo.duration -= 1
-        }
+  if (shakeInfo.duration >= 1 || shakeInfo.shake != 0) {
+    var delta = (shakeInfo.speed * shakeInfo.direction) / 6;
+    if (
+      shakeInfo.duration <= 1 &&
+      shakeInfo.shake * (shakeInfo.shake + delta) < 0
+    ) {
+      shakeInfo.shake = 0;
+    } else {
+      shakeInfo.shake += delta;
     }
-}
+    if (shakeInfo.shake > shakeInfo.power) {
+      shakeInfo.direction = -1;
+    }
+    if (shakeInfo.shake < -shakeInfo.power) {
+      shakeInfo.direction = 1;
+    }
+    if (shakeInfo.duration >= 1) {
+      shakeInfo.duration -= 1;
+    }
+  }
+};
 
 /////// 使用事件让勇士移动。这个函数将不会触发任何事件 //////
 events.prototype.eventMoveHero = function (steps, time, callback) {
-    time = time || core.values.moveSpeed;
-    var step = 0, moveSteps = (steps || []).map(function (t) {
-        return [t.split(':')[0], parseInt(t.split(':')[1] || "1")];
-    }).filter(function (t) {
-        return ['up', 'down', 'left', 'right', 'forward', 'backward', 'leftup', 'leftdown', 'rightup', 'rightdown', 'speed'].indexOf(t[0]) >= 0
-            && !(t[0] == 'speed' && t[1] < 16);
-    });
-    core.status.heroMoving = -1;
-    var _run = function () {
-        var cb = function () {
-            core.status.heroMoving = 0;
-            core.drawHero();
-            if (callback) callback();
-        }
-
-        var animate = window.setInterval(function () {
-            if (moveSteps.length == 0) {
-                delete core.animateFrame.asyncId[animate];
-                clearInterval(animate);
-                cb();
-            }
-            else {
-                if (step == 0 && moveSteps[0][0] == 'speed' && moveSteps[0][1] >= 16) {
-                    time = moveSteps[0][1];
-                    moveSteps.shift();
-                    clearInterval(animate);
-                    delete core.animateFrame.asyncId[animate];
-                    _run();
-                }
-                else if (core.events._eventMoveHero_moving(++step, moveSteps))
-                    step = 0;
-            }
-        }, core.status.replay.speed == 24 ? 1 : time / 8 / core.status.replay.speed);
-
-        core.animateFrame.lastAsyncId = animate;
-        core.animateFrame.asyncId[animate] = cb;
-    }
-    _run();
-}
-
-events.prototype._eventMoveHero_moving = function (step, moveSteps) {
-    var curr = moveSteps[0];
-    var direction = curr[0], x = core.getHeroLoc('x'), y = core.getHeroLoc('y');
-    // ------ 前进/后退
-    var o = direction == 'backward' ? -1 : 1;
-    if (direction == 'forward' || direction == 'backward') direction = core.getHeroLoc('direction');
-    var faceDirection = direction;
-    if (direction == 'leftup' || direction == 'leftdown') faceDirection = 'left';
-    if (direction == 'rightup' || direction == 'rightdown') faceDirection = 'right';
-    core.setHeroLoc('direction', direction);
-    if (curr[1] <= 0) {
-        core.setHeroLoc('direction', faceDirection);
-        moveSteps.shift();
-        return true;
-    }
-    if (step <= 4) {
-        core.drawHero('leftFoot', 4 * o * step);
-    }
-    else if (step <= 8) {
-        core.drawHero('rightFoot', 4 * o * step);
-    }
-    if (step == 8) {
-        core.setHeroLoc('x', x + o * core.utils.scan2[direction].x, true);
-        core.setHeroLoc('y', y + o * core.utils.scan2[direction].y, true);
-        core.updateFollowers();
-        curr[1]--;
-        if (curr[1] <= 0) moveSteps.shift();
-        core.setHeroLoc('direction', faceDirection);
-        return true;
-    }
-    return false;
-}
-
-////// 勇士跳跃事件 //////
-events.prototype.jumpHero = function (ex, ey, time, callback) {
-    var sx = core.getHeroLoc('x'), sy = core.getHeroLoc('y');
-    if (ex == null) ex = sx;
-    if (ey == null) ey = sy;
-    var sx = core.status.hero.loc.x, sy = core.status.hero.loc.y;
-    if (!core.isset(ex)) ex = sx;
-    if (!core.isset(ey)) ey = sy;
-    var jumpInfo = core.maps.__generateJumpInfo(sx, sy, ex, ey, time || 500);
-    jumpInfo.icon = core.material.icons.hero[core.getHeroLoc('direction')];
-    jumpInfo.width = core.material.icons.hero.width || 32;
-    jumpInfo.height = core.material.icons.hero.height;
-
-    this._jumpHero_doJump(jumpInfo, callback);
-}
-
-events.prototype._jumpHero_doJump = function (jumpInfo, callback) {
+  time = time || core.values.moveSpeed;
+  var step = 0,
+    moveSteps = (steps || [])
+      .map(function (t) {
+        return [t.split(":")[0], parseInt(t.split(":")[1] || "1")];
+      })
+      .filter(function (t) {
+        return (
+          [
+            "up",
+            "down",
+            "left",
+            "right",
+            "forward",
+            "backward",
+            "leftup",
+            "leftdown",
+            "rightup",
+            "rightdown",
+            "speed",
+          ].indexOf(t[0]) >= 0 && !(t[0] == "speed" && t[1] < 16)
+        );
+      });
+  core.status.heroMoving = -1;
+  var _run = function () {
     var cb = function () {
-        core.setHeroLoc('x', jumpInfo.ex);
-        core.setHeroLoc('y', jumpInfo.ey);
-        core.status.heroMoving = 0;
-        core.drawHero();
-        if (callback) callback();
-    }
+      core.status.heroMoving = 0;
+      core.drawHero();
+      if (callback) callback();
+    };
 
-    core.status.heroMoving = -1;
-    var animate = window.setInterval(function () {
-        if (jumpInfo.jump_count > 0)
-            core.events._jumpHero_jumping(jumpInfo)
-        else {
-            delete core.animateFrame.asyncId[animate];
+    var animate = window.setInterval(
+      function () {
+        if (moveSteps.length == 0) {
+          delete core.animateFrame.asyncId[animate];
+          clearInterval(animate);
+          cb();
+        } else {
+          if (
+            step == 0 &&
+            moveSteps[0][0] == "speed" &&
+            moveSteps[0][1] >= 16
+          ) {
+            time = moveSteps[0][1];
+            moveSteps.shift();
             clearInterval(animate);
-            cb();
+            delete core.animateFrame.asyncId[animate];
+            _run();
+          } else if (core.events._eventMoveHero_moving(++step, moveSteps))
+            step = 0;
         }
-    }, jumpInfo.per_time);
+      },
+      core.status.replay.speed == 24 ? 1 : time / 8 / core.status.replay.speed
+    );
 
     core.animateFrame.lastAsyncId = animate;
     core.animateFrame.asyncId[animate] = cb;
-}
+  };
+  _run();
+};
+
+events.prototype._eventMoveHero_moving = function (step, moveSteps) {
+  var curr = moveSteps[0];
+  var direction = curr[0],
+    x = core.getHeroLoc("x"),
+    y = core.getHeroLoc("y");
+  // ------ 前进/后退
+  var o = direction == "backward" ? -1 : 1;
+  if (direction == "forward" || direction == "backward")
+    direction = core.getHeroLoc("direction");
+  var faceDirection = direction;
+  if (direction == "leftup" || direction == "leftdown") faceDirection = "left";
+  if (direction == "rightup" || direction == "rightdown")
+    faceDirection = "right";
+  core.setHeroLoc("direction", direction);
+  if (curr[1] <= 0) {
+    core.setHeroLoc("direction", faceDirection);
+    moveSteps.shift();
+    return true;
+  }
+  if (step <= 4) {
+    core.drawHero("leftFoot", 4 * o * step);
+  } else if (step <= 8) {
+    core.drawHero("rightFoot", 4 * o * step);
+  }
+  if (step == 8) {
+    core.setHeroLoc("x", x + o * core.utils.scan2[direction].x, true);
+    core.setHeroLoc("y", y + o * core.utils.scan2[direction].y, true);
+    core.updateFollowers();
+    curr[1]--;
+    if (curr[1] <= 0) moveSteps.shift();
+    core.setHeroLoc("direction", faceDirection);
+    return true;
+  }
+  return false;
+};
+
+////// 勇士跳跃事件 //////
+events.prototype.jumpHero = function (ex, ey, time, callback) {
+  var sx = core.getHeroLoc("x"),
+    sy = core.getHeroLoc("y");
+  if (ex == null) ex = sx;
+  if (ey == null) ey = sy;
+  var sx = core.status.hero.loc.x,
+    sy = core.status.hero.loc.y;
+  if (!core.isset(ex)) ex = sx;
+  if (!core.isset(ey)) ey = sy;
+  var jumpInfo = core.maps.__generateJumpInfo(sx, sy, ex, ey, time || 500);
+  jumpInfo.icon = core.material.icons.hero[core.getHeroLoc("direction")];
+  jumpInfo.width = core.material.icons.hero.width || 32;
+  jumpInfo.height = core.material.icons.hero.height;
+
+  this._jumpHero_doJump(jumpInfo, callback);
+};
+
+events.prototype._jumpHero_doJump = function (jumpInfo, callback) {
+  var cb = function () {
+    core.setHeroLoc("x", jumpInfo.ex);
+    core.setHeroLoc("y", jumpInfo.ey);
+    core.status.heroMoving = 0;
+    core.drawHero();
+    if (callback) callback();
+  };
+
+  core.status.heroMoving = -1;
+  var animate = window.setInterval(function () {
+    if (jumpInfo.jump_count > 0) core.events._jumpHero_jumping(jumpInfo);
+    else {
+      delete core.animateFrame.asyncId[animate];
+      clearInterval(animate);
+      cb();
+    }
+  }, jumpInfo.per_time);
+
+  core.animateFrame.lastAsyncId = animate;
+  core.animateFrame.asyncId[animate] = cb;
+};
 
 events.prototype._jumpHero_jumping = function (jumpInfo) {
-    core.clearMap('hero');
-    core.maps.__updateJumpInfo(jumpInfo);
-    var x = core.getHeroLoc('x'),
-        y = core.getHeroLoc('y');
-    var nowx = jumpInfo.px, nowy = jumpInfo.py, width = jumpInfo.width || 32, height = jumpInfo.height;
-    core.drawHero('stop', { x: nowx - 32 * x, y: nowy - 32 * y });
-}
+  core.clearMap("hero");
+  core.maps.__updateJumpInfo(jumpInfo);
+  var x = core.getHeroLoc("x"),
+    y = core.getHeroLoc("y");
+  var nowx = jumpInfo.px,
+    nowy = jumpInfo.py,
+    width = jumpInfo.width || 32,
+    height = jumpInfo.height;
+  core.drawHero("stop", { x: nowx - 32 * x, y: nowy - 32 * y });
+};
 
 ////// 设置角色行走图 //////
 events.prototype.setHeroIcon = function (name, noDraw) {
-    name = core.getMappedName(name);
-    var img = core.material.images.images[name];
-    if (!img) {
-        console.error("找不到图片: " + img);
-        return;
-    }
-    if (core.material.images.hero == img) return;
-    core.status.hero.image = name;
-    core.material.images.hero = img;
-    core.material.icons.hero.width = img.width / 4;
-    core.material.icons.hero.height = img.height / 4;
-    core.control.updateHeroIcon(name);
-    if (!noDraw) core.drawHero();
-}
+  name = core.getMappedName(name);
+  var img = core.material.images.images[name];
+  if (!img) {
+    console.error("找不到图片: " + img);
+    return;
+  }
+  if (core.material.images.hero == img) return;
+  core.status.hero.image = name;
+  core.material.images.hero = img;
+  core.material.icons.hero.width = img.width / 4;
+  core.material.icons.hero.height = img.height / 4;
+  core.control.updateHeroIcon(name);
+  if (!noDraw) core.drawHero();
+};
 
 ////// 检查升级事件 //////
 events.prototype.checkLvUp = function () {
-    var actions = [];
-    while (true) {
-        var next = this._checkLvUp_check();
-        if (next == null) break;
-        actions = actions.concat(next);
-    }
-    if (actions.length > 0) core.insertAction(actions);
-}
+  var actions = [];
+  while (true) {
+    var next = this._checkLvUp_check();
+    if (next == null) break;
+    actions = actions.concat(next);
+  }
+  if (actions.length > 0) core.insertAction(actions);
+};
 
 events.prototype._checkLvUp_check = function () {
-    if (core.flags.statusBarItems.indexOf('enableLevelUp') < 0 || !core.firstData.levelUp
-        || core.status.hero.lv >= core.firstData.levelUp.length) return null;
-    // 计算下一个所需要的数值
-    var next = (core.firstData.levelUp[core.status.hero.lv] || {});
-    var need = core.calValue(next.need);
-    if (need == null) return null;
-    if (core.status.hero.exp >= need) {
-        // 升级
-        core.status.hero.lv++;
-        if (next.clear) core.status.hero.exp -= need;
-        return next.action || [];
-    }
+  if (
+    core.flags.statusBarItems.indexOf("enableLevelUp") < 0 ||
+    !core.firstData.levelUp ||
+    core.status.hero.lv >= core.firstData.levelUp.length
+  )
     return null;
-}
+  // 计算下一个所需要的数值
+  var next = core.firstData.levelUp[core.status.hero.lv] || {};
+  var need = core.calValue(next.need);
+  if (need == null) return null;
+  if (core.status.hero.exp >= need) {
+    // 升级
+    core.status.hero.lv++;
+    if (next.clear) core.status.hero.exp -= need;
+    return next.action || [];
+  }
+  return null;
+};
 
 ////// 尝试使用道具 //////
 events.prototype.tryUseItem = function (itemId) {
-    if (itemId == 'book') {
-        core.ui.closePanel();
-        return core.openBook(false);
-    }
-    if (itemId == 'fly') {
-        core.ui.closePanel();
-        return core.useFly(false);
-    }
-    if (itemId == 'centerFly') {
-        core.ui.closePanel();
-        return core.ui._drawCenterFly();
-    }
-    if (core.canUseItem(itemId)) {
-        core.ui.closePanel();
-        core.useItem(itemId);
-    } else {
-        core.playSound('操作失败');
-        core.drawTip("当前无法使用" + core.material.items[itemId].name, itemId);
-    }
-}
+  if (itemId == "book") {
+    core.ui.closePanel();
+    return core.openBook(false);
+  }
+  if (itemId == "fly") {
+    core.ui.closePanel();
+    return core.useFly(false);
+  }
+  if (itemId == "centerFly") {
+    core.ui.closePanel();
+    return core.ui._drawCenterFly();
+  }
+  if (core.canUseItem(itemId)) {
+    core.ui.closePanel();
+    core.useItem(itemId);
+  } else {
+    core.playSound("操作失败");
+    core.drawTip("当前无法使用" + core.material.items[itemId].name, itemId);
+  }
+};
diff --git a/libs/loader.js b/libs/loader.js
index e00620d..b81aba2 100644
--- a/libs/loader.js
+++ b/libs/loader.js
@@ -1,606 +1,818 @@
-
 /*
 loader.js:负责对资源的加载
 
  */
 "use strict";
 
-function loader () {
-    this._init();
+function loader() {
+  this._init();
 }
 
-loader.prototype._init = function () {
-
-}
+loader.prototype._init = function () {};
 
 ////// 设置加载进度条进度 //////
 loader.prototype._setStartProgressVal = function (val) {
-    core.dom.startTopProgress.style.width = val + '%';
-}
+  core.dom.startTopProgress.style.width = val + "%";
+};
 
 ////// 设置加载进度条提示文字 //////
 loader.prototype._setStartLoadTipText = function (text) {
-    core.dom.startTopLoadTips.innerText = text;
-}
+  core.dom.startTopLoadTips.innerText = text;
+};
 
 loader.prototype._load = function (callback) {
-    this._loadMusics();
-    if (main.useCompress) {
-        this._load_async(callback);
-    } else {
-        this._load_sync(callback);
-    }
-}
+  this._loadMusics();
+  if (main.useCompress) {
+    this._load_async(callback);
+  } else {
+    this._load_sync(callback);
+  }
+};
 
 loader.prototype._load_sync = function (callback) {
-    this._loadAnimates_sync();
-    this._loadSounds_sync();
-    core.loader._loadMaterials_sync(function () {
-        core.loader._loadExtraImages_sync(function () {
-            core.loader._loadAutotiles_sync(function () {
-                core.loader._loadTilesets_sync(callback);
-            })
-        })
+  this._loadAnimates_sync();
+  this._loadSounds_sync();
+  core.loader._loadMaterials_sync(function () {
+    core.loader._loadExtraImages_sync(function () {
+      core.loader._loadAutotiles_sync(function () {
+        core.loader._loadTilesets_sync(callback);
+      });
     });
-}
+  });
+};
 
 loader.prototype._load_async = function (callback) {
-    core.loader._setStartLoadTipText('正在加载资源文件...');
-    const all = {};
+  core.loader._setStartLoadTipText("正在加载资源文件...");
+  const all = {};
 
-    const _makeOnProgress = function (name) {
-        if (!all[name]) all[name] = { loaded: 0, total: 0, finished: false };
-        return (loaded, total) => {
-            all[name].loaded = loaded;
-            all[name].total = total;
-            let allLoaded = 0, allTotal = 0;
-            for (const one of Object.values(all)) {
-                allLoaded += one.loaded;
-                allTotal += one.total;
-            }
-            console.log(allLoaded. allTotal);
-            if (allTotal > 0) {
-                if (allLoaded == allTotal) {
-                    core.loader._setStartLoadTipText("正在处理资源文件... 请稍候...");
-                } else {
-                    core.loader._setStartLoadTipText('正在加载资源文件... ' +
-                        core.formatSize(allLoaded) + " / " + core.formatSize(allTotal) +
-                        " (" + (allLoaded / allTotal * 100).toFixed(2) + "%)");
-                }
-                core.loader._setStartProgressVal(allLoaded / allTotal * 100);
-            }
-        };
-    }
-    const _makeOnFinished = function (name) {
-        return () => {
-            setTimeout(() => {
-                all[name].finished = true;
-                for (var one in all) {
-                    if (!all[one].finished) return;
-                }
-                callback();
-            });
+  const _makeOnProgress = function (name) {
+    if (!all[name]) all[name] = { loaded: 0, total: 0, finished: false };
+    return (loaded, total) => {
+      all[name].loaded = loaded;
+      all[name].total = total;
+      let allLoaded = 0,
+        allTotal = 0;
+      for (const one of Object.values(all)) {
+        allLoaded += one.loaded;
+        allTotal += one.total;
+      }
+      console.log(allLoaded.allTotal);
+      if (allTotal > 0) {
+        if (allLoaded == allTotal) {
+          core.loader._setStartLoadTipText("正在处理资源文件... 请稍候...");
+        } else {
+          core.loader._setStartLoadTipText(
+            "正在加载资源文件... " +
+              core.formatSize(allLoaded) +
+              " / " +
+              core.formatSize(allTotal) +
+              " (" +
+              ((allLoaded / allTotal) * 100).toFixed(2) +
+              "%)"
+          );
         }
-    }
+        core.loader._setStartProgressVal((allLoaded / allTotal) * 100);
+      }
+    };
+  };
+  const _makeOnFinished = function (name) {
+    return () => {
+      setTimeout(() => {
+        all[name].finished = true;
+        for (var one in all) {
+          if (!all[one].finished) return;
+        }
+        callback();
+      });
+    };
+  };
 
-    if (main.splitChunkMap) {
-        this._loadAnimates_chunked(main.splitChunkMap.animates, _makeOnProgress, _makeOnFinished);
-        this._loadSounds_chunked(main.splitChunkMap.sounds, _makeOnProgress, _makeOnFinished);
-        this._loadMaterials_chunked(main.splitChunkMap.materials, _makeOnProgress, _makeOnFinished);
-        this._loadExtraImages_chunked(main.splitChunkMap.images, _makeOnProgress, _makeOnFinished);
-        this._loadAutotiles_chunked(main.splitChunkMap.autotiles, _makeOnProgress, _makeOnFinished);
-        this._loadTilesets_chunked(main.splitChunkMap.tilesets, _makeOnProgress, _makeOnFinished);
-    } else {
-        this._loadAnimates_async(_makeOnProgress('animates'), _makeOnFinished('animates'));
-        this._loadSounds_async(_makeOnProgress('sounds'), _makeOnFinished('sounds'));
-        this._loadMaterials_async(_makeOnProgress('materials'), _makeOnFinished('materials'));
-        this._loadExtraImages_async(_makeOnProgress('images'), _makeOnFinished('images'));
-        this._loadAutotiles_async(_makeOnProgress('autotiles'), _makeOnFinished('autotiles'));
-        this._loadTilesets_async(_makeOnProgress('tilesets'), _makeOnFinished('tilesets'));
-    }
-}
+  if (main.splitChunkMap) {
+    this._loadAnimates_chunked(
+      main.splitChunkMap.animates,
+      _makeOnProgress,
+      _makeOnFinished
+    );
+    this._loadSounds_chunked(
+      main.splitChunkMap.sounds,
+      _makeOnProgress,
+      _makeOnFinished
+    );
+    this._loadMaterials_chunked(
+      main.splitChunkMap.materials,
+      _makeOnProgress,
+      _makeOnFinished
+    );
+    this._loadExtraImages_chunked(
+      main.splitChunkMap.images,
+      _makeOnProgress,
+      _makeOnFinished
+    );
+    this._loadAutotiles_chunked(
+      main.splitChunkMap.autotiles,
+      _makeOnProgress,
+      _makeOnFinished
+    );
+    this._loadTilesets_chunked(
+      main.splitChunkMap.tilesets,
+      _makeOnProgress,
+      _makeOnFinished
+    );
+  } else {
+    this._loadAnimates_async(
+      _makeOnProgress("animates"),
+      _makeOnFinished("animates")
+    );
+    this._loadSounds_async(
+      _makeOnProgress("sounds"),
+      _makeOnFinished("sounds")
+    );
+    this._loadMaterials_async(
+      _makeOnProgress("materials"),
+      _makeOnFinished("materials")
+    );
+    this._loadExtraImages_async(
+      _makeOnProgress("images"),
+      _makeOnFinished("images")
+    );
+    this._loadAutotiles_async(
+      _makeOnProgress("autotiles"),
+      _makeOnFinished("autotiles")
+    );
+    this._loadTilesets_async(
+      _makeOnProgress("tilesets"),
+      _makeOnFinished("tilesets")
+    );
+  }
+};
 
 // ----- 加载资源文件 ------ //
 
 loader.prototype._loadMaterials_sync = function (callback) {
-    this._setStartLoadTipText("正在加载资源文件...");
-    this.loadImages("materials", core.materials, core.material.images, function () {
-        core.loader._loadMaterials_afterLoad();
-        callback();
-    });
-}
+  this._setStartLoadTipText("正在加载资源文件...");
+  this.loadImages(
+    "materials",
+    core.materials,
+    core.material.images,
+    function () {
+      core.loader._loadMaterials_afterLoad();
+      callback();
+    }
+  );
+};
 
 loader.prototype._loadMaterials_async = function (onprogress, onfinished) {
-    this.loadImagesFromZip('project/materials/materials.h5data', core.materials, core.material.images, onprogress, function () {
-        core.loader._loadMaterials_afterLoad();
-        onfinished();
-    });
-}
+  this.loadImagesFromZip(
+    "project/materials/materials.h5data",
+    core.materials,
+    core.material.images,
+    onprogress,
+    function () {
+      core.loader._loadMaterials_afterLoad();
+      onfinished();
+    }
+  );
+};
 
-loader.prototype._loadMaterials_chunked = async function (chunks, makeOnProgress, makeOnFinished) {
-    await this._loadImagesFromChunks(chunks, core.materials, core.material.images, makeOnProgress, makeOnFinished);
-    core.loader._loadMaterials_afterLoad();
-}
+loader.prototype._loadMaterials_chunked = async function (
+  chunks,
+  makeOnProgress,
+  makeOnFinished
+) {
+  await this._loadImagesFromChunks(
+    chunks,
+    core.materials,
+    core.material.images,
+    makeOnProgress,
+    makeOnFinished
+  );
+  core.loader._loadMaterials_afterLoad();
+};
 
 loader.prototype._loadMaterials_afterLoad = function () {
-    const images = core.splitImage(core.material.images['icons']);
-    for (let key in core.statusBar.icons) {
-        if (typeof core.statusBar.icons[key] == 'number') {
-            core.statusBar.icons[key] = images[core.statusBar.icons[key]];
-            if (core.statusBar.image[key] != null)
-                core.statusBar.image[key].src = core.statusBar.icons[key].src;
-        }
+  const images = core.splitImage(core.material.images["icons"]);
+  for (let key in core.statusBar.icons) {
+    if (typeof core.statusBar.icons[key] == "number") {
+      core.statusBar.icons[key] = images[core.statusBar.icons[key]];
+      if (core.statusBar.image[key] != null)
+        core.statusBar.image[key].src = core.statusBar.icons[key].src;
     }
-}
+  }
+};
 
 // ------ 加载使用的图片 ------ //
 
 loader.prototype._loadExtraImages_sync = function (callback) {
-    core.material.images.images = {};
-    this._setStartLoadTipText("正在加载图片文件...");
-    core.loadImages("images", core.images, core.material.images.images, callback);
-}
+  core.material.images.images = {};
+  this._setStartLoadTipText("正在加载图片文件...");
+  core.loadImages("images", core.images, core.material.images.images, callback);
+};
 
 loader.prototype._loadExtraImages_async = function (onprogress, onfinished) {
-    core.material.images.images = {};
-    
-    // Check .gif
-    const gifs = images.filter(function (name) {
-        return name.toLowerCase().endsWith('.gif');
-    });
-    // gif没有被压缩在zip中,延迟加载...
-    this._loadExtraImages_loadLazy(gifs);
+  core.material.images.images = {};
 
-    images = images.filter((name) => !name.toLowerCase().endsWith('.gif'));
+  // Check .gif
+  const gifs = images.filter(function (name) {
+    return name.toLowerCase().endsWith(".gif");
+  });
+  // gif没有被压缩在zip中,延迟加载...
+  this._loadExtraImages_loadLazy(gifs);
 
-    this.loadImagesFromZip('project/images/images.h5data', images, core.material.images.images, onprogress, onfinished);
-}
+  images = images.filter((name) => !name.toLowerCase().endsWith(".gif"));
 
-loader.prototype._loadExtraImages_chunked = function (chunks, makeOnProgress, makeOnFinished) {
-    core.material.images.images = {};
-    let images = core.images;
+  this.loadImagesFromZip(
+    "project/images/images.h5data",
+    images,
+    core.material.images.images,
+    onprogress,
+    onfinished
+  );
+};
 
-    // Check .gif
-    const gifs = images.filter(function (name) {
-        return name.toLowerCase().endsWith('.gif');
-    });
-    // gif没有被压缩在zip中,延迟加载...
-    this._loadExtraImages_loadLazy(gifs);
+loader.prototype._loadExtraImages_chunked = function (
+  chunks,
+  makeOnProgress,
+  makeOnFinished
+) {
+  core.material.images.images = {};
+  let images = core.images;
 
-    images = images.filter((name) => !name.toLowerCase().endsWith('.gif'));
+  // Check .gif
+  const gifs = images.filter(function (name) {
+    return name.toLowerCase().endsWith(".gif");
+  });
+  // gif没有被压缩在zip中,延迟加载...
+  this._loadExtraImages_loadLazy(gifs);
 
-    this._loadImagesFromChunks(chunks, images, core.material.images.images, makeOnProgress, makeOnFinished);
-}
+  images = images.filter((name) => !name.toLowerCase().endsWith(".gif"));
+
+  this._loadImagesFromChunks(
+    chunks,
+    images,
+    core.material.images.images,
+    makeOnProgress,
+    makeOnFinished
+  );
+};
 
 loader.prototype._loadExtraImages_loadLazy = function (list) {
-    list.forEach(function (gif) {
-        this.loadImage("images", gif, (id, image) => {
-            if (image != null) {
-                core.material.images.images[gif] = image;
-            }
-        });
-    }, this);
-}
+  list.forEach(function (gif) {
+    this.loadImage("images", gif, (id, image) => {
+      if (image != null) {
+        core.material.images.images[gif] = image;
+      }
+    });
+  }, this);
+};
 
 // ------ 加载自动元件 ------ //
 
 loader.prototype._loadAutotiles_sync = function (callback) {
-    core.material.images.autotile = {};
-    var keys = Object.keys(core.material.icons.autotile);
-    var autotiles = {};
+  core.material.images.autotile = {};
+  var keys = Object.keys(core.material.icons.autotile);
+  var autotiles = {};
 
-    this._setStartLoadTipText("正在加载自动元件...");
-    this.loadImages("autotiles", keys, autotiles, function () {
-        core.loader._loadAutotiles_afterLoad(keys, autotiles);
-        callback();
-    });
-}
+  this._setStartLoadTipText("正在加载自动元件...");
+  this.loadImages("autotiles", keys, autotiles, function () {
+    core.loader._loadAutotiles_afterLoad(keys, autotiles);
+    callback();
+  });
+};
 
 loader.prototype._loadAutotiles_async = function (onprogress, onfinished) {
-    core.material.images.autotile = {};
-    var keys = Object.keys(core.material.icons.autotile);
-    var autotiles = {};
+  core.material.images.autotile = {};
+  var keys = Object.keys(core.material.icons.autotile);
+  var autotiles = {};
 
-    this.loadImagesFromZip('project/autotiles/autotiles.h5data', keys, autotiles, onprogress, function () {
-        core.loader._loadAutotiles_afterLoad(keys, autotiles);
-        onfinished();
-    });
-}
+  this.loadImagesFromZip(
+    "project/autotiles/autotiles.h5data",
+    keys,
+    autotiles,
+    onprogress,
+    function () {
+      core.loader._loadAutotiles_afterLoad(keys, autotiles);
+      onfinished();
+    }
+  );
+};
 
-loader.prototype._loadAutotiles_chunked = async function (chunks, makeOnProgress, makeOnFinished) {
-    core.material.images.autotile = {};
-    const keys = Object.keys(core.material.icons.autotile);
-    const autotiles = {};
+loader.prototype._loadAutotiles_chunked = async function (
+  chunks,
+  makeOnProgress,
+  makeOnFinished
+) {
+  core.material.images.autotile = {};
+  const keys = Object.keys(core.material.icons.autotile);
+  const autotiles = {};
 
-    await this._loadImagesFromChunks(chunks, keys, autotiles, makeOnProgress, makeOnFinished);
-    core.loader._loadAutotiles_afterLoad(keys, autotiles);
-}
+  await this._loadImagesFromChunks(
+    chunks,
+    keys,
+    autotiles,
+    makeOnProgress,
+    makeOnFinished
+  );
+  core.loader._loadAutotiles_afterLoad(keys, autotiles);
+};
 
 loader.prototype._loadAutotiles_afterLoad = function (keys, autotiles) {
-    // autotile需要保证顺序
-    keys.forEach(function (v) {
-        core.material.images.autotile[v] = autotiles[v];
-    });
+  // autotile需要保证顺序
+  keys.forEach(function (v) {
+    core.material.images.autotile[v] = autotiles[v];
+  });
 
-    setTimeout(function () {
-        core.maps._makeAutotileEdges();
-    });
-
-}
+  setTimeout(function () {
+    core.maps._makeAutotileEdges();
+  });
+};
 
 // ------ 加载额外素材 ------ //
 
 loader.prototype._loadTilesets_sync = function (callback) {
-    core.material.images.tilesets = {};
-    this._setStartLoadTipText("正在加载额外素材...");
-    this.loadImages("tilesets", core.tilesets, core.material.images.tilesets, function () {
-        core.loader._loadTilesets_afterLoad();
-        callback();
-    });
-}
+  core.material.images.tilesets = {};
+  this._setStartLoadTipText("正在加载额外素材...");
+  this.loadImages(
+    "tilesets",
+    core.tilesets,
+    core.material.images.tilesets,
+    function () {
+      core.loader._loadTilesets_afterLoad();
+      callback();
+    }
+  );
+};
 
 loader.prototype._loadTilesets_async = function (onprogress, onfinished) {
-    core.material.images.tilesets = {};
-    this.loadImagesFromZip('project/tilesets/tilesets.h5data', core.tilesets, core.material.images.tilesets, onprogress, function () {
-        core.loader._loadTilesets_afterLoad();
-        onfinished();
-    });
-}
+  core.material.images.tilesets = {};
+  this.loadImagesFromZip(
+    "project/tilesets/tilesets.h5data",
+    core.tilesets,
+    core.material.images.tilesets,
+    onprogress,
+    function () {
+      core.loader._loadTilesets_afterLoad();
+      onfinished();
+    }
+  );
+};
 
-loader.prototype._loadTilesets_chunked = async function (chunks, makeOnProgress, makeOnFinished) {
-    core.material.images.tilesets = {};
-    await this._loadImagesFromChunks(chunks, core.tilesets, core.material.images.tilesets, makeOnProgress, makeOnFinished);
-    core.loader._loadTilesets_afterLoad();
-}
+loader.prototype._loadTilesets_chunked = async function (
+  chunks,
+  makeOnProgress,
+  makeOnFinished
+) {
+  core.material.images.tilesets = {};
+  await this._loadImagesFromChunks(
+    chunks,
+    core.tilesets,
+    core.material.images.tilesets,
+    makeOnProgress,
+    makeOnFinished
+  );
+  core.loader._loadTilesets_afterLoad();
+};
 
 loader.prototype._loadTilesets_afterLoad = function () {
-    // 检查宽高是32倍数,如果出错在控制台报错
-    for (var imgName in core.material.images.tilesets) {
-        var img = core.material.images.tilesets[imgName];
-        if (img.width % 32 != 0 || img.height % 32 != 0) {
-            console.warn("警告!" + imgName + "的宽或高不是32的倍数!");
-        }
-        if (img.width * img.height > 32 * 32 * 3000) {
-            console.warn("警告!" + imgName + "上的图块素材个数大于3000!");
-        }
+  // 检查宽高是32倍数,如果出错在控制台报错
+  for (var imgName in core.material.images.tilesets) {
+    var img = core.material.images.tilesets[imgName];
+    if (img.width % 32 != 0 || img.height % 32 != 0) {
+      console.warn("警告!" + imgName + "的宽或高不是32的倍数!");
     }
-}
+    if (img.width * img.height > 32 * 32 * 3000) {
+      console.warn("警告!" + imgName + "上的图块素材个数大于3000!");
+    }
+  }
+};
 
 // ------ 实际加载一系列图片 ------ //
 
 loader.prototype.loadImages = function (dir, names, toSave, callback) {
-    if (!names || names.length == 0) {
-        if (callback) callback();
+  if (!names || names.length == 0) {
+    if (callback) callback();
+    return;
+  }
+  var items = 0;
+  for (var i = 0; i < names.length; i++) {
+    this.loadImage(dir, names[i], function (id, image) {
+      core.loader._setStartLoadTipText("正在加载图片 " + id + "...");
+      if (toSave[id] !== undefined) {
+        if (image != null) toSave[id] = image;
         return;
-    }
-    var items = 0;
-    for (var i = 0; i < names.length; i++) {
-        this.loadImage(dir, names[i], function (id, image) {
-            core.loader._setStartLoadTipText('正在加载图片 ' + id + "...");
-            if (toSave[id] !== undefined) {
-                if (image != null)
-                    toSave[id] = image;
-                return;
-            }
-            toSave[id] = image;
-            items++;
-            core.loader._setStartProgressVal(items * (100 / names.length));
-            if (items == names.length) {
-                if (callback) callback();
-            }
-        })
-    }
-}
+      }
+      toSave[id] = image;
+      items++;
+      core.loader._setStartProgressVal(items * (100 / names.length));
+      if (items == names.length) {
+        if (callback) callback();
+      }
+    });
+  }
+};
 
 loader.prototype.loadImage = function (dir, imgName, callback) {
-    try {
-        var name = imgName;
-        if (name.indexOf(".") < 0)
-            name = name + ".png";
-        var image = new Image();
-        image.onload = function () {
-            image.setAttribute('_width', image.width);
-            image.setAttribute('_height', image.height);
-            callback(imgName, image);
-        }
-        image.onerror = function () {
-            callback(imgName, null);
-        }
-        image.src = 'project/' + dir + '/' + name + "?v=" + main.version;
-        if (name.endsWith('.gif'))
-            callback(imgName, null);
-    }
-    catch (e) {
-        console.error(e);
-    }
-}
+  try {
+    var name = imgName;
+    if (name.indexOf(".") < 0) name = name + ".png";
+    var image = new Image();
+    image.onload = function () {
+      image.setAttribute("_width", image.width);
+      image.setAttribute("_height", image.height);
+      callback(imgName, image);
+    };
+    image.onerror = function () {
+      callback(imgName, null);
+    };
+    image.src = "project/" + dir + "/" + name + "?v=" + main.version;
+    if (name.endsWith(".gif")) callback(imgName, null);
+  } catch (e) {
+    console.error(e);
+  }
+};
 
 // ------ 从zip中加载一系列图片 ------ //
 
-loader.prototype.loadImagesFromZip = function (url, names, toSave, onprogress, onfinished) {
-    if (!names || names.length == 0) {
-        if (onfinished) onfinished();
-        return;
-    }
+loader.prototype.loadImagesFromZip = function (
+  url,
+  names,
+  toSave,
+  onprogress,
+  onfinished
+) {
+  if (!names || names.length == 0) {
+    if (onfinished) onfinished();
+    return;
+  }
 
-    core.unzip(url + "?v=" + main.version, function (data) {
-        var cnt = 1;
-        names.forEach(function (name) {
-            var imgName = name;
-            if (imgName.indexOf('.') < 0) imgName += '.png';
-            if (imgName in data) {
-                var img = new Image();
-                var url = URL.createObjectURL(data[imgName]);
-                cnt++;
-                img.onload = function () {
-                    cnt--;
-                    URL.revokeObjectURL(url);
-                    img.setAttribute('_width', img.width);
-                    img.setAttribute('_height', img.height);
-                    if (cnt == 0 && onfinished) onfinished();
-                }
-                img.src = url;
-                toSave[name] = img;
-            }
-        });
-        cnt--;
-        if (cnt == 0 && onfinished) onfinished();
-    }, null, false, onprogress);
-}
+  core.unzip(
+    url + "?v=" + main.version,
+    function (data) {
+      var cnt = 1;
+      names.forEach(function (name) {
+        var imgName = name;
+        if (imgName.indexOf(".") < 0) imgName += ".png";
+        if (imgName in data) {
+          var img = new Image();
+          var url = URL.createObjectURL(data[imgName]);
+          cnt++;
+          img.onload = function () {
+            cnt--;
+            URL.revokeObjectURL(url);
+            img.setAttribute("_width", img.width);
+            img.setAttribute("_height", img.height);
+            if (cnt == 0 && onfinished) onfinished();
+          };
+          img.src = url;
+          toSave[name] = img;
+        }
+      });
+      cnt--;
+      if (cnt == 0 && onfinished) onfinished();
+    },
+    null,
+    false,
+    onprogress
+  );
+};
 
-loader.prototype._loadImagesFromChunks = async function (chunks, names, toSave, makeOnProgress, makeOnFinished) {
-    await Promise.all(chunks.map((chunk) => {
-        const onfinished = makeOnFinished(chunk);
-        const onprogress = makeOnProgress(chunk);
-        return new Promise((resolve) => {
-            this.loadImagesFromZip(chunk, names, toSave, onprogress, () => {
-                onfinished();
-                resolve();     
-            });
+loader.prototype._loadImagesFromChunks = async function (
+  chunks,
+  names,
+  toSave,
+  makeOnProgress,
+  makeOnFinished
+) {
+  await Promise.all(
+    chunks.map((chunk) => {
+      const onfinished = makeOnFinished(chunk);
+      const onprogress = makeOnProgress(chunk);
+      return new Promise((resolve) => {
+        this.loadImagesFromZip(chunk, names, toSave, onprogress, () => {
+          onfinished();
+          resolve();
         });
-    }));
-}
+      });
+    })
+  );
+};
 
 // ------ 加载动画文件 ------ //
 
 loader.prototype._loadAnimates_sync = function () {
-    this._setStartLoadTipText("正在加载动画文件...");
+  this._setStartLoadTipText("正在加载动画文件...");
 
-    if (main.supportBunch) {
-        if (core.animates.length > 0) {
-            core.http('GET', '__all_animates__?v=' + main.version + '&id=' + core.animates.join(','), null, function (content) {
-                var u = content.split('@@@~~~###~~~@@@');
-                for (var i = 0; i < core.animates.length; ++i) {
-                    if (u[i] != '') {
-                        core.material.animates[core.animates[i]] = core.loader._loadAnimate(u[i]);
-                    } else {
-                        console.error('无法找到动画文件' + core.animates[i] + '!');
-                    }
-                }
-            }, "text/plain; charset=x-user-defined");
-        }
-        return;
+  if (main.supportBunch) {
+    if (core.animates.length > 0) {
+      core.http(
+        "GET",
+        "__all_animates__?v=" + main.version + "&id=" + core.animates.join(","),
+        null,
+        function (content) {
+          var u = content.split("@@@~~~###~~~@@@");
+          for (var i = 0; i < core.animates.length; ++i) {
+            if (u[i] != "") {
+              core.material.animates[core.animates[i]] =
+                core.loader._loadAnimate(u[i]);
+            } else {
+              console.error("无法找到动画文件" + core.animates[i] + "!");
+            }
+          }
+        },
+        "text/plain; charset=x-user-defined"
+      );
     }
+    return;
+  }
 
-    core.animates.forEach(function (t) {
-        core.http('GET', 'project/animates/' + t + ".animate?v=" + main.version, null, function (content) {
-            core.material.animates[t] = core.loader._loadAnimate(content);
-        }, function (e) {
-            console.error(e);
-            core.material.animates[t] = null;
-        }, "text/plain; charset=x-user-defined")
-    });
-}
+  core.animates.forEach(function (t) {
+    core.http(
+      "GET",
+      "project/animates/" + t + ".animate?v=" + main.version,
+      null,
+      function (content) {
+        core.material.animates[t] = core.loader._loadAnimate(content);
+      },
+      function (e) {
+        console.error(e);
+        core.material.animates[t] = null;
+      },
+      "text/plain; charset=x-user-defined"
+    );
+  });
+};
 
 loader.prototype._loadAnimates_async = function (onprogress, onfinished) {
-    this._loadFileFromZip('project/animates/animates.h5data', this._saveAnimate, true, onprogress, onfinished);
-}
+  this._loadFileFromZip(
+    "project/animates/animates.h5data",
+    this._saveAnimate,
+    true,
+    onprogress,
+    onfinished
+  );
+};
 
-loader.prototype._loadAnimates_chunked = function (chunks, makeOnProgress, makeOnFinished) {
-    this._loadFileFromChunks(chunks, this._saveAnimate, true, makeOnProgress, makeOnFinished);
-}
+loader.prototype._loadAnimates_chunked = function (
+  chunks,
+  makeOnProgress,
+  makeOnFinished
+) {
+  this._loadFileFromChunks(
+    chunks,
+    this._saveAnimate,
+    true,
+    makeOnProgress,
+    makeOnFinished
+  );
+};
 
 loader.prototype._saveAnimate = function (animates, onfinished) {
-    for (var name in animates) {
-        if (name.endsWith(".animate")) {
-            var t = name.substring(0, name.length - 8);
-            if (core.animates.indexOf(t) >= 0)
-                core.material.animates[t] = core.loader._loadAnimate(animates[name]);
-        }
+  for (var name in animates) {
+    if (name.endsWith(".animate")) {
+      var t = name.substring(0, name.length - 8);
+      if (core.animates.indexOf(t) >= 0)
+        core.material.animates[t] = core.loader._loadAnimate(animates[name]);
     }
-    onfinished();
-}
+  }
+  onfinished();
+};
 
 loader.prototype._loadAnimate = function (content) {
-    try {
-        content = JSON.parse(content);
-        var data = {};
-        data.ratio = content.ratio;
-        data.se = content.se;
-        data.pitch = content.pitch;
-        data.images = [];
-        content.bitmaps.forEach(function (t2) {
-            if (!t2) {
-                data.images.push(null);
-            }
-            else {
-                try {
-                    var image = new Image();
-                    image.src = t2;
-                    data.images.push(image);
-                } catch (e) {
-                    console.error(e);
-                    data.images.push(null);
-                }
-            }
-        })
-        data.frame = content.frame_max;
-        data.frames = [];
-        content.frames.forEach(function (t2) {
-            var info = [];
-            t2.forEach(function (t3) {
-                info.push({
-                    'index': t3[0],
-                    'x': t3[1],
-                    'y': t3[2],
-                    'zoom': t3[3],
-                    'opacity': t3[4],
-                    'mirror': t3[5] || 0,
-                    'angle': t3[6] || 0,
-                })
-            })
-            data.frames.push(info);
+  try {
+    content = JSON.parse(content);
+    var data = {};
+    data.ratio = content.ratio;
+    data.se = content.se;
+    data.pitch = content.pitch;
+    data.images = [];
+    content.bitmaps.forEach(function (t2) {
+      if (!t2) {
+        data.images.push(null);
+      } else {
+        try {
+          var image = new Image();
+          image.src = t2;
+          data.images.push(image);
+        } catch (e) {
+          console.error(e);
+          data.images.push(null);
+        }
+      }
+    });
+    data.frame = content.frame_max;
+    data.frames = [];
+    content.frames.forEach(function (t2) {
+      var info = [];
+      t2.forEach(function (t3) {
+        info.push({
+          index: t3[0],
+          x: t3[1],
+          y: t3[2],
+          zoom: t3[3],
+          opacity: t3[4],
+          mirror: t3[5] || 0,
+          angle: t3[6] || 0,
         });
-        return data;
-    }
-    catch (e) {
-        console.error(e);
-        return null;
-    }
-}
+      });
+      data.frames.push(info);
+    });
+    return data;
+  } catch (e) {
+    console.error(e);
+    return null;
+  }
+};
 
 // ------ 加载音乐和音效 ------ //
 
 loader.prototype._loadMusics = function () {
-    core.bgms.forEach(function (t) {
-        core.loader.loadOneMusic(t);
-    });
-    // 直接开始播放
-    core.playBgm(main.startBgm);
-}
+  core.bgms.forEach(function (t) {
+    core.loader.loadOneMusic(t);
+  });
+  // 直接开始播放
+  core.playBgm(main.startBgm);
+};
 
 loader.prototype._loadSounds_sync = function () {
-    this._setStartLoadTipText("正在加载音效文件...");
-    core.sounds.forEach(function (t) {
-        core.loader.loadOneSound(t);
-    });
-}
+  this._setStartLoadTipText("正在加载音效文件...");
+  core.sounds.forEach(function (t) {
+    core.loader.loadOneSound(t);
+  });
+};
 
 loader.prototype._loadSounds_async = function (onprogress, onfinished) {
-    this._loadFileFromZip('project/sounds/sounds.h5data', this._saveSounds, false, onprogress, onfinished);
-}
+  this._loadFileFromZip(
+    "project/sounds/sounds.h5data",
+    this._saveSounds,
+    false,
+    onprogress,
+    onfinished
+  );
+};
 
-loader.prototype._loadSounds_chunked = function (chunks, makeOnProgress, makeOnFinished) {
-    this._loadFileFromChunks(chunks, this._saveSounds, false, makeOnProgress, makeOnFinished);
-}
+loader.prototype._loadSounds_chunked = function (
+  chunks,
+  makeOnProgress,
+  makeOnFinished
+) {
+  this._loadFileFromChunks(
+    chunks,
+    this._saveSounds,
+    false,
+    makeOnProgress,
+    makeOnFinished
+  );
+};
 
 loader.prototype._saveSounds = function (data, onfinished) {
-    // 延迟解析
-    setTimeout(function () {
-        for (var name in data) {
-            if (core.sounds.indexOf(name) >= 0) {
-                core.loader._loadOneSound_decodeData(name, data[name]);
-            }
-        }
-        onfinished();
-    });
-}
+  // 延迟解析
+  setTimeout(function () {
+    for (var name in data) {
+      if (core.sounds.indexOf(name) >= 0) {
+        core.loader._loadOneSound_decodeData(name, data[name]);
+      }
+    }
+    onfinished();
+  });
+};
 
 loader.prototype.loadOneMusic = function (name) {
-    var music = new Audio();
-    music.preload = 'none';
-    if (main.bgmRemote) music.src = main.bgmRemoteRoot + core.firstData.name + '/' + name;
-    else music.src = 'project/bgms/' + name;
-    music.loop = 'loop';
-    core.material.bgms[name] = music;
-}
+  /* var music = new Audio();
+  music.preload = "none";
+  if (main.bgmRemote)
+    music.src = main.bgmRemoteRoot + core.firstData.name + "/" + name;
+  else music.src = "project/bgms/" + name;
+  music.loop = "loop";
+  core.material.bgms[name] = music;*/
+};
 
 loader.prototype.loadOneSound = function (name) {
-    core.http('GET', 'project/sounds/' + name + "?v=" + main.version, null, function (data) {
-        core.loader._loadOneSound_decodeData(name, data);
-    }, function (e) {
-        console.error(e);
-        core.material.sounds[name] = null;
-    }, null, 'arraybuffer');
-}
+  core.http(
+    "GET",
+    "project/sounds/" + name + "?v=" + main.version,
+    null,
+    function (data) {
+      core.loader._loadOneSound_decodeData(name, data);
+    },
+    function (e) {
+      console.error(e);
+      core.material.sounds[name] = null;
+    },
+    null,
+    "arraybuffer"
+  );
+};
 
 loader.prototype._loadOneSound_decodeData = function (name, data) {
-    if (data instanceof Blob) {
-        var blobReader = new zip.BlobReader(data);
-        blobReader.init(function () {
-            blobReader.readUint8Array(0, blobReader.size, function (uint8) {
-                core.loader._loadOneSound_decodeData(name, uint8.buffer);
-            })
-        });
-        return;
-    }
-    try {
-        core.musicStatus.audioContext.decodeAudioData(data, function (buffer) {
-            core.material.sounds[name] = buffer;
-        }, function (e) {
-            console.error(e);
-            core.material.sounds[name] = null;
-        })
-    }
-    catch (e) {
+  if (data instanceof Blob) {
+    var blobReader = new zip.BlobReader(data);
+    blobReader.init(function () {
+      blobReader.readUint8Array(0, blobReader.size, function (uint8) {
+        core.loader._loadOneSound_decodeData(name, uint8.buffer);
+      });
+    });
+    return;
+  }
+  try {
+    core.musicStatus.audioContext.decodeAudioData(
+      data,
+      function (buffer) {
+        core.material.sounds[name] = buffer;
+      },
+      function (e) {
         console.error(e);
         core.material.sounds[name] = null;
-    }
-}
+      }
+    );
+  } catch (e) {
+    console.error(e);
+    core.material.sounds[name] = null;
+  }
+};
 
 loader.prototype.loadBgm = function (name) {
-    name = core.getMappedName(name);
-    if (!core.material.bgms[name]) return;
-    // 如果没开启音乐,则不预加载
-    if (!core.musicStatus.bgmStatus) return;
-    // 是否已经预加载过
-    var index = core.musicStatus.cachedBgms.indexOf(name);
-    if (index >= 0) {
-        core.musicStatus.cachedBgms.splice(index, 1);
+  name = core.getMappedName(name);
+  if (!core.material.bgms[name]) return;
+  // 如果没开启音乐,则不预加载
+  if (!core.musicStatus.bgmStatus) return;
+  // 是否已经预加载过
+  var index = core.musicStatus.cachedBgms.indexOf(name);
+  if (index >= 0) {
+    core.musicStatus.cachedBgms.splice(index, 1);
+  } else {
+    // 预加载BGM
+    this._preloadBgm(core.material.bgms[name]);
+    // core.material.bgms[name].load();
+    // 清理尾巴
+    if (core.musicStatus.cachedBgms.length == core.musicStatus.cachedBgmCount) {
+      this.freeBgm(core.musicStatus.cachedBgms.pop());
     }
-    else {
-        // 预加载BGM
-        this._preloadBgm(core.material.bgms[name]);
-        // core.material.bgms[name].load();
-        // 清理尾巴
-        if (core.musicStatus.cachedBgms.length == core.musicStatus.cachedBgmCount) {
-            this.freeBgm(core.musicStatus.cachedBgms.pop());
-        }
-    }
-    // 移动到缓存最前方
-    core.musicStatus.cachedBgms.unshift(name);
-}
+  }
+  // 移动到缓存最前方
+  core.musicStatus.cachedBgms.unshift(name);
+};
 
 loader.prototype._preloadBgm = function (bgm) {
-    bgm.volume = 0;
-    bgm.play();
-}
+  bgm.volume = 0;
+  bgm.play();
+};
 
 loader.prototype.freeBgm = function (name) {
-    name = core.getMappedName(name);
-    if (!core.material.bgms[name]) return;
-    // 从cachedBgms中删除
-    core.musicStatus.cachedBgms = core.musicStatus.cachedBgms.filter(function (t) {
-        return t != name;
-    });
-    // 清掉缓存
-    core.material.bgms[name].removeAttribute("src");
-    core.material.bgms[name].load();
-    core.material.bgms[name] = null;
-    if (name == core.musicStatus.playingBgm) {
-        core.musicStatus.playingBgm = null;
-    }
-    // 三秒后重新加载
-    setTimeout(function () {
-        core.loader.loadOneMusic(name);
-    }, 3000);
-}
+  name = core.getMappedName(name);
+  if (!core.material.bgms[name]) return;
+  // 从cachedBgms中删除
+  core.musicStatus.cachedBgms = core.musicStatus.cachedBgms.filter(function (
+    t
+  ) {
+    return t != name;
+  });
+  // 清掉缓存
+  core.material.bgms[name].removeAttribute("src");
+  core.material.bgms[name].load();
+  core.material.bgms[name] = null;
+  if (name == core.musicStatus.playingBgm) {
+    core.musicStatus.playingBgm = null;
+  }
+  // 三秒后重新加载
+  setTimeout(function () {
+    core.loader.loadOneMusic(name);
+  }, 3000);
+};
 
-loader.prototype._loadFileFromZip = function (url, save, convertToText, onprogress, onfinished) {
-    core.unzip(url + '?v=' + main.version, function (data) {
-        save(data, onfinished);
-    }, null, convertToText, onprogress);
-}
+loader.prototype._loadFileFromZip = function (
+  url,
+  save,
+  convertToText,
+  onprogress,
+  onfinished
+) {
+  core.unzip(
+    url + "?v=" + main.version,
+    function (data) {
+      save(data, onfinished);
+    },
+    null,
+    convertToText,
+    onprogress
+  );
+};
 
-loader.prototype._loadFileFromChunks = async function (chunks, save, convertToText, makeOnProgress, makeOnFinished) {
-    await Promise.all(chunks.map((chunk) => {
-        const onfinished = makeOnFinished(chunk);
-        const onprogress = makeOnProgress(chunk);
-        return new Promise((resolve) => {
-            this._loadFileFromZip(chunk, save, convertToText, onprogress, () => {
-                onfinished();
-                resolve();
-            });
+loader.prototype._loadFileFromChunks = async function (
+  chunks,
+  save,
+  convertToText,
+  makeOnProgress,
+  makeOnFinished
+) {
+  await Promise.all(
+    chunks.map((chunk) => {
+      const onfinished = makeOnFinished(chunk);
+      const onprogress = makeOnProgress(chunk);
+      return new Promise((resolve) => {
+        this._loadFileFromZip(chunk, save, convertToText, onprogress, () => {
+          onfinished();
+          resolve();
         });
-    }));
-}
+      });
+    })
+  );
+};
diff --git a/libs/maps.js b/libs/maps.js
index 4fbbb8b..35e6b8d 100644
--- a/libs/maps.js
+++ b/libs/maps.js
@@ -2192,6 +2192,7 @@ maps.prototype.showBgFgMap = function (name, loc, floorId, callback) {
 
 ////// 隐藏前景/背景地图 //////
 maps.prototype.hideBgFgMap = function (name, loc, floorId, callback) {
+    this.removeGlobalAnimate(loc.x, loc.y, name)
     this._triggerBgFgMap('hide', name, loc, floorId, callback);
 }
 
@@ -2455,7 +2456,7 @@ maps.prototype.setBgFgBlock = function (name, number, x, y, floorId) {
         if (/^\d+$/.test(number)) number = parseInt(number);
         else number = core.getNumberById(number);
     }
-
+    this.removeGlobalAnimate(x, y, name)
     var values = core.getFlag('__' + name + 'v__', {});
     values[floorId] = (values[floorId] || []).filter(function (one) { return one[0] != x || one[1] != y });
     values[floorId].push([x, y, number]);
diff --git a/libs/utils.js b/libs/utils.js
index cd5e576..40fe703 100644
--- a/libs/utils.js
+++ b/libs/utils.js
@@ -1,4 +1,3 @@
-
 /*
 utils.js 工具类
 
@@ -6,1335 +5,1488 @@ utils.js 工具类
 
 "use strict";
 
-function utils () {
-    this._init();
-    this.scan = {
-        'up': { 'x': 0, 'y': -1 },
-        'left': { 'x': -1, 'y': 0 },
-        'down': { 'x': 0, 'y': 1 },
-        'right': { 'x': 1, 'y': 0 }
-    };
-    this.scan2 = {
-        'up': { 'x': 0, 'y': -1 },
-        'left': { 'x': -1, 'y': 0 },
-        'down': { 'x': 0, 'y': 1 },
-        'right': { 'x': 1, 'y': 0 },
-        'leftup': { 'x': -1, 'y': -1 },
-        'leftdown': { 'x': -1, 'y': 1 },
-        'rightup': { 'x': 1, 'y': -1 },
-        'rightdown': { 'x': 1, 'y': 1 }
-    };
+function utils() {
+  this._init();
+  this.scan = {
+    up: { x: 0, y: -1 },
+    left: { x: -1, y: 0 },
+    down: { x: 0, y: 1 },
+    right: { x: 1, y: 0 },
+  };
+  this.scan2 = {
+    up: { x: 0, y: -1 },
+    left: { x: -1, y: 0 },
+    down: { x: 0, y: 1 },
+    right: { x: 1, y: 0 },
+    leftup: { x: -1, y: -1 },
+    leftdown: { x: -1, y: 1 },
+    rightup: { x: 1, y: -1 },
+    rightdown: { x: 1, y: 1 },
+  };
 }
 
 utils.prototype._init = function () {
-    //
-}
+  //
+};
 
 ////// 将文字中的${和}(表达式)进行替换 //////
 utils.prototype.replaceText = function (text, prefix) {
-    if (typeof text != 'string') return text;
-    var index = text.indexOf("${");
-    if (index < 0) return text;
-    var cnt = 0, curr = index;
-    while (++curr < text.length) {
-        if (text.charAt(curr) == '{') cnt++;
-        if (text.charAt(curr) == '}') cnt--;
-        if (cnt == 0) break;
-    }
-    if (cnt != 0) return text;
-    var value = core.calValue(text.substring(index + 2, curr), prefix);
-    if (value == null) value = "";
-    return text.substring(0, index) + value + core.replaceText(text.substring(curr + 1), prefix);
-}
+  if (typeof text != "string") return text;
+  var index = text.indexOf("${");
+  if (index < 0) return text;
+  var cnt = 0,
+    curr = index;
+  while (++curr < text.length) {
+    if (text.charAt(curr) == "{") cnt++;
+    if (text.charAt(curr) == "}") cnt--;
+    if (cnt == 0) break;
+  }
+  if (cnt != 0) return text;
+  var value = core.calValue(text.substring(index + 2, curr), prefix);
+  if (value == null) value = "";
+  return (
+    text.substring(0, index) +
+    value +
+    core.replaceText(text.substring(curr + 1), prefix)
+  );
+};
 
 utils.prototype.replaceValue = function (value) {
-    if (typeof value == "string" && (value.indexOf(":") >= 0 || value.indexOf("flag:") >= 0 || value.indexOf('global:') >= 0)) {
-        if (value.indexOf('status:') >= 0)
-            value = value.replace(/status:([a-zA-Z0-9_]+)/g, "core.getStatus('$1')");
-        if (value.indexOf('buff:') >= 0)
-            value = value.replace(/buff:([a-zA-Z0-9_]+)/g, "core.getBuff('$1')");
-        if (value.indexOf('item:') >= 0)
-            value = value.replace(/item:([a-zA-Z0-9_]+)/g, "core.itemCount('$1')");
-        if (value.indexOf('flag:') >= 0 || value.indexOf('flag:') >= 0)
-            value = value.replace(/flag[::]([a-zA-Z0-9_\u4E00-\u9FCC\u3040-\u30FF\u2160-\u216B\u0391-\u03C9]+)/g, "core.getFlag('$1', 0)");
-        //if (value.indexOf('switch:' >= 0))
-        //    value = value.replace(/switch:([a-zA-Z0-9_]+)/g, "core.getFlag('" + (prefix || ":f@x@y") + "@$1', 0)");
-        if (value.indexOf('global:') >= 0 || value.indexOf('global:') >= 0)
-            value = value.replace(/global[::]([a-zA-Z0-9_\u4E00-\u9FCC\u3040-\u30FF\u2160-\u216B\u0391-\u03C9]+)/g, "core.getGlobal('$1', 0)");
-        if (value.indexOf('enemy:') >= 0)
-            value = value.replace(/enemy:([a-zA-Z0-9_]+)[\.:]([a-zA-Z0-9_]+)/g, "core.material.enemys['$1'].$2");
-        if (value.indexOf('blockId:') >= 0)
-            value = value.replace(/blockId:(\d+),(\d+)/g, "core.getBlockId($1, $2)");
-        if (value.indexOf('blockNumber:') >= 0)
-            value = value.replace(/blockNumber:(\d+),(\d+)/g, "core.getBlockNumber($1, $2)");
-        if (value.indexOf('blockCls:') >= 0)
-            value = value.replace(/blockCls:(\d+),(\d+)/g, "core.getBlockCls($1, $2)");
-        if (value.indexOf('equip:') >= 0)
-            value = value.replace(/equip:(\d)/g, "core.getEquip($1)");
-        if (value.indexOf('temp:') >= 0)
-            value = value.replace(/temp:([a-zA-Z0-9_]+)/g, "core.getFlag('@temp@$1', 0)");
-    }
-    return value;
-}
+  if (
+    typeof value == "string" &&
+    (value.indexOf(":") >= 0 ||
+      value.indexOf("flag:") >= 0 ||
+      value.indexOf("global:") >= 0)
+  ) {
+    if (value.indexOf("status:") >= 0)
+      value = value.replace(/status:([a-zA-Z0-9_]+)/g, "core.getStatus('$1')");
+    if (value.indexOf("buff:") >= 0)
+      value = value.replace(/buff:([a-zA-Z0-9_]+)/g, "core.getBuff('$1')");
+    if (value.indexOf("item:") >= 0)
+      value = value.replace(/item:([a-zA-Z0-9_]+)/g, "core.itemCount('$1')");
+    if (value.indexOf("flag:") >= 0 || value.indexOf("flag:") >= 0)
+      value = value.replace(
+        /flag[::]([a-zA-Z0-9_\u4E00-\u9FCC\u3040-\u30FF\u2160-\u216B\u0391-\u03C9]+)/g,
+        "core.getFlag('$1', 0)"
+      );
+    //if (value.indexOf('switch:' >= 0))
+    //    value = value.replace(/switch:([a-zA-Z0-9_]+)/g, "core.getFlag('" + (prefix || ":f@x@y") + "@$1', 0)");
+    if (value.indexOf("global:") >= 0 || value.indexOf("global:") >= 0)
+      value = value.replace(
+        /global[::]([a-zA-Z0-9_\u4E00-\u9FCC\u3040-\u30FF\u2160-\u216B\u0391-\u03C9]+)/g,
+        "core.getGlobal('$1', 0)"
+      );
+    if (value.indexOf("enemy:") >= 0)
+      value = value.replace(
+        /enemy:([a-zA-Z0-9_]+)[\.:]([a-zA-Z0-9_]+)/g,
+        "core.material.enemys['$1'].$2"
+      );
+    if (value.indexOf("blockId:") >= 0)
+      value = value.replace(/blockId:(\d+),(\d+)/g, "core.getBlockId($1, $2)");
+    if (value.indexOf("blockNumber:") >= 0)
+      value = value.replace(
+        /blockNumber:(\d+),(\d+)/g,
+        "core.getBlockNumber($1, $2)"
+      );
+    if (value.indexOf("blockCls:") >= 0)
+      value = value.replace(
+        /blockCls:(\d+),(\d+)/g,
+        "core.getBlockCls($1, $2)"
+      );
+    if (value.indexOf("equip:") >= 0)
+      value = value.replace(/equip:(\d)/g, "core.getEquip($1)");
+    if (value.indexOf("temp:") >= 0)
+      value = value.replace(
+        /temp:([a-zA-Z0-9_]+)/g,
+        "core.getFlag('@temp@$1', 0)"
+      );
+  }
+  return value;
+};
 
 ////// 计算表达式的值 //////
 utils.prototype.calValue = function (value, prefix) {
-    if (!core.isset(value)) return null;
-    if (typeof value === 'string') {
-        if (value.indexOf(':') >= 0 || value.indexOf("flag:") >= 0 || value.indexOf('global:') >= 0) {
-            if (value.indexOf('switch:') >= 0)
-                value = value.replace(/switch:([a-zA-Z0-9_]+)/g, "core.getFlag('" + (prefix || ":f@x@y") + "@$1', 0)");
-            value = this.replaceValue(value);
-        }
-        return eval(value);
+  if (!core.isset(value)) return null;
+  if (typeof value === "string") {
+    if (
+      value.indexOf(":") >= 0 ||
+      value.indexOf("flag:") >= 0 ||
+      value.indexOf("global:") >= 0
+    ) {
+      if (value.indexOf("switch:") >= 0)
+        value = value.replace(
+          /switch:([a-zA-Z0-9_]+)/g,
+          "core.getFlag('" + (prefix || ":f@x@y") + "@$1', 0)"
+        );
+      value = this.replaceValue(value);
     }
-    if (value instanceof Function) {
-        return value();
-    }
-    return value;
-}
+    return eval(value);
+  }
+  if (value instanceof Function) {
+    return value();
+  }
+  return value;
+};
 
 ////// 向某个数组前插入另一个数组或元素 //////
 utils.prototype.unshift = function (a, b) {
-    if (!(a instanceof Array) || b == null) return;
-    if (b instanceof Array) {
-        core.clone(b).reverse().forEach(function (e) {
-            a.unshift(e);
-        });
-    }
-    else a.unshift(b);
-    return a;
-}
+  if (!(a instanceof Array) || b == null) return;
+  if (b instanceof Array) {
+    core
+      .clone(b)
+      .reverse()
+      .forEach(function (e) {
+        a.unshift(e);
+      });
+  } else a.unshift(b);
+  return a;
+};
 
 ////// 向某个数组后插入另一个数组或元素 //////
 utils.prototype.push = function (a, b) {
-    if (!(a instanceof Array) || b == null) return;
-    if (b instanceof Array) {
-        core.clone(b).forEach(function (e) {
-            a.push(e);
-        });
-    }
-    else a.push(b);
-    return a;
-}
+  if (!(a instanceof Array) || b == null) return;
+  if (b instanceof Array) {
+    core.clone(b).forEach(function (e) {
+      a.push(e);
+    });
+  } else a.push(b);
+  return a;
+};
 
 utils.prototype.decompress = function (value) {
-    try {
-        var output = lzw_decode(value);
-        if (output) return JSON.parse(output);
-    }
-    catch (e) {
-    }
-    try {
-        var output = LZString.decompress(value);
-        if (output) return JSON.parse(output);
-    }
-    catch (e) {
-    }
-    try {
-        return JSON.parse(value);
-    }
-    catch (e) {
-        console.error(e);
-    }
-    return null;
-}
+  try {
+    var output = lzw_decode(value);
+    if (output) return JSON.parse(output);
+  } catch (e) {}
+  try {
+    var output = LZString.decompress(value);
+    if (output) return JSON.parse(output);
+  } catch (e) {}
+  try {
+    return JSON.parse(value);
+  } catch (e) {
+    console.error(e);
+  }
+  return null;
+};
 
 ////// 设置本地存储 //////
 utils.prototype.setLocalStorage = function (key, value) {
-    try {
-        if (value == null) {
-            this.removeLocalStorage(key);
-            return;
-        }
-
-        var str = JSON.stringify(value).replace(/[\u007F-\uFFFF]/g, function (chr) {
-            return "\\u" + ("0000" + chr.charCodeAt(0).toString(16)).substr(-4)
-        });
-        localStorage.setItem(core.firstData.name + "_" + key, str);
-
-        if (key == 'autoSave') core.saves.ids[0] = true;
-        else if (/^save\d+$/.test(key)) core.saves.ids[parseInt(key.substring(4))] = true;
-
-        return true;
+  try {
+    if (value == null) {
+      this.removeLocalStorage(key);
+      return;
     }
-    catch (e) {
-        console.error(e);
-        return false;
-    }
-}
+
+    var str = JSON.stringify(value).replace(/[\u007F-\uFFFF]/g, function (chr) {
+      return "\\u" + ("0000" + chr.charCodeAt(0).toString(16)).substr(-4);
+    });
+    localStorage.setItem(core.firstData.name + "_" + key, str);
+
+    if (key == "autoSave") core.saves.ids[0] = true;
+    else if (/^save\d+$/.test(key))
+      core.saves.ids[parseInt(key.substring(4))] = true;
+
+    return true;
+  } catch (e) {
+    console.error(e);
+    return false;
+  }
+};
 
 ////// 获得本地存储 //////
 utils.prototype.getLocalStorage = function (key, defaultValue) {
-    try {
-        var value = JSON.parse(localStorage.getItem(core.firstData.name + "_" + key));
-        if (value == null) return defaultValue;
-        return value;
-    } catch (e) {
-        return defaultValue;
-    }
-}
+  try {
+    var value = JSON.parse(
+      localStorage.getItem(core.firstData.name + "_" + key)
+    );
+    if (value == null) return defaultValue;
+    return value;
+  } catch (e) {
+    return defaultValue;
+  }
+};
 
 ////// 移除本地存储 //////
 utils.prototype.removeLocalStorage = function (key) {
-    localStorage.removeItem(core.firstData.name + "_" + key);
-    if (key == 'autoSave') delete core.saves.ids[0];
-    else if (/^save\d+$/.test(key)) delete core.saves.ids[parseInt(key.substring(4))];
-}
+  localStorage.removeItem(core.firstData.name + "_" + key);
+  if (key == "autoSave") delete core.saves.ids[0];
+  else if (/^save\d+$/.test(key))
+    delete core.saves.ids[parseInt(key.substring(4))];
+};
 
-utils.prototype.setLocalForage = function (key, value, successCallback, errorCallback) {
-    if (value == null) {
-        this.removeLocalForage(key);
-        return;
-    }
+utils.prototype.setLocalForage = function (
+  key,
+  value,
+  successCallback,
+  errorCallback
+) {
+  if (value == null) {
+    this.removeLocalForage(key);
+    return;
+  }
 
-    var name = core.firstData.name + "_" + key;
-    var str = JSON.stringify(value).replace(/[\u007F-\uFFFF]/g, function (chr) {
-        return "\\u" + ("0000" + chr.charCodeAt(0).toString(16)).substr(-4)
-    });
-    var callback = function (err) {
-        if (err) {
-            if (errorCallback) errorCallback(err);
-        }
-        else {
-            if (key == 'autoSave') core.saves.ids[0] = true;
-            else if (/^save\d+$/.test(key)) core.saves.ids[parseInt(key.substring(4))] = true;
-            if (successCallback) successCallback();
-        }
+  var name = core.firstData.name + "_" + key;
+  var str = JSON.stringify(value).replace(/[\u007F-\uFFFF]/g, function (chr) {
+    return "\\u" + ("0000" + chr.charCodeAt(0).toString(16)).substr(-4);
+  });
+  var callback = function (err) {
+    if (err) {
+      if (errorCallback) errorCallback(err);
+    } else {
+      if (key == "autoSave") core.saves.ids[0] = true;
+      else if (/^save\d+$/.test(key))
+        core.saves.ids[parseInt(key.substring(4))] = true;
+      if (successCallback) successCallback();
     }
-    this._setLocalForage_set(name, str, callback);
-}
+  };
+  this._setLocalForage_set(name, str, callback);
+};
 
 utils.prototype._setLocalForage_set = function (name, str, callback) {
-    if (window.jsinterface && window.jsinterface.setLocalForage) {
-        var id = setTimeout(null);
-        core['__callback' + id] = callback;
-        core.saves.cache[name] = str;
-        window.jsinterface.setLocalForage(id, name, str);
-    } else {
-        var compressed = str.length > 100000 ? LZString.compress(str) : lzw_encode(str);
-        core.saves.cache[name] = compressed;
-        localforage.setItem(name, compressed, callback);
-    }
-}
+  if (window.jsinterface && window.jsinterface.setLocalForage) {
+    var id = setTimeout(null);
+    core["__callback" + id] = callback;
+    core.saves.cache[name] = str;
+    window.jsinterface.setLocalForage(id, name, str);
+  } else {
+    var compressed =
+      str.length > 100000 ? LZString.compress(str) : lzw_encode(str);
+    core.saves.cache[name] = compressed;
+    localforage.setItem(name, compressed, callback);
+  }
+};
 
-utils.prototype.getLocalForage = function (key, defaultValue, successCallback, errorCallback) {
-    var name = core.firstData.name + "_" + key;
-    var callback = function (err, value) {
-        if (err) {
-            if (errorCallback) errorCallback(err);
-        }
-        else {
-            core.saves.cache[name] = value;
-            if (!successCallback) return;
-            if (value != null) {
-                var res = core.utils.decompress(value);
-                successCallback(res == null ? defaultValue : res);
-                return;
-            }
-            successCallback(defaultValue);
-        }
-    };
-    if (core.saves.cache[name] != null) {
-        return callback(null, core.saves.cache[name]);
+utils.prototype.getLocalForage = function (
+  key,
+  defaultValue,
+  successCallback,
+  errorCallback
+) {
+  var name = core.firstData.name + "_" + key;
+  var callback = function (err, value) {
+    if (err) {
+      if (errorCallback) errorCallback(err);
+    } else {
+      core.saves.cache[name] = value;
+      if (!successCallback) return;
+      if (value != null) {
+        var res = core.utils.decompress(value);
+        successCallback(res == null ? defaultValue : res);
+        return;
+      }
+      successCallback(defaultValue);
     }
-    this._getLocalForage_get(name, callback);
-}
+  };
+  if (core.saves.cache[name] != null) {
+    return callback(null, core.saves.cache[name]);
+  }
+  this._getLocalForage_get(name, callback);
+};
 
 utils.prototype._getLocalForage_get = function (name, callback) {
-    if (window.jsinterface && window.jsinterface.getLocalForage) {
-        var id = setTimeout(null);
-        core['__callback' + id] = callback;
-        window.jsinterface.getLocalForage(id, name);
-    } else {
-        localforage.getItem(name, callback);
-    }
-}
+  if (window.jsinterface && window.jsinterface.getLocalForage) {
+    var id = setTimeout(null);
+    core["__callback" + id] = callback;
+    window.jsinterface.getLocalForage(id, name);
+  } else {
+    localforage.getItem(name, callback);
+  }
+};
 
-utils.prototype.removeLocalForage = function (key, successCallback, errorCallback) {
-    var name = core.firstData.name + "_" + key;
-    var callback = function (err) {
-        if (err) {
-            if (errorCallback) errorCallback(err);
-        }
-        else {
-            if (key == 'autoSave') delete core.saves.ids[0];
-            else if (/^save\d+$/.test(key)) delete core.saves.ids[parseInt(key.substring(4))];
-            if (successCallback) successCallback();
-        }
+utils.prototype.removeLocalForage = function (
+  key,
+  successCallback,
+  errorCallback
+) {
+  var name = core.firstData.name + "_" + key;
+  var callback = function (err) {
+    if (err) {
+      if (errorCallback) errorCallback(err);
+    } else {
+      if (key == "autoSave") delete core.saves.ids[0];
+      else if (/^save\d+$/.test(key))
+        delete core.saves.ids[parseInt(key.substring(4))];
+      if (successCallback) successCallback();
     }
-    delete core.saves.cache[name];
-    this._removeLocalForage_remove(name, callback);
-}
+  };
+  delete core.saves.cache[name];
+  this._removeLocalForage_remove(name, callback);
+};
 
 utils.prototype._removeLocalForage_remove = function (name, callback) {
-    if (window.jsinterface && window.jsinterface.removeLocalForage) {
-        var id = setTimeout(null);
-        core['__callback' + id] = callback;
-        window.jsinterface.removeLocalForage(id, name);
-    } else {
-        localforage.removeItem(name, callback);
-    }
-}
+  if (window.jsinterface && window.jsinterface.removeLocalForage) {
+    var id = setTimeout(null);
+    core["__callback" + id] = callback;
+    window.jsinterface.removeLocalForage(id, name);
+  } else {
+    localforage.removeItem(name, callback);
+  }
+};
 
 utils.prototype.clearLocalForage = function (callback) {
-    core.saves.cache = {};
-    if (window.jsinterface && window.jsinterface.clearLocalForage) {
-        var id = setTimeout(null);
-        core['__callback' + id] = callback;
-        window.jsinterface.clearLocalForage(id);
-    } else {
-        localforage.clear(callback);
-    }
-}
+  core.saves.cache = {};
+  if (window.jsinterface && window.jsinterface.clearLocalForage) {
+    var id = setTimeout(null);
+    core["__callback" + id] = callback;
+    window.jsinterface.clearLocalForage(id);
+  } else {
+    localforage.clear(callback);
+  }
+};
 
 utils.prototype.iterateLocalForage = function (iter, callback) {
-    if (window.jsinterface && window.jsinterface.iterateLocalForage) {
-        var id = setTimeout(null);
-        core['__iter' + id] = iter;
-        core['__callback' + id] = callback;
-        window.jsinterface.iterateLocalForage(id);
-    } else {
-        localforage.iterate(iter, callback);
-    }
-}
+  if (window.jsinterface && window.jsinterface.iterateLocalForage) {
+    var id = setTimeout(null);
+    core["__iter" + id] = iter;
+    core["__callback" + id] = callback;
+    window.jsinterface.iterateLocalForage(id);
+  } else {
+    localforage.iterate(iter, callback);
+  }
+};
 
 utils.prototype.keysLocalForage = function (callback) {
-    if (window.jsinterface && window.jsinterface.keysLocalForage) {
-        var id = setTimeout(null);
-        core['__callback' + id] = callback;
-        window.jsinterface.keysLocalForage(id);
-    } else {
-        localforage.keys(callback);
-    }
-}
+  if (window.jsinterface && window.jsinterface.keysLocalForage) {
+    var id = setTimeout(null);
+    core["__callback" + id] = callback;
+    window.jsinterface.keysLocalForage(id);
+  } else {
+    localforage.keys(callback);
+  }
+};
 
 utils.prototype.lengthLocalForage = function (callback) {
-    if (window.jsinterface && window.jsinterface.lengthLocalForage) {
-        var id = setTimeout(null);
-        core['__callback' + id] = callback;
-        window.jsinterface.lengthLocalForage(id);
-    } else {
-        localforage.length(callback);
-    }
-}
+  if (window.jsinterface && window.jsinterface.lengthLocalForage) {
+    var id = setTimeout(null);
+    core["__callback" + id] = callback;
+    window.jsinterface.lengthLocalForage(id);
+  } else {
+    localforage.length(callback);
+  }
+};
 
 utils.prototype.setGlobal = function (key, value) {
-    if (core.isReplaying()) return;
-    core.setLocalStorage(key, value);
-}
+  if (core.isReplaying()) return;
+  core.setLocalStorage(key, value);
+};
 
 utils.prototype.getGlobal = function (key, defaultValue) {
-    var value;
-    if (core.isReplaying()) {
-        // 不考虑key不一致的情况
-        var action = core.status.replay.toReplay.shift();
-        if (action.indexOf("input2:") == 0) {
-            value = JSON.parse(core.decodeBase64(action.substring(7)));
-            core.setFlag('__global__' + key, value);
-            core.status.route.push("input2:" + core.encodeBase64(JSON.stringify(value)));
-        }
-        else {
-            // 录像兼容性:尝试从flag和localStorage获得
-            // 注意这里不再二次记录 input2: 到录像
-            core.status.replay.toReplay.unshift(action);
-            value = core.getFlag('__global__' + key, core.getLocalStorage(key, defaultValue));
-        }
+  var value;
+  if (core.isReplaying()) {
+    // 不考虑key不一致的情况
+    var action = core.status.replay.toReplay.shift();
+    if (action.indexOf("input2:") == 0) {
+      value = JSON.parse(core.decodeBase64(action.substring(7)));
+      core.setFlag("__global__" + key, value);
+      core.status.route.push(
+        "input2:" + core.encodeBase64(JSON.stringify(value))
+      );
+    } else {
+      // 录像兼容性:尝试从flag和localStorage获得
+      // 注意这里不再二次记录 input2: 到录像
+      core.status.replay.toReplay.unshift(action);
+      value = core.getFlag(
+        "__global__" + key,
+        core.getLocalStorage(key, defaultValue)
+      );
     }
-    else {
-        value = core.getLocalStorage(key, defaultValue);
-        core.setFlag('__global__' + key, value);
-        core.status.route.push("input2:" + core.encodeBase64(JSON.stringify(value)));
-    }
-    return value;
-}
+  } else {
+    value = core.getLocalStorage(key, defaultValue);
+    core.setFlag("__global__" + key, value);
+    core.status.route.push(
+      "input2:" + core.encodeBase64(JSON.stringify(value))
+    );
+  }
+  return value;
+};
 
 ////// 深拷贝一个对象 //////
 utils.prototype.clone = function (data, filter, recursion) {
-    if (!core.isset(data)) return null;
-    // date
-    if (data instanceof Date) {
-        var copy = new Date();
-        copy.setTime(data.getTime());
-        return copy;
-    }
-    // array
-    if (data instanceof Array) {
-        var copy = [];
-        for (var i in data) {
-            if (!filter || filter(i, data[i]))
-                copy[i] = core.clone(data[i], recursion ? filter : null, recursion);
-        }
-        return copy;
-    }
-    // 函数
-    if (data instanceof Function) {
-        return data;
-    }
-    // object
-    if (data instanceof Object) {
-        var copy = {};
-        for (var i in data) {
-            if (data.hasOwnProperty(i) && (!filter || filter(i, data[i])))
-                copy[i] = core.clone(data[i], recursion ? filter : null, recursion);
-        }
-        return copy;
+  if (!core.isset(data)) return null;
+  // date
+  if (data instanceof Date) {
+    var copy = new Date();
+    copy.setTime(data.getTime());
+    return copy;
+  }
+  // array
+  if (data instanceof Array) {
+    var copy = [];
+    for (var i in data) {
+      if (!filter || filter(i, data[i]))
+        copy[i] = core.clone(data[i], recursion ? filter : null, recursion);
     }
+    return copy;
+  }
+  // 函数
+  if (data instanceof Function) {
     return data;
-}
+  }
+  // object
+  if (data instanceof Object) {
+    var copy = {};
+    for (var i in data) {
+      if (data.hasOwnProperty(i) && (!filter || filter(i, data[i])))
+        copy[i] = core.clone(data[i], recursion ? filter : null, recursion);
+    }
+    return copy;
+  }
+  return data;
+};
 
 ////// 深拷贝1D/2D数组优化 //////
 utils.prototype.cloneArray = function (data) {
-    if (!(data instanceof Array)) return this.clone(data);
-    if (data[0] instanceof Array) {
-        return data.map(function (one) { return one.slice(); });
-    } else {
-        return data.slice();
-    }
-}
+  if (!(data instanceof Array)) return this.clone(data);
+  if (data[0] instanceof Array) {
+    return data.map(function (one) {
+      return one.slice();
+    });
+  } else {
+    return data.slice();
+  }
+};
 
 ////// 裁剪图片 //////
 utils.prototype.splitImage = function (image, width, height) {
-    if (typeof image == "string") {
-        image = core.getMappedName(image);
-        image = core.material.images.images[image];
+  if (typeof image == "string") {
+    image = core.getMappedName(image);
+    image = core.material.images.images[image];
+  }
+  if (!image) return [];
+  width = width || 32;
+  height = height || width;
+  var canvas = document.createElement("canvas");
+  var ctx = canvas.getContext("2d");
+  var ans = [];
+  for (var j = 0; j < image.height; j += height) {
+    for (var i = 0; i < image.width; i += width) {
+      var w = Math.min(width, image.width - i),
+        h = Math.min(height, image.height - j);
+      canvas.width = w;
+      canvas.height = h;
+      core.drawImage(ctx, image, i, j, w, h, 0, 0, w, h);
+      var img = new Image();
+      img.src = canvas.toDataURL("image/png");
+      ans.push(img);
     }
-    if (!image) return [];
-    width = width || 32;
-    height = height || width;
-    var canvas = document.createElement("canvas");
-    var ctx = canvas.getContext("2d");
-    var ans = [];
-    for (var j = 0; j < image.height; j += height) {
-        for (var i = 0; i < image.width; i += width) {
-            var w = Math.min(width, image.width - i), h = Math.min(height, image.height - j);
-            canvas.width = w; canvas.height = h;
-            core.drawImage(ctx, image, i, j, w, h, 0, 0, w, h);
-            var img = new Image();
-            img.src = canvas.toDataURL("image/png");
-            ans.push(img);
-        }
-    }
-    return ans;
-}
+  }
+  return ans;
+};
 
 ////// 格式化时间为字符串 //////
 utils.prototype.formatDate = function (date) {
-    if (!date) date = new Date();
-    return "" + date.getFullYear() + "-" + core.setTwoDigits(date.getMonth() + 1) + "-" + core.setTwoDigits(date.getDate()) + " "
-        + core.setTwoDigits(date.getHours()) + ":" + core.setTwoDigits(date.getMinutes()) + ":" + core.setTwoDigits(date.getSeconds());
-}
+  if (!date) date = new Date();
+  return (
+    "" +
+    date.getFullYear() +
+    "-" +
+    core.setTwoDigits(date.getMonth() + 1) +
+    "-" +
+    core.setTwoDigits(date.getDate()) +
+    " " +
+    core.setTwoDigits(date.getHours()) +
+    ":" +
+    core.setTwoDigits(date.getMinutes()) +
+    ":" +
+    core.setTwoDigits(date.getSeconds())
+  );
+};
 
 ////// 格式化时间为最简字符串 //////
 utils.prototype.formatDate2 = function (date) {
-    if (!date) date = new Date();
-    return "" + date.getFullYear() + core.setTwoDigits(date.getMonth() + 1) + core.setTwoDigits(date.getDate())
-        + core.setTwoDigits(date.getHours()) + core.setTwoDigits(date.getMinutes()) + core.setTwoDigits(date.getSeconds());
-}
+  if (!date) date = new Date();
+  return (
+    "" +
+    date.getFullYear() +
+    core.setTwoDigits(date.getMonth() + 1) +
+    core.setTwoDigits(date.getDate()) +
+    core.setTwoDigits(date.getHours()) +
+    core.setTwoDigits(date.getMinutes()) +
+    core.setTwoDigits(date.getSeconds())
+  );
+};
 
 utils.prototype.formatTime = function (time) {
-    return core.setTwoDigits(parseInt(time / 3600000))
-        + ":" + core.setTwoDigits(parseInt(time / 60000) % 60)
-        + ":" + core.setTwoDigits(parseInt(time / 1000) % 60);
-}
+  return (
+    core.setTwoDigits(parseInt(time / 3600000)) +
+    ":" +
+    core.setTwoDigits(parseInt(time / 60000) % 60) +
+    ":" +
+    core.setTwoDigits(parseInt(time / 1000) % 60)
+  );
+};
 
 ////// 两位数显示 //////
 utils.prototype.setTwoDigits = function (x) {
-    return (parseInt(x) < 10 && parseInt(x) >= 0) ? "0" + x : x;
-}
+  return parseInt(x) < 10 && parseInt(x) >= 0 ? "0" + x : x;
+};
 
 utils.prototype.formatSize = function (size) {
-    if (size < 1024) return size + 'B';
-    else if (size < 1024 * 1024) return (size / 1024).toFixed(2) + "KB";
-    else return (size / 1024 / 1024).toFixed(2) + "MB";
-}
+  if (size < 1024) return size + "B";
+  else if (size < 1024 * 1024) return (size / 1024).toFixed(2) + "KB";
+  else return (size / 1024 / 1024).toFixed(2) + "MB";
+};
 
 utils.prototype.formatBigNumber = function (x, digits) {
-    if (digits === true) digits = 5; // 兼容旧版onMap参数
-    if (!digits || digits < 5) digits = 6; // 连同负号、小数点和后缀字母在内的总位数,至少需为5,默认为6
-    x = Math.trunc(parseFloat(x)); // 尝试识别为小数,然后向0取整
-    if (x == null || !Number.isFinite(x)) return '???'; // 无法识别的数或正负无穷大,显示'???'
-    var units = [ // 单位及其后缀字母,可自定义,如改成千进制下的K、M、G、T、P
-        { "val": 1e4, "suffix": "w" },
-        { "val": 1e8, "suffix": "e" },
-        { "val": 1e12, "suffix": "z" },
-        { "val": 1e16, "suffix": "j" },
-        { "val": 1e20, "suffix": "g" },
-    ];
-    if (Math.abs(x) > 1e20 * Math.pow(10, digits - 2))
-        return x.toExponential(0); // 绝对值过大以致于失去精度的数,直接使用科学记数法,系数只保留整数
-    var sign = x < 0 ? '-' : '';
-    if (sign) --digits; // 符号位单独处理,负号要占一位
-    x = Math.abs(x);
+  if (digits === true) digits = 5; // 兼容旧版onMap参数
+  if (!digits || digits < 5) digits = 6; // 连同负号、小数点和后缀字母在内的总位数,至少需为5,默认为6
+  x = Math.trunc(parseFloat(x)); // 尝试识别为小数,然后向0取整
+  if (x == null || !Number.isFinite(x)) return "???"; // 无法识别的数或正负无穷大,显示'???'
+  var units = [
+    // 单位及其后缀字母,可自定义,如改成千进制下的K、M、G、T、P
+    { val: 1e4, suffix: "w" },
+    { val: 1e8, suffix: "e" },
+    { val: 1e12, suffix: "z" },
+    { val: 1e16, suffix: "j" },
+    { val: 1e20, suffix: "g" },
+  ];
+  if (Math.abs(x) > 1e20 * Math.pow(10, digits - 2)) return x.toExponential(0); // 绝对值过大以致于失去精度的数,直接使用科学记数法,系数只保留整数
+  var sign = x < 0 ? "-" : "";
+  if (sign) --digits; // 符号位单独处理,负号要占一位
+  x = Math.abs(x);
 
-    if (x < Math.pow(10, digits)) return sign + x;
+  if (x < Math.pow(10, digits)) return sign + x;
 
-    for (var i = 0; i < units.length; ++i) {
-        var each = units[i];
-        var u = (x / each.val).toFixed(digits).substring(0, digits);
-        if (u.indexOf('.') < 0) continue;
-        u = u.substring(0, u[u.length - 2] == '.' ? u.length - 2 : u.length - 1);
-        return sign + u + each.suffix;
-    }
-    return sign + x.toExponential(0);
-}
+  for (var i = 0; i < units.length; ++i) {
+    var each = units[i];
+    var u = (x / each.val).toFixed(digits).substring(0, digits);
+    if (u.indexOf(".") < 0) continue;
+    u = u.substring(0, u[u.length - 2] == "." ? u.length - 2 : u.length - 1);
+    return sign + u + each.suffix;
+  }
+  return sign + x.toExponential(0);
+};
 
 ////// 变速移动 //////
 utils.prototype.applyEasing = function (name) {
-    var list = {
-        "easeIn": function (t) {
-            return Math.pow(t, 3);
-        },
-        "easeOut": function (t) {
-            return 1 - Math.pow(1 - t, 3);
-        },
-        "easeInOut": function (t) {
-            // easeInOut试了一下感觉二次方效果明显点
-            if (t < 0.5) return Math.pow(t, 2) * 2;
-            else return 1 - Math.pow(1 - t, 2) * 2;
-        },
-        "linear": function (t) {
-            return t
-        }
-    }
-    if (name == 'random') {
-        var keys = Object.keys(list);
-        name = keys[Math.floor(Math.random() * keys.length)];
-    }
-    return list[name] || list.linear;
-}
+  var list = {
+    easeIn: function (t) {
+      return Math.pow(t, 3);
+    },
+    easeOut: function (t) {
+      return 1 - Math.pow(1 - t, 3);
+    },
+    easeInOut: function (t) {
+      // easeInOut试了一下感觉二次方效果明显点
+      if (t < 0.5) return Math.pow(t, 2) * 2;
+      else return 1 - Math.pow(1 - t, 2) * 2;
+    },
+    linear: function (t) {
+      return t;
+    },
+  };
+  if (name == "random") {
+    var keys = Object.keys(list);
+    name = keys[Math.floor(Math.random() * keys.length)];
+  }
+  return list[name] || list.linear;
+};
 
 ////// 数组转RGB //////
 utils.prototype.arrayToRGB = function (color) {
-    if (!(color instanceof Array)) return color;
-    var nowR = this.clamp(parseInt(color[0]), 0, 255), nowG = this.clamp(parseInt(color[1]), 0, 255),
-        nowB = this.clamp(parseInt(color[2]), 0, 255);
-    return "#" + ((1 << 24) + (nowR << 16) + (nowG << 8) + nowB).toString(16).slice(1);
-}
+  if (!(color instanceof Array)) return color;
+  var nowR = this.clamp(parseInt(color[0]), 0, 255),
+    nowG = this.clamp(parseInt(color[1]), 0, 255),
+    nowB = this.clamp(parseInt(color[2]), 0, 255);
+  return (
+    "#" + ((1 << 24) + (nowR << 16) + (nowG << 8) + nowB).toString(16).slice(1)
+  );
+};
 
 utils.prototype.arrayToRGBA = function (color) {
-    if (!(color instanceof Array)) return color;
-    if (color[3] == null) color[3] = 1;
-    var nowR = this.clamp(parseInt(color[0]), 0, 255), nowG = this.clamp(parseInt(color[1]), 0, 255),
-        nowB = this.clamp(parseInt(color[2]), 0, 255), nowA = this.clamp(parseFloat(color[3]), 0, 1);
-    return "rgba(" + nowR + "," + nowG + "," + nowB + "," + nowA + ")";
-}
+  if (!(color instanceof Array)) return color;
+  if (color[3] == null) color[3] = 1;
+  var nowR = this.clamp(parseInt(color[0]), 0, 255),
+    nowG = this.clamp(parseInt(color[1]), 0, 255),
+    nowB = this.clamp(parseInt(color[2]), 0, 255),
+    nowA = this.clamp(parseFloat(color[3]), 0, 1);
+  return "rgba(" + nowR + "," + nowG + "," + nowB + "," + nowA + ")";
+};
 
 ////// 加密路线 //////
 utils.prototype.encodeRoute = function (route) {
-    var ans = "", lastMove = "", cnt = 0;
+  var ans = "",
+    lastMove = "",
+    cnt = 0;
 
-    route.forEach(function (t) {
-        if (t == 'up' || t == 'down' || t == 'left' || t == 'right') {
-            if (t != lastMove && cnt > 0) {
-                ans += lastMove.substring(0, 1).toUpperCase();
-                if (cnt > 1) ans += cnt;
-                cnt = 0;
-            }
-            lastMove = t;
-            cnt++;
-        }
-        else {
-            if (cnt > 0) {
-                ans += lastMove.substring(0, 1).toUpperCase();
-                if (cnt > 1) ans += cnt;
-                cnt = 0;
-            }
-            ans += core.utils._encodeRoute_encodeOne(t);
-        }
-    });
-    if (cnt > 0) {
+  route.forEach(function (t) {
+    if (t == "up" || t == "down" || t == "left" || t == "right") {
+      if (t != lastMove && cnt > 0) {
         ans += lastMove.substring(0, 1).toUpperCase();
         if (cnt > 1) ans += cnt;
+        cnt = 0;
+      }
+      lastMove = t;
+      cnt++;
+    } else {
+      if (cnt > 0) {
+        ans += lastMove.substring(0, 1).toUpperCase();
+        if (cnt > 1) ans += cnt;
+        cnt = 0;
+      }
+      ans += core.utils._encodeRoute_encodeOne(t);
     }
-    return LZString.compressToBase64(ans);
-}
+  });
+  if (cnt > 0) {
+    ans += lastMove.substring(0, 1).toUpperCase();
+    if (cnt > 1) ans += cnt;
+  }
+  return LZString.compressToBase64(ans);
+};
 
 utils.prototype._encodeRoute_id2number = function (id) {
-    var number = core.maps.getNumberById(id);
-    return number == 0 ? id : number;
-}
+  var number = core.maps.getNumberById(id);
+  return number == 0 ? id : number;
+};
 
 utils.prototype._encodeRoute_encodeOne = function (t) {
-    if (t.indexOf('item:') == 0)
-        return "I" + this._encodeRoute_id2number(t.substring(5)) + ":";
-    else if (t.indexOf('unEquip:') == 0)
-        return "u" + t.substring(8);
-    else if (t.indexOf('equip:') == 0)
-        return "e" + this._encodeRoute_id2number(t.substring(6)) + ":";
-    else if (t.indexOf('saveEquip:') == 0)
-        return "s" + t.substring(10);
-    else if (t.indexOf('loadEquip:') == 0)
-        return "l" + t.substring(10);
-    else if (t.indexOf('fly:') == 0)
-        return "F" + t.substring(4) + ":";
-    else if (t == 'choices:none')
-        return "c";
-    else if (t.indexOf('choices:') == 0)
-        return "C" + t.substring(8);
-    else if (t.indexOf('shop:') == 0)
-        return "S" + t.substring(5) + ":";
-    else if (t == 'turn')
-        return 'T';
-    else if (t.indexOf('turn:') == 0)
-        return "t" + t.substring(5).substring(0, 1).toUpperCase() + ":";
-    else if (t == 'getNext')
-        return 'G';
-    else if (t == 'input:none')
-        return 'p';
-    else if (t.indexOf('input:') == 0)
-        return "P" + t.substring(6);
-    else if (t.indexOf('input2:') == 0)
-        return "Q" + t.substring(7) + ":";
-    else if (t == 'no')
-        return 'N';
-    else if (t.indexOf('move:') == 0)
-        return "M" + t.substring(5);
-    else if (t.indexOf('key:') == 0)
-        return 'K' + t.substring(4);
-    else if (t.indexOf('click:') == 0)
-        return 'k' + t.substring(6);
-    else if (t.indexOf('random:') == 0)
-        return 'X' + t.substring(7);
-    return '(' + t + ')';
-}
+  if (t.indexOf("item:") == 0)
+    return "I" + this._encodeRoute_id2number(t.substring(5)) + ":";
+  else if (t.indexOf("unEquip:") == 0) return "u" + t.substring(8);
+  else if (t.indexOf("equip:") == 0)
+    return "e" + this._encodeRoute_id2number(t.substring(6)) + ":";
+  else if (t.indexOf("saveEquip:") == 0) return "s" + t.substring(10);
+  else if (t.indexOf("loadEquip:") == 0) return "l" + t.substring(10);
+  else if (t.indexOf("fly:") == 0) return "F" + t.substring(4) + ":";
+  else if (t == "choices:none") return "c";
+  else if (t.indexOf("choices:") == 0) return "C" + t.substring(8);
+  else if (t.indexOf("shop:") == 0) return "S" + t.substring(5) + ":";
+  else if (t == "turn") return "T";
+  else if (t.indexOf("turn:") == 0)
+    return "t" + t.substring(5).substring(0, 1).toUpperCase() + ":";
+  else if (t == "getNext") return "G";
+  else if (t == "input:none") return "p";
+  else if (t.indexOf("input:") == 0) return "P" + t.substring(6);
+  else if (t.indexOf("input2:") == 0) return "Q" + t.substring(7) + ":";
+  else if (t == "no") return "N";
+  else if (t.indexOf("move:") == 0) return "M" + t.substring(5);
+  else if (t.indexOf("key:") == 0) return "K" + t.substring(4);
+  else if (t.indexOf("click:") == 0) return "k" + t.substring(6);
+  else if (t.indexOf("random:") == 0) return "X" + t.substring(7);
+  return "(" + t + ")";
+};
 
 ////// 解密路线 //////
 utils.prototype.decodeRoute = function (route) {
-    if (!route) return route;
+  if (!route) return route;
 
-    // 解压缩
-    try {
-        var v = LZString.decompressFromBase64(route);
-        if (v != null && /^[-_a-zA-Z0-9+\/=:()]*$/.test(v)) {
-            if (v != "" || route.length < 8)
-                route = v;
-        }
-    } catch (e) {
+  // 解压缩
+  try {
+    var v = LZString.decompressFromBase64(route);
+    if (v != null && /^[-_a-zA-Z0-9+\/=:()]*$/.test(v)) {
+      if (v != "" || route.length < 8) route = v;
     }
+  } catch (e) {}
 
-    var decodeObj = { route: route, index: 0, ans: [] };
-    while (decodeObj.index < decodeObj.route.length) {
-        this._decodeRoute_decodeOne(decodeObj, decodeObj.route.charAt(decodeObj.index++));
-    }
-    return decodeObj.ans;
-}
+  var decodeObj = { route: route, index: 0, ans: [] };
+  while (decodeObj.index < decodeObj.route.length) {
+    this._decodeRoute_decodeOne(
+      decodeObj,
+      decodeObj.route.charAt(decodeObj.index++)
+    );
+  }
+  return decodeObj.ans;
+};
 
 utils.prototype._decodeRoute_getNumber = function (decodeObj, noparse) {
-    var num = "";
-    var first = true;
-    while (true) {
-        var ch = decodeObj.route.charAt(decodeObj.index);
-        if (ch >= '0' && ch <= '9') num += ch;
-        else if (ch == '-' && first) num += ch;
-        else break;
-        first = false;
-        decodeObj.index++;
-    }
-    if (num.length == 0) num = "1";
-    return noparse ? num : parseInt(num);
-}
+  var num = "";
+  var first = true;
+  while (true) {
+    var ch = decodeObj.route.charAt(decodeObj.index);
+    if (ch >= "0" && ch <= "9") num += ch;
+    else if (ch == "-" && first) num += ch;
+    else break;
+    first = false;
+    decodeObj.index++;
+  }
+  if (num.length == 0) num = "1";
+  return noparse ? num : parseInt(num);
+};
 
 utils.prototype._decodeRoute_getString = function (decodeObj) {
-    var str = "";
-    while (decodeObj.index < decodeObj.route.length && decodeObj.route.charAt(decodeObj.index) != ':') {
-        str += decodeObj.route.charAt(decodeObj.index++);
-    }
-    decodeObj.index++;
-    return str;
-}
+  var str = "";
+  while (
+    decodeObj.index < decodeObj.route.length &&
+    decodeObj.route.charAt(decodeObj.index) != ":"
+  ) {
+    str += decodeObj.route.charAt(decodeObj.index++);
+  }
+  decodeObj.index++;
+  return str;
+};
 
 utils.prototype._decodeRoute_number2id = function (number) {
-    if (/^\d+$/.test(number)) {
-        var info = core.maps.blocksInfo[number];
-        if (info) return info.id;
-    }
-    return number;
-}
+  if (/^\d+$/.test(number)) {
+    var info = core.maps.blocksInfo[number];
+    if (info) return info.id;
+  }
+  return number;
+};
 
 utils.prototype._decodeRoute_decodeOne = function (decodeObj, c) {
-    // --- 特殊处理自定义项
-    if (c == '(') {
-        var idx = decodeObj.route.indexOf(')', decodeObj.index);
-        if (idx >= 0) {
-            decodeObj.ans.push(decodeObj.route.substring(decodeObj.index, idx));
-            decodeObj.index = idx + 1;
-            return;
-        }
+  // --- 特殊处理自定义项
+  if (c == "(") {
+    var idx = decodeObj.route.indexOf(")", decodeObj.index);
+    if (idx >= 0) {
+      decodeObj.ans.push(decodeObj.route.substring(decodeObj.index, idx));
+      decodeObj.index = idx + 1;
+      return;
     }
-    var nxt = (c == 'I' || c == 'e' || c == 'F' || c == 'S' || c == 'Q' || c == 't') ?
-        this._decodeRoute_getString(decodeObj) : this._decodeRoute_getNumber(decodeObj);
+  }
+  var nxt =
+    c == "I" || c == "e" || c == "F" || c == "S" || c == "Q" || c == "t"
+      ? this._decodeRoute_getString(decodeObj)
+      : this._decodeRoute_getNumber(decodeObj);
 
-    var mp = { "U": "up", "D": "down", "L": "left", "R": "right" };
+  var mp = { U: "up", D: "down", L: "left", R: "right" };
 
-    switch (c) {
-        case "U":
-        case "D":
-        case "L":
-        case "R":
-            for (var i = 0; i < nxt; i++) decodeObj.ans.push(mp[c]);
-            break;
-        case "I":
-            decodeObj.ans.push("item:" + this._decodeRoute_number2id(nxt));
-            break;
-        case "u":
-            decodeObj.ans.push("unEquip:" + nxt);
-            break;
-        case "e":
-            decodeObj.ans.push("equip:" + this._decodeRoute_number2id(nxt));
-            break;
-        case "s":
-            decodeObj.ans.push("saveEquip:" + nxt);
-            break;
-        case "l":
-            decodeObj.ans.push("loadEquip:" + nxt);
-            break;
-        case "F":
-            decodeObj.ans.push("fly:" + nxt);
-            break;
-        case 'c':
-            decodeObj.ans.push('choices:none');
-            break;
-        case "C":
-            decodeObj.ans.push("choices:" + nxt);
-            break;
-        case "S":
-            decodeObj.ans.push("shop:" + nxt);
-            break;
-        case "T":
-            decodeObj.ans.push("turn");
-            break;
-        case "t":
-            decodeObj.ans.push("turn:" + mp[nxt]);
-            break;
-        case "G":
-            decodeObj.ans.push("getNext");
-            break;
-        case "p":
-            decodeObj.ans.push("input:none");
-            break;
-        case "P":
-            decodeObj.ans.push("input:" + nxt);
-            break;
-        case "Q":
-            decodeObj.ans.push("input2:" + nxt);
-            break;
-        case "N":
-            decodeObj.ans.push("no");
-            break;
-        case "M":
-            ++decodeObj.index;
-            decodeObj.ans.push("move:" + nxt + ":" + this._decodeRoute_getNumber(decodeObj));
-            break;
-        case "K":
-            decodeObj.ans.push("key:" + nxt);
-            break;
-        case "k":
-            ++decodeObj.index;
-            var px = this._decodeRoute_getNumber(decodeObj);
-            ++decodeObj.index;
-            var py = this._decodeRoute_getNumber(decodeObj);
-            decodeObj.ans.push("click:" + nxt + ":" + px + ":" + py);
-            break;
-        case "X":
-            decodeObj.ans.push("random:" + nxt);
-            break;
-    }
-}
+  switch (c) {
+    case "U":
+    case "D":
+    case "L":
+    case "R":
+      for (var i = 0; i < nxt; i++) decodeObj.ans.push(mp[c]);
+      break;
+    case "I":
+      decodeObj.ans.push("item:" + this._decodeRoute_number2id(nxt));
+      break;
+    case "u":
+      decodeObj.ans.push("unEquip:" + nxt);
+      break;
+    case "e":
+      decodeObj.ans.push("equip:" + this._decodeRoute_number2id(nxt));
+      break;
+    case "s":
+      decodeObj.ans.push("saveEquip:" + nxt);
+      break;
+    case "l":
+      decodeObj.ans.push("loadEquip:" + nxt);
+      break;
+    case "F":
+      decodeObj.ans.push("fly:" + nxt);
+      break;
+    case "c":
+      decodeObj.ans.push("choices:none");
+      break;
+    case "C":
+      decodeObj.ans.push("choices:" + nxt);
+      break;
+    case "S":
+      decodeObj.ans.push("shop:" + nxt);
+      break;
+    case "T":
+      decodeObj.ans.push("turn");
+      break;
+    case "t":
+      decodeObj.ans.push("turn:" + mp[nxt]);
+      break;
+    case "G":
+      decodeObj.ans.push("getNext");
+      break;
+    case "p":
+      decodeObj.ans.push("input:none");
+      break;
+    case "P":
+      decodeObj.ans.push("input:" + nxt);
+      break;
+    case "Q":
+      decodeObj.ans.push("input2:" + nxt);
+      break;
+    case "N":
+      decodeObj.ans.push("no");
+      break;
+    case "M":
+      ++decodeObj.index;
+      decodeObj.ans.push(
+        "move:" + nxt + ":" + this._decodeRoute_getNumber(decodeObj)
+      );
+      break;
+    case "K":
+      decodeObj.ans.push("key:" + nxt);
+      break;
+    case "k":
+      ++decodeObj.index;
+      var px = this._decodeRoute_getNumber(decodeObj);
+      ++decodeObj.index;
+      var py = this._decodeRoute_getNumber(decodeObj);
+      decodeObj.ans.push("click:" + nxt + ":" + px + ":" + py);
+      break;
+    case "X":
+      decodeObj.ans.push("random:" + nxt);
+      break;
+  }
+};
 
 ////// 判断某对象是否不为null也不为NaN //////
 utils.prototype.isset = function (val) {
-    return val != null && !(typeof val == 'number' && isNaN(val));
-}
+  return val != null && !(typeof val == "number" && isNaN(val));
+};
 
 ////// 获得子数组 //////
 utils.prototype.subarray = function (a, b) {
-    if (!(a instanceof Array) || !(b instanceof Array) || a.length < b.length)
-        return null;
-    for (var i = 0; i < b.length; ++i) {
-        if (a[i] != b[i]) return null;
-    }
-    return a.slice(b.length);
-}
+  if (!(a instanceof Array) || !(b instanceof Array) || a.length < b.length)
+    return null;
+  for (var i = 0; i < b.length; ++i) {
+    if (a[i] != b[i]) return null;
+  }
+  return a.slice(b.length);
+};
 
 utils.prototype.inArray = function (array, element) {
-    return (array instanceof Array) && array.indexOf(element) >= 0;
-}
+  return array instanceof Array && array.indexOf(element) >= 0;
+};
 
 utils.prototype.clamp = function (x, a, b) {
-    var min = Math.min(a, b), max = Math.max(a, b);
-    return Math.min(Math.max(x || 0, min), max);
-}
+  var min = Math.min(a, b),
+    max = Math.max(a, b);
+  return Math.min(Math.max(x || 0, min), max);
+};
 
 utils.prototype.getCookie = function (name) {
-    var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
-    return match ? match[2] : null;
-}
+  var match = document.cookie.match(new RegExp("(^| )" + name + "=([^;]+)"));
+  return match ? match[2] : null;
+};
 
 ////// 设置statusBar的innerHTML,会自动斜体和放缩,也可以增加自定义css //////
 utils.prototype.setStatusBarInnerHTML = function (name, value, css) {
-    if (!core.statusBar[name]) return;
-    if (typeof value == 'number') value = this.formatBigNumber(value);
-    var italic = /^[-a-zA-Z0-9`~!@#$%^&*()_=+\[{\]}\\|;:'",<.>\/?]*$/.test(value);
-    var style = 'font-style: ' + (italic ? 'italic' : 'normal') + '; ';
-    style += 'text-shadow: #000 1px 0 0, #000 0 1px 0, #000 -1px 0 0, #000 0 -1px 0; ';
-    // 判定是否需要缩放
-    var length = this.strlen(value) || 1;
-    style += 'font-size: ' + Math.min(1, 7 / length) + 'em; ';
-    if (css) style += css;
-    var _style = core.statusBar[name].getAttribute('_style');
-    var _value = core.statusBar[name].getAttribute('_value');
-    if (_style == style) {
-        if (value == _value) return;
-        core.statusBar[name].children[0].innerText = value;
-    } else {
-        core.statusBar[name].innerHTML = "<span class='_status' style='" + style + "'></span>";
-        core.statusBar[name].children[0].innerText = value;
-        core.statusBar[name].setAttribute('_style', style);
-    }
-    core.statusBar[name].setAttribute('_value', value);;
-}
+  if (!core.statusBar[name]) return;
+  if (typeof value == "number") value = this.formatBigNumber(value);
+  var italic = /^[-a-zA-Z0-9`~!@#$%^&*()_=+\[{\]}\\|;:'",<.>\/?]*$/.test(value);
+  var style = "font-style: " + (italic ? "italic" : "normal") + "; ";
+  style +=
+    "text-shadow: #000 1px 0 0, #000 0 1px 0, #000 -1px 0 0, #000 0 -1px 0; ";
+  // 判定是否需要缩放
+  var length = this.strlen(value) || 1;
+  style += "font-size: " + Math.min(1, 7 / length) + "em; ";
+  if (css) style += css;
+  var _style = core.statusBar[name].getAttribute("_style");
+  var _value = core.statusBar[name].getAttribute("_value");
+  if (_style == style) {
+    if (value == _value) return;
+    core.statusBar[name].children[0].innerText = value;
+  } else {
+    core.statusBar[name].innerHTML =
+      "<span class='_status' style='" + style + "'></span>";
+    core.statusBar[name].children[0].innerText = value;
+    core.statusBar[name].setAttribute("_style", style);
+  }
+  core.statusBar[name].setAttribute("_value", value);
+};
 
 utils.prototype.strlen = function (str) {
-    var count = 0;
-    for (var i = 0, len = str.length; i < len; i++) {
-        count += str.charCodeAt(i) < 256 ? 1 : 2;
-    }
-    return count;
+  var count = 0;
+  for (var i = 0, len = str.length; i < len; i++) {
+    count += str.charCodeAt(i) < 256 ? 1 : 2;
+  }
+  return count;
 };
 
 utils.prototype.turnDirection = function (turn, direction) {
-    direction = direction || core.getHeroLoc('direction');
-    var directionList = ["left", "leftup", "up", "rightup", "right", "rightdown", "down", "leftdown"];
-    if (directionList.indexOf(turn) >= 0) return turn;
-    if (turn == ':hero') return core.getHeroLoc('direction');
-    if (turn == ':backhero') return this.turnDirection(':back', core.getHeroLoc('direction'));
-    if (typeof turn === 'number' && turn % 45 == 0) turn /= 45;
-    else {
-        switch (turn) {
-            case ':left': turn = 6; break; // turn left
-            case ':right': turn = 2; break; // turn right
-            case ':back': turn = 4; break; // turn back
-            default: turn = 0; break;
-        }
+  direction = direction || core.getHeroLoc("direction");
+  var directionList = [
+    "left",
+    "leftup",
+    "up",
+    "rightup",
+    "right",
+    "rightdown",
+    "down",
+    "leftdown",
+  ];
+  if (directionList.indexOf(turn) >= 0) return turn;
+  if (turn == ":hero") return core.getHeroLoc("direction");
+  if (turn == ":backhero")
+    return this.turnDirection(":back", core.getHeroLoc("direction"));
+  if (typeof turn === "number" && turn % 45 == 0) turn /= 45;
+  else {
+    switch (turn) {
+      case ":left":
+        turn = 6;
+        break; // turn left
+      case ":right":
+        turn = 2;
+        break; // turn right
+      case ":back":
+        turn = 4;
+        break; // turn back
+      default:
+        turn = 0;
+        break;
     }
-    var index = directionList.indexOf(direction);
-    if (index < 0) return direction;
-    return directionList[(index + (turn || 0)) % directionList.length];
-}
+  }
+  var index = directionList.indexOf(direction);
+  if (index < 0) return direction;
+  return directionList[(index + (turn || 0)) % directionList.length];
+};
 
 utils.prototype.matchWildcard = function (pattern, string) {
-    try {
-        return new RegExp('^' + pattern.split(/\*+/).map(function (s) {
-            return s.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&');
-        }).join('.*') + '$').test(string);
-    } catch (e) {
-        return false;
-    }
-}
+  try {
+    return new RegExp(
+      "^" +
+        pattern
+          .split(/\*+/)
+          .map(function (s) {
+            return s.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&");
+          })
+          .join(".*") +
+        "$"
+    ).test(string);
+  } catch (e) {
+    return false;
+  }
+};
 
 utils.prototype.matchRegex = function (pattern, string) {
-    try {
-        if (pattern.startsWith("^")) pattern = pattern.substring(1);
-        if (pattern.endsWith("$")) pattern = pattern.substring(0, pattern.length - 1);
-        return new RegExp("^" + pattern + "$").test(string);
-    } catch (e) {
-        return false;
-    }
-}
+  try {
+    if (pattern.startsWith("^")) pattern = pattern.substring(1);
+    if (pattern.endsWith("$"))
+      pattern = pattern.substring(0, pattern.length - 1);
+    return new RegExp("^" + pattern + "$").test(string);
+  } catch (e) {
+    return false;
+  }
+};
 
 ////// Base64加密 //////
 utils.prototype.encodeBase64 = function (str) {
-    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (match, p1) {
-        return String.fromCharCode(parseInt(p1, 16))
-    }))
-}
+  return btoa(
+    encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (match, p1) {
+      return String.fromCharCode(parseInt(p1, 16));
+    })
+  );
+};
 
 ////// Base64解密 //////
 utils.prototype.decodeBase64 = function (str) {
-    return decodeURIComponent(atob(str).split('').map(function (c) {
-        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
-    }).join(''));
-}
+  return decodeURIComponent(
+    atob(str)
+      .split("")
+      .map(function (c) {
+        return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);
+      })
+      .join("")
+  );
+};
 
 utils.prototype.rand = function (num) {
-    var rand = core.getFlag('__rand__');
-    rand = this.__next_rand(rand);
-    core.setFlag('__rand__', rand);
-    var ans = rand / 2147483647;
-    if (num && num > 0)
-        return Math.floor(ans * num);
-    return ans;
-}
+  var rand = core.getFlag("__rand__");
+  rand = this.__next_rand(rand);
+  core.setFlag("__rand__", rand);
+  var ans = rand / 2147483647;
+  if (num && num > 0) return Math.floor(ans * num);
+  return ans;
+};
 
 ////// 生成随机数(录像方法) //////
 utils.prototype.rand2 = function (num) {
-    num = num || 2147483648;
-    num = Math.abs(num);
+  num = num || 2147483648;
+  num = Math.abs(num);
 
-    var value;
-    if (core.isReplaying()) {
-        var action = core.status.replay.toReplay.shift();
-        if (action.indexOf("random:") == 0) {
-            value = parseInt(action.substring(7));
-            if (isNaN(value) || value >= num || value < 0) {
-                console.warn('错误!当前random:项超过范围。将重新随机生成!');
-                value = Math.floor(Math.random() * num);
-            }
-        }
-        else {
-            console.warn('错误!当前需要一个random:项。将重新随机生成!');
-            value = Math.floor(Math.random() * num);
-        }
-    }
-    else {
+  var value;
+  if (core.isReplaying()) {
+    var action = core.status.replay.toReplay.shift();
+    if (action.indexOf("random:") == 0) {
+      value = parseInt(action.substring(7));
+      if (isNaN(value) || value >= num || value < 0) {
+        console.warn("错误!当前random:项超过范围。将重新随机生成!");
         value = Math.floor(Math.random() * num);
+      }
+    } else {
+      console.warn("错误!当前需要一个random:项。将重新随机生成!");
+      value = Math.floor(Math.random() * num);
     }
-    core.status.route.push("random:" + value);
-    return value;
-}
+  } else {
+    value = Math.floor(Math.random() * num);
+  }
+  core.status.route.push("random:" + value);
+  return value;
+};
 
 utils.prototype.__init_seed = function () {
-    var rand = new Date().getTime() % 34834795 + 3534;
-    rand = this.__next_rand(rand);
-    rand = this.__next_rand(rand);
-    rand = this.__next_rand(rand);
-    core.setFlag('__seed__', rand);
-    core.setFlag('__rand__', rand);
-}
+  var rand = (new Date().getTime() % 34834795) + 3534;
+  rand = this.__next_rand(rand);
+  rand = this.__next_rand(rand);
+  rand = this.__next_rand(rand);
+  core.setFlag("__seed__", rand);
+  core.setFlag("__rand__", rand);
+};
 
 utils.prototype.__next_rand = function (_rand) {
-    _rand = (_rand % 127773) * 16807 - ~~(_rand / 127773) * 2836;
-    _rand += _rand < 0 ? 2147483647 : 0;
-    return _rand;
-}
+  _rand = (_rand % 127773) * 16807 - ~~(_rand / 127773) * 2836;
+  _rand += _rand < 0 ? 2147483647 : 0;
+  return _rand;
+};
 
 ////// 读取一个本地文件内容 //////
 utils.prototype.readFile = function (success, error, accept, readType) {
+  core.platform.successCallback = success;
+  core.platform.errorCallback = error;
 
-    core.platform.successCallback = success;
-    core.platform.errorCallback = error;
+  if (window.jsinterface) {
+    window.jsinterface.readFile();
+    return;
+  }
 
-    if (window.jsinterface) {
-        window.jsinterface.readFile();
+  // step 0: 不为http/https,直接不支持
+  if (!core.platform.isOnline) {
+    alert("离线状态下不支持文件读取!");
+    if (error) error();
+    return;
+  }
+
+  // Step 1: 如果不支持FileReader,直接不支持
+  if (core.platform.fileReader == null) {
+    alert("当前浏览器不支持FileReader!");
+    if (error) error();
+    return;
+  }
+
+  if (core.platform.fileInput == null) {
+    core.platform.fileInput = document.createElement("input");
+    core.platform.fileInput.style.opacity = 0;
+    core.platform.fileInput.type = "file";
+    core.platform.fileInput.onchange = function () {
+      var files = core.platform.fileInput.files;
+      if (files.length == 0) {
+        if (core.platform.errorCallback) core.platform.errorCallback();
         return;
-    }
+      }
+      if (!readType)
+        core.platform.fileReader.readAsText(core.platform.fileInput.files[0]);
+      else
+        core.platform.fileReader.readAsDataURL(
+          core.platform.fileInput.files[0]
+        );
+      core.platform.fileInput.value = "";
+    };
+  }
+  core.platform.fileInput.value = "";
+  if (accept) core.platform.fileInput.accept = accept;
 
-    // step 0: 不为http/https,直接不支持
-    if (!core.platform.isOnline) {
-        alert("离线状态下不支持文件读取!");
-        if (error) error();
-        return;
-    }
-
-    // Step 1: 如果不支持FileReader,直接不支持
-    if (core.platform.fileReader == null) {
-        alert("当前浏览器不支持FileReader!");
-        if (error) error();
-        return;
-    }
-
-    if (core.platform.fileInput == null) {
-        core.platform.fileInput = document.createElement("input");
-        core.platform.fileInput.style.opacity = 0;
-        core.platform.fileInput.type = 'file';
-        core.platform.fileInput.onchange = function () {
-            var files = core.platform.fileInput.files;
-            if (files.length == 0) {
-                if (core.platform.errorCallback)
-                    core.platform.errorCallback();
-                return;
-            }
-            if (!readType) core.platform.fileReader.readAsText(core.platform.fileInput.files[0]);
-            else core.platform.fileReader.readAsDataURL(core.platform.fileInput.files[0]);
-            core.platform.fileInput.value = '';
-        }
-    }
-    core.platform.fileInput.value = '';
-    if (accept) core.platform.fileInput.accept = accept;
-
-    core.platform.fileInput.click();
-}
+  core.platform.fileInput.click();
+};
 
 ////// 读取文件完毕 //////
 utils.prototype.readFileContent = function (content) {
-    var obj = null;
-    if (content.slice(0, 4) === 'data') {
-        if (core.platform.successCallback)
-            core.platform.successCallback(content);
-        return;
-    }
-    // 检查base64
+  var obj = null;
+  if (content.slice(0, 4) === "data") {
+    if (core.platform.successCallback) core.platform.successCallback(content);
+    return;
+  }
+  // 检查base64
+  try {
+    obj = JSON.parse(LZString.decompressFromBase64(content));
+  } catch (e) {}
+  if (!obj) {
     try {
-        obj = JSON.parse(LZString.decompressFromBase64(content));
-    } catch (e) { }
-    if (!obj) {
-        try {
-            obj = JSON.parse(content);
-        } catch (e) {
-            console.error(e)
-        }
+      obj = JSON.parse(content);
+    } catch (e) {
+      console.error(e);
     }
+  }
 
-    if (obj) {
-        if (core.platform.successCallback)
-            core.platform.successCallback(obj);
-        return;
-    }
+  if (obj) {
+    if (core.platform.successCallback) core.platform.successCallback(obj);
+    return;
+  }
 
-    if (core.platform.errorCallback)
-        core.platform.errorCallback();
-}
+  if (core.platform.errorCallback) core.platform.errorCallback();
+};
 
 ////// 下载文件到本地 //////
 utils.prototype.download = function (filename, content) {
+  if (window.jsinterface) {
+    window.jsinterface.download(filename, content);
+    return;
+  }
 
-    if (window.jsinterface) {
-        window.jsinterface.download(filename, content);
-        return;
-    }
+  // Step 0: 不为http/https,直接不支持
+  if (!core.platform.isOnline) {
+    alert("离线状态下不支持下载操作!");
+    return;
+  }
 
-    // Step 0: 不为http/https,直接不支持
-    if (!core.platform.isOnline) {
-        alert("离线状态下不支持下载操作!");
-        return;
+  // Step 1: 如果是iOS平台,直接不支持
+  if (core.platform.isIOS) {
+    if (core.copy(content)) {
+      alert(
+        "iOS平台下不支持直接下载文件!\n所有应下载内容已经复制到您的剪切板,请自行创建空白文件并粘贴。"
+      );
+    } else {
+      alert("iOS平台下不支持下载操作!");
     }
+    return;
+  }
 
-    // Step 1: 如果是iOS平台,直接不支持
-    if (core.platform.isIOS) {
-        if (core.copy(content)) {
-            alert("iOS平台下不支持直接下载文件!\n所有应下载内容已经复制到您的剪切板,请自行创建空白文件并粘贴。");
-        }
-        else {
-            alert("iOS平台下不支持下载操作!");
-        }
-        return;
+  // Step 2: 如果不是PC平台(Android),则只支持chrome
+  if (!core.platform.isPC) {
+    if (
+      !core.platform.isChrome ||
+      core.platform.isQQ ||
+      core.platform.isWeChat
+    ) {
+      // 检测chrome
+      if (core.copy(content)) {
+        alert(
+          "移动端只有Chrome浏览器支持直接下载文件!\n所有应下载内容已经复制到您的剪切板,请自行创建空白文件并粘贴。"
+        );
+      } else {
+        alert("该平台或浏览器暂不支持下载操作!");
+      }
+      return;
     }
+  }
 
-    // Step 2: 如果不是PC平台(Android),则只支持chrome
-    if (!core.platform.isPC) {
-        if (!core.platform.isChrome || core.platform.isQQ || core.platform.isWeChat) { // 检测chrome
-            if (core.copy(content)) {
-                alert("移动端只有Chrome浏览器支持直接下载文件!\n所有应下载内容已经复制到您的剪切板,请自行创建空白文件并粘贴。");
-            }
-            else {
-                alert("该平台或浏览器暂不支持下载操作!");
-            }
-            return;
-        }
-    }
+  // Step 3: 如果是Safari浏览器,则提示并打开新窗口
+  if (core.platform.isSafari) {
+    alert(
+      "你当前使用的是Safari浏览器,不支持直接下载文件。\n即将打开一个新窗口为应下载内容,请自行全选复制然后创建空白文件并粘贴。"
+    );
+    var blob = new Blob([content], { type: "text/plain;charset=utf-8" });
+    var href = window.URL.createObjectURL(blob);
+    var opened = window.open(href, "_blank");
+    window.URL.revokeObjectURL(href);
+    return;
+  }
 
-    // Step 3: 如果是Safari浏览器,则提示并打开新窗口
-    if (core.platform.isSafari) {
-        alert("你当前使用的是Safari浏览器,不支持直接下载文件。\n即将打开一个新窗口为应下载内容,请自行全选复制然后创建空白文件并粘贴。");
-        var blob = new Blob([content], { type: 'text/plain;charset=utf-8' });
-        var href = window.URL.createObjectURL(blob);
-        var opened = window.open(href, "_blank");
-        window.URL.revokeObjectURL(href);
-        return;
-    }
-
-    // Step 4: 下载
-    var blob = new Blob([content], { type: 'text/plain;charset=utf-8' });
-    if (window.navigator.msSaveOrOpenBlob) {
-        window.navigator.msSaveBlob(blob, filename);
-    }
-    else {
-        var href = window.URL.createObjectURL(blob);
-        var elem = window.document.createElement('a');
-        elem.href = href;
-        elem.download = filename;
-        document.body.appendChild(elem);
-        elem.click();
-        document.body.removeChild(elem);
-        window.URL.revokeObjectURL(href);
-    }
-}
+  // Step 4: 下载
+  var blob = new Blob([content], { type: "text/plain;charset=utf-8" });
+  if (window.navigator.msSaveOrOpenBlob) {
+    window.navigator.msSaveBlob(blob, filename);
+  } else {
+    var href = window.URL.createObjectURL(blob);
+    var elem = window.document.createElement("a");
+    elem.href = href;
+    elem.download = filename;
+    document.body.appendChild(elem);
+    elem.click();
+    document.body.removeChild(elem);
+    window.URL.revokeObjectURL(href);
+  }
+};
 
 ////// 复制一段内容到剪切板 //////
 utils.prototype.copy = function (data) {
+  if (window.jsinterface) {
+    window.jsinterface.copy(data);
+    return true;
+  }
 
-    if (window.jsinterface) {
-        window.jsinterface.copy(data);
-        return true;
-    }
+  if (!core.platform.supportCopy) return false;
 
-    if (!core.platform.supportCopy) return false;
+  var textArea = document.createElement("textarea");
+  textArea.style.position = "fixed";
+  textArea.style.top = 0;
+  textArea.style.left = 0;
+  textArea.style.width = "2em";
+  textArea.style.height = "2em";
+  textArea.style.padding = 0;
+  textArea.style.border = "none";
+  textArea.style.outline = "none";
+  textArea.style.boxShadow = "none";
+  textArea.style.background = "transparent";
+  textArea.value = data;
+  document.body.appendChild(textArea);
+  textArea.focus();
+  textArea.setSelectionRange(0, textArea.value.length);
+  var successful = false;
+  try {
+    successful = document.execCommand("copy");
+  } catch (err) {
+    successful = false;
+  }
 
-    var textArea = document.createElement("textarea");
-    textArea.style.position = 'fixed';
-    textArea.style.top = 0;
-    textArea.style.left = 0;
-    textArea.style.width = '2em';
-    textArea.style.height = '2em';
-    textArea.style.padding = 0;
-    textArea.style.border = 'none';
-    textArea.style.outline = 'none';
-    textArea.style.boxShadow = 'none';
-    textArea.style.background = 'transparent';
-    textArea.value = data;
-    document.body.appendChild(textArea);
-    textArea.focus();
-    textArea.setSelectionRange(0, textArea.value.length);
-    var successful = false;
-    try {
-        successful = document.execCommand('copy');
-    } catch (err) {
-        successful = false;
-    }
-
-    document.body.removeChild(textArea);
-    return successful;
-}
+  document.body.removeChild(textArea);
+  return successful;
+};
 
 ////// 显示一段confirm //////
 utils.prototype.myconfirm = function (hint, yesCallback, noCallback) {
-    main.dom.inputDiv.style.display = 'block';
-    main.dom.inputMessage.innerHTML = hint.replace(/\n/g, '<br/>');
-    main.dom.inputBox.style.display = 'none';
-    main.dom.inputYes.blur();
-    main.dom.inputNo.blur();
-    core.status.holdingKeys = [];
+  main.dom.inputDiv.style.display = "block";
+  main.dom.inputMessage.innerHTML = hint.replace(/\n/g, "<br/>");
+  main.dom.inputBox.style.display = "none";
+  main.dom.inputYes.blur();
+  main.dom.inputNo.blur();
+  core.status.holdingKeys = [];
 
-    core.platform.successCallback = yesCallback;
-    core.platform.errorCallback = noCallback;
-}
+  core.platform.successCallback = yesCallback;
+  core.platform.errorCallback = noCallback;
+};
 
 ////// 让用户输入一段文字 //////
 utils.prototype.myprompt = function (hint, value, callback) {
-    main.dom.inputDiv.style.display = 'block';
-    main.dom.inputMessage.innerHTML = hint.replace(/\n/g, '<br/>');
-    main.dom.inputBox.style.display = 'block';
-    main.dom.inputBox.value = value == null ? "" : value;
-    main.dom.inputYes.blur();
-    main.dom.inputNo.blur();
-    setTimeout(function () {
-        main.dom.inputBox.focus();
-    });
-    core.status.holdingKeys = [];
+  main.dom.inputDiv.style.display = "block";
+  main.dom.inputMessage.innerHTML = hint.replace(/\n/g, "<br/>");
+  main.dom.inputBox.style.display = "block";
+  main.dom.inputBox.value = value == null ? "" : value;
+  main.dom.inputYes.blur();
+  main.dom.inputNo.blur();
+  setTimeout(function () {
+    main.dom.inputBox.focus();
+  });
+  core.status.holdingKeys = [];
 
-    core.platform.successCallback = core.platform.errorCallback = callback;
-}
+  core.platform.successCallback = core.platform.errorCallback = callback;
+};
 
 ////// 动画显示某对象 //////
 utils.prototype.showWithAnimate = function (obj, speed, callback) {
-    obj.style.display = 'block';
-    if (!speed || main.mode != 'play') {
-        obj.style.opacity = 1;
-        if (callback) callback();
-        return;
+  obj.style.display = "block";
+  if (!speed || main.mode != "play") {
+    obj.style.opacity = 1;
+    if (callback) callback();
+    return;
+  }
+  obj.style.opacity = 0;
+  var opacityVal = 0;
+  var showAnimate = window.setInterval(function () {
+    opacityVal += 0.03;
+    obj.style.opacity = opacityVal;
+    if (opacityVal > 1) {
+      clearInterval(showAnimate);
+      if (callback) callback();
     }
-    obj.style.opacity = 0;
-    var opacityVal = 0;
-    var showAnimate = window.setInterval(function () {
-        opacityVal += 0.03;
-        obj.style.opacity = opacityVal;
-        if (opacityVal > 1) {
-            clearInterval(showAnimate);
-            if (callback) callback();
-        }
-    }, speed);
-}
+  }, speed);
+};
 
 ////// 动画使某对象消失 //////
 utils.prototype.hideWithAnimate = function (obj, speed, callback) {
-    if (!speed || main.mode != 'play') {
-        obj.style.display = 'none';
-        if (callback) callback();
-        return;
+  if (!speed || main.mode != "play") {
+    obj.style.display = "none";
+    if (callback) callback();
+    return;
+  }
+  obj.style.opacity = 1;
+  var opacityVal = 1;
+  var hideAnimate = window.setInterval(function () {
+    opacityVal -= 0.03;
+    obj.style.opacity = opacityVal;
+    if (opacityVal < 0) {
+      obj.style.display = "none";
+      clearInterval(hideAnimate);
+      if (callback) callback();
     }
-    obj.style.opacity = 1;
-    var opacityVal = 1;
-    var hideAnimate = window.setInterval(function () {
-        opacityVal -= 0.03;
-        obj.style.opacity = opacityVal;
-        if (opacityVal < 0) {
-            obj.style.display = 'none';
-            clearInterval(hideAnimate);
-            if (callback) callback();
-        }
-    }, speed);
-}
+  }, speed);
+};
 
 ////// 生成浏览器唯一的 guid //////
 utils.prototype.getGuid = function () {
-    var guid = localStorage.getItem('guid');
-    if (guid != null) return guid;
-    guid = 'xxxxxxxx_xxxx_4xxx_yxxx_xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
-        var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
-        return v.toString(16);
-    });
-    localStorage.setItem('guid', guid);
-    return guid;
-}
+  var guid = localStorage.getItem("guid");
+  if (guid != null) return guid;
+  guid = "xxxxxxxx_xxxx_4xxx_yxxx_xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
+    var r = (Math.random() * 16) | 0,
+      v = c == "x" ? r : (r & 0x3) | 0x8;
+    return v.toString(16);
+  });
+  localStorage.setItem("guid", guid);
+  return guid;
+};
 
 utils.prototype.hashCode = function (obj) {
-    if (typeof obj == 'string') {
-        var hash = 0, i, chr;
-        if (obj.length === 0) return hash;
-        for (i = 0; i < obj.length; i++) {
-            chr = obj.charCodeAt(i);
-            hash = ((hash << 5) - hash) + chr;
-            hash |= 0;
-        }
-        return hash;
+  if (typeof obj == "string") {
+    var hash = 0,
+      i,
+      chr;
+    if (obj.length === 0) return hash;
+    for (i = 0; i < obj.length; i++) {
+      chr = obj.charCodeAt(i);
+      hash = (hash << 5) - hash + chr;
+      hash |= 0;
     }
-    return this.hashCode(JSON.stringify(obj).split("").sort().join(""));
-}
+    return hash;
+  }
+  return this.hashCode(JSON.stringify(obj).split("").sort().join(""));
+};
 
 utils.prototype.same = function (a, b) {
-    if (a == null && b == null) return true;
-    if (a == null || b == null) return false;
-    if (a === b) return true;
-    if (a instanceof Array && b instanceof Array) {
-        if (a.length != b.length) return false;
-        for (var i = 0; i < a.length; i++) {
-            if (!this.same(a[i], b[i])) return false;
+  if (a == null && b == null) return true;
+  if (a == null || b == null) return false;
+  if (a === b) return true;
+  if (a instanceof Array && b instanceof Array) {
+    if (a.length != b.length) return false;
+    for (var i = 0; i < a.length; i++) {
+      if (!this.same(a[i], b[i])) return false;
+    }
+    return true;
+  }
+  if (a instanceof Object && b instanceof Object) {
+    var obj = {};
+    for (var i in a) obj[i] = true;
+    for (var i in b) obj[i] = true;
+    for (var i in obj) {
+      if (!this.same(a[i], b[i])) return false;
+    }
+    return true;
+  }
+  return false;
+};
+
+utils.prototype.unzip = function (
+  blobOrUrl,
+  success,
+  error,
+  convertToText,
+  onprogress
+) {
+  var _error = function (msg) {
+    console.error(msg);
+    if (error) error(msg);
+  };
+
+  if (!window.zip) {
+    return _error("zip.js not exists!");
+  }
+
+  if (typeof blobOrUrl == "string") {
+    return core.http(
+      "GET",
+      blobOrUrl,
+      null,
+      function (data) {
+        core.unzip(data, success, error, convertToText);
+      },
+      _error,
+      null,
+      "blob",
+      onprogress
+    );
+  }
+
+  if (!(blobOrUrl instanceof Blob)) {
+    return _error("Should use Blob or URL as input");
+  }
+
+  zip.createReader(
+    new zip.BlobReader(blobOrUrl),
+    function (reader) {
+      reader.getEntries(function (entries) {
+        core.utils._unzip_readEntries(
+          entries,
+          function (data) {
+            reader.close(function () {
+              if (success) success(data);
+            });
+          },
+          convertToText
+        );
+      });
+    },
+    _error
+  );
+};
+
+utils.prototype._unzip_readEntries = function (
+  entries,
+  success,
+  convertToText
+) {
+  var results = {};
+  if (entries == null || entries.length == 0) {
+    return success(results);
+  }
+  var length = entries.length;
+  entries.forEach(function (entry) {
+    entry.getData(
+      convertToText ? new zip.TextWriter("utf8") : new zip.BlobWriter(),
+      function (data) {
+        results[entry.filename] = data;
+        length--;
+        if (length == 0) {
+          success(results);
         }
-        return true;
-    }
-    if (a instanceof Object && b instanceof Object) {
-        var obj = {};
-        for (var i in a) obj[i] = true;
-        for (var i in b) obj[i] = true;
-        for (var i in obj) {
-            if (!this.same(a[i], b[i])) return false;
-        }
-        return true;
-    }
-    return false;
-}
+      }
+    );
+  });
+};
 
-utils.prototype.unzip = function (blobOrUrl, success, error, convertToText, onprogress) {
-    var _error = function (msg) {
-        console.error(msg);
-        if (error) error(msg);
+utils.prototype.http = function (
+  type,
+  url,
+  formData,
+  success,
+  error,
+  mimeType,
+  responseType,
+  onprogress
+) {
+  var xhr = new XMLHttpRequest();
+  xhr.open(type, url, true);
+  if (mimeType) xhr.overrideMimeType(mimeType);
+  if (responseType) xhr.responseType = responseType;
+  xhr.onload = function (e) {
+    if (xhr.status == 200) {
+      if (success) success(xhr.response);
+    } else {
+      if (error) error("HTTP " + xhr.status);
     }
-
-    if (!window.zip) {
-        return _error("zip.js not exists!");
+  };
+  xhr.onprogress = function (e) {
+    if (e.lengthComputable) {
+      if (onprogress) onprogress(e.loaded, e.total);
     }
-
-    if (typeof blobOrUrl == 'string') {
-        return core.http('GET', blobOrUrl, null, function (data) {
-            core.unzip(data, success, error, convertToText);
-        }, _error, null, 'blob', onprogress);
-    }
-
-    if (!(blobOrUrl instanceof Blob)) {
-        return _error("Should use Blob or URL as input");
-    }
-
-    zip.createReader(new zip.BlobReader(blobOrUrl), function (reader) {
-        reader.getEntries(function (entries) {
-            core.utils._unzip_readEntries(entries, function (data) {
-                reader.close(function () {
-                    if (success) success(data);
-                });
-            }, convertToText);
-        });
-    }, _error);
-}
-
-utils.prototype._unzip_readEntries = function (entries, success, convertToText) {
-    var results = {};
-    if (entries == null || entries.length == 0) {
-        return success(results);
-    }
-    var length = entries.length;
-    entries.forEach(function (entry) {
-        entry.getData(convertToText ? new zip.TextWriter('utf8') : new zip.BlobWriter(), function (data) {
-            results[entry.filename] = data;
-            length--;
-            if (length == 0) {
-                success(results);
-            }
-        });
-    });
-}
-
-utils.prototype.http = function (type, url, formData, success, error, mimeType, responseType, onprogress) {
-    var xhr = new XMLHttpRequest();
-    xhr.open(type, url, true);
-    if (mimeType) xhr.overrideMimeType(mimeType);
-    if (responseType) xhr.responseType = responseType;
-    xhr.onload = function (e) {
-        if (xhr.status == 200) {
-            if (success) success(xhr.response);
-        }
-        else {
-            if (error) error("HTTP " + xhr.status);
-        }
-    };
-    xhr.onprogress = function (e) {
-        if (e.lengthComputable) {
-            if (onprogress) onprogress(e.loaded, e.total);
-        }
-    }
-    xhr.onabort = function () {
-        if (error) error("Abort");
-    }
-    xhr.ontimeout = function () {
-        if (error) error("Timeout");
-    }
-    xhr.onerror = function () {
-        if (error) error("Error on Connection");
-    }
-    if (formData)
-        xhr.send(formData);
-    else xhr.send();
-}
+  };
+  xhr.onabort = function () {
+    if (error) error("Abort");
+  };
+  xhr.ontimeout = function () {
+    if (error) error("Timeout");
+  };
+  xhr.onerror = function () {
+    if (error) error("Error on Connection");
+  };
+  if (formData) xhr.send(formData);
+  else xhr.send();
+};
 
 // LZW-compress
 // https://gist.github.com/revolunet/843889
-function lzw_encode (s) {
-    var dict = {};
-    var data = (s + "").split("");
-    var out = [];
-    var currChar;
-    var phrase = data[0];
-    var code = 256;
-    for (var i = 1; i < data.length; i++) {
-        currChar = data[i];
-        if (dict[phrase + currChar] != null) {
-            phrase += currChar;
-        }
-        else {
-            out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
-            dict[phrase + currChar] = code;
-            code++;
-            phrase = currChar;
-        }
+function lzw_encode(s) {
+  var dict = {};
+  var data = (s + "").split("");
+  var out = [];
+  var currChar;
+  var phrase = data[0];
+  var code = 256;
+  for (var i = 1; i < data.length; i++) {
+    currChar = data[i];
+    if (dict[phrase + currChar] != null) {
+      phrase += currChar;
+    } else {
+      out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
+      dict[phrase + currChar] = code;
+      code++;
+      phrase = currChar;
     }
-    out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
-    for (var i = 0; i < out.length; i++) {
-        out[i] = String.fromCharCode(out[i]);
-    }
-    return out.join("");
+  }
+  out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
+  for (var i = 0; i < out.length; i++) {
+    out[i] = String.fromCharCode(out[i]);
+  }
+  return out.join("");
 }
 
 // Decompress an LZW-encoded string
-function lzw_decode (s) {
-    var dict = {};
-    var data = (s + "").split("");
-    var currChar = data[0];
-    var oldPhrase = currChar;
-    var out = [currChar];
-    var code = 256;
-    var phrase;
-    for (var i = 1; i < data.length; i++) {
-        var currCode = data[i].charCodeAt(0);
-        if (currCode < 256) {
-            phrase = data[i];
-        }
-        else {
-            phrase = dict[currCode] ? dict[currCode] : (oldPhrase + currChar);
-        }
-        out.push(phrase);
-        currChar = phrase.charAt(0);
-        dict[code] = oldPhrase + currChar;
-        code++;
-        oldPhrase = phrase;
+function lzw_decode(s) {
+  var dict = {};
+  var data = (s + "").split("");
+  var currChar = data[0];
+  var oldPhrase = currChar;
+  var out = [currChar];
+  var code = 256;
+  var phrase;
+  for (var i = 1; i < data.length; i++) {
+    var currCode = data[i].charCodeAt(0);
+    if (currCode < 256) {
+      phrase = data[i];
+    } else {
+      phrase = dict[currCode] ? dict[currCode] : oldPhrase + currChar;
     }
-    return out.join("");
+    out.push(phrase);
+    currChar = phrase.charAt(0);
+    dict[code] = oldPhrase + currChar;
+    code++;
+    oldPhrase = phrase;
+  }
+  return out.join("");
 }
diff --git a/main.js b/main.js
index a9242ca..0295c32 100644
--- a/main.js
+++ b/main.js
@@ -276,7 +276,7 @@ main.prototype.init = function (mode, callback) {
           coreData[t] = main[t];
         });
         main.core.init(coreData, callback);
-        main.core.resize();
+        core.resize();
         // 自动放缩最大化
         if (!main.replayChecking) {
           if (core.getLocalStorage("autoScale") == null) {
@@ -492,7 +492,6 @@ main.prototype.selectButton = function (index) {
 main.prototype.importFonts = function (fonts) {
   if (!(fonts instanceof Array) || fonts.length == 0) return;
   var style = document.createElement("style");
-  style.type = "text/css";
   var html = "";
   fonts.forEach(function (font) {
     html +=
@@ -910,7 +909,7 @@ main.prototype.listen = function () {
   ////// 点击“开始游戏”时 //////
   main.dom.playGame.onclick = function () {
     main.dom.startButtons.style.display = "none";
-    main.core.control.checkBgm();
+    main.core.checkBgm();
 
     if (main.levelChoose.length == 0) {
       core.events.startGame("");
@@ -923,13 +922,13 @@ main.prototype.listen = function () {
 
   ////// 点击“载入游戏”时 //////
   main.dom.loadGame.onclick = function () {
-    main.core.control.checkBgm();
+    main.core.checkBgm();
     main.core.load();
   };
 
   ////// 点击“录像回放”时 //////
   main.dom.replayGame.onclick = function () {
-    main.core.control.checkBgm();
+    main.core.checkBgm();
     main.core.chooseReplayFile();
   };
 
diff --git a/project/animates/hand.animate b/project/animates/hand.animate
index 09c9514..936d7d4 100644
--- a/project/animates/hand.animate
+++ b/project/animates/hand.animate
@@ -1 +1 @@
-{"ratio":2,"se":"attack.mp3","bitmaps":["data:image/png;base64,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","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAlCSURBVHhe7dxrbBTXFQdw2qSJokRKhUSFoEJNU7UfWj5RVapUNVKlSFGTfEirlqoqFLDr1DwLGEEgBRIgFFqXp0l5FBNQwTbg4EeMn/ELjI3XD2yvX9g4NnaN32t7HzM7e86/d5eLVcc27NrG3tncnzTi3DtrI8+ZmXvu7MzMURRFURRFURRFURRFURTlK4R7oqJkOCnICF8iQ2UyqDsqU4aTQjkRh2WoTAY6ti7i7s0/l82AcNGaxZT7bp9sKpNFPZsKZBgQLl27FoWrIZvKZHHPlgXctvEF2fQbVaxLQvEalYDpQN1bEmXoN6re4ETZRnDRxoWyy2+cFPY9GSpe6Nz6HRn6DQ3bgOqtoNubo2WX3/jqil/IUHmEB7a/I0O/4N6HQP1O4M6OgE5DSPjNMzJUJosfRC/G/YNA8wGRhI8CSgAlRyTJ0C98bXlAO8ZXAvV+nIrOj4H2GKDliEjC4Z/JVSM4f/ubMhyFPlvtdwIo6Y+XZWguyH3tWRkGDEh44ikC/ReAXrF0nQM6YkEt/xozH+Dij5bJcARnbtqArPVjkjUeSl2VyOlhc2XTfLyVBqcsD7xCcZx67CEPe+p8DCcDtiSg/1Og5wrwIAGoSXhOfmQOrCdsfOfoFtkcgbxtfp+uxMZ/XYbmhdTwCLq+Kkc2/UbOiydkOAY5sofhzAUcYhkWiy1bJCJDJCJNHBEiOe1X8tByEdRw7rr8ER8u3R+Jkj1+JYDTVs6ToflRRngRciNFvb7a79qbnCke0tOOyeYI1m8vg24BtDKxlAMuETtui0TcAgaLgIECkQiRkAciGe3XRm1s1Ijx4s4/n5gALoh8TYahgwrWeVCyEVSxtV52PRbpnyfCXQjSip3sKVsKd9USuK3nyKj7kI3G19lRtwDAM8yVL7Jet5hddSvJXnWRhsp1DJWKRIiE9OSLIyL3Jd/va41rxb0L4qg45fH9BxNAyYYVMgwt3tobZVsA6/tA0z7g/j8i5Kpxkbs0CUYlyKg5JE7uvo0YCLbXvkXDlVbYSkB9+e3ozgL+mwxqi2uVHxmDqrfvR82ukXEk5HDV9jfRuBdojQY6Y0DdZzzcFj/uNSD2WMdUMJPB3PYCDd9JxmAJ0JcP6kl3ylWjoOmAhe/uWSqboYvu/b3bV7t3x4rTRDwwlALYs/Pk6qeGXY2v0mB5F4ZujR4XumLno+M0qP1ou+wKfb7avf+y2PifPaxkNLF36pVgbvqW/MhTQ07rURqyOGkw/yQG0sVRIcrY3kt+l6YhgfriEh9u/DxRxYhztLumVq6aEeysXQ6nqKCGb4idIAtkuxYrV02aGOPMNXbAISoUVynIVV0mu2YUa41vw1UpdoKbU9r7OXnFJmDO12TTPLz1O+nWTtmcFaw3LIdWOZIA2BPmy/CJOC1sB2f84UXZNB9R04syHl+XzVlDev1Rb5krlieeQrho41zKjrzFWeHfl13mxFrVTjaaguYSL+m1XeS0THiFFDV/3UbFmxxcuC7KVKcbfnD4HfSdBmwXRamZYoOrQFQ7FWJy1VgoPxIU2NX6KvQasKvY9y0Z2+Ln8oNPdqLtuJg5H3Rx9W4xgzThef4RGkz0wJkjNn4p4K4V5WZn0J07yV2fDK1C7CiFYocRFVr3JdD9k+1oOfRN+RFzgyZKPlHrk96ULruCinfGDL1WVEWiLB64blDvlQtijDLvXv9lrJVsgiH+QHQskl1Bh9x3rWQvd/NQ3q9kV2iBpymoZ5xsfPEWadVZshla2FX5ChlfxMhm0GK99kcyDB3eGhuGVQy+rT+UXUELaAmNQfcRcmXsh7sE8NSZ4oIXO1oXyDB0wH0bMBrMkQC95XcyDA3iCPiPuRLQtpic1loxKXtFdpkLd+79CfUePoGhs6KmvgxoGWLyZaJTkJgkeucDNFzENJDeQ93xxdxx5k/cFr0QubvGvdfJO0v2Lpy27nnZ9fTwtVU/oJRVVqSHgXLC2/lm5Ji7z7gv+g0MnrHAHi8ScN1UCfB+0Q+9DnAWA0OZQJ/YiTr/DWqJvk8Ne2K46v3f4vZfvis/HvygpeZBvylOQTUmOQJaF/iOAEdxJtvSzXtX3P9jLW8njDvmSIC7LfTuCfKCZrHJMKix0Wz+2xHHw3rRYhkGNTKaymUYethTvlyGQctbLpNumdKjs0GLjOKg3rt8l6QNq6jaikFa5qx+Xz3t2JUWCT0/qAdiMhqj2V2xBe7CJUDCc3AkLGHb+dB4mA9aIqBngt03V8suZaaw8+xSuOJEAlLEkmOKcjRkALueI3uMh7UL4z6vpTxlbIsO+tkkGTX7yCipkk1lJjE3LIRRJiqfG6L8zNgvu0Mfc/xcdmdO6V1B0wFGhdj4N8XYlAVoSSBH3AdyVWgjLS4WehJYy561O+TIqKyFu0hs/Gyx8UWB4EwAHJ+AhmMCfm+F6UA7L/7oy77KiLWMGU8CGxUjRQHcqUvYEb+B7OfqYT8FDB0BBg6a4trVpPDQkXlwnRaH+wW7SEIeaynvsZ45I9eKvDdbiT3/rGxOiHv37kDvbqB/68uyK3TQcHQL7MfF8X7yG7JrRrBR8wbc5WKwvTHq+eEnQc3qgB8SDGpkP/DY18uwVjCtt38zNz5PWlXhw+eLbwCurElNBr1PenLpmnDZNCfu/+BtGU4IyHqZtII+NizT8k4fcpfHQS8RG75ALBlioE1CIA9jfBnnRyzlnLBIWCJm9AieMUDus6JE/bFsBsT7s2TcPSSbI0T/S3BeFxs+UQyyl0C22GG5atK8341T0sqAXxY1K7xvR5ThlLBeGQZ3jajda8VSL5YG778WudrHl0Ct9JeyOQps5y3oPwP0nQB3RU/5SicnL/spJa74XDaDE5rXL0LX9A1k0IrFubzUt5DTMiS7R3ncK2+459jv8SAaaN8X+hcGYVm/iKxrp/UwpeEsDxw5YsKUzeTIOSC7A8KN++aheSeo8b2Tsiv0oDBiERX9WZfNaUO2qwdh+xTUf8090asO/EXVUR6u3Gzepx0fh7LDqp7GC/LYdnoues+Bes53y64poeL1p2Wo+Asdx0H3j2XIpjLT0Pw3cPPBX8umMtOoevctbpyBm2GV8XF5VNDfYxTSkBtiF8gURTEb070kKdTw1fBvy1CZDRM9s6UoiqIoiqIoiqIoiqIowWXOnP8B5gGFQj7+hj8AAAAASUVORK5CYII=","data:image/png;base64,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","","","","","","",""],"frame_max":8,"frames":[[[0,0,0,30,120]],[[0,0,0,50,255]],[[0,0,0,70,255]],[[1,0,0,80,255]],[[1,0,0,90,255]],[[2,0,0,90,120]],[],[]]}
\ No newline at end of file
+{"ratio": 2.0, "bitmaps": ["data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAASdElEQVR4nO2deXwUVbbHf/dWdSXBIDKI67gNi6N+RkVWUcQB5Lm9p/hg0AABBVnCvihIkjq5lRBBBAQxIrLI5tMXHODpR5+4gYorCoOKCzznyRtxQdmXdFfVPe+PADMk3Ul3pxeYT76fT3+ST9177jlVp2/d7dzbQD311FNPPfWcolC/6zLSbUNdkOk2oM4EcF66TagLp74DjMDZ6TahLpwSDqChXVpGSmMzcFYqbUk0p4QD2Aj0iJho1teApCNMKzNiYsCqrwHxQv07R6ffMCMmCSMQOfEUIL01wHAvjCqfrOEZ15RWC0RxiyaMNDvA+IUGdq/1CbI0PJqYc07YxDgdQP07nxQ1J70OOK/LQZheB3qgY8easglpvApptAibKA1Q32vOjVl3pnEf0FnELJdg0uoApRRYGi1o+L+0rjHf1BUbIWSzsIlCgqW4Kha9NPzWTmwYjYAbORa5ZJD2XpAQcjNgnam3lV5Sc0bjonCXaVCHsyFwZSw62TBvgJGxRSkVi1hSSLsDcKjiL0WzPqjgbHNOTdlYyHfDJhjyIiFlVrTqaELv62AEtLACb8ZoaVJIuwPUkvUaUv4vEPhS75wVcVDllCx4I2yCNJrBiF4fS+NamNYONWOVG6utySDtDgAAAWO1mvHRHg5Y82KVZWGcB2mABnZoGJWAtBoIM7AWAOjuVr+JVV+iSagDKLfNBfHIqVkrj0CKTYLNrUS9YuqZCDOwBYYBluLaWu3Lv78thLEX1iW7AACaG8VjbyJJqAPU0o3/Z+e2tSm33RWxyoqs7LVFs97fT+Nv6xqTnGltgGFCGGatDmAhrxPSfFMpBep1uVD/ufmvVfMQ1dw1jbqmRUnCX0HO0o8dCNHT7t8+n3pdHvW3Wan5GjC+KJq2oWm0MjSh+1lFxfMOQwYA04pCwgjA3P0FALCZ1Tu8HevDdk31uvED7Pv/mKcWfnAgWvuiITltwOHMEiENkxs2fpAGdw5EK+Y8vPAlQF5A1D8qu1gGukFalQ/fCIBG3FxtaoMGdGoBAETDLQi5Sanyygcsor91f8PkLar8i4ucp98qi1ooSpLiAFW+3sfBvU7RgGYNGLIvRZh0CVfdhRTPQWdfEE1bIITVAoYFSAswMsCGeXe1TKaVBQCsjW5CHngTAKjfte2FId+rrXya0PsPeuOUrbAy1+DgkeLa8sdD0npBqnwryxuWEuW0uYq6VdwSPlf1kagqnrcDEJfArbi0pvJpck42ZCYgMwCj8iMCWVmU1+t4p5TybpsE08oGACHkaUot0QAAw7hZLftwR03l2xNz+8AI3MWm8Zqz/BOllqzXtd50HCS9G2rcOH0MDOsevW1M/6ppSinQ5EG/r3a9eO46VfriV3b+v98WqVyGORLSqnSAzASMzEpHnGYV0IScbBr3pwEIZGawmVE5whaNygGA7u/aBmbNb0V78qA8CLOZ3bf1DmfVkdFq9hov1vuOlpSMA2TH4lze37Qx9W9DNLDtCX1vVbrgK7tgWJ/wklZru6BPtdpDBfdfKWSmBXH04cuMv38qHTEeRuZFCGRCWJnNiUYax6cdAhm31dRgU/6w1oAMFN3X7r+NP4xdnOzpipRNyRqt8x+z721nCyFH2kOu+9V5asPcY2nCEM9R4ajrVfGcE6cbhPW1ELKdXTDoGiHlarCxGxDtGWKfgFwGX+9C4MyDwE8mfKMxGOcx62ZgfZmQ2oDWgPCBQ/sNAL49pucYsA/2vbA9HaI8g7U4XQ1p9rb47dBNyX0ilaR0TlwcPFiMxmfYwjCa0KguBMN8Sc1a+4lSZT6Ad6lg3DmqZOaPfxewBGAAQm6EwDbllIUArA5TtAvg56Ofzccu0uThLVn63QR7D9kPDjgg2G8I7QHS3R/RyF+2yKLSz7ck5o5rJ+Xz4TSsUwuYgRwYJmCYYGmy8KxSNWtltfcs2XlXKqeszg+DaKzJoSO9BHstoT0we54zffmUavlGdRsM9jeox9/6oq46oyUtCxL26JseEEagAYwAII9+ROA7Vbr0mWTqpfyRjdkPDRTCO009vPD4y50m3JENrcczvAPOzFdmVrM3f3BXwf73qnThV4m2KW0rQjThTjruAHH0L0zAsB5Vas6hZOq28/NugfauAYf+IthrDXYBeFCPvHBCi2sX5g0DkOUUl1VzSqKIqw2gfq0zWMibhBBfqyUfbYunDJbmV0IGfg9hAcIEC+sXp7jsiXjKihVnStkrlD98JyDuhJYABJjF5mPpVDjmPIY/SICXqeK51eaLIkG9LjdU+VY/FlvqVANoQLszAGM0pAFI87/UgnUx9Rxo8gCCCIBh/uBMeXJ+XWyJByoY2RLs3gMOQZUuUgBANK4Bs77FcR57Iepy7rn6WrTc/H48PdaEvIJo4A1nQRrDYATAZmCnOHDmQrVkSa0jR8ofTCzMg05J2YxE2BEPVDDiKsC7U5XMU0QEuFuzVWn5wahk+7TqBOF/oJZviXtxJ6FtAOXdfCGMwL1cOTv5uci+9IWaBjJUmEeQTR2lVFoXx+2CEbcIQ78BwD/aJY4IDeyQxa6XI1ivVss+/bWuupPSCNP4ng0YgWEwrR9E5sXPhnMCFQzrDBH4SRXPSXjPIh7sguETwO7fnCnznwuXTnk3XM8h9wbh++tw4UfvJWqAnPRekP71z53VtMU3Vs7bWEGIzAwICyysHU7x44uTrT9aKH9MY4jQKHBoqZqy4K80qWcWPK8d/NCN7Lqe8N23cNa6hD34Y6SsG2pP6m0LI0NAZADCAmRmqVIzToqF8WPYhSPuEey2hA4BOgj4QbAXPCC0W6Zmv1pRmzyN+dcz4HqXs+e2FOy+pOav/6U2mZSOA6jgPgIsMKz/cUrmLE+l7mggGmvCD+VDB8H+EQ12PxdZl62qsR2b2OdK+H4PaA/shX6Edr8XnveRmvfaz9HoTOhcEI3u0UTNXlVDwyTXQhjdhTRfTKTeRKHULM8uHLkLMJoIGVipHl7xZa0y01ZsARD3dElyGuEHcxuyEbgJwhRCGm+rkrJdx9PsUaScOekPSYsAFY5pyRxs75Q8uSzdtiQcyh96hl045tZ021EbVDA8ZZs+UhaYRZRnQMrRQuLjVOmMG8OMPF2dYFKyHmDn9+0KHboeIgNKPbardok044oAgFp7PYkgJTXAmbL8DUAAnPZw/OiQHDYSOxpo9K3ZseRPVQ24KxV6Eof82c7PGy4QWqGmLNgbKRcRCbjfZsPz27PvXQnPbQj2YOd1Z+F7Ifa9Q0J769Si9z6LVEZSHEDju5zPhnW1MDLaVE43AwADIu37IaLDkHuEL85kn0fbE/sehq7YI/zQp+CKbdgdPHQsROXoHNYBAK8T4fWiIhJFfV+RzoqPop6SjuudQHe3asICvYWBpizFAWHKF9WijSesC9CD3ZtDZnaBtM6FzABEFiAyoJwnTtou6DGISMD/xQYHj46IK46Oiiv2w3e/Fr7/HbzQTvX0B3vqqiuuGqCe2/QrgBrD9NQja7cD2A4AVJAzAKwvAk6RGoB92QDAjG8F80r1SPmRdFtUZ6hgQGcqHHoSbAytHSocG3cjHCspGweokmfWg3UwVfrqhh/Dnpu6keIdMv6i1OqLDwZuSpWulDpAlSz8mewhMW0pTQcC+hy7YHC/VOhK+R4xZr9DqnXGAtFYE9AQQv/OLug3vvIagai/JKKEjyRTGppI+X3agL3wRw6cJLD2ugj4rwH+X4VR8TNN7nUugluCauqq3UR5WXb+0E6AvkQEg4vVo0tCddWX4gWZ3gRYgAi8DNlwk1Kzkxb2/U8HEYHGdjdr28QWSVaH1l2tQ+8/od1PZ1NB7inRHU0FtT5Muq9TIxiyO/aetVKVl8c0kiIaLKGtNlTU5Qp4jS5VxXMXqpJVcUXS/bMSsQ2ggR2yWIuOatE7bwAoj7VgO39Ib/ZlA6dk7mK433ympq49qUeTdmFeFyB0qVO84Ml/vE4FI5vCkHuAM7xkbNYIWwOof/tz1ZIPf4inQJqU24RloJ1TuvCVupmWOohGNIQOjQM8MIfedUqWn3AsAhWOaM7avQPw90HzLsHudoSC36qZz9f5S5XYyLgHc5qrR57dHnV+6pkFndVKFS+rdcdiMqHCIQS4qIySdsHaW++UrlxXNZ/90KA+gr3m0D6gXUB7YN/91pm9Ju7147SukNgFPe8QMK8GrOdVydK0RMjZhUOHC7hnHnv4YA9gF8yhr5yHX34+rMyEnDGCvUbwXcD3Kh3hue87T72+Nlb9aXUAFfSgymbIBGA8r0qWp9QJVDikhSp+alvl/znnwg9dyPDaCvhNwC6g/aCa9trUsLITelkcDPUU7LY45oTKmuE/oxa++120NiTVAfTQvU3Vw4vDrgHTQzc3gAw8wGy6Qpo7AXM7YH6jSpZFFdBUJ7uIwPqnO5zieWtqzPdgl06A7gLhTlXTNkScSKQhXRqA9TXs+a0E69+AvaB65sOwjqtKcuKCJvbKgG9dph5dsTlSHvuh7qOFMHciIF9Q6qWkbIIOa1thXnPA78PsbndKFq2IWi6vraXKPq7zyLcqCZ+KsEffmQuPV6oZkR8+AEDoL1XpyxHfmVRwbxNVsrjO4d/Hy6ORBvteLti7EPAg2G0eUwGntWgFfPwh9bpc4IzTWqmnP/40EXYlrAbQkG7ns2nkOk+8+nCteSfe2FJNW/dNjXmoXwb75mghAuWqeH7024SIRLj9BnbhkJ6C/SvAPo43tvBnRLsZAwBobM/z4bu/U3PWvEMDWl8BrbOQKT9V8z+JuwYnxAH2oM7jIOWPzvy3nk1EeQBA1F9C63NU8bKdscmNNYHdmvXpNznFj79apUwLnvdQZU/HA7MXcqauqfaFqTwopLGoPEInjI68myfB9xeqp17bZd/TKg/M253nNsfcAwIS4AC6tyNByhVq4bu19v9p3HWN1MwN++qss2BoKwj5b5XmH7+FH1Tx3PlE4wJKzXSJ+kv4VjNV8nS1qQ+a1GMw2D8X7APafVw9unZ3tTwT+2UgsyJ0/Hibqun3d2nB7PYQ+36dDtM8n7Xs6jy/eUms91Kn9QA7t30OQl5JVA9/VPtGkKGETEeoknmbwCFUfoJgHQqp4rlHN/lVaKKxplJLNIy9Ye1SU1fNh3b/fHQwNTJsnmnLgjhonRnRhqff3OYseOcRzm40kK0GHeJ5+EAdHECdOwtn6YfPqihiYGhw+0bscXv1aPVeBOUPaRuPfvaDXBnHHwS44h/iTZtqMC4DgKrfXqJRx3/uRE1/5TMEvenwfNgjr789nA41Y8UuGndXjesXzuL3F4jD+1+wc9s+QH3bVjv5Je3Qva0b2QPbFIRLsycPHBZWhvJqXRS3J/3pJprUm/ThLwtpbM8TenO2PWZI2HILR14Qrmx7WEebhl4b8QwbGnF71D+TYvdt05X6tY76d22SviTJvs4R+w9XP5dhYr9OwvdXRxCr9QA4gSPvQgcB/sXH6VecuLDDOrwDfXcfezy4qhOcJ99z2NM3R9Kl5r60k4Z1jeqHIpzlG99Qyz6JOvoj6Q5wlm56UpVvPfFVMLZnFmvdQU17ptqMq1049A6lymptK9TUF4/AC4GD+4PA/hPHM1qHX2kLyEOAdzp7Xu+qx6g5Cz6scdeOevKNn+i+jtGcDBgTaTm4lYEHRIPm06tep8mDsuF70TfUXgjCD30Pr+K3VRJ2EA2t9kpRqsyH9iuE77bg4I4BsdqtFr2X8JFwyh1AI29vL7T3VrjFDWb3buHqddGWxa73N9Z7DkHwCQ4Qpvs6PD/sIbKC/U1gH4K9lEW/1UTqw1K031HNXv1O1es0IScbWjdU0xdF/S0TOrRRzX6/MWv/hEZPqYUeay9s/JGauuRt9ivn8mlC7/ax30FiSakDKK+zIQ4enh0ujeHfDu1HjKMPS4X7JdhvhHCvfM/dG0lMaO8x+C7Yd7vFpC8JpLYGhJAV7vhHos5CaPdi4fP6mMq7+NYQtGcK9qr1Opzpy9+KJKZmlu+D534nfC/tP2OS2tDEBevDT3z92rAJe94eNfM/Ytw5v1VAewF4bswHPKk5a56B7yLWw8ITTep2Sdb0o5vabSC0F/vm7b0ho6hHSws68uumRjx/Jn7cfU1csgkideHpyyKvKIG9DDX35ZhmPQEAphTMoiF8v9pkWlQ2PbX2AHyvQTyyieKk+AEHnHV9fMFahwCRkXVIzVkd9wyrWrC+Wo8slZwUDog74Ols0yta9Pqpsu8pLCeFA+JFqXKGf1KdeBMzp7QDAAC+/326TagLp7wDhBtM2DJoPfXUU0899dRTTz311FNPKvh/x8pnSC7YyzEAAAAASUVORK5CYII=", "data:image/png;base64,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", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAJB0lEQVR4nO2da2wU1xXHz72zO7temzjhUSikFNooRIQ0NKUkoTSFRpEI0JfUULVppURUVIkJNEIpKJAap0EmRTTPNiFqSwppi12VqAQwqW0oj5jYGGxgAUOCjV0bvKb4vTuzM3vP6Yc0FeDZ9c54dmfXzO/jnHvO/e+eed17Z84AuLi4uLi4ZClUvjLfaQ1DgTstYKhQAL7itIahkPUJADnnbqclDIWsSADWv/CteDby505Lpxa7yYoEkBz4U1yjL/ClNEqxnaxIAPfn3RLXGMi7M41SbMfRBNC+Qk9SDX05cU1cDsQ3ZgHOJsAb+XpSDT3++DZvAttg/RMwy8424ewpyOdtwKqNg+7B6JEV6to53dDo8VnqmvYVWs+cjTiaADZjXTvzq8sHbSd5V5AkLzA0StYSAPneQwCFN/YRwBgj9Mjz6cxLkxK14zfPf4Nx70PGxuQuI1eDZ15/FmXfRIC1ZNrZZhy/C2KS5230+D+g2k3ehA25/A3j7YndjCA5Zw34RrzDGHMTwDq6t4DkuwnHBjYnaoeStN44gGSqPwy9+wuQA4LlBZ4z5TicES1bd4jWEh07tt9u1pf046b2YnFlV0hc3lFmtp9U4fgRAADAQH4MPDkKSb4NZn2RPF2mHKS8UcwXWGG2n1RhawKw8olZlkRM/EEneKXNwHz3E5WaO6cw9vtkm6JSUwCSt5mNePCMaZHZgqgoiGHlU4vM+hHVekXv/i4MH77XnF/D6KS1ResuYOTYDxPHK0y4U2LV0xOS7c8xaO8yEnuXR6j0EVN7s+g7/KaI1LyXKl1CDXaYPsL+Bx5/cbk48vwpuzWlZCBCpYUyjAtHUZK6uc8/gc0oiiTrK5S6K9zfPZaxuTE7NSGeGUGCr5G8U1aa9RXnfhflMV1mU5fb/n+l5CLMFhVp0N7sASbnI/PsISJD4UaHO5P4d0kf+zW7NZHwrueei6vN+GD7uz+ithICT24MQp3mBxyZgKgvjmHwFcO9Lm5i9LNr7dZBornUTHvRVVlGnXtIhLY3UtPmjJg3sow4+0ZjvIsbhqu/lw4N8ZJthAhXnxI9h2Kie+/fzfhlNNj8l/HxbCJ6cndK+8ZzSc/YkXJiiQjXNmLf4axeaTMFUVAm7fyqTNAh9NO/snqnlPVQtHW6o/1TUHayfxeXzEQoR4sxXJWWmwWXqxD6qRNCC7Y6rWMAVL4kX1Q8uQn3LjVeJsxyUGueIbSPBOoN30x1X0O6x8X9SyczkBvB4wOSfD/l9639g13CnIKobTSi/pokTUo4aWcXtgwysGrNXczrOwFyDqA/9wi/eMcsNtfeuZx0QEQs3cuUto7yKPjybJBzD6Inh8Cft41/9juPZsK6ayaTkmE2XiwZQxA4Dv68On7LnIVuEhwE+47eOEN6CwyPiaYMAS+8NRkU9fukKgu5iPyMzShqGMzH/FNNLteAnWU/YXp0C+gqoNpfDwxqGOMFyfz59otp3Dol7Z1mOam5CP+nYgLJub8G7mfMK6/jvjttX0t1cXFxcXHJNKjp9XFm2rvjgCFARJwi5eOYoi9DXfkxqJHxXKgM1T7BdbUfNfUy09W1fPaGPzut9YZg2DxB4eLi4uLi4uLikgkQESPa5yGijHin7oYFMThSKMc3ikjtMQrty3Naz5AgasruZ+7TDRExbNmYM9hLbHF9sSUH8dI0xNAXU6Fv2IIfrP481RSWUqn5R7aJar2onV0qYo2VRG1Jv83oAgBY9fRIcWBFsVV/oRzbLtQTB+3U5ASonptK1ORP6zwP7V1muRQk9lROEf2HX7NTj9Og3vCwUOouiUh1teir+iN2Vy7C1u2j7Ihta1bxys55fNTCPXbGzCRE74dlHNV5IDQAPQIQUwE1pUL6wuPGpXSSwJ0+tYAI7WrmQpkIugKgKfDJIynKb6R7VpquQeEmwCIUKs3D3v5tXCgLQFMAYipATAeKaXP4rOL9ycZJaQKw98BUftMDp1PZRyaAx9aNYRhbjGp0MafYbSCiPWzOKzc7Jog6S/MpVPaYYwJuZETj25V4sWSM0zrsBjt2DVpc0FGwbv1McfqlPqd1pHLCDFtKZuL5zabqTaQFUf3LVnH0+Z1O6wAAQGwZciVdolKJqDZucQ4KvtyNxzZMHWo/tkAHnyGsWjXPaR2fQtQWsCVOZ3l+ojfm8cgLC8SHz14xWxPJVkTFsp24+ymLlVNTA1FQtuMoAADAS2WDFgYXB1ZUi30/32ZHf6agQvOzokagUldgR5xPISKOsZZHjW3nTX/uhFrfmT5om9JHJFHxZAe+X5BdL3OL/sMnjLabqdlgNEkmYs11Rm1R+2iWlXoQ2LDpq8m2Fe8/UUzlSzL/uzbY+c/V2LX/HkMbBkcmG4eoLXB9EoT+cdAwbvj4rUI5edJSEk4WZ/WnUq4BW0pGisu7LxvZhFafsILugFjRM3ddf84XSsNRo7ZEQVlEarpEpHaXlellPPTMCLM+g+HIIjMxuMxHP/yZAdv7q8eBpnaai4bTWbTn2lKXFD2EWJ97fUvGpmkg9C6uK/Ox59C/zPUDwGdvsH2ck/YE4LlNy1lMec7o3WGkyD+YEltrJh6RPhOYuO/qbcwfXsWi2v1G7ZnQNgNqwFF9wJTw4YI4/eq/jbZTaOc40VXeYjpeuKZShGsGrNyJ3oNb4/q070DqeI+wfbvj0wtpPQIoWCjz0JXJRjYE/U3Qo381HVRon4OYOnB7NHwhngsX6iTQIkB6xPKSq12k9xQUhpFsbtGAIh5EhZzrkTlcxyIz4YiIgVD9XER7rrdJY+bFLU/PJixqATWyn0dVxz8AlNYEsHuL2g0NZ8ffjlGliU34dtIVdj/hbxx0NUDRiOEdVUIttz0+B/QIOF2gL20JSPTRTRLhMUyPLjEd9ELYC1HFB7FwkyVNqn4r1J9fbMXXLtKWAPbQiwNOE/9HqCP4HQVHzMYkvySB1icxTf/Yiib+5RVtpCnDbu3CNFafucH6Lbni3G+jdutJJxnxtK/VekLsbr8KmpoRv8EqWS2esUUCtEhWF4PK6gQAAICmmb52ZBJZnwCu9A7L0pkuLi4uLi4uLi4uLsOX/wK3nR7RTL2ORwAAAABJRU5ErkJggg==", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII="], "frame_max": 16, "frames": [[[0, 0, 0, 30, 120, 0, 0]], [[0, 0, 0, 35, 153, 0, 0]], [[0, 0, 0, 40, 187, 0, 0]], [[0, 0, 0, 45, 221, 0, 0]], [[0, 0, 0, 50, 255, 0, 0]], [[0, 0, 0, 55, 255, 0, 0]], [[0, 0, 0, 60, 255, 0, 0]], [[0, 0, 0, 65, 255, 0, 0]], [[0, 0, 0, 70, 255, 0, 0]], [[0, 0, 0, 72, 255, 0, 0]], [[0, 0, 0, 75, 255, 0, 0]], [[0, 0, 0, 77, 255, 0, 0]], [[1, 0, 0, 90, 255, 0, 0]], [[1, 0, 0, 90, 255, 0, 0]], [[1, 0, 0, 90, 170, 0, 0]], [[1, 0, 0, 90, 120, 0, 0]]], "se": {"1": "attack.opus"}, "pitch": {"1": 100}}
\ No newline at end of file
diff --git a/project/animates/jianji.animate b/project/animates/jianji.animate
index 2720aaf..fb9fe34 100644
--- a/project/animates/jianji.animate
+++ b/project/animates/jianji.animate
@@ -1 +1 @@
-{"ratio":2,"bitmaps":["","","","","","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJKSURBVHhe7dpNTxNBHMfxAhox0QRNTPSgV+PJiy/DA569E6+ePXD2LCYai0k1JFKpPEgL8rS4FEIrpnApiGmaGpOmBqUgpC07D3aawfgKZhLz/Vxm5re3ncx/ZtqNAQAAAAD+Y1rrLtuFa+blMwGeBUFwxnbhSzKpezodHWM1+DI4qLuZAI+mpyuXbJdJ8CEIyr1/SxHc+fcUlCse3TWtjnEy8mJl/dft0Vl12Q6ZBNdMGUpnxWc7hA+LuWho+L26Z/qUIg9m8gc3n6SkON0buCk7Zk5CM6tifSglQxvBtfHwsP/pmJTDGXXFRnAp9fHHtXehOBh6K5s2gkum7o8siYGwIFV8Sj2wMVxKzB3eSgWRfJWWihuyB8839NnMqhhotqR6MSl3bQyXgkD3Lm/J46W8PB6fVddtDFfae0HPyAcRtlv9Zl6UuRN4sLamzpeqorFTOVGp5ahzQ4ZDnRNRRlbMKhgPo912020fwZVkoK8Wy+J36XskR+eixzaGS68X5ZZZBVNho1Uu614bw5XEvL5R+BodfqtGcmxBPbIxXHo2ITaUXQW1Wu2CjeGK+bdssyTq1b1IZrLqoY3h0stJmejsBSuNk0JZ99kYrrTffdfml6j6sy7EfE7ctzFciqfVHdXeDMwqsBFcyxdlvH4kRKWuTz/ogmt7+yKcyDaapizZCC6Z70k/bbcWstvqoo3gmlLqXGGn2W+H8GF/X/e1yxA/0gGAAxz7PGPDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAs1jsD8fsSMjMXLQKAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAPYSURBVHhe7dxLT5xVGAdwpKKkiYmX1oTExIULozHxMxhjYqILdeta070foBt3rkSUgsO0OIW0XMZhrgwX33BrwULAcilWKQ6ptRKRDpeBmfe5eE49NX4Bz0vG/y+ZzDnPmQXvec6VMDQAAAAAAABAHVPVx1wRfLOdjwRELAiCx10RotLXp6ceFrQBsyEq589rIxIQoWy29IwrIglRCILN5n+WIvDn36egubWDd+27NuBkFImp2T9fvzosz7oqkuCbXYZy07TgqhCF8bmwrSsj79sylqIIFL4vv/zFINOjvQE3Zc/sSagwQ7NtgzzpQuDbt5N77305wNyVl7MuBD4NTmy3JCep3NbPxy4EPtl1v+c7+ri1jyWWlnMuDD51j+y90jMScntSFTfkCHTMa9PwNfqwf4y1M8W3XRh8yt+WJy+kVOM51eSoPOfC4IvZC05dKvD49JJqe5LZha1G9w7/tSDQ5kRRNXtNNTUdvuHC4Is9EcWGuHxrM5TeUTrAzTgCiUBeuLFGPLtKfGWc+10YifDFjvrECO+X7pJkprhmN2fMBM8SI/Lm8s8hrZeIL+f4D5sAJMGz4RtU+XVH9PoK02Agr5kE2NPQ/yMJ7mEjY0f75WL46S/3Q9n6nTlW4LK9IfeZo6r7SH0TkRbTCU2uGol5czsOlqh6UBGdW6Wwp8ifuWWofmeBfUDX+SdipMXTvLa7L7prDqTJKX2Qn5SzLgn1yTxco31A84p09D/St6JPFK+THB+zLG9yrXOIb9Z7AprM60Sts20DXN0ukxxVze14JjwIFvXpuk7CSZMoSMvwTMhVUi39RhLP8LZrAh/saG8dYNoti9ZYdGKRqvlZedU1gw+dKfloZoXFzoIdsxxdKtI+liHPzF4ge4dqZoHqDxscdmd4wCQBv6r2pX2IP1/cIBHT6/uHJOZeUEkHesY1gw+xDB9Va6o2CeslCttTfNM1gQ/xnLxVukdsViG1U+GbLB+m5/W0a65PJ22zu5jjROX471nw4wZRPMe9rqk+mec8URud/XrTwi1aNj+XmQWi3Vl6gD9l8awjrWe2dnjPJmF8gWpfZ8O3XRP4MrZA55hZdsuhdGX4vskF7gU+2aVoa5vH7GZ8ZZQrXxXledcEvlwMtLlGfHf9DlFvgZZdGHxavSMvHtWo0j3Chw+/fwz+haF8sPQT1TqGaMKFwCe7AW/ek09iea5gM46I7fjMFMdbr4bvuBD4ZpLQ2J7ioqtCFNJpPR1LyVOuClG4kJSXXBGiEgSKfw4FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPWtoeEvT/ukTdlu2cUAAAAASUVORK5CYII=","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAScSURBVHhe7dzLT9xVFAdwpFqrxrdt0sSVG6MxMel/0Lgx0YUuXLlw1xj/CRa600QLtLyH0gEKwwzMwDDD8PqVZ0EgQHkIDRShNQK1pcOb+d1zjvfi1fgPcH8N+X42c3/nsuF35p57z/wY8gAAAAAAAOAUE5Hn7BBcMzcfCQiY53nP2yEEJRKRM8cDycNqCEpBgeQjAQFKJlfftEMkIQiet3Luv1IE7vz/FDQ6v/u5eZU8nIwCMTDy5OPGDn7LXiIJrpky1D6oJuwlBKFn1C+uauMvzRilKADpX7PvF8VI/bs3oFN2zJyE0kNqpDhG/TYErrX0b39xLUpUleLzNgQuxfo2Lzb3q2xxEx3aELhk6n5dr7pSGCGubOVvbRhcqunc/qCu06eSZhF0yAEoG5cXOobV103dJOVxumfD4FLqHr9YGhcJtYs0d/HbNgyu6L3gzI009QxOiZQ0E9mwkW9f4aR5npwLZ0SSwyLxQf+yDYMr5kRUmaDsbys+13epXXTGAQh7/O7YvKKROUUNPdRkw0iEK+ZdH+6kndWHitsGKGc2Z6wEx8Kd/MnMkq8WVhXVttNfJgFIgmMdY2r/j8csd2ZJxTz+SCfAnIaQBBfMu7024//w+7rPaxtElWnKmg45oo+q9kfgpI3r7tibUke7+yyjc8qvy9CPtgxhFbgSaqX5rR2WLX0gbR6Qp6l+Po+9wKHIrJzN3FF8eEg8s0K58gTdRQIcK47S0WZW8cGR7o6H/F1vUt5AEhwKp/lix5BPR0pk9U/FoTbatFPggnm3F0ZJbWVZcsTSN6mOUiP8oZ0GF0pb5MrQLLFZBY91ObqRUTsoQw6Zm633At7eE70KRKaXya9po6iO46NqV0rjFJ1cVsz6ru/sKdZ9wX6rJ+/YaThp5rFlZZsuQzkRk4SFVeWXxOmunQYXQu00/GCdRVchMUvhZpL2WsflZTt9Opn6a4eBM6ugSq+C/cN/VsHislI6KfV2+nTSv+cztdFVJcgbm/PN/dergKUmqZ7iT1kcMiuyOEa89kg3BVrPhMpVJP1P7TS4UBTjS70TZicQ2cr6rMvSuh6iL3CptEXtrm2QqULS0EX71zN8wU6BC1dT/FrLbRalE7BwX6n6tJqxU+BKRSvdmr3PcpBTXNNJe8ffPwZ3dN3PD+ljqdLbwdSiUmUJ1WenwJVQK18ammZZeagolCTdIWAzdq66Xe1sPGFJDCm/qMk//v4xOHQzw68kB483Y74epz0bBldM2alIqP7FZZa6TuVHuuR1OwWumI8jqlPE/dOKy1rowIbBpatRvjwyy1LWIlI5yK/aMLh0q4NyXRMs4Qwt2RC4VBCRs3UZEfOty1P/rOBZVZ6kqehtltoMNdoQuBbtJSpqEinAg/tgVKflq1K9GYcz/I0NgWuFUcoVNh0/uMHHE0HQHfKF4qhIY7d//D+JIACxPposRWMWnOFhfunnBpFol7xnQ+CSqf/lcequSeF/UATGHEV/acSRNFCVCQq1DdP39hJcM6Xop3piewlBWHrAn12L8Xf2EoJQ30GP0JgBAAAAAAAAAAAAAAAAAMDJy8v7G+ppS3n2R3dTAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAANMSURBVHhe7dlLT1NREAfwqtFEjboxJm6Nn8Bv4M5ENy5cu3PhypUuSXRrogJqESgBBKVcUlrKowVBjFSjEAXRiBF8JopGEbEFeufhOXq+Auc25f9b3Tuz6p3MnEdjAAAAAAAAUMVUdYt7BACIlMYwjiKFAlQEFAE2OY1ha1oJUATY5DCKKgCuKgAAAAAAAAAANhd7H4Q7oYi1Dclh9whRyT+Rc+iEiNgP35EPL71fpAsoQkQmJ3X76AyVVkp804XAt0SGX/1YJln6w3XohAgkZ3VH7hHJ2hrTzALXowgRqA94/ZvpguIqc6bAF10YfGkflINDEyGvk+qHL0TN/XLepcAHO3ZqA6alZdEyi45PU2nwqRx0afAhntIzE7MstgvsotyWp99YDzyyH9usBfK7qKYLVKfnOWzt4wBF8Cjey8GzeRIxX32lSNKR41JmTPe7NGy0BnMwa+ozY6isaovw+gOFN3t5xqXBh0Q/Fz59FTVTSG0rtGW5mJnUXS5dnSppztouaDZdUFr73wVz80SmKJ0uXZ3M79zqHitCc5rHnr4M7fc3XSDamqVfyaRuc2nYaLYj63tYPn43hwLj3hSVG7PhMZcGH+p65MjolF0JVJeWQzFj6at5xJbUp3iK/nxcZDuF9O4wl27k5IBLgQ/XBmRv6r4omQK8XiDqHKQXLgW+NGb4zuyC6GqZpDXPxZqaytowVD0z97cmzLaUzHLwfI6oIU3jLgW+JDJyZGJa9N1n4kSWzQkBi7F3Lf20svhTND1BYV13eMKFwZe2nOzOPvy3GMuNXi66MPhix05jmh7MzYt25ClMDus+lwJf7HVEywDLg2mShhSvujD4dC2Qo49nRRtSqk0PZY8Lg093hrg8PCXanuO3LgQ+1SR1R0dOtTbJUvX/FVSqW1l+HtwXvZ3jLhcC34JR5rpu1ZoK+z9j02gZ1FNxsxi35+S0C4FvtQGXa7v//XGD64komBPygfpAtWskPOlC4FvPOD+L42AWnUJBdl65qxoM6yEXAp/s/L/VyyOtA/zGhcA3uxW92oUtaaSa0pzoK/Al9wq+2VF0uZPFvUIU3n6S49d75Kx7hSh0DvF3HMwAAAAAAAAAAAAAAAAAAGDjxWJ/Ae8wTjJnuOHhAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAI9SURBVHhe7drLa1NBFMfxaFFRUXfudOGf0LUb165ciDvd+0eo4FbQPmn6ClrtI02ITZPa2BJ8tN1YsYpQLBXxgV1EQTBSbe45x1w4/4JzL+b7Wc35ZRUm98zMzWQAAAAAAP8xM9vnQwBIlGVoR4liAlKBSUCHswxb0zRgEtDhaEUpwKsKAAAAAAAAAAAAAAAABBRfV+HKSsKyZTvrQyQhu24Hxip2xkskIVeR6XYr6vKyM6Sp98ZPQa4qxY5aD9pfdr8PU2GsLPWXm3LDS4QW//r7S/Lny3e95BFC6ytqd/1Fq9mejNMeIbShUtT81JB3qnrII4TUs6DHi/VII5FqRy3KaTJSlqm321H0uyWDTEIC4h3a+LzoXktkY0uveYyQxsvavfpa7cPX6NdYVS97jJBy1ehnc1dtbjVqDkzpKY8Ryr2aHq2smO00Ih0s2w+PEUq8AI/MRc8a39QePI5a+SU74R8hlHzeunILopsfI82WZNdjhNRT0HM77acgWzIbXdFjHiOkqUXZe/NebaIm2x4hpOt5O/h8w6w3L1petyMeI6ThimwUnqjdr8mMRwitUBfpmzW7nrL/MzpG7pFdHGovxhM1veIRQustyF7vrCgv6hLSPiGf7C+YzSy3LniE0IpP5dUQB7PkrK3p4dvTZoUl7hQlIu7/ww9l+e6CbHmE0OKt6J0ZtqSJGp2T8fk1ueklQotb0a1JUS+RhO3Pen6gqFe9RBImF6XBwQwAAAAAAAAAAAAA8O9lMn8BWYFAb1I8LpQAAAAASUVORK5CYII=","","","","","","","","","",""],"frame_max":20,"frames":[[[5,0,0,50,255,0,120]],[[6,0,0,50,255,0,120]],[[7,0,0,50,255,0,120]],[[8,0,0,50,255,0,120]],[[5,0,0,60,255,1,60]],[[5,0,0,60,255,1,60]],[[5,0,0,60,255,1,60]],[[6,0,0,60,255,1,60]],[[7,0,0,60,255,1,60]],[[8,0,0,60,200,1,60]],[[5,-8,-8,60,255,0,60]],[[6,0,-8,60,200,0,60]],[[6,0,-8,60,255,0,60]],[[6,0,-8,60,255,0,60]],[[7,0,-8,60,255,0,60]],[[8,0,-8,60,255,0,60]],[[8,0,-8,60,255,0,60]],[[9,0,-8,60,255,0,60]],[[9,0,-8,60,200,0,60]],[[9,0,-8,60,50,0,60]]]}
\ No newline at end of file
+{"ratio": 2.0, "bitmaps": ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAACxElEQVR4nO3ZvU+TURQG8HPb8hUqAgajcfMjMQ7GhTi4OBjjIIksLM4anf0DGHU0QY0DaIwhURIVMSGaBqsFSWogoIl8aLEgAyGKtFLb0t73Pg4gqZtLe9/0Pr+t0/u0p+fc01sRIiIiIiIiql4AlO0MfhOo1IP44ftANBoN2c7gvIEBBEVEBMKOsKW7GwEWYEvFzoBS7e3fdosSiLAIVgrQ2Ghy26MINp7vrNJNKD6TOS8iAnF7O6poByildr7xhV+F5ccvTasS5fQosjKCRER0Lj0fDpvI9kuOIhtG4sVbfS9Mp4i7o8jqD6OCyvZkC+FPAGqUUgCgSseUC6yNIBGRjcWmxOF9mLj91LwV+feMcIXVAnR1KS/vZW8oyKm+YdNmM4stVgsgImKQj+/fi0zuN5ZtZ3ESANX/Wl+OTXmmd8hcsZ2n0qx3gFIKWmdHv6cMaoO4s3NZ5wjrBRARybfuSjTUqqtdZ0TSdWbWdp5K8s3uHY2iXrWaNbMpkv6pjnaeC/BMqCQAwf5XOgYAjyI6yX/QLBgfNw0LKzo3t1QwT94UO23ncQ4A1T/sLQHAs1jxMwBfnFHl5Ks3qJRCTUPg5Oyilzl+UA4NRPR125mc9HDE+wAAQ7HcZjKJett5yslXHfCXMYGO6YTeOHEkFJpcwDXbeZx0d1BPmO0uWF1dDdvOUy6+7AARkZb6wNmPX710+7FQaPJL2yXbeZx077n3AACGRnOFqSSabedxDgA1PV9cWUtpHYnri7bzlINvR5DI1lo6kQh2tDQFg7lC8b7tPM56P+P1pjJaL6XQYjuLs36s69jgWC5fbXdEvh5BpXpuBk8f2BMYezeHql1Jfc8YUzc1l79gO4fT1tfR7MIlHRGRH1Tb2uc3/3OYsQBERERERERERERERERERERERERERERERERERERERERERERERHb9AXknLrdt6dK0AAAAAElFTkSuQmCC", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAEsElEQVR4nO3bzU9cVRgG8Oe9d5hhYCgJUK2tpCqWNnzWYrsohgNRk2psE7to/AuMSzcuamLq0mWTahfGJiYmJjTGRTWlSWsm169KIEZkAAcBpQgWgfLR+bhz5845LsAGa5PWls65d+77281qnpnnnPeembkDMMYYY4wxxhgrXUop0p3Ba4xiPRG/+R4Qj8dDujME3vnzygQAKPCO0OXUKWVwAeuKdg3Y7ODBa9UgKIBL0FJAZaXMbowipeP5A2vzSah/NPUKACgE+3RU1B1ARLdWvLPmzPRekjUECvQo0jKCAMDNriZjMXl54yGPIh2+6s+/f+4L+SoQ3FGk9YORQ5kzGSc2opQqIyKllKLNYyoItI0gALj5+7aJp3eowQ8+lxbw72tEUGgt4MQJKtiFzHuk0HnuotyuM4suWgsAAKns/sceUalsWs3ozqKD9gKOd22/nnXx1lM7Ef7ognxDd55i014AESnXzXyTtqUySZ299WVdQGgvAADsmqqJynJ6/cVDwEpYjunOU0yeOXtf+U5GHFOtwAXsFDUcP2LM6c5UDJ7YAQDw/GFyl1ZU/+F2ozyt5GA8HtcdqSg8UwARFZ6MGUemrheclga144bx3FHdmYrBMwUAQGcn5RJJWmysN6EUzgThd2RPFUBEKlxJz07NymzzE6jvveye1p0pcIQQ+ORKIZm1pbzwtZ1LTMqIEEJ3rIfGUzsAACzLgpR0LDlTyLQ2mKHRSXUaWC+GFdHHF93RrCNV3/d2bnzqRl2pFnDHHaD7xQohEDHotcnZQqptjxkauVb9zsIC0FSiJfyHECIshNB6AunoEPTpJbfPdaXqu2o7347INt0L46ETQvzz5uuOAgCYW5CHxn7LLy2tum7fVffd1v2izCvZtsqdRpADj3xF8cLLPQOD48bJ6krDME337ZyLdt2ZHiohBHlthe1pFl0/T7hfrqZdNzErX2rvECGvZSxp+1pFuO2ZLrG85g5dGbRzc4uyU3emreS5zwG3e7QGTsYhfNZrvLmzzhienFdVrQdEhe5cW8XzBViWBYMwfvbDHtlYHzpZG3U78i4OlMoY8nwBADCesP5MZYDu7h5nV134p4Ef4qH5JTSXQgn++cMEYTbrYNexo92pggTIQM3SCsoA5HVHexC+2AEA8GvCmkilIZUCTAOoqgDlCv4/lvqmAAAAIeFsrPdoBGQSoi0dwl+v4TZ3De+lH0WSw9bycgrzcuP+uW0VMPIO9upN9WDuZfV4pgAAsNfwSyaLNABEywECapua/HsxvmsBRCSLEeReTU9buJnFUM5FAQAiYRiuqWp057pfvpyf4wkrn7UxBQCxqCJStM+vR1JfFgAAK4uYy+WxEjIJpgFzbhllujPdD98WMD1tYTmNYQU4sSiMkPLnkdS3BQBAcsiSWRs/RiKQihDdvdt/Y8jXBQDAQL+VI2AsVg6KVGG/7jz/l+8LAAAiLJompohQ5beLcUkUYFkWysP4o8zEX7ML/jqSlkQBwHoJtdVIkkGP684SaC0twtjbIgL1Jw/PaWwW5bozBF57u977mhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjrAj+Bo+bqycM3zaoAAAAAElFTkSuQmCC", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAE+ElEQVR4nO3bS2xUVRgH8P93pjMtdJgyfYUCqYm2BjUxIYSwMMBKibEhQlKUQGiiYIxuJS4MXA4uxLgShWAUA5vyMkQeChEMFIJaRNRACyW19BGglmfb6cx0Ovd8LiikEAwK7Zx7Z77fbtLF/G//97zmzgBCCCGEEEIIIbIXM5PtDF6jMvVG8s/3gCNHjuTZzpDzdu7kAACAISPCFsdhJQXclrE1YKSZMzuLQGBASrBSQGGhSQxPRWzj/XPWyJ1QY3OsBgAYub07yugIIKK7d3yqL9W146ApJlBOT0VWpiAASCd6W8Jhc2j4pUxFNvzYOPT55n1mAZC7U5HVg1GK4p/FU+EmZg4SETMzjZymcoG1KQgA+tsjrVWT+NSG3aYBuHeNyBVWC1i0iNykG19HjBc2f2/KbGaxxWoBAGA42VhRzrHEAHfZzmKD9QIWzinrTqSxsjyK0Fd7zdu282Sa9QKIiNPp+HGGYTA23v2wLkdYLwAAksUTWiPj6M2ZzzBuhcw523kyyTN77x9Omfy+GPoVA0ihcuE81W07UyZ4YgQAwIszKB1PmhMzplGwd8g0O45z50+euUnGgqcu7tgxU2Ai3B8KcKD7Jr+ycE7wgO1MY80zIwAAZs+mwfYu3KieSkin8XUuPEf2VAFExKEwTb90lVPTKlG+47D7he1MY81TBQBAy1F9+UwH9VSWKRqfb+pOtpr8EetB1vFcAVprMNP8jh4z+NyTlNfWyt8AQLaW4LkCAGDZS+qPc53UU1ocUKUl7rya2vemwmMbhtHywAIcx7F6sY7jwAzhnSvX3OS0J1Sg7e/xG5qbgVrLucbCv42AQsdxrI0OrTWO7v7wQHMbNZdNVKq0KP3yivedmmez8MnZPXfU8DwbBjCgtbZ+safPm3ejEbOuKEzjfzqL7du+XLuiqhJxrbXtaKPm/rucAMTgkfn2o/V606/nqX7COKJIoVvbl+A625lG24MKIK21sRHmfrs2anfLJt11sdv8Pr06EPhgrVPR3o2CbN0RedKCJU546RurVvcNuO2/NA0OnW4xK21nGk2e3IaO9HwVYtdjhBPHacvkMtUZS3FkyXInax5fer4ArTXyFO3ftXcNV5QE6qdG3aqBJC/PlmnI8wUAwL7t+nT3NWD1Kp0uLw62b1q/JvjnBV5k+7wyGnzzgwlSaLwR41mffLwmmRpiUgFUX2jHOABx29kehy9GAAB8t33twStXkXYNEAoSJpdC9Q36f1vqmwIAgIi2xeLMDKCkiFRIIbr4LSdoO9fjeGgBXnoosqdet128gjOue/v1lFLkxWM8326qx/NfRoBnCgCAW5fo26s3uQcASqJEBFTX1vp3MX5oAUTkiVPxHQ0Nmi/foK19CU4BQCSMYDJonrKd61H5ag24Y/82Hb9+C4eYGRXFrIjpVb+eC3xZAAB0tNBv/QlcLMhXCOUh/9RfKLSd6VH4toCGBs1tPVRvmPsnFSNQwLzMdqZH4dsCAGDPVp2+3kubiyJwXYXo3Ln+W4x9XQAAbPxU9yrQ7kkTEZhQ4b+Dme8LAAClcC4/RIdVAFP8thhnRQFaa0wM4+fCEM6ebDLVtvP8H1lRAHC7hKcraa/Ko1m2s+S0xYud4PzXnZDtHDmt5jUnajtDzqurs/e9JiGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEyJB/AHiHvpAVg10xAAAAAElFTkSuQmCC", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAFEUlEQVR4nO3bX2xTVRwH8O/v3q7r2sKgMKTbAqJDIaDhQRRiZFyIEKOJYQ+YaAKSkGCML5iQCJIsGBcBI3sAMUR42JuQiFEiwYz1dmCGExUCigILAuPfYJR1tNtoe8/PB/4ECAnC/px729/nbVmafu++55x77ukKCCGEEEIIIYTIX8xMujO4jTFUbyR/fBewbdunO0PB27GDTQAAQ2aELrW1bEgBNw3ZPeBu06efLQWBASlBSwGhkOq9tRSxjvcvWHfvhFqPpd4AAEZh746GdAYQ0Z0Rn+nOtG/foyIEKuilSMsSBAC53uTxcFg13vpRliIdmlqzm7btUguAwl2KtD4YZahnY08m/BczFxERMzPdvUwVAm1LEABcPz28rWos//blTtUM3HuPKBRaC1i4kJw+p2ctMV7etluV6cyii9YCAEBxX2t0DKd609yuO4sO2guomVV2qTeHFcEA/Ft/UO/pzjPUtBdARJzL9ewvCSh2HGy+c1hXILQXAAB9kWFtI4L07sRKRpdf/a07z1Byzd57z1FVfPk80j4DCADRmnnGFd2ZhoIrZgAAzJ9KOWa1b+oEMq/2qtPV1dW3f+WaQTIYXHVx8bgKJH1IhwNM3b1q/oJXihof/ipvc80MAIDqarpxNcFdVRWMGzfwTSF8juyqAoiI/cPo+c4kchMrMWJ7k9OgO9Ngc1UBAFCB5vPHzlJXRYQo6Oe34idVsW3bumMNGtcVYFkWGPTm5SRnJz0J34WT/AsA5GsJrisAABbNMw6c6qDukaWmURFVU53gzCq4bMMwUB5YgG3bWi/Wtm2kU7w6mXKyT5WTcSFZ9G08Dqq1bVcOmP544AUx80jbtrUdCViWhdSZn7eeaKeOUaWGMWGMM3na3FnvzwaUrkyD5Z4CbNtGLBaLEFGXZVmOrlAAsGyZ5cChpmSKM1Oe9vkMgxa1HuHSfLsX3D8DiIgScMl623pi39Jfj/GRkJ8RHe1Mu3KdN+jONNDuL8AAYOge/betWWLlYnbztY4kX5wy3vS99nr1uMNtCOfbLHC1VetikfUb9zal+9S1P09lcrtbnO90ZxpIrt9VvPoiJdoThFNtOFxeZnSHQly6dnNsvO5cA8X1BViWBb9JG+IHbQ6XGEerojy6K8Vf5csy5PoCAOCL1XN+bDsLNDY2q0ipL7n0ndn+nw6oNbqfVwaCZ74wYZjYeSGhag60xHN9fcowfXip5TCGA0jqztYfnpgBAFC/eu6mE2eQzeWAQMCgZ8fB15lWnt+WeqYAACCiVYmkUgygcoxhBkyU122xi3Xn6o+HFuCmD0XWr5zz+6GTaMpmARAweRz8yYRaoTtXf/yfGeCaAgDg0j/GZ2cuqn8JQGWUDAOYUVvr3UO6hwYnIlcdgDU0WHz8nLH8crfqISKURVCcDjgv6M71uDw5cjZ8bCXPXcIWpRQ/U8EmMX3k1ecCTxYAAEdajF2d3TgUCppU4kfw+4M8Qnemx+HZAhoaLP7jtLHSYdVZVY6iMHvzpNSzBQDAuuVW5lwHffBEGbI5A9HFi733ZOzpAgBgydtzOkyiuqoofKMmqnrdeR6V5wsAANOk/aEAfW36MMlrN+O8KMCyLIwdRTtGBhHbaTszdOd5FHlRAHCzhJnPGZ/7/FSjO0tBq6uzi1d8GivRnaOgffhJrFx3hoJXX6/v/5qEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEGKI/Afnj8m61gkdGQAAAABJRU5ErkJggg==", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAEvUlEQVR4nO3cy29UdRQH8O+5d6aP6YuUUinloYU2RjHRBFYmBhYsBNNIE1nqygT/ABeuGnasXACm0fAIISFpQa1MKIjSoalGi1VRS4GWUugjKYS29jUznfv7/Y6LtqQlqCXQ+d2Zez67mbuY751zz/ndO/dmACGEEEIIIYQQ2YuZyXYGv3HS9UHy5ftALBYL2c4QeE1N7AIAGNIRttTXsyMFmJO2NWCx7dsHSkBgQIpgpQAFBSYxP4rYxucH1uIzoY7u6XcAgBHss6O0dgARPTriU5OpwcaLppRAgR5FVkYQAKjExK3CQvPd/EsZRTZc7vCOHIuavUBwR5HVC6MUxQ/HU4XXmTlMRMzMtHhMBYG1EQQAU3eLb29Zy52ffWXagKVrRFBYLcC+faSTOn6QGG8eazFrbGaxxWoBAMBwsqOinKcTMzxoO4sN1gtQ99aakYTCx4aRc/Sc2W87T7pZLwARsVLx9tWrDHuKGh79WBcQ1gsAAMnSoturC+n9smKDv3PMDdt50sk3594tPSZ3oJuSOWFgVQ6X1e1yRm1nSgdfdAAAvF1NKi/XtNZUAven+MGiTb7JuBJ8s3NEpDflOXv67wMb1jpO8w/ezvlNxmqwFeabAgDAjh2YnU2ayc0ViuMJigbhPrKvCkBEnFtMr04niKvWIb+x1TQtbLIaLEiYmU5d0lP3hpSJtutUS4/JzeZO8FUHAAu/B9G7k0k21RvZHevlYUAea0m7i7+o+PCo4Z+6tPoyZrYys4MsHEVP7ID5nbWGmenhGH/qeZor14DGk/zjmTOgJsu5VsK/FeAFZg6nO8wCIuKXV4cO9I+QV1pEzmsbOeKVmIPvzZ2SZlUXLCkAM5MxpoKIHhCRZysUAGzbRl7/APV5GqjZ5IbyI86HF9q5jDm7bhk83gFERCNPeN+Kwirn9atdhvNDhqvXm8jQOF+2nel5e/yLdgE4to/+Bfu2Uqp3mLzJWcaWdU64vMxUXbmGkmw6I1pSACLyiEjbCvMkJQX04m9dzI4LvFFFkf4h0xPEW5fWMDMdOqvV+IThlDbc9ruabfnZvGI71/Pii1n/X4iI80L0UfcgMzNhaxXCDyZMRzaNoYxw5Kw2kzPMKc38R5/2Tkb1WdvXK89DxuyAG8bhvhHNIQeoWstuKAe7o1dQajtXoByN6sRsitkw8817ymto1n/azvSsMqYDAMBxqHbkoTYMoGaDGyoIYfO5To7YzrWi/LbYnTivT8WTc11wq0+p4+f1aduZnsVyOsBXBbh71fngRr/uIgDVLzmuy7w7kx9l+d8CEJGv7skeOECms9fdOThmpogI6ysQmYioXbZzBc73v6r9WmszPuGZY1E94rdRuVwZtQgv1n7O/WJ4FK0lRSEqyENxwyUO5MO9Vp2IcV5K6aGbd5Q6fUH9ZTtPIF2/YzYlUip+8pKeqa/P/CvjjOR5pu5ar0p9/o1qs53laWXFERMK0dclBc4nbpi2Z+pinPGYmaLt+vihRm+P7SyBxcxOQ7P+1naOp5EVI2gBEZlKx9l7tNkU2c6yXFlVAACoraW4Mii3nSPwYjGWP4cSQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQmS7fwAFKQ1wNfC3BwAAAABJRU5ErkJggg==", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAEIElEQVR4nO3azW9UVRgG8Oc9d2Y6mUKKaQKUFIVS/EhMNDoJwY1RI4klQRek0QUL2ZCwwRULN01du9KqmCBVFwTrILGNsbRptdGA2AKW1Noa6geFAP1wnGln2um957wumiYs0E5b5NyP9/cXPDfPvOfMOfcCQgghhBBCCCHCi5nJdgYhhAAAhixHAJTtAMIumQIRcQz5a+oHUoKIOFmKfECuKoQQQgghhBBCCCGihZlJ7oQs+7TT1NvOEHldP5o3ojAJvvwqgplp8m9d/eeEPhqFEnxpYIDjvVe84kxRf2A7S2SdaNfD0znPZGf1uzIJFrQNceLsec/Mz2vvym+6RUqwoCWjSxM5zxTmtG4/p9+ynede8+UmfKeqStp2aYg5Flfqie385kdfmaO2M0UKM9M7Ge1lc4YXtOG+Qa/4db+psZ3rXvH9BBARJxx1eHicmZnw+DYkJ7NmVPaD+4iZqSWjTb7AvKCZB8e0+0mHzoShBN9PALA4BbEYvhi7pTmmgLrN7MQSaOj4FtW2s61VIAoAAKpVr10cJrguUJly6OlHOX4jZ3pt51qrwBRwKE2uUvhh4i8GA3h4qxOrjGFH+wCnbGdbi2UL8NM6625Sz3b1M5dKAAjY9RhXTN02x23nWotyJsA3BRxKkwuDvp/HPCYAO7crx2FuaGtjx3a21Vq2ACIy9yNIuQ7uU89fGFEYnzJMRKitQSqX8l60nWu1ArMHLCEiZlD66rXFyXyqnmOK1cd+Wioj4dgZb/babW2MYT7VrYvvnzUbbWdajcBNwJJShdpy8ZfF9fHJHZzYYEyP7UyrEdgCjjSo/FSeT438wXioFsp1qK6piQP7PIHEzOpEhzaeZv5p1PM+/NLrs51ppQL9iyEiA6b0hSFGVSUo7tCuoG3GgS4AAA7uU5d+vW5mUymlqh9gpyXj7bWdaSUCXwAAODG1uX+Y8EgNHCeuPrOdZyVCUcCBPVS8Oa2/I1ZUleJEWzdX2c5UrlAUQERcVXKeOzfKvHUTnOysuWU7U7lCUQAANDaSzhfphYSjCFDJ49+b9bYzlSM0BQDAkf3qm9+vs1v3IKOiwJdt5ylHqAoAgJG8WjcxRcjmUBeEdwWhK6C5kRYKrhncspEoP21abedZTqAOLSuR6dX65rRSU/vhNPvsSv1OoZuAJTMl9Wo8BtR38QHbWf5LaAt4/SX6fEEbN5vnVj9fT4S2AADYsJ5qFSlq6/FesZ0lsk736cvHzug52zn+TagnAABq4vTMXEklM91cZzvL3YS+gN27ab4yaXoKrum0neVuQl8AEfGNl9We7Iza2cT+e2Pmu0D/h2Yisy5pWtPnTbPtLJHFzPT2Se3bA1kkXB03e987bQ7bzhFpJzv1pJ8PZkIIIYQQQgghhBBCCCGEEEIIIcLjH6hasFBmwYEeAAAAAElFTkSuQmCC", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAEbElEQVR4nO3a/2tVdRzH8df7c+527764ra3JdjcmTU3NKIlhTSPvTVJKmkFjrC+yZoIQhPTDon4a+0GiLyQEkVGwIjAwxdJfhrIdtFr4Be3LNpYta0yduS9X9+267Z7Pu58GIdbu3Oxzzrnvx1/wHK99zj3n3AsIIYQQQgghhPAvZibTDUIIAQAMuRwBUKYDhFlyCkSKY8itqRvICCLFyaXIBeRVhRBCCCGEEEIIIURqsW0btm2bzkhtb77TVmK6IeW9+1FbdSqcBFf+KsK2bVwb0zl/xfRzfh/BlQNEo1GU5VifX46hLj6pXzPdcye5+guQ13e3frb+QZQpC19nh9QH0WjUdNKCc+UJmJERVjt+7QWCFrZe6Ne7/Hg5cvUATfXRxKVBJManQOECVLV36nrTTQvN1QMAQFaIan/7g9kKKLW0GC82vNVWa7ppIbl+gCfW0nDfMGEyzijII1VSyC+9vbct33TXQnH9ANFoFGlK7flzgJlBuKcI6ddG+Qu/fB64+i5oBjPToeO6NRg/QenpQO8V7fT04vvNlarR63dGrj8BAEBEfPUafr48rNlSQDgfygrg4fYfkWu6bb48MQAAUKlqoJxIRiIBhEKKVpQhMDiu3zfdNV+eGWBnBU0rQnzNQxuIAZQuVlbIQnj3x3bQdNt8zDqAm34uOF2kNh9p51Xr10UAAlaVIf36sG4w3TUfyZwA1wyws4KmodH5S09iCQEoLSalgEcaG23PnOSbzRpORPr/CEnW9iq18WS3Klt6/2OFRITCfATHQ06F6a7b5bn/HCJiBq3t6eWVkUgkeG8JW8T0hlefCzw3AAC8+qw6e74PN/qu6ge2PPW4lZGOzG9Oc57prtvhyQEAYDKowme6kKkZq19+fkNaNrPnb0k955PDzpcdvzs6PpW42HLaaamrs11zw5Asz54AANjxtHrhVBcQUCpclMPLCpbrPaab5srTAxCRBlPFqU5QbhaWrF4TiXrtw9jTAwDA9ip19vxFPZadrQJ338UrOwYejZhumgvPDwAAVkAVnewg3FeKNCtdHTHdMxe+GGDbJproH3K+VawoN5ND+4+xZ96S+mIAIuLcSSt6oou5vARWbExfMd2ULF8MAAA1NeSMTNDGUJoiQIU+/U4vMt2UDN8MAAC7qpXdfYGnV5QzguN8znRPMnw1AAB0j6jswSFC7DrKD5/hTNM9s/HdAE01NDU8oX8KLyYaGdLNpntm47lH92QdaHOc/iGlBqthNbnslfo/+e4EzBidVLVpAWDZUd5muuW/+HaA+ifpqylHT8dGuNlNX6vezLcDAEDeIipVpGh/a+IZ0y0p6+Bx59zeQ07cdMe/8fUJAIDiNFoXn1ShA8e43HTLrfh+gMpKupEV0q3j07rFdMut+H4AIuJLW9Wm2Kha3sjsur/XdUF3QhORzg7p5oofdJPplpTFzPTePse1D2QpoadPb/nwoH7FdEdK29fiDLj5wUwIIYQQQgghhBBCCCGEEEIIIYR//A27N2QQjsDu1wAAAABJRU5ErkJggg==", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAESUlEQVR4nO3a3W8UVRgG8Oc9u9tu7Zbttg3SYtIEqb0wwZslimAKEkm0sYUIVYRqNCCJppd6I+l0bvTGC0n8INGkF0aIhUYlIVZJSQiKpmlEG0uwlISkSpG13bL93I85r1ebGIN2S4tnZvb9/QXP5Ml7zpyZAwghhBBCCCGE8C9mJtMZhBACABiyHAFQpgMIs2QKRJFjyKupG0gJosjJUuQC8qlCCCGEEEIIIYQQorhYlgXLskzHKG679ltVpjMUvfaD1iPFMAmuvBVhWRZmF3TZrVne7PcSXFmAbduoKVPnkrPYmslxs+k8d5Orf4C07u18rbEeNaQwEA7RV7Ztm4604lw5AXklMTp6PQGEFDbenOKn/LgcubqAEx/YzuQ0nHQOFIsgPvIbbzOdaaW5ugAAKA3Ru+M3mVWA6N5KPNbyvLXZdKaV5PoCNqzHzMQMIZsBKsqJqlbx1n0HrYjpXCvF9QXYto0A0elEisEAVlciOLfAHX7ZD1z9FpTHzDRwiTu/+NRGMAgkpljfSODXhx6gHq+/Gbl+AgCAiPjiKGYnZxiKgFgESgXQMHIN95jOtlyeKAAAaC0d2fhEV8zRQEmIUFcDlUrzi6ZzLZdnCjgUp6wibnz9DUsxgOooqRKF2N5XrJDpbMuxaAFuui6YXaNaes/x7sOHuwgA1tYgODfDLaZzLUchE+CaAg7FKcsO/hi64jQBQHWMiICGPXss12RcqkULICL9fwQp1MstavsPl2nLgY7OBwFgVQShhZC+33SuO+WZPSCPiJiZHr5yjVu7urqitVWsiGmnV88FnisAADqeUT+OjCE7ltDtb79lB0uCKB28inLTue6EJwsAgHSpqhscRrVmPPvhESsQZn7BdKai89Ep5/gvVx1nPpMb+GlUv9nU5L3N2LMTAAAHnlb7Bi6BgkrF4fDjFbXeO5h5ugAi0mCKDwyDohHesmu/1ezVzdjTuk/npidTmr/8Ljf/3me5uOk8S+HpCcgLBNWaC0OEDfUoVWF11nSepfBFAe07aG58wjkfgKJomS7rOcNR05kK5YsCiIij6cC2/iHmxnoEkjP6hulMhfJFAQDQ1kZOao62l5cqAlT44291helMRel4n5O5MKz5k6+dUdNZCuGbCci7nFKRySQheQvrTg2y6/+Y+a4Au40y16f0z3WriVITutt0nsV47uheqJNnHWd8Qqk/dyNgu+yT+t/5bgLyptPquVAQWP8Nt5vO8l98W8BLT9KJjKOzyRR3u+m36j/5tgAAqKyg+xQp6unP7TSdpWj1nnMuHv3cmTed49/4egIAoDZEj86nVfjkGV5nOsvt+L6ATZtooTys+2ezus90ltvxfQFExL+3qh3JadVgMbvueV0X6G6wiXQkrLvj32tv3+T1Mmamd445rj2QFYXRMd38fq9+1XSOonasz0m4+WAmhBBCCCGEEEIIIYQQQgghhBDCP/4CTd5lVmiUUUoAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAEKklEQVR4nO3a3WscVRgG8Oc9k2x2tklTUjExTUmoxoSQRolRrKBDKBZEUMESilJEb4r+AXojlHjlhZcKBT9yoaRSG6pVIW3Ix1ClkQRNoZZGA8VKiLQuMR+bze7OOa8XdUEkmsSkPTOz7+9u7p7hmffMmQ9ACCGEEEIIIUR8MTPZziCEEADAkOUIgLIdQNglUyBKHEO2pmEgJYgSJ0tRCMirCiGEEEIIIYQQQojS4nkePM+zHaO0tXZ4ru0MJa+j02sohUkI5V8RnuehEHBZroC9cS8hlAX4vo9UOf2SzaNJGzTbznM7hfoDSEu79/Bdu5ACYbZMYcb3fduRtl0oJ6DIcTG5lAEcwp7MKprjuByFuoArEz5n8+DAAG4C9elFNNnOtN1CXQAAOArjyxkGKaAyicaW/d5e25m2U+gLqK1BfiVP0BpIJAC3Ak37O72E7VzbJfQF+L4PBfy0krt1vCMJVQjwSFzuB6HeBRUxM83eZO/I892sFLCyCl7OIF27Gz9GfWcU+gkAACLiry6iLpu/dcUkEyBSqEn/gXLb2bYqEgUAAO2hgVffHK1nBhwFVKVAOY0HbOfaqsgUcKyLCoq45/zQqAMAbgXIIbjtD3mROYe1rBs+TL8LFupUT/8QHx8eGSMA2JmCKuTRYjvXVmzk6glNAce6qMAaempavwQAbhIgYHdbW3R3ROsWQETmTgTZqFeeUQfHr9KLnwyMdANARQIqcLjGdq7/K3LrJxExMz368zXz+tjYWG2ly0RMrXF5LoiME2eC5es39HVjzJNtHd7jzR1eJLekkZuAolyFqp+4zA2G+a2J8VFVxtHfkkbO+2f1ycszQZDNB5/Ppc0TjY2yDN1RzKw++lKbfEHrqWn94f3t3oO2M21WZJcg4K8dGlPXxBVS1ZX8whtvjxyWm7EFfV8HSwvLhr/4Nsi8+6lutZ1nMyI9AUVOmaq7MEXo3AdXufSd7TybEYsCjh6ilbm0vuCQomrXpE4NcbXtTBsViwKIiKtzTve575nb74Uzv2x+s51po2JRAAD09JBeXKGDO11FgEp+8I2psp2pJJ0c1PnJacMfn9MztrNsRGwmoOjqoqqcXyDML2Df2UlO2c6zntgV0NtD+Ws3zKX6u4kW06bPdp71hOZd/3Y7PaL1XFqp3w/D6Q3ZK/W/i90EFC3l1JHyMuC+83zUdpb/EtsCXn6KPstrU5hf5L4wfVb9p9gWAAC7qqhBkaJTw8FztrOUrAFf/3DijM7azvFvYj0BAHBPOT2Wzank6SHeZzvLWmJfwIEDtLojaYYzBTNoO8taYl8AEfHss+rQ/JJqPs4cuvMNXaDboZfIVCZNX9dF02s7S8liZnqnX4f2gawkzPxqnn5vwLxmO0dJ6x/UN8P8YCaEEEIIIYQQQgghhBBCCCGEECI+/gRzvlwQpJY4BAAAAABJRU5ErkJggg==", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAACx0lEQVR4nO3bzUtUYRTH8XOeURocZWwTJtVCsvYhgdEmAiFa1CKsjUGroH+gXTL7lhlG2QSBhmmSaVhiFBVR9m6UibUow8CGwRlT5+U5p02zyxxTe+7c+/v8Bd/L4Tx37uUOEQAAAAAAAPiXqrLrBgAAIiIlHEdEZFwHgFvYAgg4Jfw09QIMAQIOR5EH4FUFAAAAAAAAAAAAAAAAAAAAAPxHqsr4ZMWxC/2613XDeiid/wfU0tOOAa1znRFo8QF7TVVDrjvW0rIb4KWzN1tjWq7clm4vNa1WMUeQZy72ZAPnxNLGl+PS6rolsFSVz/XZzFRCjrpuWQulcxP+jZlVhRsnPtsOVd3muiew2vvyc19m7EcR2eC6ZTVKbgMKMhtM7eiY1ovqDT/dlEvKxX7b9W4yn1/M2fMYggOqai7fspLNWft6Qs647vkXJXsEERExs5Byw+h7NtFKOd0xKMddNwVSfDCfnlsQvfk4P9fWJVtd96xESW9AQajM1Nx/wbR7B1VwhMdc96yELwbQ0sTz0wn7sIwNR8M20j2sUddNxfLFAJhZo5nQvoFnqrt2Uig5J99dNxXLFwMgImpuZpua5/3VEcNEJnzpkVS5bgqkriGbfftJ9OodO+m6pRi+2YCC8ZSpnE0zJWeprv+5VrjuWY7vBhBr5uyHKXlTu4k5lZC4657l+PbxveeetdMJY34coVCMWVz3LMV3G1CQzphj5WVE2+9qi+uWv/HtAE4c4OtZK7lkSuNeflHn2wEQEVVX8RbDhrtH8oddtwRW7wP7qr3PLrjuWIqvN4CIaHM571nImHDPsDe/KfL9ABobeTESlpGfORly3fInvh8AM+u3Q6YpmTb1raqeu17PBa2HGLNUhiXe8ERirlsCS1X5bKf17ANZIEx+lYNtvXLKdUegdQ7ZGS8/mAEAAAAAAAAAAAAAAAAAgH/8AmptCPOAdnt5AAAAAElFTkSuQmCC"], "frame_max": 17, "frames": [[[0, 0, 0, 60, 255, 1, 60]], [[1, 0, 0, 60, 255, 1, 60]], [[2, 0, 0, 60, 255, 1, 60]], [[3, 0, 0, 60, 255, 1, 60]], [[4, 0, 0, 60, 255, 1, 60]], [[5, 0, 0, 60, 255, 1, 60]], [[6, 0, 0, 60, 255, 1, 60]], [[7, 0, 0, 60, 255, 1, 60]], [[8, 0, 0, 60, 255, 1, 60]], [[9, 0, 0, 60, 255, 1, 60]], [[10, 0, 0, 60, 255, 1, 60]], [[11, 0, 0, 60, 255, 1, 60]], [[12, 0, 0, 60, 255, 1, 60]], [[13, 0, 0, 60, 241, 1, 60]], [[14, 0, 0, 60, 227, 1, 60]], [[15, 0, 0, 60, 213, 1, 60]], [[16, 0, 0, 60, 200, 1, 60]]]}
\ No newline at end of file
diff --git a/project/animates/jianji2.animate b/project/animates/jianji2.animate
new file mode 100644
index 0000000..4991c6f
--- /dev/null
+++ b/project/animates/jianji2.animate
@@ -0,0 +1 @@
+{"ratio": 1.0, "bitmaps": ["data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAABNPUlEQVR4nO396Y+lWZLmhz1mZ3m3u/geS2ZGZu3TMxx1T3NEEOKHEYcECAEkJOjvlEAQHAIkh+RI5LQkjtg9zV6qq6srK7MyIzPCI3y727ucxYwf3ns9PLKyemVneETcX8BxF7/hdzt2zjE7Zo8Be/bs2bNnz549e/bs2bNnz549e/bs2bNnz549e/bs2bNnz549e/bs2bNnz549e/bs2bNnz549e/bs2bNnz549e/bs2fMeQtufv+3v93w38Jt+AXv2vEn2k9DfEcsMIoJ845NkBUQVIIKojHcaBisA1fEHgIwX0O3tPd8t9k2/gLcd2hqAYQYRsJtTWBVZBASCkoESoNvfshJoO+D7FDH+Zs+bYG8AfwVEv75IGmNg2cAaA9E0Psbw+INXA9yJQJVgnIMwIcUIkxTMhAwFoKAUARB0bwRvhL0B/B0hsiDDIGvAzOP8r4ABQDoOegeGKIGFYVRBIBABQgCDbof+3gi+e/YG8Dfk7nogANgw2HoYw2A2YGAc4KqACNgoJAlUFF5BDmxEiGBUswKklEeHgEC4uxnam8N3wd4A/hbQ7chkEHgc6M6ODrEoKClSNwAi5JQNATURJ2/N3MFokMSieaOkAwOSsfeA3xR7A/gbsHVvoTruX5gVhhyYGMgEVQIlYe2jul6KhnzT+GLCTBDNHsyGRLxKXCPHBSySQlS+Za7fW8R3w94A/haoCLIIDFmUlYN1Dn3bkcZocsiuhqkPqun8qJkfFc6aISVZDd16SN3VEIawSl0QRwNZmzTo7WjfD/rvnr0B/FXsNv3Kd+5QCBhZMvo+UNElUwYtGnazg3I2nTaTI5AqrDGrOLSXq+XFxbBYR0jrvAlUOyRSiAGU7uz99zuh75y9AfwlELb7fSKAaDzEAoGIAZAlIXCfipqqyVkxnx/V9WnhjFFD/KJb3Fze3FwsYrtM0J6bMhSOQQxEScgQMPEYDN0P/DfGe38SXFTVa7dvc0NUwQpMZ1OwsSjLCkPbozAlWMh+/fJr94iOZ6c8m34wO35oDUp2MM8W59dXafPVF/35ZYskBA6CMWIEYBv9f4Xe/mbPm2C/AmzZDcrdcGQCQIzCl8ghw2ZAEvPFi69dY5rme+5h82By8tERqoKSWjHUv1xcLa5yf/6sv76uZodh2ng8ffbsDb2jPX8d9gZwh126AgAIaAxycgFngbQMvFkuisd8cvDh4ekjL6Y5qOdNDDGtpb+6bFdf/3L95fUGgzw4exREE1QUBNka1T7v8D6yNwD85ugLKSFtIi6vLvyMyuYRH9bHzcGpz1xPm6Zoh81qEdrF8+Xl+bksF5PDo1CXFm3q4BjIKQPfON7ac7/YG8AdSAEmAlRBzHDCWF5duod0MDsrpg8Oq8nZtKmxGrr8dPXyxUW3vDwPF5cEG6tpk+EJUQYQExIEsAyhcean32AEe//3zfLeG8Dd8WcAUBJYYmjKSLG3H/DpwePZ8fePq2bumGUd236RN5fPuquLy7haukkzsGGIIyQN27AC7cMLbwnvtwHQuO8Hxvx9EoFThlcCotoS1cEnRw8eTWw1VYNwk9ary255/bJf3jwNl4vj09MMZ8ZZXBSqo+dgoFAZawRI91Ge+8z7bQDYZmTq+OOygUnZenB54A7Lk8nBR5VzsyChW6zWF5fdzYtn8WoToOns0SPpYg9NGUwEAwaDYLZFMMDe7X0beG8NgGjclU/rCp4NeADamxt7Yo6mp/7g0UExqRg0ySz9s+X5zct++fwmdxvX1MkZYLnZAFCsV6vxD97upW6Pjm+f5xsPeJ29D/BGeW8NABiHqmdDeRN0s97Yh/5kdlIePT6000lNZTFI33919fzllWwuL/Nq5atGEn/j6Er/igG+517zzhrAN33Qb63sUpDtQd26dQc0PZ4UzZTZGXjn+yjpemhvLvv15Uu9WVXlRGAN8I09/avh/5u83r1h3GfeWQP460BgXSyu3FlxfFQXdc3G2jYMwXq/yVnTeXdzeaP9xleNwBqEnGB4W9i+553gnTaA1+fk0SXVbzzCw/mycBUbsqt+fSFJgcpozClcYNFT4ZNYgSCDefsX9fU/vreHt5d32gDusjuPpTvpDqpkq7L07Ey+urm+7GXoC9+462GxyqLrCGlhGCL6KjP0TvK+0H7wv+28kwbw7aprW4mS134n1lSOzheX1512nSNvAw1NzHm96dabo+MTuWqXY3x/GyoFxvi+0P4U913g3TmvvJNyQ8CYa3/HYaVtTv/tWx4Pa9kJrEBSUzXSD0PpvG9Sjhvrfa8AhhQBbA/Ktk8hALIZ/0xqw294Qbsw6F/+svdG9GZ5a1eAbw0+bqurtiILIAXKsuRRoCGLgkCWR72FMTFfQgwBAKImZMqBKMuQUxIhxBBBxmxPeen2eV/f+vzlI3g/wO83b+0KcNcAdodatL0+6g0qnLFuVtVOFRpjHJQgQmMcX1UhBOScAQVYZVR4sxYhJuhWloQMgQSvHXSJyjZ1emtIsh/lbytv7QrwTXaD/9bZBdixsZVaJzFGicllEq7JayL0gV8ZDwCQbKNEWbfO7qjWpoIxr3+n5bl7wlee9Hf1Fvf8PfDWG8DtAdedCCWgsMYaUqUYQirI0GE5bYyzfrlZ3zB0rMNl2pa9AEAGRFlUxm2OigAElVHUChgDqfvh/m7xTuVrvRqcxAAhSY69pG4RNwLLfkgpREYKBshM0K1TrONOhonIEMgCZFTBRK9t9vfVu+8gb70PALob1RmvqwhoLOuVSVEjxYELWN8jBWcLSaxQJqQs0JQhmsnBWmayogqRnJJKZGMgKhDZD/13lbd6C7RzfJV2IcpReJbZgFVlVG02YColE/VGGYIxOmQygTKgRJbJs7HWZcmqkmNSSd57ZJH9tP+O89YawNZP/dbiK95q+Nzu8I1BkAwQjW9YAJUMz9aR4coYNjkJMnIQ1eys07d4cdzzN+DeG4Ax44nTbXSH6bUtSVUUt7F5KIGU4cki950tyNkwpJAYomZcL3IWkCiY4Cxz6ayzIDKRhl5UAojFOAPZhjiV7j479l7wO8Zb5wSrKohonOVxxzCUQcqAKELf2VN3eHzaHD1ioB7/I43RHAUMsfPGe2csM7GVnLOIhEyayNC26wuDmPcLwTvOvV8BduidKwRCzpksjAE5EpVslIWUYNmCkZvDyfxIkAUAlEbfAKQgwDKxZTZQkEJVlJCSSnbOK3atjLaNLJgYwq9CoXveLd4CA3i95ISIkVOikr0zbArLLo0CPONa0A8dauNl0a836355lVl7goJFwYAhUEGioikLWWOUkGMIAwF5p9Gpd2Z93Z0Z7HknufcGcHcHQjrOzBZsCmsLEWIWSaQqCoEyEDlhpWEz9OuoQBBjhURhY7ZHzXyqQr4f+lYFA4NcSinmLJkNqd52dXz1vKQE0n0Pr3eVe28Au6Q2bPtqEQCBSswpq2JgMYl1nKkFgPUGIBYoesKY6+OJ4UDOEU/EMfquX3oqNIaQk6TYa2+YHEOR1JCAeXs4th/07zr33gB24U66zTtTCESChJ6UxEQPYHSKiQBr3ThwWcf6XU0gViQSWodOlXmToOqZMUgvAOGsOfbZqt+kYRNVeqU7kuU77aD9ecA7yb03gFf59FutHd6e8UKFxcAIQKKVBRmBtAkkyYyDdpfEmUjRqwx92FwoKNamIGPZVLEqjWE1bN2mW3VBQlDLYMPf2PfvV4J3lXtvAKPA7Miuomt3yyhAFO0Jpkc1O7uWzm6A5WBUhBWZCM3hCUgVZp6zFcqeHFhgr29ufEllYY0xKcU25tSPjsTY60tJITI6wLTv4/vOcu8NAPxaSOa23JGUYUA40Lp5cvjgcW29/eLiWdfqMEZuaBs3UhqvK0EApJDQLtZ+aicHVVWakINs+k20zqQkr+RNxhXg7s+ed5F7bwCv6U7dkTFkBSzUTo2fz8pqDgCZBJGzZAMQBAZbwVshKDEgY/6PFcONLwsIrKR8kVV6qBm3PgSIvFp1mMZeYHveTe69AeCOFAnJ6BOwjjk+FlQS4Jbt8kXMSZfSxrQtCLPbZr42A6CxU7tRwmL10p66w3JS1D7mhDZ22ZBJnSSQ4W1u0bZ7L7AveHnHuf8GcMuv5yQoYPy8ts9Xl1dB82qNbg34cYWgbRtrBaAMUuDy8tw+wGT6wez4rCjL+fni+ipLjsoGIIFsm9btB/37w/03AP3GJV61MkpKet2vNl3s1tlgWZSVRuTx1HdbHum9QxwUjhwOaF4+Kg4fHbjpaZtiDkO4GXLsxSjABtsisD3vEffeAPhOEe4u8U0JyJQxaN581d4EC41QUKOFMzkno5Axh4fRblpUfoLzF+f2iTktHzen85mvZjEsLlJOIUFSQkbW0YdgeRU+3a8E7z733gDoW67f2gSbPDuYZRZCXG1K74pmiLklokjKUKHkKgckRQ1XHhfz4wkVVUWFdbx1ekUQVUelBxn9h91BmKqONcF7Q3hneeMGYO34EsYgz92BNg73sizHW3fyc4QAgEFKABjr1co+bI7nBlpoyZm8IVWB5ozSuvTi/Gv7EMflA98cHJezeTd0iMOQck4SkbeDX28Pz6B3DGA/+N9p3rgB7KC/5NaOVynRDGy1gApTQNGXU1vWhXWTsLreGFNYMcoy9JHBaFDaj2YPzkq1zdB2LKz9OnSLVkIeEJB3OdB6p6H1fuC/F7zxgpi/bJjt9vsAkLd6nEL0Wl+vNATUrjKHvj4sEzmbxOQYhyApDshqnQODrBEyk6Kq6qq2gfP6xWax2SCEBEJWRVaF7Gf99443bgCv5vrXBx1v4/ZG6FaXE689dhSw2mwWtjTWVd6bvt+sCTJITjmkOKhK+uLzz+yBn5QTW05KtjUgaPs2B8R2Mp8FV5T7yM97zL0wgG/u/Y0SkBO5rM7E7AyUbAYMCKQCSzSqNYMwN820du6oi11ahe7qIi37TRrYqEohhArGzt3kuGFX1dYbAwJJzo7HeI8xr6rq9/P++8cbN4Bxy3En40YVUIWDsY2vZvN6OvFiTB6Cz130PChXpgBEABGoSDTWYh2Hzcu86I0rBnImxRhkaDuUKApH1ktWG1IYyGgSiBCrdfbeuEB73hD3ZATs5l66k35GqkzSh6ApZFTwftZMmna96amLC+ZRp7+XRBsJfRxCGwm9KRxgWCgCWZMt/NSRNdxrblc5OBHy69C1Q46JyMIQ76f+95g3bgC7NGPdZXpu5QgTcu7isHLGAprzhOpibidzYzVfhmtryyplq9wNQ7rp200Yho0vmtSnDMMKSwRL3jrrZjBUDil3G40+Zumuw+Zqg37wUuxexJ73lDdrADRWeI26/ltDkO19UCSIWIaqZFcYLzWKiXXAKm56YdMKix0Q08vuemXJJhoSwIDJgLBBZWzRlFUVhhBW0C4msY4995baWXHct5qw3qzf6Eew583y5gzgjuNJd8KOO5/AsCHD1lkxUWCltkU9LZpZtN5MuvV5ZyABfarqmWTJ0CRQERhVGGEYvGqL1+ehS6SBbdFGja6jxJEBYd5P/u85b3wLtGO7EIxN7FSRJKlVirBWaxRV5Yr51kHOtK3/BVhC6kZl85yYAcugZKFSKOAAyiIha950oSMxbK1zGCQiMUHNm37Xe940b84AbpVtt51YbssOCUyAgrcpORnsnE1G08X65ld9GPK1rDJygYw0Fsawsc75xhBzaDcdQL2oQg3FTegCYGigtBw2Mczns8OAnNQ4jHKJe95n7sUKQHf2Q7u4LBOgRBBDWKch2rxZ9H2/iTmlNULw7KEK+KzwpNY7MwETguEuAcikGCT0N113deAnfjo50L7rJWqO1lsE3qc+73nTBvAq+vnqrjsSKKOiA5Dy0KbuJuSsyXgrhksYxzDqkRGhKkgpJWH0AiTZtXKnnE/m887D5SAhrYeV8YWBaABgx/z/Pe8192IF2KEY9/8MgLfCtEoCUzjxvgiqDPCYs5OjwjKjlwSFBgrhOkOTs17GXKEMgDBISlmzlKaUoiwqlQxJUZB0n+6/580ZwN1a913y2a7fl2C7FWICsYG3FlmFDGBEkHNMpFAbFKlsGskpCzQHEkHeOtKyLaDPBhARYWT0MmQPGmJOSoluzx72dvD+cu92wbc+gCE4a2GdR2EcOLMzyl5UExQlQG7IsXfTYp0B0LYpNjtG1/fwZYEQAoauGxtnC8EJsRN4qIbEKomBLoa9AbzHvPFcoG9ymwqx00QURY6ZC1hfwlY+wlZC1aGv6prYkI7bJBDAAGkW9tbCEKEs/NjVXQmRgEAqEdpnqGTd5/zvuWc+AHC3Bn5UaHOwKGDtQTmZaBesIcLxwdGZIhcaw2JDeus4M2CcOgdCHLqQlACnBkKKpIQ0KmrBEgOQ8Tne4Hvd8+a5dwawg3b/RgkIo6qkgmRB1hMVm5SHTVhmLRuo5lHLZyuHQhnSL1ZWoM4ZF6NBAo1DXmjrHu9H/h7cSwMYBz4EoExQVoSU02oYWpYcE8RxXL9chW7VUuo9ZyhG5xfEOeUsJkEm5Kd1NSmv+02vkheRZBTVIgLJ600w9ry/3AsD2EV/iADoTplZkSUiBLVG2C83q84azkbSsFy0YYMhsLUytj/aze6qOWVtN2v7yByVlS0P1tK+SAD82AIG7lVfeMi984D2fNe8cQMgHkfhTvQWRGMXGGIYIjSmbJppM0kxr2F0kSkBlnqXLcAC1QQwQWGgIBS+gt+genh4+sAQ1y+WVy/yrdwDl2Yb+AyWeqXxvEGgox7KnveONz4HEkbN//GHt90fxzpgp4wSxh/4amaTsoQMYSAbAiyhKCvobnDL2M4oxoh6MrEA15uu7TG2B4AHsQesB+YWbG/3QES3K9Ce9483sgIwMcBjB0aFjLt+euX4GjK2JMNWwHXmfGybiXEyvYrr1UBI6hmcxrrgNAi23U8RYoBxDdZDi6WrFsvN6qrj1J3Ojxwn0LBqJ9NmUi2GdXSVQUsRsc9AHlV392HR9483vwXCOPMTdgbAsACXxhdexE7EucfF4YODprS8yIuX0i1SBjli8/z5OZe24T4NoawbAREpgTqk+HJzs9jIalPPJrCF53ZzVR0Uk9Kp8UahO6UJBiHzeCq8j4m+f7x5A9iK2BIRSA0MMRwxzeykqTi5sziRB6jnakvX5sXPBwEi4KyKO/PTqaHSUOLlEGSF0iNAbaAwxBSuAAnT2iNJNkyYHFTTuWSxrHhhBCAzbr9yHp9/3wXm/ePN+QC7hM3tHpyZYQ2DiJBFQCKZQMYQeEKlmXPdKAZetJclZUVlnKupNCfN0eHDydkspmg9G2jOiYEI1r6eVzLkKOuuk0Zrql0xn/rSezCgensWIHsxrPeWN2IAtzPtVgIFAERlbGFEQITGLsc2qK4HKDYptNkASQUpq8IYUnaUswRPpjismuMGvkIX1AUpyoSpxIFjN4CYYZxJOUtPglRaxyUsjGA8ERbaqeG+iY9izxvmjUeBgF0R/BjLBwB2LJs0DF2UYS05ftVevbxK7Q1LKdN6FtmwSTmbTRrai+X1s4vl5dK7Am1c27kt6sNyOptwM7VcQJnA1uomd9oNXXDENHFVvYkra5jHtGuR/f7/PeWN+wA7MazRCU0ADIQYa6QcNLQ9+qG9GT773skHD264RyIYT1QX3rvDw4PV0+vnFwrLAUiH5cGs4fIESnkt/UJhATVIEFhLfUyptWQPJ1VzyAmLnPM6i7w++9M3X9yed5k3qgqhhG1XljHrc5sEgagZxrEaLrMw52dxeU1Lx530IZNSyAleLcQSiqYJbRzgrcGmXcbDynVhCJuA2Be2AiRDRNEjpXUON73EMwWaErVbpgxAAWsBSfvDsPeQN2IAqgrNY+dFYgZBb8ceYdyOCBOIGGCLAX13HhbnCkQIJIduTZR9H/tMlmCshTEG3dBvrtMy9uhDMZ0LvPCwaUFRpSnqvoMOvdHOT2vnQg3mAdL1eL3/0nf/eex5c7z5LZDImM58e8+2T28CiOJWOIIAYyCakVQkpT5ECTFLFlt6UD/AGYtiPhNS6m0kiBUgJy6Ns9ZY7cIQhtgND6rZyls/F1If+8FqTmksJGAo9u1Q3zfuhRMMfRUQeqXPryARODAqFFVT1EfWmUqZIEQSSLMSq4SE2A+2X6zKm8WSYxLYbYoEqbJTKixRoZJN0tRfbBaXnfZDWfi5BUoCYLa18UTmzs8+PeJ94H4YwLfAIBgwOAEWbD3bisFOVRFJEKBIDBjDOKsPZk+aB2dnNDtctWub4rhqMFgkZhv7oWGhqi7qdBWv217T2jqyVV16DzMW4e+3Pu8l99IAbjNDt9I92/k4s2gec59HZWgFkLMCGTr306PH84dnJ/6kSX0CMyPGlDVBa1MXkrJRATYau6dXL561Ma5FRNmQHZ9TwLusul2jpP0i8M5zLw0A2GaIEo09AFTzNmnakDKYGAyCqhKIzHV7IxxYjv38rNFiYrNaVgIbVmMtGl8Vh8W0iSnYw+Y43aDtlsP6Oo1/1hIBMDQm6G3PBoh1K9W4t4J3mftnAMRj9EcNlEfnF4aZrXHW2opELWWBA1AQe2ttUZhKhk13VavDAz9/WIAqJIEzBn3sAmXRs9nh/NBPD643S1uX03Q5LDeL0K2ipgAzRqPGlGzAMMBkxgKdu+0p97xz3A8DuE3Nf6ULlJHHsvXtjOyct0VZmNL5mSOGVYZmQeF9fTg7tF3u2nXfLsrKawHHwFgI0FLsr9r1lULVWnPgnSvZO0wnB1LWRTCOhZhADNA2F2knvktg7BeAd5s3LI++zcHRu2WRr/QSiRhsGDnkmCUmx2ZSGLtmEEQzlFmWN6tcseU1hb5ffvF1oFz2nIcuRsSksL5KF0N3Ey6fo6p8EUWQ2h7EApCCrUWWfNuYg81WVF0SQIJxl7SXUHxXeaPnALsSyFc3xiuEsWjGMEEhiIj96mZx4b2fG8OqBPQ5gR2noYutcezBiDe6vswgF4GQkKHEyIZA3qT1MFzFQbwYhF0x2FaLGmZbDEPby7H/NoHzq5ZNe95N3ng69Cto2ylmtAXLBqQwpDCzolELoyVbeCW/3qxsMW0QiTRqDpvYD9GCOxXtSPpoILptpA1VkCGQc9Jq6HWsnYdgVJ/Wrc9ht/3CyPC2NNOMvgiA/T7o3eWNa4Pe3thuiYgAFkBzhvXOeOcLFh5Sjij8QcWUs+vXZU6yhmGwsxpijCpgsVDlsYu8KEACeMOQLFBSGGdvyyeBO/6tEgybUV2OAIUgyTY9407K9p53jzeeCjHyLTOsClliKqwpTWbNEKPM8MZMPBWLfsjYRfDJsGZC1q0BQcdUCgMgho315Fyng1ZV02cZ0x1YGSwAZR3FtFihRCASZBVYYyGQsX3TtySL7k3i3eCNGcCuQczrd2zvJYJlo2MYEoYNVyvpZEghl1wax85ddwtbzaZJoOOWZfc3ZLuPFyVWUA1XNr5uTMCm7weotwAUnBWUBCRiGcYGJAtQBtQGhK6ZzJOwQYQBkL7jT2fPd8WbTYfGberb6PrqWC0mqsggtLmPJvB6UkxKYRpCThdO8oOq8DNO1BumtaqASWEywSgxACuKxMTswa4WUxwVVV2A8CIs+wGUVAGXAauGK1udVVVjF5vlAqTkjDkWbjYvN4trdkWyzNA8qlfwXS3RnSN9z7dHu5prEEG2DUGICbpP/QZwD7ZAu4lfvyHWqQxkqCSSPkOorJo+qhjNYkpXlbNiWnZdXG9PhAElkHJjiG0GEkH6whqnOZnSOm/F+H7I7ZXEldAY37eKxrKp583kMKeUldAZlaqTCA+3hjFJNMPkbYgWNLZtIkC3cuy78O1dQ7gvNTVjrfVO94huFfTG5iNjIxLN8trr3PVLyHdvfPPvbi/fBRN6s03ydr2BsR1c244VqmP9r2NGZuSg0rrCSegzEjKaunQlO9xsFtaWNllvQYEQ+l6P6tk0prgIOqDwJYduQ4ub5erx9NFZjzxdyE1XNlVKXcSSNr3NbpOzzOuqPO6H4Tyk+DRJBpjiqCXKMMy3YqLK4yUbc1vCCSh4OyxIXxfeDTn+vQ6Uo9OT8fXs6il2T8ajR/+jf/APoCootq8wQyEisLBwYPgEQAS//7P/tfzHv/WPeiMCOGBjFZEJv/rFL7dfE4OUwAAkZ+SUkXJG2/eQnJFygoi8dUbxxleAHbcz6PYixwyoQFRVHeWcBCEMUoGGWTOZVtYds2rvXbEOKmA2qKpZAih7Y3i1aumwagbnG2OTsxVX1ZOD5km7zF0Qvk6lgWNDQ4zry/XN81ndzIYYUpv7DmzTdlMGYgCq3hlrsuQsROH26IJedbZ8raaGdqvadzNL/trg310nQpYMzRkJDrOyhsYMI8D/8of/P/+Ajqdn5cxeXr7EiSnST//n/79M6gb/h9/93dBKB+Lt5pToW9WEicbnfpuPCe+NAXwbPIY5wYYQQ0IX26EFFjlLU7nCzP20eb582ZeTWQIR1u06VeW09caaCt7nLvRVVaahD0gpp5ODo+PT9mb+i80Xq6Jo1Ho22TrzYn2zWIVN74wplI2D5cRqQUxwpgApmbosZn0Iy5DjuHUYfXVQ3hb0b8fH7mDlu1Cf3tUyfJvUu6Wxv4I1hAyLSTXF7//r/9lXEDykg8m/rz+afzA5fWC6NJmcfTJZpPX6L66+/PRlu1783u/9m9WPfvt3IlUGJA47AeJbdNwkffN537bZH7jHBsCWwWyRUkaHAYUrUNd1sMkFkZQM0XRe1nkVq41mXRsHTCdNSl1Abdz0qJqZm+46ZGjXa4tmffllUZTFo8PjD9cvF5vPu/ObCR9m6y0m0yn1m3WXJG+EODljQEpQEaSUMcQ+MmEZYoxCoxP5a6/3O/72d69gNwjvGpzR8fWwAD4xvCnwh//63/CcPH+ih8f/qPneD+qBZg/08ORg2pSscDdptZlNS/cX7cvnVV6fX//8xeaKN5uy9inxeI4iBMhWil6+sSi8jYMfuMcGYMiAwYAAIgoYgJyFiKQhDnniSsxs7Y/KWXPeX/WGTFIAQ+ojS4XKVUUMqXnZLTdNPV097S87s3afPaqPfvDk4OGjxeW6zzmuU8odGbJc2JQkRxjSRAoVQAWACjlY1Sxh+71vnUnctnPdMQ7G113E3+BH/p259T4MIeYEYy1STCBRGLbglFFZi2aw+Omf/FH5AzqdPsR0/hP/8HufmNOPmsJNJlL5QzvzOSdz7CbFsT+YTP3h8eFwMbmW/tlzueEvr1/0GwxDNZ0JHJAYYGtQeIO+6zHkgJTe3lLSe2sAqnobtgOAJBmQjGU/RJvpcjqvqmlRzDZDGVbiN33fb6qiYFbEHNOqqqdnNGW72uRI3gWAwotwuZyKvym9Kya+mF0My26IGsh7IUM8thwj3ekUgQjGGHLOWVUBZ42qt63ttw+54/wSQELb/feYU7Q7Qfj7miGZGQYWRARrLErD4C5iAouwXpfXf/LF9Cf0cP7D+YePT7U5fpgnJ0/c6fHE+Ektnk1kMVQatc38yKZu6GMvSA+n2pZFys3UmM3XeXH5crlaLdFjcjRPMSWo0bEug+mtjgrdOwO4/TC3g3BXIywQ+MqBYPsUtSIiWBh7VEzqvm+b83iTXcUEY0I7tDH6iXr2szk3m+ery37SVOki3HRmja9O5ofH9cHETzYy1RhWSTRlFRKCKG/DUNuSNFEVkpSgikwiojq2b929Th4lXQwRSBQs2+3Htr4s4O/PSSQAGjMcjz4SC1CxQbteeo9m/sQezL9Pjx+fmPnpIzo5+mB2dvJwcnpwxM2UVoFr9bAJQoDPmnJL0cfmQZrEsu5MOjwfpidfdOfnNWHWqP36HOvNxc3N5vjhmfSbFQSCncjwX8V9NY57ZwB32Q3+3U8mAUjQD520vg+1KVBR4Q9sc3wVbwYrHDM7IwhxGNJm3jT1sZ/Nc475uru5qZsmfb2+Wlxc36wO3GSmzJ4MW6gkMJTuHHQRBONYV2SRrNjqF/HdA7ytdAsJlMaeBqzwFjAOgAA6gPpd/P1urH2H7O74xggh/PrAom0ok6HA9rrrFciCNHR+gmIyN+w+4sfTR+X04Y+PPj49M6dHp83x8ZOTD84OmoPT6dmjw3IQwuVqKCKriaw0xBjX65UOSasAOqWy2MRgrE6L44Pm6EFavPy3i88rx+68gF08e3Z+3ZRNysijvKRlZBHkO5Z+Xwf8N7l3BvBqkPDY+G57MCAqiElG8VzSzTr2Lw51Wp/Us7JyLq1SV563N/Hs4QfGqTXxuiVWHhq20yNfp82w7knt+uDoLLEKXlxdXDmQJ1umZMaIiWw9SgaB8jiTT6ZTdH0PLi2SCsiY8RQ1j4pyMSTAGOScoUTIFPm0PpzRJpiAsIlsROGSQNAj4oOHjyTHAFLAWIPq4ACZeexxBgKrwihgRUAK/O7v/i4UBM4KzgzPHiyAsw7/z//i/+GfNA8njRp3fDybnlbz0xMzmZ7YaROvV0dH04Oj07NHhycPHz04e/T4rDw6nvmEwoYU5VGVq2wNXcsQnl7chFXoRPIwr5tpqVX90LIJrHgRVzdQ27Z1nk50YcrsJzYTlm64/nd/5/+U/uDPfh9JAlIUSBY457fh4dF8z1++3H6fr3+/94V7ZwB30TE3Yts3WJCywhmHejZLm/XQr/quPbRN6ciWjw8enMqS8vNnXw0/+d5vleerG1yvFqt55XFQTppFWDfXbdtXVZFCSDg7PJWc0V/367FfGEZ5xl2GKCnAqghdD+8sNkOEq0ronQ3NuNWhMd5vGKLAEFPqQh8/OjqdxlVXzxQdjAmb3OeNtO3y+YuUIFLA+dn8oLd5DKfsDtJYCEYFVhhWgP/mP/8vvQEnCwMP9jNMmwreOpD5h3hY/3j6g9OS3HRWVM1JPZsf+klDMU8efvDD42oyOTj+4cePi8PppJrNG194a0KisqwaiFqsQteG5zlPYfKhr+zAxVkzIWu91y7Ixc3Vctl1q0Opp4/5IFo1a2k7BaYnR/Yw/+Ef/P5SjSShsfkgGzd+X3fqLe4799YAMvL2dFggAmDbSyynjCEL1tpvmq64elAeThrjzdw3R3lyklPKLwo19MnpJ+ZXT385UBcvz+rq5KyZH+sm5fPLFzfz6VFKCgw5QoiRobcblLE1q0JVrCjsstukw/IkFUwYwgDnim1XegagsKTIUGQznmS7qk6X3XrZdKV5NDt+1KTqxCrrkIa4GTYXS20HSx4D5bRcrOj6+jre0aEAAzDbtc+D3PeKD+sSvqjhqISdfDQ5PSoTTyryzrGtf/Dgx3Nhnmy69byclX4yn9fHZ0fHx48eHVeTyaQ+PJlZ77wtrDGGrS8LByHFzaaLq4H0yLPydOKPy6JUa0wxdTyopi+fL+iGxMDQxFbVA03zAmxNGdyRn9Y/XT4rH1aHXz8fLs/FGoAJYl4/E/muDgL/LtxbA6BtLr7ilXY/8VYlAgalrdMmDetstWdLsyo7c+jq6QLl6i8+/9nN9x//0Pzgo+/bZ0+/kIiok7KaAkdAZ3GxvLmZ1ofJWQ+N8bYWQXf/xoxSS4J5ZYr++vpiM22maVrWSJIgylDd7uq3uUFMhAzAeQckTs/762tKzD8+mH8woaqeoWkO/LT+kNkKS2pzHDaxv15vNp2QgHXb5xgEO1Ynw4ObH09/cFAbO69s6Uvjq6ktZ4f1pK7YVYdHR42b15UpisJNy6Y4mk2LB0ezsnJ105SVK4qyML4whTO2LhyXzkKBvN702WbDJ01hCgt3Mps4Loj8xOK6S/j8xaLbrDYaY1cKE8FZcDWjnK2dPihNvvYPXNudX39GznClhXSmtBBj0MkAYQGgY4/ne869NYDXoDEmz1CQAIJEXJTcx9B9df3s6+rkI1uTnU5MVZ7Nj86WV+v09bOn6ycfPKkjZ7parm5K40xVldMzcsgrRbvuls3sINvQajbyKpyhQIaAlBOA5czXh3VwdtiE0K6HbjKbpiACU5WIOWJAhKrAKsMpYDKBnIWiThehvdxc/nzxYfHg7EEze1CwKSau4ML6GQATYzzgxiIMQ7SJuLaVLclZHdQWxpmqrMoHpwdHtrRNPWsq29RF2TTWeFfVB9PSTMvGF4Uri6osqqrxZVEUlsuiqopqUpem8AaGLRVsuLAWjgERZdd4lNbkTcj+ZFoxnEFQYBkCnq+v1ufPVu1yOZgh8Ymtp4F00qgZvJiCTHdzkfvWJN9XqDTk4GMb0LY92WnZmsYiUwDekmLSe2sAu3347YHPrtBFBZYMC6vjkuLT9Py6Wlj7o4MPv1eorR8enKEqmw8//frzrz776tPV8fyBvVi/5DqVL+DM8cQ30x8cPTEvb6799WoZVdPSZhriNvSZedyGCGliZaSQ+oN6NidVt1ytF5vVTSugbgJOMIyYtyp0irHx2DYhLFsFiMT5Kjxdff38Zf98cUQze1zNmwM/eVwaX5MQKmftrJgczuuymJh6euBnVWPr8mAyb5pJXRTHE6+e3MDiUVnrmpJt6X3VNKUprS/quqhK1xTOl86ZwpZF6YrC+qoaB7xTqwYMg/GAwhCBuCBTqiudkHWMqFkuN0HWN+vQXrfBqlRnh1M308Zmh67d9NTRugs5+X7gafD6oTk+Yk92xavhpdysnsfV1fnqJtbVNBIzlOIbGzt/E+6tAQDb2gCRbU57RlbAgRA0C7JGwyofPniYz88v27Ni1j5ozuo8iDly06l/+MOPfv788y9e3FzclAdTuVotZ6HVq8qUxYSK+nF1PJnLdEPdc1zIzTWyMhcuJGDbqYYA1bSK3aYeCn9cT5r5QXWqotK23SIO0t7kVeq17QjWWlv2xjGCpDERkwFDCtcYVzVzhehmnXP66vrT1bRrFg15yzA8cfXkwDcPT+x0Os1FK1U8tBNyoBkTwCFEAzJcljUzjCmCcw5kG6AqlStGNk7IUAHD5LksHLi0BgUxHBgGRlnHsO62uHl02gEwiIwqQtAU2r7LbahmtTn4UXmIVoQ3OelFm7qnwwV6SqVaOjPTxltrz9zh7AfTU/sc14tfdF9/Paxy9yJfLvOQYWuGvCUZcvfXAG7j/zI2sVMe9+dZwGxUNOcERS6AS1qvzvvlOYszB8X80Il1E1Pj45OPnuj6a75aLjZrWS4bU1Qp5lDNmsnce9B6wR9MT7SMnheh7S+HhRS2Snm3/BDhYH6Yu3Vol6vN1YPZ4cOmrJuZq6fOO/Qphec3ly+C5nZIoR5SimaM+iRnCI5ZTdbEln3QxG3opJxOgnVlSEKQIeHLzaeLeT9dHKA2Jdg8WBzNH03PPnnQXZ3Wrp6czo5OJ3XTTCeTYjppanFGbV0anzlTTjkGSjkV2VMFV3lrxiYLus2JAKze8aW2Ma5dIh8Y0KQZKWlB1h5OJr52DXpWbFLGRddhES7YObHGutoW1ZSb6riauVWM4ZraLocQrlKlR7maP8ThZrEZbqy1koxFegvyRO+tAWQd1aE1bw+ltgloRoAsAuVxm9QOGQ8ff5L+4unTl10X9B8cVfXMWsfEVc0ej4vDJ4dFFQ676unLcL1YZv+idrWdWp5Vpijmk9nRSTyYXXWL63lXnz9N54uKJ/Z7P/p+bwqL65sFmocFnn/+K+H1+srMvFZc+EZ9OWF1x4f1DwHpc0wuQtovFhfnWXXQqBCI9F2vV7Rp/+lv/buplU5s4fFv/+QPSwPCEr383/+z/yyI4GpYDnRQzMx/8z/8i/Xj9npZ9Z8VH7izw++3H/342M+PplVZlETu8Ohwdvrg+JE4MkVdazAAZTUzdbZkzWINqQpYdTzWyxiLnqFEdwwb2JbIKJGpvUfhXXFkPJYiWOcBXy/b0G261LfR+9JOp7M51UJWkNphCCpkBhnaiZT+kT+Za2OKucybP+1+9ell2tz8zr/zf0yDTVj83u+99r1+s4JuGIbvYDT9Zu6tAQDbfKDd8eKuIGV39L5LwzeEHoqD0w/C8uWmW6ZNW9qi8GwwdVVVEKpkpl3N1nLUz9e62VzdXL3gCfFBMTmwg/BUXFH6g9OZKaezrnj6Ilwvf/Xnf56+/+OfpEGGbNUMT77/Q/PZz3+eusthPfeTYsru6MHscOKVfAk3964BVOvppJ4SmWxBDGJukbpnNy+eXfzsy06258GPMANZxilP83/7X/2L9X/6z//TUJQVMZT/b//s/xqoS5czW9n/1//3Xy590L6j2VGtrmaVfHJzfCxOqDydOGiMyTtXeDexTeNdMy2ZrYGjUdclCcTxmJl0t3ZhG72i3UfJiqQgMWqNR07DWofVTRtDm8um8M5652unCCKyats4hJ4lJ6sGDXxxzNPHZHTNSnlJ685rHb0Wiz7vwsX3dyW41wYA3Jkx8qvqMQAgHRUgVATZCoqqxLl+tWoW/qvCeHvMs6OKHUqukTRWpji0ZmaenK8uvo6ahrbfLEvD5cyUTWUMmJ2dGGcOXPnkeGiG5+vrLz//9M+vTz74MGXJ4SLeyNH3PkTqYvqL8y/NI3e07to8mas/O7B1c+RcXcLhUVFPCirKqXq2bIsuxe4H8+PDtttIMSm5Sz3YGwk5IHNuX1ydf/XsX/1R2+VOPQpbsiNAqUKBT3BM88x0bKuTw/ns0JbWffDRx83R8XERWAcr8BPblE3THEzr6cyVlcO43QdSFiFRWGdul0/Qts5nNIKxZoYVAiaVzFBiaMwxdBkhmqlzZV043kjWZRdk0fd5Q1lVcsiyFpU8sZUlmEnBxlqxeYMhLZaf3/zZ//rH3ZPf+UnYFQbt+LYS0jfJvTeAv5RtOkEWwUZ6PHz4JH357POLyaqkQhXWNEc+WbbK3JgCXB6eNa6aXm8W14tu9fJlaL+sDh4/bKrmwIGczepKcFU601VNgWLj/OblZn0+XGzOHj+JCRkoDR5/8v1Uqll8+sWnm4m4y4c4OA4TeXBkZrMj450VsrVaP0HZkJvMTWVBc4ISFSDp2n6TqDDISHF1ePJBSCH4whs2xqgoJIONMWCQmRfT4ujg6KCeTCZKWvh55XqKZdElyoV6LzSxApZhSGGhbCc1NAqRJYZnRhKCG3f8RDuVl22IkgBWAo06BEqCkHNI4uH8YT0vGhZeSxTuu7BJmhFUNfCgYkSFSNQ2xqOA4dpYZeLjbppxQevVAucLkxFYsU3zuJ+83QaAUcVZAAiPDcQeP/heePr82UvpN/jJyfeqWXUyd9lAAV8jYaPW1rW3M1fbZb++PF9cLETUnDTTI28KWCVbZ5lOXGXPDmb1+eZFe+bL86dfX7XXPKxOP/goqWN0IeLk4QeptEX62Re/OL9ZDe0xraYfNKePHpuZHBb1Q0PGWLLes2dnrDVEhhXFg3JqiaBFUdhN1Uc1ADsmYlAyzMpKYg0RM02mU2O8cxnZuaLwvqm8r4upLVxla9/AGafWmEgS+3aTOAZ2hXW2cs7AOi6slSTKlnf1neMHp0xQQEWIBMLgBFbipigbd+BwmAQdonxx1YY2xdjAllRXqqCQYttQ1bjBJqMgIqbEMq+1XEWw/OzqC582Hf4///p/NOxY81Zi7A0Ok9/I22sAqgCZ2x7DY7oyoUc2Zx88xuWXXw/Xw03XUNXMqLEFO++pQEkudKZvSuPctGjqTRx6JgoSJVZlXdmoNkvGFP4wazo6qYvQcjh4UB6vng6L86+evlxco918/ODjFJQQc8SHjz9JhZjrP3/26Wq9DKsXuJgNVbd5WBwczF09q1JZTXxtJ76sK9iyJFdUrvRwHmR9gnNK3jB5MuKI1YK1cBYeZJq6soVnLm1RTZqmnDal91xZx9ZYNuJIBpK4iW2WlGKphTVUzbksvGFrxsRsjM2YVW6r2ZSUtl05RZlACo9tQby6QskbVeqJTqpUOIty1pRY69C1TwWToiycM8UgtiGrErK2odt0MZV1tvmUG/oIR/MbWqZOqUvfIi15X/ouvIUGQK9djioMY2YmEYMcm3Uaihu7Gb5uL78s4I31OC55bmoUJks2lfIwGOd7hKNZ6UPOOXqyFSeFEYOSisnEN7VTkMkSgs3zE99uHvD84Pv16fL58vLZ9fNlGxDiC1lsHj/6JGUWPHr4cQoi13/84qvNV8PFiyfDycMPp6cPJ1pOT/igPLUH82rQ6Uyr7rCc1KWWnrzLgDIMezhj5bAqufKFnZfOlJ6dR8XeWlO60lWFp4LdwCKDEcmc45CHXkUVourJ+prr2jrnjLUMZiCLkAgJb/M1rCUQmJh0PA8wDNWtwgXDECkgJJY0C1vjplOai+Cy73E5CGbemFBXUG6KbLjsKQ+LTdAQOkkaGvL14+rwwxVvzKpfyKe6iAPRrS9ARNtqOr0Xa8JbaADfgu5OjTMSq1ZNaR4//iT/8stPL82axU0tKlO5iasOK3VE2ZaV2DCwjYmT5cowFCIhJxKGVe5Ngp365rBhe2yNGQ6kmx2YZXMtm/60rg8HTuFlv2wf5PXXL58vNx1CutBF9/HDH4aPH34cSlj8yflPv9qs+oUDm8lmMvlw/uCDKqKZZeeOh1kxKSaHBHalK3xVVU1R+r4OTbS1D9xNKm1cyXXRwqpH5TUXNoXaIiH16gjBCbJla8mi4bpqTNXUrmw8e0dggkC0CwJDBMuAZQsWhhkrmEnHdUBGDwFsDEZpvbEpD3njyRVCmnrltfTDQkJjTOlmU82GXXbKL7uON10LRZ/7mCeNtx80Jw+yF3ODTfq6W/WD0sWYHQTkbTER5b9mJc3fM2+hAeyiQWP68mef/xLAOLmpKBjIls2GoHCg9Jm+uJKlklXLpRr7sDg+PLBN6bKiT92wwHoIIYcYIheurAJJdOylTaEzid1BeeyrbCe1LZs56vogt8ve5qrNvXxQD/3ahqPruI7X/Wq9DOvnNy/bdVaV3qx1xtP1b/32b1+RNfiffv/3us8WlxczKstKCdVAk48nH3404XltN8YWC1NMrZ9+3J4dVNbPq3rdWme9zqasRlkLSzxxXpDQci+uriRZKefHZ3XpbDWrrJlaYhtzlr7rZIhWDJQKa9TAUGkNV86QY0UepSPBrJK24qhj1ylIzMrGEmejMoSEzWqIN+0wLFZtzCEfPDmdaGKTQxa5Hlp5EXS1WfXdeh1q59mSuhM/c4GzfqKrmz/uPrNdCohmlKrPu2nf8H0Y/2+jAXw7sj0gEIUEyUIECAi/9cMf9b/69BeXWBNYmR05row7LMiXNVdkjCmCxF6dEohtIu3bPLQOVmOOm3W3igI/ratmUsDbMqe6MmwPi4kOGqtU6HwdW+mLvl+F9uEqtEO2ZC7bxc0a/dPP/uCP1msaMEGRb7BY/+N/8u+tHDH+xz/4l4thkxdWCsPCZGBsQ645766eNLBN5TwbY0plclVdV6fHRwd1VTdV5a31hcluY5qmMT70qCoLX3eBCm03PAziiKi0zJU1RVNXpvKFKYlJCQg7NWASaB5lEhXMgBARkS8IqqJD1NCHdliug1dKxXzi6mZSwlaWo2a6bgOthn4duqCaYIiosd4byuVgq+jz2ucoxsMYByIh0kw7LaX70proHTCAXWOL29t3ppUMQiDgg+//g/6zzz49z+2XOqQgoRq6j4qTBwdcNxOeKiRP2apnUMHeDDft6uZah8E5H4Iid3mz2HSpc8ZUCpA1jIJdUSgXTMSH1ibh2UxMOgwmgK11ndm0l931w9Y/GFrOcpXa1Yvu5ouvf/9P20gZT3AmhizIEFqO6TlWNwHp4ldxdWkUxgdmUoVna+fdZHK2nj85K+dzH+CP3Kw6nZxM/bE89se24Uq7UPYSKxtpWphYGHB2ZNQXri6tI6oAJk0qSFmQs4pCBFDTeAdLBGIiJspDVFLVMIR1G3qxTeHBrjS2ApMxSKS47CJlGTD0IYR1Lp2hcjo7IsNykzfD0C/WX2/Oz79cf/3zRGizYd3VUTO9Ohb7Nj2j75q33gCAV4cqrxkCRmMYAIgRPP7RD9Iv/+IXF6uwXC3D5mRo0k++P/3gozP4aUHWsmQtYaUy5VFV+9p0q8t1GnrnnLJigMqQwZGZrEg2OSU4QolOUbnSUszG2qqJ2nNlSmubg9PWH51taAgbDv1V6EI8oo8uNqtenMl96LIoxJZeLrrF5vPN1ReXumoL9uMbEIFC0GtI0l4N3A5fCdqbCZwjEx2u4pkd9GBaVoOxbMVTjCnnNCRW48mD63JsAesBMHJGjENIKecUUrRk2JWFRZENiLciohBjjMIYKq2dOOeEi2pcOYSACGA1BHR9zIvlJlwvAjSTq3xt2eUu5bzsuvZFWC2+6i5+8Ut6dhkKbMTQeBZH+kqsF9+NeNhfxTthAN8GYYyUshm3R5kTPvrR90ORXPjDX/5yWLV9G1hzqh48OUYzOS2mvl9uutp6O/d1Wfv64WboumVsN1zaMsXUC1SSCiUFNCIIsda2cBwUEDaGrKsnB4W31jdFVR5bnfd5CGsJ3amGYYN0/PEhp5RTTjmJiEifYmrdyfCD5oOPouRYmRIpReSUEFMgIsAba2v2VLIrGi5KZ5yfHcyPDh+ePbJnsypOC6KajZSWzKRwpiqaejqpq6qq2FiTUpZ+NfRBYhxiCCyIja9mvvSOFEpEBNGxgoWJkIVADNM0BsYyhiSIAiQecLXcDFc3awpRfF2zP0GVF3FoU9Rlt1ktTbr+VXv+4hf5+c1P/vE/Wf53f/ZvUjS0lYv89pX6TfLOGsCIIlPGmJ9O41GnDDj5+KPw9IvzhSz/7KdDHsIH9vB0nTcnj6ZH9TL3Xd0jqpL3zpuZgRcoBRrKKNIbghkHEXGWmGM/Nu4g5qhZGawh5VQykzr2hbG+KISQMxmFHeDZAhidUIVgLIjXVqKGFLkwDqQEYwgZ4sgZa5i4sI7ZkPOFM2qtLed1aeeTAlPPsbKEyjr2zrrSVaZwFRXGi1EKmvMQhq6X2G9S2xEhl/AFEWE8esPudGycM0SJSDNUGaKqCBlBYrxY9u3FsisTpxyzVt4Z8lpSWcniZqBFv1w+H25e/tHys1/9PJ1/+rUubj4uP0yDFYk8qtSBdpqlb3BIfIN31gDGPBdATIaQgmAhyqhKiySRZ0+O888/+9XluuuvTnRy9JPio3/YmvzksT9ugkQHNZlChvFqrDPkXJUopqawHn3Xl07ZUcq9Y2YlNcnkwVkTMwlFTpqyRu07YyprMoQC5xhI2Bc1KRMTkwXATMTE4MZVKEl0Uk1KQ8zsySQDUMGWLBEznJIaM6sQDaivPXHlrbJaV3guyqounLWs4piySdjEmKBDQupT6iNyVGSdovCV9U1Rlp6c4/FkbKuFJAIyRpEyI8YsOWsKOYZ1t8Em5YkvEUJPripYE3HSgGFIsu676y/7y5d/tvziV3/QfvqzP0qfffnj3/2dqwtap8CKzK8KnICtoO49MYJ3ygBe0+i/zX4E7hwUIKcM65k1i/vhP/yJfnL6Yf69//e/um6H8NN+rcNL3x6fuYOjuZ02FVs3YWtZ1RLgvC9IjWWvYCdgX9KxUXKOrQ6Sh4iUyBIiG0QPjSzijeRxf709e7LWkCNrrWUYqqxzRiwb1KWY0tVqLWDJo/TWObByFCWRzJQzZzOU1kRPQOHIOe85Z+aq8MY7l1RV+j6p5hAlDj1iBArJClaCNCh8RcW0cmVtjbWj9DMDY3NaEQHzWHetIUbRmHuNOZbsDFu2sgmxgldKSUOXYki5f3b+9cXL1dXLn62+/NUfbj79sz/Mv/ziB7/9j67O6Wo4++gjkZ/i7rfwavK/Bw4wcK8Wo/99udsZZTfJkfA4C0lmT8Y2zjfff/CJSZvQ3VxdEwP6xDw8+17z6MkDnhx9Mj09OkDd1HCucN4aZmuKionZZBWujHUTV04qdt4IWXYGgSX1lNOKYl4P7cZZTluNHBYCXFnQdjNsAbB6YlgidWS5sIzppETBTrwh9WxsUzgxosZ6giEWzYA3BMfGWe+8krPGgIgoxpgTQgKp9ki59GWOIbCHtQWcnZhyMi8m08YXpSkLq9YaFJbBzMRjhAYhpJgClLKmEPshIJTsqyIQm3XucR2G8OXFcvHl5Wrx4uLi6cunzz5dPP38965++id/LF98kevm8tKuhmJSSCTB558/Hb+Qbw74eyIU9E6tAHcZm23Qq9oBxa2mDxNJ0pSGSH1EbHhi68odZARt/+T682fnm5vnH/PJw+u8fPJJeXJ06mZHM9s0BZzzSSyDrXWe130PJVlFuGJSNjVIvHpjxEBjDlGtIQVbqEKJwYBmJIIASkgKIMVsSBkqSJoipaHrqWBrS2eosFZDwUmE2RmnBoa8E3ZOjTNWePDRWw4QVgMWghZlkclbcmqxGTbcoCpq9uXEVEUJVxbEHlmAnJSYVWMSUhLVpFEk5ZQ1pyFklZSGmLxtrB0kmWXIcrVZrr66bNcX6/X65c3zL15+9fQXyy++/l+uf/azT+XlU390dPllvhjstJRE+dVnf495Z1cAYLsKbH9u60CArZYnQyXzR2en5NmVRVn7JEihT53LJr1cnvszTMzHOHj4sT178mR+dnRczo8mWpSeisKTcY6cnbuSM6t3Te1gydLEm2gF4hm+KTSu16NKLiGrYCsxrtgKHUkSGWt0SQAmRElgb4wrLRnvDQrLibT0RelhjVVvhEqv5IyBVZQzb4TFwDJUlARkVDM8e+eIbc1lVRpXzmxVFmR9wZagIDXEbA3HmLICklKW1A85ASF2Q0cx5UKtn0hZ2rVCXywWqxc3m3a16c4vXr74069++fN/e/Pn//bn+eLiK7lZhIovuyINaJwIZTAEIoLPf/UlgPtrB+/sCvBrpq2vLogZGQARi/Uey3bRlZxDOwSwc9n7BhN7FIZO8LP26VdXcfn8i8sXDz+qHn50yJPZSTEvZ+XksEFRC6kvXZVTHAbrS+cMOWut5dLZTGRQeCVSViXDTMR8q6KuYAuGkkAQU4KQUGk9rGVjvHOwrOQMgciwpbEPsme1ng1ZZjFKMMxkABE1MUYq2DvPpa24KB1ZW1vvPawrxBgHEslCINKYMnI3ZCjnNKTQb7o+9UPHQ+ZSrLFJqBTNabm+Cm2O64vL1c3l5fWL1c3zX149f/b7V7/40z9NX3yRp5N1b4tNh35wTSFpK2gmAjCb7/Qr/9vw/qwA37gfoweIDx+cALqdhbGtidKtRGFQ8+MnPwClrH/+Zz+3M20mltU8xNHkB4cfPpmjmh9hVp1Njg4r44vCsLcGvqq8dZPao7AuVcaTZQNLRkiZphMCA8RkyBGSZIJVwCiUyRArQGStNVag2Xg/pu4bNmoYVBUMw1ARMkzkveVNv6HalM4o29KU3hnvCuMKZxxbMeyU2YioxqRkDfq2i0PfxzTEmF0R48vLa71ZD3Ygc+APpm4ZJA5RcxbNOcfrxcXNs9WL869WF89/evnFZ1+n1Vc/i8+u/71/9s8u/vs//NehN4PWdS1RE4QVgIxpKQR89stfvpHv/q/Lu7sC/CWMuSjjtmiICaDt4TzxVu6cQVkgbO1gsq/qKv7wn/52yEO64gH445//8eLz66eLGWr3gXlUP2pPnxz4ev5gMq+mpphVwdZVt/JFWTnjeWsAbDLgmyFXsNaK45QdGVN7jJrXbGANqQGBSJVNBoGUDalhARsiIqKgUMqkKgyF0U6pUU8FWevJ2UJhrCYYlY5zYILhmHPqhyHGoY+Scx66vmuHvtWYk81Kw2rTDss+1VLUxvYpdRHdMGw2ob/ppe9/dfnl5efrZ7/8afrVsxepXf77/+f/eFnyjzYvtB3s1ElJDIFsd3q67aRJr+mo3lfeOwNg7A5jxoPPmEdnbWzTqiDmMYQqiixBclbrfFFA8vpifRksjPzDf/pPwnCzuvKZ8Qdf/MLP4vPFLFSuXNv6B5MPn8yomB6Xs/KsPpjbIZcFjGVrLBQF38RJ4XzlrENmET6aF8FKlsIVPCkMvCUwkShZYpB6mLHoIWeFGkOOiEiJOBXGGBs7WDYwKsFSEsockRVxiDENMZAY5JRCGro0hG61ulx0MQwpDympiFprrQH7tu+H82G4YmNyLxHX7frqfH39+Yt4vbzKy/5penb1z/+j/8vqVNvuc73sB1b94MMP5Y9+HqE0ajbpOHfcChqPn/Yu7e1+GsP7YwDfCLvtTiR37X109xjKIGRAFCqSrhc3HTFXri5c23eJDEvjprhIK7AC/8F/8s8DCV0V5PFf/9f/wl+sN4sK1hyu6sn3Dz58ciBFU2ZjPTnDimKd+sOSzMyDCwXYvny5DqSJmwLFpDbsvWFmw6LOO+sTg4nZejbqlJ01lpkZrKRK6LSwSAQmsA4ChHbIOUlYt31o+9WaRUlFJKeYYx76dtEGiTkha4Yi9TGwGvKb0K8uwuLpSsI6GM03uQ3P9WrxH/zz/3A9cSkdDT/sPqOLvrOqH33vY1HD2PSb8aAxJwiN6tikPGql3lev9xu80z7AX4emmQDAbWsMlW34lMbc6oP5AQ/dYNarFQ4fnCZl6Mvnz/Ho7IExIF5eLwgiiYiFwWC57WzgC7KTY5kb0owaBc+lqj86PHtSZZqXYkwFbxwZ662b1FXlnCvYWWeIibKIsdbVMMSWjS2NZxZiVoY1BgRISCkMw6BlWRgJUaCE1WYdIygNRrqMlJNuUoqxE9E0DAMb74itMV3fdct2/QKkfQZhgXVeoluuNXW95LDSXm/QprUMfat96jUngQowJrYpjbEszXcmkO0n+eryfs76d3l/VoDfQEpjFy/eniLf1hhvwzVt38tqcSMgQj/0yGZ08Nqh48YWlS+sCSkOIecerAK7U11AMCpXpiFM3AzX7YCvls/9s5vFolAyBRgFwHNM6qNy/tHMTCfoAKPKJMwBmRnGeOPsrKrrxpaFxgwSgoMFETRJ0un0AF89f0F97BeaIMKsATlFgmQTEfNmuNxcvowchkEilaF2UEMt9WkwobPZBiYn69SHjUTpXU5rCv2GhtQh6BptjirjwL89yn3tjP03cP8HP7BfAWDtN+aA3RZpGzmy1iH0A4gIviqgBIR+QO0KrlxRWOYy5ZS6OHQwnF6pF40lVofzI5CMGWeOzNjCVAhGCantEIfeF/CTynhDOYOVYIjByrBsMdFyclBPvzf1ZVlrYRyYnJpt0qYgqGKTY/tys/y645iyUbNTPBFEOM9ymS/6Tx58L4uIwjIpg4ac8rpv03rV6iAxthr7SJI6BB2QclHVEjRguVohaYbIVln0tYKWsbzgbea9N4Bv8spV2Bbdb0+TbwWdto8xSiBVrorSgIAoOdG21lZEiXk86Do6OVEVAlSp9M5DSZnGNrDW8NjLlw2MEgrrwMogAQwMchc0rLrCKTdeTNG4wntYNgoyxMiquGnX6EjzFTabf/xb/ySSY0eibJWISOjrq6eAZ8QUY4aKakYCkKCpD0O/6lapjYMGjakqGk0QkGFEzYg5otu0SJLHjp26y+d/NWxSTnibee+3QN9EX7tGd+57/TcyqkdL0Cy0bZN05wHMYC+qgZXymGesxghZA7JjfzBWA4b3Tg0xLDOcL7aNQQhMDCkNTGMhgjaxaddgw0REotuDZKV6+gEKEGakWFIHowhk9FYNdGkzRFNqc98LIykUISUMOeiQh1Q3jZpkUIgg6ZijcdvQj8dOl7vGIaCd8u67M3PuDeAv5VaI8Vt+o2P2GO8G/zb7VAGBSBa57ZC6bfOaYw5BlOIoDaLIZmzPxBib3uUggDIy6XiKagg8sWAwIhMidqnEY/qyErDBenxBomP3yK0uuW7POV6Ga5A1GiilST1TgoKzgc8WnDyiZqStWtwYALjzzrfhTN2GyF6b+9+SKM9fxd4A/lr8+py3cwP1mxlfxCDjFEr5rrNojVMlxLAt3rcGYEOQHMAKeCgCLAAZ6xeUx5UAZhtNtzuBq62481i8RZZBxOBbvZ3xNek2/O4mHkQMoxZZ43YPPx69gQU6BJAIRNKonbVdykQFEB2fbzfv3+kRTng3bGBvAH8FuvUGvlXLlQiicjsz7uqQd93Gdv9fVG7rEwQ6ShTSKNfTDi1IAScOLtsxvKgAmXFQkxkdXmO2SUQqo6jUlvnR4TbgqOPqsBW52q0AARmFs5AQwczYCYTuepzFGMf/o4IsGTv3VnVcEXYrwe1b/vv4kN8g79r7+e65TbkeZ/ZteT7wmqt4t1DnrrIRMJ1MwcSvKygrbgWdd4a1G/S7v7p7+M3Nza+9pL/JzFwWFURlO+Cxax0AQR4NQHeFRu/CfP/r7FeAvyv6apvz+pXbtePOKL6zkmwvh3749mmIv3Gn7JILXve2d3/7bzs8Y0q3lXSqenuCKyTb+9+Vzc63s18B3nvoW2/pOzzo73JfBLr27Hkj7LdA7znv+xZgvwLsea/ZG8Ce95q9AezZs2fPnj179uzZs2fPnj179uzZs2fPnj179uzZs2fPnj179uzZs2fPnj179uzZs2fPnj179ux5q/jfAOww3i/zKczGAAAAAElFTkSuQmCC", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAuaUlEQVR4nO29SYylWXbf9z/nDt/0hhgzcqysoZvdzW5SzcGEBJOyFyYMe2NA2giCAVkG7I0ggF6IXnlpL7gRLAKGrQVlCIYFCLIALyxAoGDLAkk1abVEstnNYtfUVZWVU8xv/IZ7z/Hi+15kZFZWk91NdEZW3l8iMiLe+yLeEOfce6Z7DpBIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCT+LNCLfgKJHy/P/sH1hTyLq4N90U8g8efEn7aUveqS/hkkBfjc8P01gOj5V6m+2pqRFOAlhz5Lsp+9brjgU5clBUi8TGwEeCP4+tx7cbHk03Pu3az6r/rqDyQF+FxARFBc2g2A5+4ICoB0uH4Q/gtFekWVISnAS8ZniSkTPSXYn9IAJtCgATooAVShKr0VRN/nl3+OSQrwkkOD4F/+/vLnS1cOOkEgKFR1kPdXVPIHkgJ8TuALJ5cB6oUcuCTam1UehI0S9LuBQiCXfOHnK8PnNX+QFODzgAJKCpL+Gxo+ADwd+6HNeq+DP7DZCfSV3QiSAryM0JMFnYjA/boPosHJVYDBlgkBIEAAYwwEAKCIEiGb65kRpb+HLINAYGbEKFCJYGMB3ShV/5gymE9yWWPk5dSepAAvORemSa8IxhJnDFLLho1SRsRgkBpmggJRonQU2ja2UUE2GgQhAzYOxjJo2E2MI4QY+2hqFDAUm42CAQgAJiB03Yt66X8uJAV4Cdms0kR0YdH3azcxE+eW2TqysMrwxtnMOmuZDSkgUaTrunng2IAZLaJrrbY2y2KnAYAiaAQ5C2FgXa8hFMEK8KAAMuwGQgB14aUOoSYFeNkh6l1aVYiqdFHXYCZiEJODZTPJrc89m2jBDFa01N3crqYRxKYN3XrVNaetxua8nUmAtLnzUZghhhC5Q2QAqmC9eEgQAENA+xILP5CqQV9KiAmDhMMww7Dp/5CiYHDvDEcBC/KcuKxMbj0seXUY2TwbuWJqCC4zjjLOCmZaszPxrF4sT5vZ8RmtmsZEOceqjUAkcL/mEwC9lIEm4Pz8/KX2ndMO8BJCQ2UPD96wiICZwcwACEqAsx5WWQqTcWa89exBrUgbJApz5E7b+WoZI9p2ezydjFxeMsUpbKxMR2fnpqmt86ta227dtW0HiVDqI0bcP76+pI7vZZICvIxsUrei6MP+Q1aXMPgC6D1UNjEas2yYVtGiA9QYQ6XJIlsL20kMnag1oW59yDKPjMaseadiVnVQZpMrcxlIF22s18QUhZ5kEjbRKOBSndGLeD9+BJICvIRsUlz6nDoegfYlD6qASqzRrYMCTgFl6VRCt2zX6wyWR+PSGlh63JxLuw7t2BbWGTOd5OWN5aq9d3o2X7XcNeUkd23bNAqKxEBUvcgpbMovPp15fjnqi5ICvIQMaSz0ct4ns5h5iNBEEACLPinQx/oBIgUMwEwRxOtaBK0sjInUltbxSuaZa8+nE86acV6OdqfjA8zjjMP8pF3UrYRafV4YATGpBCJWYQITELV3jFUVTL0JBumVQ664EiQn+GWEhgQYGyi09wmIhuhM/yc1xoCZYSyD2cCyBamClHrziAgMRuEzWDI4Pz8x21xmU7G5jbTjTFbAgAANjYTmdDU/7yAhQLnjWHdG1mJI580KIUYY5qHIbpOkI6j0qbKrrARJAV5GNjU9qqAhH4BLwg8MKz4AIgZoqBZFnyXeiGMXIkbjCSwx1ssVjdQ66hredVvssyIvi3J75IoKUSl2Epf1ul2t16uVX6+io7mObRdIAMPoug7eesQQe8d8yBYfHj3uk8RXVAeSCfSycrGq9uXNT4rdNncPdroKiADZ3DnY66qKGCPIEpqug5BYNZwXZqzL0HWPFvPlNd2Lre1kf7xVSKf5wWjPn9GJd0sNR815vqhbne7uBgHQCSHGYe0fNhm52BKuqPQjKcDLySV50s3y+tRZgEtRGbowSIbbn1SJEgASgEXhyIZOYsdZUTlvCw5Z+Hh5b7HlR/dW7WK6XWxvG9HpjitH++PR1hjl6VmzvP/g0dFqvLcnohBjTdzUS6jGoV4IV7rQLinA54VnVtmnq5v1ueFKAhC7AMsG5K2um1XbSSQmnubGmWtut5NMVrP1/MyyF8vir5fXXh9npTUzI7nPYgjd6dls3hbVaE5wEFIIYm9rIT5zSOfqkRTgFeNZUWR+oh4jX8Vls2yYqkXBPB1zPrHWUlN1y9PV2UylpYm40hEfOCG/7UeTSNHE1fHx4enZetfdCg0ClAlkCBrlSps/QFKAV54LT4KAACArqtismroJytdHO69llG1/dP7JJ+PpdLZarmcfLh+8LyT1hKuRU0872bgEweZzb44Oj+fV3t6yszauwhLMVz/Gwi/6CSReHP1B+l74IwMdC2oWBG+6jtF1QWSbJ7e/sv2lN9ezVWnGmZ65ZvZJc/QgOF1mheNc2W7HfOtnr33h61+t7ny5PjuvwqoBRQUT96FZos/8eNEkBXjF0YuPvpRCCOhIcErLZhWaE+5kPSV/cNPv7pyfHvFkstedh9AeLk7ifLVEbIKWcHaLimrPjHfGkue5WBgBNEpfnHeFo+3JBHrFWS5WADaH6J8coDRK8XE4mb/mpovr1Y3tr9DNN23U9pP57PBcl90Ko1UjXZGj8JZdF1sce+T1RIvie2f3s/3XbzaNizg+OQHQKxZw9coj0g6QALApqZDNuQJ0iGgRomichbYN+666difbuc0qEwAyb+qzZdfUxM4aGCbljiP5vXx6fQtV5WERh8Myl2uFroLZc5mkAIlneJK2VaA9w+p0Edfn1Iluu+r6m/ntg9erO9ZU2XwVdN4pOWdLH5SYmMQxkQVnHz/6xOZlBTbcl0/TpVNsz7RxeZFKkRQg8ZlEIAbipiY6P+uWp9PptJxytkvretTVLerYtpnNq1FeFRqjdWCuOHP7xfYB11KhE0CGhlxXlOQDJD4DQiRgwYJT180Xq2WQ1pqxzXZuuq3tw7heGLbqiLPK+ElUijGisd6btpjY99b0sVkrjHDfdwjAxe5CCh4O17xo3Ug7QOIziaRYogvHsly8Vz+4/87xx99VQizYjwyI591sebacPQ4sWuZ5VnpPHMGuRbeDsT96+Mg6EEgJdMWc3w1pB3jF+fRhlifFEkpAY0L70fLBWZazPKjP/A52Z9ESWeOzxeJofq85/GC8HI9GgbT0OZVZiXUt9lq+vbduYligOQfQ9v1Vrp4SJAVIPDc0SUMDIJu5mOd5RBexCnWYxfVZZnzuTTEu61G9iu38qJs9FvhJDmctnN/Ox7oO7XTB6/U8LruIrm2hCM/4uldBJZICvMI8P/oyVI0qQaAoxhViF+GKAqfni3oW2tW2z503vvSUU+Pqbk31uc/GlTU261a19SaLWzHPbvqtKZpwfs8cmjbzsXaKTiOgCjMkBs7msxeqBMkHeMXZxOmf3QV0aH7V1C2iCuqmgRht1m17XndNDMvWh661a9T1rJkvQuxWhpgnrnBjk+9UnBeV+vFWObrh1WYaIyTGK+cLJAV4xXluZnYo5Jeo0ChGWvHSBXMwvR4hXZOL8VNfbVfItlgZS10tonQwUMrYWM/waiJaDWGubbuGqjBdKBWBINR/vGh1SAqQeGoXUH2SCDNgWGE/8sXIwniWvu2KIcIkz8djm01GVOaAEEUVI8rCIbSxOV/xup6Z1fr+8uh4pZ2yc0+ywUMo9CqUCCUfIPEpSAmsBANGbjJbmCxnp50TA9EVQugUEqXyhbdx4UsaWRdppBJLZ0sEr2siH60pIjeuMRxikNjvAHz5bNqL14C0AySey6blOjdBnbBhJb3/+J4RESjFrmvrGWlsSs4zD3tQGl9t8XhiI5sudpm1xjX1WmOMRRc7I8MBfn3xMv8USQFecS5qdEx/iou5b5FuQPBgU9ncT7PSUxDc3L0ZrXPwea42c12eF3DCprJZdt3tVjer/fHEjkbeGBqJwRimHJt87MA5hvaN/YNuFOzFa0NSgFcc2rRwYLo4vGLZwIExQp5tm2Jvx5UTB6JHJ/etAxcZGYYoG4Er4LOx5OVBtX196qubu+PdAx+95RpxZEqzU47zgjJiVRBkGMx3cVT5hZN8gFeOvrM0U7/il5Oqb5JFfUaYhJFFi6wlM1pZb+bhYB6OZCsrsaQiPyi3t6au2jYBRoX1oNjdGbW2qMhVk7w0ChSjxZY5DDPvmwIZlnlBJszambFZHq1hCDFI+Ur4AEkBXnH6sRoEIoUZ2hoaNXCkvO1G1Zavpuv1+rBlRUUZ5x05B/VZludoFJa8ZsZwI133eHH6cOV8PMOCrHhbZZqX4qNdKxGDGRplM5Ns08/oBZMU4BWGFDDUR3x6CWUoGBQADUEK472JzIvZ4jDmeVi3y9zQXlFlmQ2NdJZsl7MhoSjHtJ4vBNp0tp3pull1y26tdW2cBA+mihyCct+G4unRfS+UpACvOKxPJr5g83UUUC3jvHL7RZabgK6+9/hhuGZ3Jttuci0T65wzS0irhohrajCXZhl9XizjWtnacCgn56er80dNRRMFUZaXnViBijyR/CtwUCApwCtM3yuUwDq079G+tTorwUIxLooxRFoDoxMU1Wvl9Wu7+XZlIyEIWUfSObYoR7vgzKodF7mdL2PjAFeN44PVxwsNWXyMxTqSQxMj1Fgo6GLc0osmKcCriipU6dK40761uRWFVcGWmZa581nsZN6hrXM4Z4VGsQuNIWuMEHlh0y3X1o9GO+ScaWKog4bQaowrClghdCfN/Gxu28iRoNb0rRxVnh6x+gJJCvBK0g/XECjiEPoEKUgVDEIbaivRuC4EbUUagiODzobYNjV1+bQaWRWY0Kzdnhvv5PloO5alIHPrQsvm8PHJatU2C1cU0XTaFplDQxGIAh0yYXE4b/CiSQrwijI0j+7NcEGfnFKCiwRac3Vtur+1WC0WC2kXLWJ2zW1fL0xune3nDoS2Q0F5WfhixOzKhmgBAq3WS1nV6+XZenZ2EuerDgRhQCBARN86nQS9Er74XSApwCvH0Ba3n2+EG7vX+ltZkBHj0Xsf2hu0vVW5ar+L3Xq+Xp6P7Hi8NZ5ey4PRqsh9lEhQEFmLzmDmMxuFibRZx/Pz87bRwEfdTL781Z/if/3t/w/dKkLN0BtoSIIpxSthBCUFeKUhqPbDMxAAC8Y2jfPdfLIzcWW5rNf1xE4mu9OtvRHn1qsKJFoVBhNTMAhroyDPVhmuWdbdul51s+V5Ywq7ZQq7VGgbYgdiA5FLGWC6Gl5AKoV45dh0Y6C+W4O1ECWUvsD9731kq+DKsSm8F7OqrDdbvhj5Dp4baUqTu4w9LBFgiMUQYeRdmxsjBGrXdahDPe+kW3bcBtWgKqGfXRb7EKhEgWjsP0fZjJx8YaQd4BVGQRAVUFB88P47+V3e275bHtzas6NK18GWNjdKitzk7ZYfVWWeO9ZglHQYu6dAbkxwcIjUhS60jXR6gnn7pZ/46uFxnNcNAhSEKALdjFUdioGuwg6QFOCVY2OERxg2MMrwAmzLqLiV7715QONySuU4GG27rjMTm8GTE0/WWzZWcsf1amEya3PnTEelI/GO4sPjdrZers60OT+T9rySZhm9Db3fq5ArUvrwLMkEepVRhakjTh7dtzso8q2Y2S0txmPxNlNyVqjlCOOtnVZVuUt5MY0qtrEqjdNWC2bNraVm3dZ13XZRlsf17HCO5rQzMXQUoMxPDdS+aqQd4PMMYxjS1c8K1iHcOUywg2XC0f2P7F29tvU67+6/Vu5n1810nLHJqD47JRbRzGZb2zuja9fvvB404nR2/GHHssLYSixzxwik7bpbLM7DYjWL87huvvIzXwuLuIZa7meFXVXpR9oBPtcQAGP6wy5M3Fd9MsGzRWYMSmZ7nba2buXbNw+qyfWDYuvG/vbO7TzLKrCCHXs3ylzMyHXa6Xq9QgchWxbG5Lk3Vel0sWznp+cConjazBczXjTBKmCpn0I5DMm4qqQd4CVnd3/3qe/7oZD9ksvMeOPua2C2EAUoEjw7mAB85zu/b7cl37rtt29e8+P93WyyXexOd0LdhJrqs1hQNEXp3fY4j4Zl2SwetNJJMNplk8Jxmfv2fB5kEWM3W5uaunhq5me7ewfdvcP7iOgQYtiMM76yJAV4yeHNFMiLCsshzM7D8GxjwUIwwaAkj7f/8A/tKOT5G/ag3C/G12/nu/v7xXTibObm3WI+71bdmuq1Vpk1o8LbnbHjKCod1tY7sdZa8pnDqhPUoeNayPus+e7iwcNDXcwzdp0wgYT6/MIVJynASwwBYB2MfO0zrTIInRJB2CAGwMNhy47wb3/3d7I72N67mW9fG5mq3Kmm+bgsJ3lZ5IGBpTQrCyib0phRYaOzLmpkJYkdWrjcWVMWjsma7njWuIXmy2W9/Hj+4N6ftA8+cjs7y85IPxJJCaQGTHSRAb6KJAX4HEGgoe04QQPBAqhai3e+9S27I/no592b118vD76YkXOUG2E2xmW5V89OSEBEiLkDe2+Dcw7WoY1dMJaFc+boyIk1nuarOKViFLHWj+vl0aP69JN8b3K+KimSJejG88aVlfsLkgK8xCiAVgTMBs46xDbAsAGU4YzD7PDQPj56p/oZ3Nx70+/euTu58UZZTfKldItVQdFOCqYMRjgSQqPCxCbzRpx3sJa7uuvgDNgbY7LCg621ixrZOhTtWS2n56dHH3WH7z3U2bmYcQBvkl3ah1cUwLAbXFVVSArwgjGWoTJ0SvgBvUUCYMiAI4FCxPn5sbkzuRWPZ0eWkOd3ab/8gtu985XJrde/tHXrrQyOlqwnK09cTkorhaEgLWIMYouMokSvmc/FMhmlGg6AARvvvCgKs1q3fhl8c76S+Xp+9Eez9/74/frwY932C+F+xljour7lugBR4pUbivcsr4ACPOl3f1W4vB4athAIRHoB+kGeJ4FQiAN3ivVyZm9jOy9n0ezioNj1053tbDS57qdb43IyolGB8xgWy4Kj5iPXmUjGqlIQMcYatcjG2dbIOuebtp5HioiGmTNjiIzPGnB22npadvTg5OTwD04/+OO31/c+LPe2zmyRRTUBDLk0GA8QuTrv+Wfx+VWAS1L2WRvw5RjFpl3fs7VZQ5v8T/3kprfBp63dTeu/7//H3zyGMaa/WuWzL/4+xBBBNabXsVPcqvauZep8Dp9VeV7uT7ZHhfO+c8CZbU/jiDlmxiJjOAXqdu0AReHLPB9VhRpj6tn8vJY6GHJgkHHi/NgWxbZgMmtX549OTx68d3rv7e/W99//hV/+D+e//c1vRHQdpI1gw/0kgKHaQn6IXe3HzUuvAHlRPimyQn+ogwAI9V1n3rr7OgBcXKPonT2IQqLg9TffALMBG0a9XCMzDoiCLM/RrGrcv/ex+fi9D93P/fTX4xff/EJnjMU3vvGv3c/+ez/XvfPxB+6bb/+Rvv7GGyHGFsYaKAxEFG1Xoygy+NwhisAYAwJBo6KpGzR1i3VT4+TkpBcW+cFW/w1//W/+TcTDxeLGemv90e/826/fufV6DkOOc7VZlTnKctvPb1RyBiSeaLZYOEEn4/G0GPsqM86NhWJzvjxf1LYJO+P9eHh6mDn2tNVW5XiFcTtfLB8ePnz0+0fvf/vbyw/ec9e357/77W/GhaxRz1tQVBhmsDVQDGdftC+4uzwJ7NnA6ItWj5deATYoPa/JgD7zua99V9G+9Z/3YAVYFdoGjFwB3wEfvvO+G7kCi9Vclw8PR1/Eftl969D80R88BDOBpIv/zyf/rFb2vF+MV48++lidgCLHeHP/rn78+GN76+BGkCYiq0qsYg2ECBB/ajcxxkBEEH+ImLkCIGfgvCfXSXnr577+f2dN99fgnTU5DBeGm9AxCOxBMl+vfFSJ3tt8lE18mY/HDGOXq1W7ltVyjWY9rbblZH7qt7KdvNLM+XmXnZ6ent4/uv/ouycfvv3t9Yfv2WvTuXqOdaihjgEBui6ibVsY70DEEDw5aH+V+dwowJMuA5eFXqEUcSlHBIpDLxwhSNfAxQCKwLtvv+d2iy0sZmcaH62rEnl5G2X1l4u/dHs/n9zZrUaFYZMtujqexfr8Xn32yaHO5g/56GjU0PG8Pgnb421tHx+6WxhZuX+OI5nVW6OfDjkVsFC8+8537d233gxP+QDGIoS+ZOAHHRqkUAh1cNsurLf4bH7/2OT7k3/IsH+LBRSZoIaUyeJ8OTeTbOxzn1dlUUxz762odI9OHh0u47oLhPba3g0+PDx0O26vuu4n0+WD4/XRg0eHD84fH/3J7MG7f1J/8k5+fXdebk9iZyLaFXA2O8N6XUMFww4XABA25v8Pa9r9uHjpFWDTzwbY9LcZmi5pX4hLUPCQJGJhoBOULoPWAcuzhVvhCO1qqXr/pGJCeaCuupPdvv2F6a07+3ar2s93trbz8bY2bdfFrjmTxWKsdZUbd5Cv1Y5iFxeU7fD2jVxJsW+nwTJ1x8vz+sMlz1dvH847JhWqMaVKSXiuSpC+ZgHMDGMsiLof6vWHGCGkqC2huD6JJA4+GiPLiLauzRJr2cq28v3qWjGtpttGYcg723ZNvVjOjma0Wu3v7uvZ+tzFVfDXzHY2deMyPD7vHn9y/6PvHX38wf327PC79f1Pslu7c1NksWXpzxEo+pJqNogaISKQblN9d/HflebKKcAPYyM+Wf3pYhGlYc6DR2/fdyFCWsHqdO5EahTMmp9LFc6Pyl3k1c+ar91+a+funUrz6lq5O9kpt7en1bQ6PzmdmVba2bpu2titVCF75WTn9vj69V+a/NS1IuP835y8/c//yce/+0/HvL33E+XN/6RcaL2wW+u3xtdWD2WxMK4IUgjO8vr3HmqLjunCNu4bMmxWyc9+tc/Gsi72CmthBdA6IhcHB/8ry9mSMsp8mZVuz+z6UVXtFL7MCWxayPr47NGjhazXtW1D4UdegmQ3dNtXrcm3onHH7z+cPTg6vv+9k3vv/GH44D6PJo/9dLxwozJGB9Rtja5eoWkbePboOAw+zKXV/qp0v/1TuHIK8IOyGTSysf83fwICYIXAqw7Ls7mz5KAhajHvql0qyi3Nq7v5m7df27p2ZyyuupnvTG6Mdq9NzcigJVMvm7ZbzlYGKnXXNOVknFXeVL7Ki70b167n08n44M7N3d/8F//H3//W29/5x2a7wsrpw/ceffIP7ua7f/Gnf+5n/tpq1axX8/rx8fps9Ul2Mjtp298TfeIUbprDKhSgH85UUBGwGlzPdv6bbA2Nq1Ad5HvluJhMvXVlhAgbskqQTsL6fHV6srLrWhWYYFyNxbsK2biIgvrkvH33w3sfHc3Ojt5bP/7g3e7BI9oePzjP27UvRzGa4WDL5Y4OTGDDoHj1V/vn8cIVgIkvrRNP9wtWVVhnELoI64ZwIfrQHxT9bdTH3BiAqFz8BgPrcgXCyUyrWVftcVkWklevu1u33ty+fWMc/GTsqq3ruwe7lS/8JKuKDDZfPD491y7GsG7OKLcOnn013a6mr9/e8btbE59bXxV+NJ6MM/XB3B9Fc38bOM5axCzifGeFd+zyG//8u+9+Yy8W+I9v/sIvv/Wlt77yW//u3X/0IFsiGAJfWDt08Zouvn1m0XwyVujT62nf2CGiEA86av7uxI//h53q+m6RlZWyoNMA8ehm3XJ13q7O29C1gqYpKcsKMX6KajoOmbHnrZ4cnp598NH7H783e/jeg3j68P360YOf/49+8fS3v/N7ko/GsdEOCoIZog1CQGQgSOgDEMPBlz9t0b9qe8ILVYALe71vTD/0ptGn7rfWwLLpqxsHlPsiK0a/cFohWCGQwpEQLIzmsNUIprw9m1Z3s73br23dvLPnJtWWFuX1cm+3RFYUpjCjYlLY8cSja7E4OjptYifeOyrzYttPqkl2Y1L6/emWGRe5GeVFPq2cyayZr5fyb9751v/4z77zW//wqOzQOkXwgpWLONYFlAVtUPzO4bd+k47+6DdPyxZdwVCSS8OBfvDOCPSMLeSNR1w2GNsJrvHWP92b7P13yggnq9N1oG5xerY4X6JpG0Q1ylRJMd0rptOyVu/XkPbxvH54dPz4/YeffPLx/PF3v93de/gz/8EvPi75bIntIritEsEoYhRo1N5f2exhBHQhIMaIGOPVk+4/Ay9EAYj6AxpMjMlkCiUg2kHgRWFUISTIfIbXbt+BsQbWWEiMsNr/nHcO9brGerF0r+3dwuMH9/TonfvVAXbKLZTVLb936/Zk/8a+H092svHWtJzsjHxZFGTZkfOlK2xmMuM4c9QRzk8Xy/VqpW5vXEyu71W50dzujKY6NT67Nh3rpDDRw5hR7jizeWVK/Ytf/cXxV/7GL2HpBY1RBJa+IhN9nx0rhH/8v/5vAIBp34NhKFveGEF9sfzTwdqnpejXf/3XL5JzBFyESzfh1INrByhKYHsxxm65P2rW63q2XMyPm/PTwKRBWSs79XvspgUZky8D47A2Oq/rj+8/ePjg7OTxu4f33jui5tF3lh8+PHfh5I//1f8ZsyqLwop7h/exme6ozznJnmV5b//rxSt6zqu4urxwE0g3R/SIesWA9k1aGSBDMMzYnW6jrVuIBHhh3P/wY7flxzg9e6zdWV19hJNyB+PqF6uv3f7i9M6dScirPTspp67YrbIiH5UjW43Gpcm9YyWTMTuXZdZbbxFZpYvansd69+6NHX9ra4sPJmVuUVFhjbtW5TTJnBnlVh2xejaUW0/esXWhqOM5GhY8bcEroISOgRn3bUGM0jO7Gy6yycNPfPp9Qb9YPIl00YWAbT7HIFDrMLcd7q+O/qWr40eLbvW3yRqbj8qROJut1s035+en/22crzCBw7Yvf/H3v/3Nrx2fnX7wfnh078F6fnxi25N53kXkWVRmBKNQxKce63mE0Jc+9E7wy8cLUYCLEgICdBB0S5se9X2PSrg+vGbZoJ6t8ej+I7dbbuHDjz7Qam4qhpRfwHZ10x7cemPv1g0febKfb229tn19N482z8iSITY2s9bmzpjcWVg4M64cZc5xnmfkrDdkDGKQu3e+PJIMjJ28tLujAhPvkVlGxiyOTfRsxICUBfAQy5EbCtKyIjCAYbjExSzcIQpitDdbLgv/U0J/eXTocONTysA0+Dj97+fhyo1QChStUxyVNZp1i7d4a/tgbfeDCh8ult/4bnv495a5giqGHTFOVfFJu/6t0S//xG/Vxyd73/q/vn1+ZtZSTaYxRoJ6gA0jxE3+5NKzec6yHmP4ESThxfMCd4Cn301SgGljBCioVVhL+PgP33VhsbZjlNmKV+WX7EF1q9i59WZ5cHvXjMe72bQc+XLq2RY7o2lWleMyM85mxmRqyNjS+I6EIqsGgsAHK5XzTSbcUSvGeibAFZNJYau8RK5OK2cwdkYNiAvvuMoMmBixgSnLYbpbIGg0/WkPYCOSrLgwc0iG4RPPZEOf+olNDkMJSn0l/fOaxl6+jS59xWTQkSDkAu8YD45n3xyz/c9FFG3FqE3E0kUI+iCBUUJZOmjdwL82OTrNGlCWY20DOu6nuTt26GKEd2aIZr4sBs0Pzo9VAZ7KyALo55EoWLV3aLU/tO3gIasW65NTe1Om1QFv7dx0W7fvZgc3xiirm9X+5KDc2ZvYyrPC+sxbXxXGZC43ZZaZqvQ2y3LjyLlJUXoSCqwUSAVW1eTWkbdGFAzjhUCyRoS084bZduyC8x0ycs6LhWpsI5Eh8o5gjUFsNXQdkVWyYNioiOhLf9naizAhkQ5l8U/CI5vooQH1IVwBSOlXCYpI9GutRf+zQy6D9el1eBP2fZIPML0hxYIFWrRTgxOJUGJEo1geRYAIBgRLDBJF0ADyBmvqYDPba60EeCKocRBRWOv6XfpzLPzAj1EBPrWoPeM0Efe7vWELqgVxsbI3pdr5cn7jra+O7r71ut/Z3ubRNKfC5pzZkRnlk7LKbZEVbDkXhy4aImTsNCcfS2PFm9yOrTMexnlnxTEhZ4fcMWWGRRmWPUFp6FopFDQoPJF6tsGAVANUGUY0mA4cYyswYDJsvTV/J+8MDOmvRem7rBk4bM7oCkUY5b7c+dIbYBQwomAlcAQARSSFMtCFDpH6ay4Sehfv06A0G3OLelXYTF5vNGBtQj+GaIis1dL1O9Hmd2xOUFKvaGL6ZBxf3DiUNIAHD+VSb5XPIT82BXhqHdHBMH6qXLn/RtoIWazsQcx3fn7yxS9/bfT6V+5mBzt7KIqCfO5Hk4KthfOZ56KoJvvbJRs4WPJioGJA5J11hTfw7GLOBpkxprBGc7ZuUjjk1sAbQ2AW55nJoG9cr2QZqhBEFjApOgOi3kEngkIYgCWFoQiAdrj4FVL6Fem77qCbt3+PgF8DgMYwsmiwNpuw4bDbCcFEhRUAwr8KAlqnv9axInQRRNR3LNdhhBEA6MYB7tubyCDARF0/fV2Brg2DwvDgXAExBNCl2hyoDmeH+zbl0QzF3bqZ2sLD1JhXo2POC3OCCUMF57CagfqSYBagCD5/o7h2+26+//prdn/7JrbyEWyZ2bzwk92CytywZ8sGhWScmczmblRYznyGaWkBsXCWUBkrVkAeTN6weKKOA5NXQx7cqZi8sjwkInpZG5ZKAyXazHQTVUgERKOGTrWTGCS0KiraBCLpY5wsBA/+rw3ovwKIYPXvj+B+zQojIgDohd6KwkQCBH+HgNBq0HPtsDaKGHqnkolgFZiyh1OCzzK0XYe1BBuIQyCFsiLEFhQJURUSBCIRvWFkoeijNBgGX/Tvfe9nCA9+BW1CsUN2gjam2ibb+/k2gV5Y/pqG7fvWa3eHN1pghHB2fGrftNfKr+v1v/DzxRtf/QvFG7f348gW4FFVVT472Kk0twVyhil9xpn1nFnLVUaaWWemlSNvLeXeaaYO297CKKmBgSGGZ4ZhUmsYhsDGPInBXtgCRET9sSbpzw6oxA6IErSLoiGKxKgQUYq9uFEUhT6V2lJhaG2CiipnxEpBQKLKSip1J0YktqtZe2zq/+V74+5/nnnAWdOLIilGjcV//zd+FT95/c3/zDC++PHZw+/dw+w3H8vqfK0t1rGGaEAXO4ROQMOU942HRaBhl7hUKk59FGlTyrCYz/ubn0pHX87Jf37NH+AFRoFUdVj9N26igkC4vnsQ4kmns25ZS9Ubup5MnpERKwRbd/2abJzxQoQgpEYUUYyqMJMYdXDwSupIQSLKsMTcj8QSCJjMUI4JqICgCjakBIIQXRjVqmBSqKjayIAwQy0GYzkCAo2tKAAJQcUy2owRWMioAp3EbtkGnTWxCha2hmgngtW6M+u6ezw/XDfX3G+c75l/FEb9wRkXaShzVoQYMZ1MfuHk6GjZ1qt/dbg+u/fQnC+z69tQJrR1xGIxR91EQATe+0s+w1A6MqziG4Pmsi+yKSN5ehX8rMzE55MXmwhTwMiT9coIQCRY0Xr9sMFHH8weTO5Md8st47PMlbk6w4gUSJitZoaRoSNAmYnJCoFjvW5aY4SsJ08w/TyH4ZxYLwvU13NFJfQBTelj772J0ttmuvkPIBCJMiIJxPSXNSJoQidtK4QQVIOcx9XfneX6D06nhNp0cBJRdgQ5rLE1d//l27/9J395tKQ2LrrYLBaBYtt0b07+SfaTX/rGw2mDBgEagTicCxZWrEjx707efTsHwyjLebGsy53dsEQH6xy0I/RHe/owZwhhsOGGN/fSZ3pGoC9Xlb7KvOBMcL/CXjh6BFjr4MpJmGl9/M3Fe9+ppEAzarvXzM7+bgzjUYiSdWV0rVFes3VkAxGETLQERGcNaSNBuCZFFqkNhowJZJjQ98YkMFkyDFJVFZGgAgU49gt/P7ZBVRFVEEUoBFBQMZFVgkq9arr5+eLsdHa8ipl0C1r/T2/+7Nf+ZVMJlnlEYxU2BEQCgm1gvP7G3Z//8m9MGgdEA+kC2BJWkxZ/kC2wdHHIgqOvqSGFqqJVgr82nsUYwdZhTBXWGgEwFvUKEiO8y6AKxK5DDPHSAZSnixKeVYBEzwtTgM2fZ5Mh7YOQwDK2MJmBqgsrqQ9/c/Xtb70bHpz8VHP3zlvTgzeuxZ1pufJ+3EyKYlGMMs5yn1lnqtJqbnO7VWTI1GlGFrknsoZhmNkwiImt96ykw6aj2rZdO18tF6u2qaOETToXKgISdAgCtJ2gqQOF2DV118zXi9WDo8P7J3l91t3K/vf7/nzxVyZfQG0VHUlfGkCKlRWsxgGLPODRuIaPDKMGRglEgtYKFnk3uKsKgtlsR6DheQgDyoTGyFDtqtBu6Lqv0oeOh+5rTx9ATyv+n4UXXws0fBa6lDAigRYEa8oQD8qTOWXzf/H+7z96p732cNdUk4kpeBzyyf5o98Y0m0wz67OqKnNbOGsfW6OeDGfWm8wbk2UsTGyYiZkNeWtBYCVSVdHVerE8Ojv+5KQ7n4Uo2oUuYqhu0BghdRe6tu7a9aqp63pZr7uuJemOu/PVf/G3/9b/O/mZ1zArA2bUAq43P2gINUajWLuAaAXI+vg6a384njdVoZus4Abii/dFSRGHEpGIzWCj/t5NQqwfbq2fSpC9fGVpL4YX5wQPn/t49pOellapd0yJwDnjJ7/+U8FHDm+7dfewo9kpWvZNSyeffKe6I9dvjU1VsjIzsSGAnTHsrbG582WeZ5nLvCWQYSIQiIw1Q6BTKbBiIW33uD2Z//t/6ZeOW40duk6UEKEqfYMnFdUu1s1qVa/mx52ERgzDyVRPrzOiaQEehFQuJ/foQihZCXGI+26iL5EUNLQjpGH1B3q/VHi4H4ROFUZ7iwwEKIZZW9qbO1ECZBg8/fw1//nv+2fxqu0QL34HoEvbswJmmEErEMAIolOEDLjxpbdCkRcLKwxuBPfc0fKIZWa2CjbKMGT7sgMyxHAZuXLX5nk+Ho+dob6qFEzQGFiJmAhQZ0KGgDzs1398/L3H57JYhyFLoYNBIaogMlhTK+fZov6r/+lfDUEjogGObQ1vAhz5XvxE+zDqpSQfLr02XPzuOIQocSkh0t9NpL35M5g1YdMwS58Up8WokKhQUYQuvBQd2K4qV0fhNwIwfLlx5Z7ENC7yoGAABn3WKkf21HV99BuWgZwBzmEvpYCesPnawEIg0lKoI8WwCcgKFKKK2K+5EEREVYQhiKRDHb9eem7P2CBPf7O55Bk5vWyy0KULN7c79+T5b0weBRAHgTfWIsa+iE1VL37Ls/tB4vlcHQW4xKfk6Pvgvf/s36NAwfZTL7Jv2NTX4pj+JFnvhA/CroQLBdjcJip9tIXkolgNz3uef8oT/9Rzeeaezf+b25mfvpKGANXFrsmDeaRICvBD8MJNoOfx5/WnU6D3Zi+xCfPrkOrnTSnAJatFN4Kvw0ov/dcXz02ffP7zXkKePMpQG/WpROwzln5Mgv6jcCUV4M8NeibzObA5iaXaV2FiU5N0IeQbE6f/J08VOCSB+zzx+VaAgWcDgptOC8CT2LkOocQnoUYMZgW+v1HxI+vDj7aF/LhtWHrmEV92U+uVqHl9YlA8iTpd1IzR5esuWeTP+bteSYcp8SPxud0BLgv8s7dvbnsStdeLH/gsIf/Mde6zvdrES8ArsQP8IHyW4iQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSLwq/P9YoRM6lQIeCgAAAABJRU5ErkJggg==", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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"], "frame_max": 21, "frames": [[[0, 0, 0, 100, 255, 0, 0]], [[1, 0, 0, 100, 255, 0, 0]], [[2, 0, 0, 100, 255, 0, 0]], [[3, 0, 0, 100, 255, 0, 0]], [[4, 0, 0, 100, 255, 0, 0]], [[5, 0, 0, 100, 255, 0, 0]], [[6, 0, 0, 100, 255, 0, 0]], [[7, 0, 0, 100, 255, 0, 0]], [[8, 0, 0, 100, 255, 0, 0]], [[9, 0, 0, 100, 255, 0, 0]], [[10, 0, 0, 100, 255, 0, 0]], [[11, 0, 0, 100, 255, 0, 0]], [[12, 0, 0, 100, 255, 0, 0]], [[13, 0, 0, 100, 255, 0, 0]], [[14, 0, 0, 100, 255, 0, 0]], [[15, 0, 0, 100, 255, 0, 0]], [[16, 0, 0, 100, 255, 0, 0]], [[17, 0, 0, 100, 255, 0, 0]], [[18, 0, 0, 100, 255, 0, 0]], [[19, 0, 0, 100, 255, 0, 0]], [[20, 0, 0, 100, 255, 0, 0]]]}
\ No newline at end of file
diff --git a/project/animates/sword.animate b/project/animates/sword.animate
index 21cc63a..26a8fc2 100644
--- a/project/animates/sword.animate
+++ b/project/animates/sword.animate
@@ -1 +1 @@
-{"ratio":2,"bitmaps":["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAD6SURBVHhe7dQ9SsVAFAXg+MNTeAhaWCrWLsHGUlCwsHMXgo2NjZ31a1yBVtaCrSvQ1i24hSSegbuEBAS/Dw7M3JnqZEgHAAAAAAAAAAAAAP/NOI5rySI5GobhNDlJ9uuYqaXo9RR83Pf9U/KevGV/kxwkW+2D1FWmkmKXKfYuZf8k38lrZpeZHSaLusaU2ktOyRcp+zP5Sl6yv858t53VNaaWcrdT9mPSXvpHskrxO3XMnNpvJYW3F/+Q9XmNmVv7raT055R+n/VejZlbyt5M6VfJbdYbNWZureyUvkzOagQAAAAAAAAAAAAAAAAAAAAAAAAAAADwd3XdL135q9NaPZ6+AAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJ4SURBVHhe7de7alRRFMbx3DSIgqiNIBJsBUUESyutBAsLO9/CWtL4BtorlgFBRGIEEQwxMSBiMWouGo2TCyaTC0lmJjM5ey+/HVfeYPZB8P+DNefsS/WdxZ5zugAAAAAAAAAAAAAAAAAAAID/lZkdVnX7ELmkkA+C1rU3xngthHBf1xsa9+1vQmcdhK7qUdAXFPh4URSjur+r6vdt6DQP/ZDqkkL/ZlZs6jqh8WnfghzU1UcOQlclmop3fBk5KPA+hXxRYb9LiWtsujR0Oe5b0Gke+hUF/TaFLtHrh29BDgr9jEJOoReqeur2RPfTvgWdpnzTG8yAQm6oYgq8uWfWLvaD1y+vkNko3G6FPJ9CT7ZbZpVVs9m1/Ydw3bchB3X9+dTxqVLwk4tmH1T1VnjlW5CDGj11/XDq+HTgfFwye/rVbKpmNjzDx1N2Cn8jhb+qF8mRObOX381m1sPww4od8y3IQZn3KPzdogjNyorZ8xmzaXX9cjOe8y3IxcNvNtq2OV41ezFrttYMv30ZOSn8dOavqBrjC3+PnfVGvOfLyE0P4HH6qhr9Zfbmp7p/Lg74EnJT+LdbeyGk4F/PhfhgMp7yJeSm9/yTavza2HyIYwuhPTRkvb6E3NT5fQr/2cRS2HhfDfVB/Qn7EnJLf7rq/pvTq6H9uRa2fBplSOGrTixvhdrUWqj7NMqi8HsV/shsLez5FMq004qXq+th14cok879/upO+FKp2GGfQll09PSsNOLVxXq85VMoUzr7F7fDIx+iTOnNR8fP2UGOnvKl8NPx8+RTPOpTKFt6CH4LAAAAAAAAAAAAAAAAAAAAAAAAAACAf1RX1x9x4x3SPdhnTAAAAABJRU5ErkJggg==","","","","","","","","","","","","","","","","","",""],"frame_max":5,"frames":[[[0,8,32,30,100]],[[0,-16,32,50,130]],[[0,-24,40,80,150]],[[0,-48,24,90,180],[1,-8,40,100,255]],[[0,-56,24,100,200],[1,-8,24,100,255]]]}
\ No newline at end of file
+{"ratio":2,"bitmaps":["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAD6SURBVHhe7dQ9SsVAFAXg+MNTeAhaWCrWLsHGUlCwsHMXgo2NjZ31a1yBVtaCrSvQ1i24hSSegbuEBAS/Dw7M3JnqZEgHAAAAAAAAAAAAAP/NOI5rySI5GobhNDlJ9uuYqaXo9RR83Pf9U/KevGV/kxwkW+2D1FWmkmKXKfYuZf8k38lrZpeZHSaLusaU2ktOyRcp+zP5Sl6yv858t53VNaaWcrdT9mPSXvpHskrxO3XMnNpvJYW3F/+Q9XmNmVv7raT055R+n/VejZlbyt5M6VfJbdYbNWZureyUvkzOagQAAAAAAAAAAAAAAAAAAAAAAAAAAADwd3XdL135q9NaPZ6+AAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJ4SURBVHhe7de7alRRFMbx3DSIgqiNIBJsBUUESyutBAsLO9/CWtL4BtorlgFBRGIEEQwxMSBiMWouGo2TCyaTC0lmJjM5ey+/HVfeYPZB8P+DNefsS/WdxZ5zugAAAAAAAAAAAAAAAAAAAID/lZkdVnX7ELmkkA+C1rU3xngthHBf1xsa9+1vQmcdhK7qUdAXFPh4URSjur+r6vdt6DQP/ZDqkkL/ZlZs6jqh8WnfghzU1UcOQlclmop3fBk5KPA+hXxRYb9LiWtsujR0Oe5b0Gke+hUF/TaFLtHrh29BDgr9jEJOoReqeur2RPfTvgWdpnzTG8yAQm6oYgq8uWfWLvaD1y+vkNko3G6FPJ9CT7ZbZpVVs9m1/Ydw3bchB3X9+dTxqVLwk4tmH1T1VnjlW5CDGj11/XDq+HTgfFwye/rVbKpmNjzDx1N2Cn8jhb+qF8mRObOX381m1sPww4od8y3IQZn3KPzdogjNyorZ8xmzaXX9cjOe8y3IxcNvNtq2OV41ezFrttYMv30ZOSn8dOavqBrjC3+PnfVGvOfLyE0P4HH6qhr9Zfbmp7p/Lg74EnJT+LdbeyGk4F/PhfhgMp7yJeSm9/yTavza2HyIYwuhPTRkvb6E3NT5fQr/2cRS2HhfDfVB/Qn7EnJLf7rq/pvTq6H9uRa2fBplSOGrTixvhdrUWqj7NMqi8HsV/shsLez5FMq004qXq+th14cok879/upO+FKp2GGfQll09PSsNOLVxXq85VMoUzr7F7fDIx+iTOnNR8fP2UGOnvKl8NPx8+RTPOpTKFt6CH4LAAAAAAAAAAAAAAAAAAAAAAAAAACAf1RX1x9x4x3SPdhnTAAAAABJRU5ErkJggg==","","","","","","","","","","","","","","","","","",""],"frame_max":5,"frames":[[[0,8,32,30,100]],[[0,-16,32,50,130]],[[0,-24,40,80,150]],[[0,-48,24,90,180],[1,-8,40,100,255]],[[0,-56,24,100,200],[1,-8,24,100,255]]],"se":{},"pitch":{}}
\ No newline at end of file
diff --git a/project/animates/thunder.animate b/project/animates/thunder.animate
index f5447fe..9383a1b 100644
--- a/project/animates/thunder.animate
+++ b/project/animates/thunder.animate
@@ -1 +1 @@
-{"ratio":1,"se":"124-Thunder02.ogg","bitmaps":["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAADo6SURBVHhe7Z0HWBTX+v9zb+5N772Ym54YU2+KsaN02EIXEWKLYjSxJybRJKRdTWLUiEhb2MruskvvICp2QcDeUVEsWAAFpOzOec/8zzu7q5ib3JJfbjT5n8/znGd2Z2dnZ2e+73ve95SZazgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD+aMj/qlnEf9FuXxbDuc3QhSZAJ3FueoX4hAvijnmGvHPWMLCrNeGhYnXWlmJcRP/8p8U3D4mxvF9bhCc/ylM9H9m5doKUfwLLp3vsVwmOnx/+TqXMJ1iZ4LtKfSk18S/xoSJ1y3xpdez9zcsDG24cWEovTFJLt4klWjxpgVR9GZXwfe4HreJGS3ewPZzHe5D2h/bv6OG4HD+C34s4p/DJe6f2x7FbbWK12Fhr/+CorxM7NGSUK9D4bpEHhcm3pKipLcmhbXcvjhAvCN+pHinKpTelRQh3rMklN6LJT6I3hcf5SzsNa5bGkjvxm2XRNLb0DDQeJz7lwzBYXQczr8BxVxRcdGr/4fhDW5zeQiDpYKJvkIj3lCmpzdjqUlyeHAU+wIvejOKHQWLwpUEHNR+33f+Fx5Yqux4KCG04+FlAZ2PxAV3Phob2vU42+aJuFD61NLw7mfiQ7ufjY+kjsJeJ0TQp/HzpDDxb4mR9EE0Fvb6djQErEmwRkDD47UB59+Cgt+1S7yOUnojK9ez92gMztDmJ4SOXt7p0X8cwmiYZ0fBx01mXn0cvXXxaIdHZ57+nh8U9H7m6R9SB9BHYhX08cRw+mRyOH1mWXj3c3EK+vzSANuLCUH05aVBtlcTQ+yvJ4TSvomhtL9qOB3Ithu8LNTulsRK4nA6JC7MPmjJcNovfgT9e0Ik7bMkvOtJtv3DUq3BDEwKj9gxXaoNOJyfhYnbEbpcK7rEzUTzz3H6LibyAyxOr78YvuiZx/2WhS8oOgxf5jGvnsrCE+bpH0Cxx/nTRxcFi08kB9JnkhW25zUB4ivqIPpGSiDtnyoXB6UGUrdEueCRpBQ9EwMF78QgwTcpUPBLDBVkceFCwLIQITgplITFDycjEobTyGVhJCo+lI5UhdNwZkDBbJ3/suF0GBrLD8PpC7Gh9HH8bTQ6V20gGSo3Ao6DS17d5dFR5JcLvWdCennogmGGFL685RD6oqALD6Ln/YGFIsksbMGQhXnh3sxzv5g43PaqKpD2TQ20D9IG02FqmeCfxkRrGUsjTJF0tD6MjNEHkLdTWVEHkPFYVAFkoiqQRDPRT2RlcnIonZIYTGYlhdLZySF0jiqUfJYYRD6NDyMfJYaS6bjdshAShcaSECIOjQ+zv4YhEx4T5hHScbP/gv+Ph0P/33G50P+p9YUljK6wRRI685guoaM3Z+ukRPQ75lGXjqAPLQunjySEdz2GoctSFrowkfVZyoQuhSGh9r4JwfaBqgBhqCpI8EoJEmSaACFQq6DD1QoyWqck75jDyfuZo+DLrHHCt9mjhUXWSFhkDIYF+gD4TusnzDf4wzyNHH7QyuF7nQIWaFhRK2GxVgFLUgOFZdoASGbvNakBkJqshPjkAFiSHATzVcF0LjOKqfHBZGRSuOAXz0IjdqzPJUfSXphnSAkyM2r8745zwvkD4xR8jzj9Mq/eQ+zY8rI44Nwd6CmxVUU1gt7vEHrnI4uZ0ONCu56KDRZ7xwfRF5hhvIJhRiwTeWIwHZIYQD2SgwUfFtrIVSxMUQeT8JRg+pbkzeVkskZGputlZDYrH5uC4R/mEOH77HCIzQ0HVW4UGHJGgDknXLRmBoHFrHQUixyyrP6Qny6HPIsMCox+kG3ygyyDDDKxpCkgRy+DYp0cCjXs81R/yNEowSQZRCAsYDXHR+y/jGU1hXxZCB3A/lOfJUG0lzMHuUk6D+zccCP4Q+IQPooeLzSKHdvTpYRU8upNF8MX9Oo/OMWOrShs3ROYjGIyGTucJaEsAY0PsveLG24fkhJCPZYFURmLz4NTguiIxEAymoUp49lykkpJpqYqyCyNknykltMY5r3/ofETFmj9YAnz5gl6HyHV6AV6swxMUpGDId0f0jMCICODiTxbDiWZSrI6N5CszQ0iG/KDSGV+IKnOUZKNuD5DBiutvrDKhMWHrDH5k/Vmf7LRLCeVWKzBZJOJbYdGoZWBMVUJscwI5iaHkAlJQVTJaqf+aMCJQfRB/O8aFtKhQ+Ch0B+KHsJnIQ1eZPTueMHRs7sSUmxixDh9UXDXEz8E06fRO0piH0FfZ+HCgIRwYSh77bU0XJAnMo+eEEIjkoPJGFUwmZSspDPVAXSOWg5fsvKtWgaLUGxqBSQw4aVo/ECr9QWjzhcsad6QrfclBWZfKDF5QXm6N6yw+EBZpi9UZPqTddkysilPQaqKQsm2lZPJgfKJ5ODKt8mB0lHC/oJI2FU4kmwvCCW1eYGkJpsZQ0EE2ZIfRbYWjyc7iyaRvWXvkLrSKeTQiqnkcNFEUpcbQXaa2D71/lDGjsuSqoBlrBb6NCGQTEgOFOQsQX4DazLnebgFa0JeC/yBwKZK9Gro8VH4UkcSdhQFdfRKDRafSEIPGGp7EUMYybNH2vvFhtsHs7jdPWkk9WOiD4qPoCMSWELKQpyJCcFkWmII+ZCJPyYlEL6VhC4TUrT+kKb3gwydH+TpfaCYlTL2vjzNh6w0eJPVrKwz+5GN6Uzc2WFkS044qSl8i2wrGkf2Fo9iQp9B6tfFkOPbE8iZPXrSvC9PPH+4FNr2WqGlVkVOVy0gJzZ+RY5umi8c2bAA6qsXQv2WWHJkRyoc250Bp/aXQ8vRSmg7sgEuHKuBrtP7wXaiBjr3WEhL+fuk3hJItrCaYJXWn2SyY17Gku+5ycHimGWB1BubVjF/iZedv9NVC3AD+AOAVTl6fYzpMXHFOF660KHdzyaH2V5JDLX3jw8S3JNCqF9SkKCMDxZCWPwejq0m8WF03LJQMjkxmMxMCCVzE0Pg62SWkKqCIQ5japaAGlP9SQ7z7qUocKM32cRKjdGTbDN6kJ1mT7ILi8mL7M6UC7vzRpL95R+TI3szSVPdcmjZX0JaDpSL5w+thNbDa6HjxCbobNwBneePg739JAhtp8B+/gTYzuyFjjM7oL15Hyv7SVvzAWg7dxjaWutJ+zlWWg6StpZDpONcI3S3nQbhQhOQzlaArnaggg2orQPoyUrSsfZz0iAZAQuXsCZitdOSpADyPv5fZvyDMMRDx4C1AJ4zRy3A+R3i7JRiSS5W59gOLzVLjuh4CJsg0dPHMw+vChb8MTFNYElpspK8m6qkM1QBdHYyC2WYd/wsKRD+wTz89ykBEKcKghT22qhSQLZKKcXTKzXMm6d5kVoDE7lxGOw3DRMOm4fB0XQ34bjVXThh9RKOZQeQYwXRwrFNi8npwxXQemY/dDFBd7Jl56k9pOPQamjdncuMYTk5d2QTaWuohrbjNdB6vBJa6tfA2bpSOLknG47sz4fDB8vhyNENcLSxBhoOlsHeDf+AipWzobziI7Jmzaekeu1csrPiA7J/ewo5fbIKOk5uga4L5wC62wE6m4EcXUPaKuaQQxY5qTYwo2X/Qc+MYD7LCSYlBgmyZHZeMATEGpLVADh+iLcI/f64JH5MdLE614wW78BWG2ySxOY/7EhiSWBEcoj9XXbxP2bhwDytUlisk0O82g+SMGbHpkT23qBjMXOKjORqWTKq8Serdf5kk86P1Oq8hd0GH+FAupdwJMOLid2bnM70Jmdz/UlzXghpKRlHWla9T5q368j5Y1ug4+wB6GrcBx0HmbC3Z8PxyhRycP1CsnvFJ2Rr+QekZsVsUr3yfVK1ajbZuGIKVJSNhZLCkZBTMALSc4eDPn84pBRHQkLxGIgrfht+KBgD36X7CF9ne8E32d6wLMcbDHneUFQSQSp3qMnxtkawd54HgjUIM4T2UztJB647WEKalk8je9P9yFqDL+RqWY6iUtCPkwNJRHwIHYxNt1hLSjnSxRYhzu+ES8MRpGR3tHgDxv04OGxZCH1p2XBhGIY4LGmNTgkgczRKWKBVCMk6pd2SHgYF5kBSmi6D5WkysjzNF5cgxe5pvmQDi+OrjZ6wzeAh7E33Iget/kJDTgA0FoRDU+Eocr5sAmldMYu0r40hFyrjyIW9JdB1aid0n91Huo5Vw7kqNalbs4BUl8eQ1QVToCA7CtIzAkFnlgupVgUkm/0hId0flmbIYTFLir8ze8NXZk/6WZon/dDkQWaY3Om7aZ5kQpq7OMboQSMNnjQizY28lT7YPtE6WPwoazAszPOB9FXTyUZWS5xloQ90tIC9rpAcX/Mh2brmH2TX2TpgIRN0VCeS+pxQstngDaU6f3saM/j52LmWFCL44XnCZlFsIMBzx/sFfjdcLn4MfbAKx44qTPCY9/dKDiWRSUFkRioLbZiHT9LLwWoOgeVFU0ntBiaKNfPIwdJZZH9RNNnDRL0zL5zsyA4kuzIVwp4MOdmf5SccylaQo/kRcLLkPdJUMZe0blhILmxaCh2bE6Bju5F5+LWO5PPMLtJ5uBzOblpIdpbNhPKMCNCnhQixxgCYZ1SSzwz+5CNWk8zS+ZLpBl8yRe9NJpn86AS9Jxmr8yFvGd3JCCb+YKMXVWjdBT+dh+Bp9KVuGi86kBlA/7Sh9oGmwYK7ZYgQlD3A/k6eO3xVPh6s21SwjQm/u/sCCAfLyMHy2VCW5QeGwnGQvdUA21sbWG2wDZpYsr2DGftKlqhnMAOIVQfQ95OUYhg2i2InnjRwTi7exJtEfxc4430mfldrD4ofl8sC6XMJwdQ/MYiMVQWKH6kDsXnSrtfLoCBrJNmwLpbUHz8C9sYTQM42gL1hE3TsLYTWXSZoqYqHs1Wx5OymRaRp40LSVLmING+KJedqNdC+KxM6dpVA555S6Ny3HDqOse+d2QWdxzaQ1u0qUl8+nVQWjIaCzEBQGf1hnt6XvM9yhglqOR2pkdMQg5IqU/wFmVom+KTKBE+tkg7T+tMhKj/7QL0XfVPrLb6m8RJfSXGjL6g8u5/TedBnVN70Ka0vfVI9hD5tHkKfS+9P37AM6vLNdSNji5Xw5ZY4KG05As1Nh6F5ew7ZtuZzyMoLYrWJO/ksIwi+KpkJ2u0Wsrn5EJyrKyL1+WPIGoMP5Oj9IVktt8ekBIhjkoOoe1wIfR77BbAT8FKTKOcqxSF+FDwWNABcYi2wOKDrsbgg6svi2wmqIPKpmiWzGn9ITw+A5TmjSO2OAnL22HGAE8cAjteD0HwKCPOe0NXmKBeaANrPAmll68+fdCzb8D0r508DOX0EbC0nobu1EbqPVcLZdV+Q2qJxUJoTCiazD8SafcTPzd70PSb+yFQ/Qc4EPyxZgTmI7dWEINvLyUxommCxN7a+aHHUp4I+Huff+WiyL+211BMHyYkPqNzp/fFe9L74/u33WXzpvao36f0GN9rLyIzA+qb4WvZg6l0USN6pXQyqpgNw+EwdHNu8FArXfAjJBSFkjmUYHWdi4ZLRj46yhNAZJR9D0p4isq3pEDlbvYxsywghhXo/0Grk8I06gEzGHuKlw+mrccH0UWw4wBwKzycPg65KnJ7faQC4xOqavb4Ox8wnhlBvVbAYnaykMSzej9crSIYpFFYVTyc7j26G1sZTAGdOA7Q1A7F1ABABqL0ToPMC0AvtQLEpsmkvdJ+qZZ59E1xoWAeth1ZC0/5icurIWmhk605u15OtZTOgMCsAUs0+wmKjl/C52YvMNHrTsWk+NFjnI3im+tvfTJHZXohTdD212KfrsWTfjl7oYVnyeX8qE7UukN5tlIl3xrOS5Cne/g0ruQPoreiBv2VLfG1l67J707utb4gPWPp2PZ7bl/bJHkL7lw4XQnZq4fvTO6Dq7H6ys+ozWFocQN4v9KVvZw4SA5kBuKezsEnHwiedDw2wjiDTK+ZD2rFqcujsAXK24lOyRu9vN7Ikf3Gqgs5iBjA8djgdqHIM2LsYBnEDuOq43POj8LGg508OpY+rhlN/7KFNDRA/x5YOvQIyLBGkYvnHZFddBWluPgG25jrS2bQf29Kho70doPk02M+cAtvJ/dC2JwuOl4WT2nxvUp3vQypZWZPnB6X5csjKVYKBJb+q7GBhUYZM/NziTd5Pd6cTDV40Su8uBKrdBS+j3N6fhSsv6VnYgh4dxb40sPVuHFeEwpba2pm4sH9CKv0cxdKLFbbUv0RvLmPF6ibeYn1CvN34jHhPyav0wbyX6OPZf6fPZfez9y0ZQWV7LPDVmb2wfLcBFq2ZRqfnDSMROW9S/9zBdEhWP/oqM55nMXQy+NBnNb4d/dL8aXDeOPiiRgXlZ3fByYZ1pL5gLMk1+EN8qoJ8isM4UoKlodN92DE+IB0nbw262hD/5BqxicW58hp8jYPVkoIFzyRWnaewuFgjg0QUf8ZIWLnuO7KnoYqcO1UHnUd3krYjO8TzdTvgHIuXd26YD0XLo0VtjhssyeoPSzP7QXJWf7s2ewDosweCmi2XZQ6CbzIGkTmZg+l76W7Mww8l4WYPKjeyBDXNjyWnLG7X+tDn47y7nlrCvLzKvf1+9OooeMmTOlulMK6WROUM16LxdR/xOs2j4g36++nNuc/SWzUvi3dY+tC78l8T78liws/8O300+43uZwr62l4uDbAPWDFB8Du+DpawmL90l4nOWjVZCMgdxkT/On0jp5/tRfMA+qS2H33YMojem+Qm3hPnJj6QMqz72TR3Oswss09aPhNSdppJddMhOLtDS2rTg0CjlsHXqgA6MTGU+mJrEDPMh7HzkOcBVxWXxN+zhULy/qzKxlGYqYEkWq2Ar1m1nswSvIyMCLJy3WKy99QeFr4fJBeOMg+/fyM0bs+FrWWTIcHiRj6wDqUTrSyZtA4mY7IGk/E5g+jk3H5kRvYAOjOrP5ma2Z9EZw8iEekDBUXGQHGocTDtqx9IXza6ib1Z+PKEIYj2wpgdxYZengnuFvTojskxl+b9SiEbJuuSoNh/uYblK9eIf0XxW/uItxS+KN6Z9RK9L/fv9CEm/r8Vvi4+kft697M5/eiLRW7211nIM2zTFzTkRCUsvHAGNh7fRD9dM8s+pNiX9sl8veuJrL60l+kFer9xkHgn1h5YmzBju4nF8nfgLDOWP/RL96aRuRHw7YYfoKL1uHi+YQM0sAQ5XyeDBSo5mZocIgTEh4mv4SBAV3MoN4CrAkczp0v8KCbnB9egh01U2t+Uhhqj+GWQYvCDrKxwsqoygew7vY+0njkMrQ27oKmuihxZ+xUYLR50ZroHiTR5UF8mlkEoaiMLLbIH2Pvn9KWDM/uJnnlvCl4Zbwgemf3sAzP6078b+4u904bRRw2D6YOpzLsaZefvNPjS23BCDIoNxYLeXTpGp9gdRuoql8D1VmYAxU/R69HrG5m3t7xMH5bCnDfoMxjnF/SlL2d50DdWDqdD1kwXZHX5dGZLPVgad8Ci2kRBsXK87flSb/qI5RV6bw6rNdCIKljiuoTtk/2249YorHbBUIYlww+Z3OjrLC+IyAmB+Ss/hOITtXCyqY40b04glUYFxKXIyQcpShIWH0T74cwxTITZPm7g/QFXnMvFj0vnBxIsxn6KXbhIJvyvdf6gNuNQ4jFkzVadcJB5/vMnD5K2ozvgdLUaygvegq8sHmSc0VPw17rb+7Iw5hn1YPoIM4IHUNhMyA9n9qePZr4oPpH9Kn0SBZn1Iu2FnrmnZ3WJnQnuL24oNHZ8WH5K7D8FbovfZ57+JiN6fhbqYOhS7E77MI/+9+XDab+V71D3DbOprOoHOrI2kY6tW07f35NLR63+lL5Rzjx0Pqtx0HjweJj4r8NjYYZ10ehcv7GkL73NzAyFhW799MPoqOwQ+L78AyjbaST7LjRD19G1cNjAnEaq3D5XFUBGJijsA5cEdj2J/SjYoeg439wArhg9xY+JrnO1BHr/lEDBm8WwX+Cw44wQKFw+lVQdWklONNZB27G90HqoEupXvg9aiw+ZafQSw7TD7EPMnvQ5rYw+rOpH79IzD46eE0MRFBMmo+hNi5lwUGAoUvTU6E3ZsTjnz/YU+38vDtxHDRMnJrwY71vl4t9Wz6AvVn5KB1fHUtk2FQ3foiWjtujJ21v1dOxWjRi2aYE4tCJa7J3lQx+0vibejseKx4Q1Ce7PIXwXjhoGawOdB70b+xLMQ6lHpgedlBsJSatjyPqaFHKgux3sGAqZAkGj9bfHsBAyKjVQHIQtQThcnBvAFQYvqhROOMXf8yLj62QFfT7Vj85O84fUrAhSxi7stsZa0nzqMHTWV8LpqoVQUTQWYo0e9miDhyBDr48dStgEid4cBeISkEtEWHAdetQKJvifFtj/Ddwneu0yZnxVo8UHNi6kL1Zr6bDtFqpkZeS2HPrWNgsNZ8IPrFpMh6yfRp9drqQPYaiDRnMxzGHH9dPiZHkRM7CUAayGcKcP61j4k+5BQ1jY90nJBMhgedGOI6vJma42ELBzLDMS0jQK4XMWBr0VH0AH/xDc/TROl8RWKm4AV4xLzZ0oRseFuATz/vdoZHSCQQ5JWRFQtvFbsgvF31hNmralkr3l0ZCXgWNrvMgY0zD6PMbvOs/Ov6HXxyQVjcoh6p8W0M9/9n+CJfJh14o1LFdgBlg9hz64ehl9bkcGfX17Bh28O4d67M0Rh7KQp3/1Qtp3/RT6JDOS+7A2QuFjLYXC/nnhI+Kf8HxhzcbKfcwA+hiHdvmkDyWTs3zhh9J3YcU2MxztPAdC53mws6T6pNq/S6dRwOdYAySxGkC631Bg6928BrhiXBrfg0JFQ+jpgfGi4FACYwAsKZkKK3cZyMEzu7BVQzi7dZmwuyASci0e8G2au22MYRh9NlfJEk0WM2PSiiK6AokdM+aYP8fEVPwlJsx6XX2FeMOuCvGW0hh619YE+vAWY/fTu/Nsz+8wir1rF9Kn1k0V/7aOJaH5DzrCL1eMjzXHv66J2G+w7ZJeO3ET5ixJnuLf0rzowHQW+2d4wBe5SrCs/IRsZbG/3d4NcIqds3XfkVqNn5CqVtJPcGQoTt6PDxaf4DnAFUQSPxOMq/nwxxddG0ifNDCPVTwVSvbnkyMt+0jroTJorJpHtueHQa5pGCzEkZNWJgDs0sdQIM7t9C0oJIf3/O3B/8MWeGe5P4tW8Vq82RYaAhP9nbsKxQf2W+jDWxeLdzQsZGHHNY7Y3in4H7Uo/RwOp4GFifY67FnWsVxH790dku5FP85UgLr0HbLu/BHoEOxAWw5C524TOZomh0KtPySwBHh2cpAQmhBo77s4QHyMif8OTPZ5K9BvjtP7O5sSf2wAFhaXpinEMUVTwHqolBw6vZs078smRyqmkSqLL2SZh8JiiyeNwOrfFUJJtYgk/Ct6IaXfdt5VznGrxQrxLwcO0Os3WuiNaAxoGJeE/t8c6z9vi0MoDJ7UI92bTs9QCIn5b0M5E30bir/tNNirFpJ6k5ysMcjAqlbAouQAMgXHA+Gkoe+x3yCS3oaGdKUcxv/HOEIfjHUxCUPxOj+QagaDzD44f5IQf2StcKBxK2ncvIBsy4+EcqM7GNPdYb7ZXfDDzh9J+C4DuPLil2Cil47BaQDS7RVxyVb9qsfG9nmt3sv2gsmbTMmQQ2xNLNnQ2QLdtgtA6ldDS+l0ss+sJBvT/Jj3l0NqigK+UAXRsYkh1ANHhF4cCoHDy7kB/LbgCUfRO8IW8Zae3l+laL9fHdz08fJ554oPlJAdK+bCCr3nhXSTh6AyupPPjB72/mg4+B0sKH4sV4P4/xVoCM6X/yecBvUXzHesfnQ8cwzxR1bBPiZ8e0sdtG1YJBwueo/ssoaSTTh5n4k/Dad+JgfR6UnBNCRRSd9MG0kfxV5gaQiH5Hyu7nP3B8Mhfjz5GMM6xOsA16sVLQHm0c2Lcmc2GdNGNuvU7q3xJh/4xuRBp5h86Uuu7VH8l1qO8AL+sS+iU/jXYhhVz/KJ/AjqtscCRc374ET7cWjdl0HqSyaQLYVvk1om/jU6X8hLlYE+JQAW4VzoxEAalRRCB+DEeEx88Vy7Jhb90c/dVYXk/Vmi6uycuiz0USnOP6UNbXovbdS5r7WBrV9qfO1zdT5kptqbjGTbP47hjmtbvIB48Rzr/vgXEHOH0xXiLUfX04cOrxG8j1eT1czjn9yuJTtXzSJVBVFkfd4IFu9724r0PvZ0HCiYqoR/JAeSmYnBdGTCcNvLmFv9uObk4c9vDJ7wKU9Jwwxu6nnysSUn1dPulqo8N1ajuPC2xkcco/amI3U+oieOp8eLhtuh4F3ix0cKsTV/+AuId6zeVkZvbj5IXzizm849tZOsbVgn7N0aT6pLWeKbF0qKrIEk3+DdZdZ5CkkaH2GBSmH/WBVknxgfJChxGiSeM2lf6DzwHDqL67xyfiNcNQDG8c5V0kXReYp/U/t0DlZ5d3mp/SgWd7WcvoFDjvFz6cKxi4ihkzVsl6vq/j2L/z8SHoY+6PnPHaTBTfsg4dByyNkcR0pXzIDcrAi7IUtu1xo9u1NYjrTUyEJFvR/9OFVGJiUrSERisDAMQ56eIpfOo1P4jvXcAH5jHK02PS8KVs16BX3c4N7dR+1hezHFy/ZCkrfYW+MvPuDy9hi3YovRFF/HnOA/yIX7l/8BPX+9Rrzh5Gbqd6IavtuiFRav+1qIzQixLbTIhXkmH+Frg7fwldG9+7M0T5yEbxun9qfByQrBXRdIn8Fz9lPi557/CtPz5OPFSPJsud3k3n4/Cj7Rhz6IBQdqMaFfhwaA4ZHrNW7/BxH/z4JevyZJ/GuV5sID9atp8A4DmVIZa5+d/Xb7e2ZZV7TB0zbe4GWfqPO0TdB72CINPoJM40cH4swwHAAoTXiXztMlfix+bgBXCZgIYz6AzaHYLIplgVfjza4wh10wx7h354X7o4sfe5N3xYm3bNPRZ/amC8N2pncoVn1xysPqf+4V7TD7a6ah9jeNnvZBBjd7P5yhZvYRH2OCfwgn1y/xpbfhuXLu6jLw/OH55MK/ikBPhxcFpw1iTuAoNdIY/Bi3CsczcFnI9D8UvnO/V4copLFEozU3VJXvuftw7clHSwz0QWt0ze3fDjh7q6EvvQ2bjS396F3YB4ATdjT+F6QaU4eD2lgtiSJ37uoypLzrogPhXEU4qmIs0kWSSkyPKvqXXzA0Lucr535+/DsOUVwsPdZf+m1X+Z+Dv8GOIwZ7j2+gDQ03Hjhw4Hqr1XpxGDcWdAw4YhQHwbnuMiEJ/7Ia8nLwPFz6T5w/Kk6hOkpP0WANI4VSTCRYw+CD7rADCOfz4kAwV2HbSOtdNRFuj99z1UKXROQqvx4oUldxrvoRjvkLONAPR7oWs+PFY3T9r56GjMd4SezS8l8cq+u/9CycqxzpQuGF/jOKggmTCdUqCRX7BVAEF4WBoo9mgsbxLs5WJKkHOtrxdEfHEx7P3oqx84dhLbdLt1jHODpMvAXnAcfIT9yET4RE45D2cdEoHJ75kkH8Mn5e8JeDvyMZs3P0KE62d42idS3x8//mWHCf+F8c/8dRLhkO5yrDIQC8SOj5cLYUTmtELy6J/UfeT3rvFKvrovb8TPqO43PpuWFoFHjHZDQATYB4B04UwSJNNQykd+MtxdEwpMFjjvEzjkkraGS/QHy/DNz/xeL8PVf5z8FzgA/zLp7ieDhgPnMGSTHiTQeKpecj/1f74vzPcXo+FCyr/nGOLE580b1B7za6td2DIYFL4D/GZRDOtz9JD0O4bIneHo0D42wN3u3Nq+txtXfnI3H4RHenQeCzgbH/AvslJEP4D43gSokMfxeFr5/VeLNxpnhPyrjORzNnir31U20vWN7renz9B/RWfE6yc3MGN4YrjEP82EKE0xuxFQRbPtTe9BGdH30GhwLja2w2lbwxE7zzi78IVw2BRiAZAtsfjldSy+jTWoXt+RR/+ijONsOCQzOwYI2ASSjWSHgMWENdlcJh4i9ecuB6zbT6O5LH016qUe0vJb8l+GhGC4G66I7Xl39AH6rX1N/gMk7XuZC+y7kSOG4qhV4fY3EMR5KDaC+jt9jb6E37Gj1EzzQPGoC3GMfbFaZ5Ub80fzrEpKDPS1MiMUTB2VLMW6OXlsIch1e/lCNg6OKsJVzrcDujXLwHbzLF9vdoqkx8QuMjPsb22Qsn30iT7Nk2ruKqNS7ujxmsFJOzpUNAV0JEPcQrxkhPv9cvaLxZ9fb5u4yTup5IjuzolzyKRKSOopNSR3X7FbJ1Nd+It1dUVFw2MPE/rdE4vzoO8eOAORQcjmVBIap96Kt6d+pl9qbhrEwye4ofMUP4PN0L5luVsMAih28NXvA5PlxCy4wEO4nQexuUtI+WGYZGLvbGaZbYU6pn+9Qr6FNamf01vTTmSFBo/UkEe/2e1o9+bPCjnxp8yKc6X/KR3oe8a/Cio/W+dITRR/BkxtAHe6yxdnDVPCiYi6JjuN5fWv+/FRLz3NLEG2xClpqR2eswq/VaJv7r4j86emfy+I5e2lFdT6a+ZR+kiiSjtePsH6rH2Eaa36XPlH/YcntNUs1lt6JB8XMD+De4qstfl0vix9AGbzob79P9rM6H9tf7CYFaHzIxXU5jckdCYs5bYM6JhNzCcVBa+A6syImA4iwl5GTKwJSuhJT0AGGpKZDGmAPJNKOcTDT6kkk6GZ3OBD5H5wvz9H6QqPMBnc4LLHpvyGbGk4uPFWLLLKM3WA2eYDZ52tNMbJs0H1CbPYVEsycsMnnSGKMHnWT0EhQGZpR4O3NXrcNqAqn3+pLwHfR8/WvhOv+uvgJHyxCK3nqtZWHDjdaY07do3r/wQHJU1+PaUbaXUkYIstQo+6S08cIXpglkqnW87ZXSmPN31URfLn48Vm4AVwTHiUevisMiUPwpSiZ+X3GQ3peEMZFNN/rBAiZ66+pvSU2tCY7uyIcze8pJy65i0lSpguNrFpCDa76CuopPyf4VH5EdRe+QytwxsMIaTkrTA6AkTQYlRi+oMONTH73IWqMvVOB7JvJV0jr23uwDK01+UJ6hhOXZoVC+/EOyoXgirMofDeX5EVCYJQNLuiekWIbB9+ke5ON0dzLeyMKw9GF0CN6eJJsl6K6w6KeM4ddA2ifWPD1CuJgY63WWhSxXimF5yvQLD6ZMbnlUM7qtt3YU7Zsa2R2qHUPmpE+DBRnTyZyMqYJH9rutd//Y8yOu4/21j5nzb5AuJLbAyE/chDehxdshOgd4Ddd7k/fTfGGpJZTkls0gtdUGaNxfDZ0tp4FI9/tvBXrmGAjH9oG9bjN07S6Dc9Xp5HSVihzflEiOrF5ADpV/LOwpmUJ2FE4g2/LGka0Fo0htbhSpyQ4nm5jQN7HXVSs+IFvx3kO1qWR/XSk51rgNmlvqof3MYWg/vQOaD60ix6sWkG1Fo6A8SwGZzBg0Wf7wg5XVClkeZIrVnY6wDLH3x9DNJSLnWCepybSnqFyfo+E7V/0I12cXC8tTmLeX9lfDQq9d1yUx740tO/lJJ27K/ojerZnY9Zgmurt3wti2PpqRtlcSR9mHpETaxunHC/MzPhSWZc1hy5m2sOIp9F6cYOP8oYu4jgkNyvGbnN8Ix0nHxJKFEndgi4va1/6GzkcINvjYZ6L4zUGQXziJbFu/lJzas4p0tuPTXpj48Xm5Hc0AF5qB4JNfOtsBOlpBOH8GutrOgq31DNjO1kNnw25or6skzXuWk9O7SsnJnUXk5L5ycuLgCjhxZC2catgCTUcq4UzdWjh5uBqa2Hfaz52Grs42ILZuALsNaCfb76l90LozmxxZ9y3ZsnwarCqMgIwsP0jKGAbfZgyhc6yD6fjMwXRIDvsfjjDCISz8f67eXDQK13gn3MZ6DQtd8DNWUNCYSFtjWDjFRC71Wk9hCffo+htiomtuiok5cdOCWY0362dtu3nJlKbbdMyT69/relw3zv56cqR9sGpk58CU0YJHUmS3MjHSPsX8jhCbEwNpeTGwKONDEmWe0PXkLpYbSKe9B65jxOIIr7gB/GbgycfmToz7F/nQB9V+9EUWq/vpfezvGuWw2BpK8gsnk+3rYsnpnSWkq/Ws40HR548B2W2E9s3fkuZq9tkeKzl9aI3kqRtOVMOJswfh3Llj0Hr+OLS1NEAbM5puJmg7MxI7MxLbhfNgO9/EapLj0N7MSmMdnDtzVDx/7gx0Hj8gnt+WCXu2ZJA9+yvgxOl66OhoB6G7E6DtHOk6WkNObU4k21dMhxV5IcwIvFltMBSWZrjB15mD6GzrABLJaoJX8NYlOLS5pkb8a0UFEz0r2CKFrVPWsJbbiyObbts4g95YwWL2nBjxDryRljFavCeVeWkspqksD3qn/b6k6LZ7UOyWt8/fha8Nszt6pYxrfTZ1bMebKaOEYSzWd1dFdfkmRQrKhAjbqJQo8n42E37ZD6Qw7yshwTq7a6xmdONjS5YcuN552i8iiZ8ZossAuPh/UxyeZ2G/hhuxkykB292V9iF6GR2l9RO+tg4HS8G7ZMu670njrgJy4dxJ5uVZyNN0AMjGL8i5wrHC8ezhZF9mOKnJiiBrWXJckjcCrNlvgS57tKDOGiMkZY4REvLegeSV88BcrYOSWjMs31lI1u4pJOsOrobK47Ww6+gGsWa7AUpXs21KpkFK/kSIz46A2NwoWFYyHQzrFkLpjiKy82QdnG1rYYbTDF3MuNrqa+BYbQrUrpwNJSWjISMvANRZnpCUPkzQpHtAXIYbncAMYmBeaNfjuR/svbW4+MD1OMmlbAG9ufjjtntTYjoeKmfhS8408bHM98TeUplKn7bMoE8VTOx+2shK5sTWpy1R9KnMMd1Pp47t7qNiSS226KjHCF6s+KdEdsuSRtrC4iPJuMSRdKpmgrCwQkNWb1lBdqzSEKvlA/u0xDHtL0ZHJ/31x40XF4XfY+n8iPNbIHkfFhZgRxc++0sls7+m9heCdT7kA3zCId4GfeV80lBtJu1njzoedMficVv5dHImL5TUZ4SQPZYAsimNJbnGQEg3KiDBKBe+NcjJXIOCTMEWIJZEv232J2PSlXSsNcoenTOBTM4ZRydnvEXesYTQCZZAOsEaQCea/Mg76f5kollmjzb52SYYve3RBi+23p9MyRxh/7j4ffh+/RIwbimCtcf2wtH2ZmhrOgHNTfXQ1LiPNB4oJ3s2x5I1K2ZAYe4IKMtUQIXFEwoy3GFZ1mD6fpYbDc2QCUMzRtieR1EXz+16Mvuj7mcsMV1PmWd3P2eY0tFPN7bLUx8l+JojBQ/9mNYBunEdr6eN7hyoGW0fiKJHT58SKXinRAmBCZG2iGVRtrFJUfb3kkeRGE20sLR4ERRsLiHb11vJ+qJv7BrLLPs7yaNtr8zy0t/sPOUXwXOPibokflbwvfMjzm+D4wKwJPEm7GjS4DRIT8HD4EfH633hu3Ql5Ba+S3ZWppKWM/VAms4APVINQulUoSkrjBwxBZCdJrz5kxwKdQrQ6RXwnU5BZulkZJxaThU6X7tbmoIO1AfQAQaFvZ/e3/6mRtHRL0Vu76+T0/56fzoACz4CySyjg41se52no5iZUM0+4lCDL/VguYiP2pcqDEoh1DKOjiuZQz9eGwdxW/Mgb285Wd2wlew9zQyi8QALuw6R0yd3wLG9eWTr2hhYWzCebMkcTmqsMliV7g3ZmT6QnOkH35g9mIH72idpQm1vq97qCFaNueCvervLVxvZoVSHd4anDO+M1I6wDU8ZaRuTMsI2TjXSNlI1koQnRpGxSRH2yaqR9lmJI0mMarRtYepEuzb7C1vJBivZtjmPbCtfSvLzP+9OMs/qei927IWXv4+uuSfGcXOui1wMe5yen4v/CiCdfOb9sdcWH/Bg8qSv6/1oiM5X/MgcYNfmvk02Vswnx08fBqG5RRSP7gFSNpM05YbDEVMIE38Q2WhQQL5ODj9omadXBwj+OLcYk2i8PTpODbR407vwqY0GqVyQlgmhHQ9rQ+nD2LuMvb5JcvFvacH0UXyUabys64lUVhJ9u57EligcdoHP8lV70BeZUb2qUtgHqoOolz5CCLGOJmNyJ9CpFd/Cwh3ZkFe/CaqPbiH7G7bDkZN74NiZ/dB4rBoObzNBXfkcoa7wLbLX4k+2M/FvNXpLZZPej2xkx16YGiAkawJtC3TK7iQ1KxqlEK8OhiWqYIhNDhQWJQUJ3yWHwbzkUFiSNAKSUkaDSjdBUGfMtuetNpPtOyrJiVVqYWPpEltp0Zck2zzNPjOFJcaYN2BzqfOUS7jE33Pp/IjzW4KtHgt70RtxjA8+ycXAPG6aL33bHALf54+HkpUx5ECNkZxvaAB67DDAqjlCc1YUabCwsCctiGzQK6HAEADztCH0eVaTXOfyZNKFxXiWFamKl1pcHM2RuJ00nl4u1To3Y58DW4dDHKSh0GiM0kSTAPGOhd7n78K8hK2/F58RloBGw4xkiZL2QWNQs1pD4099tQoyPIuFVSu/gq/3ZEPG0Y2w6Vgt7Dy2BfYe3w6HG3cxI8bHN60ip6oWkcN5kcLBgolCQ8mH9mNZo4U6VovtTAsgW9IUZHOajFQa/EgVKxv1MrKeGUeFVmZbmaqEFSmBUKSOIHma0aTAOBGKVyWT2p2V5MzenXCuMkPYsyKWrM7/zG7OnGb/DMOe4pim21jM/08x/eXC5+K/YqAB4Awn7PRiYnzBKKP+pjA6o3AK6Mo/IZuqtOTUrnWkq76e0M3xpD07UjhuVAr7jUpSy8RSkRYIOl0odcMmRecuJVwG4GhqZMVpDC7jcJWexoHbooG4CjZXOptlpXkEaCxoIDhZH41Beti0kj6r8RdfYbXIgBS54K2V0aCcCXR82VzyyZr5sHDD95C8cQlYNydD2TYrbN5XJuw+uw9Ona2D5vrN0LRvFbTs3QytdTvhwu514vmaPGjZbBSa1iYJp9cuI6c2GkjTJi05vdFCmirN5MzmHNK4ZS05xZLbhrr90HlwH7TvrhROVeYKewu/sOdkz7DFWd+zf4Q9v9hHwE7FZeL+8f/n4r+iMJEy0cX1EW/Bea16b/qyMVgMzJkEn6/6B+RXpZODm5kBVMWRliMHCVT9QM5lh7O4X0Z2G/1JLUt4V5lCQGOMYLF8FL1ZErPL4zuXPYvLCC6+lm6o5RLBpeIShxSesSINbnMaB/vudWgMOBTaOFK804S91SzcWqzsfjZVZns5meUZBjn1MIfTAGs0HZs/k84s+QA+L5khLFg5BxIrvoC0nUZYsbeIVLE84UD9OtjRsAPqj9RBU0M9tDUcgq663dBRtws6D2yHC/txyUr9YbDXNwCpPwrCwTrSWXcAtyGtO9YJx9alkqriGHumcWzXvPTorimGSPsb2FHmPMkSDrE7ltzzXzU4ekldBoAxdloIledNJnNqs0llxTxSlRVIqtcvFBqPHCBCXQFpLRpLDqcryXaTgmxMHw4rrW9BTuYYiGPhx4zsiUJAfrTYu2zW5cbQs2AnkzQqNEa8zjF0WeLfCMEhlp7GgJ1TLkO4WCMwQ0jAxw6FSrnCG9pgOkQfSn3NITTYEkrfyoogk3MiyfTccPpB8QT62fIP4NsVnwqLVsVA7Iq5sGzll5Cych4Y1nwnWjclQGltJqncXkx27toIJ/ZsgIYd6+FodYGwe5OR1K74ClasmEcKy2IgPXNqt8oUZf9EHdztnyTv7v1j8feEC/+qQvyT9PTF18Sb8JYeePEMMmGoTknGmUYI842+oLH4QenGWHLk4DbSeXwDaSmPFvbkhJMaaxTZlDuRrC6YDMUFUyAzfxoY8mdAUtE0mJ//Hp2aO5WMyJ9B3Qo+oE8XfiTeaZlBb9TEiDfkfkBvzZpF7zONow/VsDh/ylNLsFPovxCEo3ZwGQKGSDEsl3AZwg+sRpCS61CWiIfSZ6UOPW/xNZ3cPkjvJ7gbZYJPmrcgN3oLgelyISQzlIRnh9GojDA62hpAxjAjjc4ZQafkjicfFEykHxdOE74smg2LSj8RUoo/BWPeNFBnRAtLM8YIi01RtvmGcDo3VWkby0KwF3FuAvv+z04QQv7VZ5zfHIeQMMaOHyTeiaFEih99PcWnW6n1JZPSvOEfRh9IXT6brN+/Ak4eXQ+N1Uth37p5ZDsrtSvnkU2rvoRVLKwoWvEl5K74DCzln4B++VxIKpkDsUVzYH7xHPph6WdkbPEX1KMghr7ADOChzLn0UexsqmJeO+qlWTe7ubn95H10/jWOGgFrFezBRkPAGgFFiLPFvpdLY5nuXyI9YJs+GqfoeirJu7u31sf2PBpFmpf4ismD/h2HeON/TvWib+q97QMMPnSw1rtrmJnlEyaF4GtSCkpLEA0yhpIRphAalRYmjjGEkHG6ENu41BBbhDbYPgTvCSRN02Q1Xk+BXy52fM3Ff9Uhxdks2cTBYyp3en+yH30mRU77s4QyUOtjn2jwsn+aOxoSNyaStcfWQ13jDjhxshYa6ldC3d4cqN1tJuu2m2DV7gwo2ZMLxfsKIX9fGWRuz4Ylm1R0bkUsnVA0j8qzZ9O+5mn0OfUk+gjG7sx734AJODsEFAW2kvxCcVwyBKwR0ANLk3GctQLe8Q6nVX7v1nZPvFf7fZgzJPpckO58hyXFkz6UIHM0x6IDwMk3+GR6I85j8KHPOuYy2F4yBNFXVYG0Lz4sXD2cvsrCnafjo6QbYV3/Y+H/NFz8VyWSATDhoGgWu527YykThNTuLuvoq/YRfPReZASO488bK3y15hvQVcVDxrYUyD20HFYdLIGyfbmQf3gVFB2rgrJDK8FcGU9iViwg7zBPr0wfR4eoJ9heVU+gLxon0qd10eLfDBPogxcfDMEML+yaMDSCf2om/O+5lDSjMWDC7Lj1Cg5iE2/AMAkLtiS5ml5dBY3fdUc8nFeAx4dGs9Sj9W40Gpx8IxmJL+2FM9yku1Mw0Uu/+i+EjZ85Pufiv4pxNkViZxgTCI4ExZoggXlC7TDb81Jo4EXd0/yFgOwQEpURQselB5GJhePJlIK36aT8MXR83kRxTPH7NKroQxpiCBc8ksLtA/RRtpfjh9teUEXRp5Ijaa/UsfRejNGxYwy9NIro33vNX8I/tyC5aof/pGA4FYY1Yo8mWLxNpNTKxQzl3x13T9H/b/4f51cHL5TLCPCCSzPBvLFl5cID2EuLg+NMw+jzanfbqyZmEGle9oFmFitjvGz2pwNS/embKpn4WoLM9vKycPoctsTEhnY9jmEFi8kfYIZ1D8bl0gR25o2lViD2e7+NQBxidAnyPy0uA3K1ZF00Eme4g8X5AxKu71z67Lf4b5xfDbxoFy80MwS2lDwfGkMO3pNnEPPgLH7GUACfI4CxslQCxMcwdl7mMJSHE4MuPCjFxqFt9+JEesf9fJpuw4n1PcXvCCF+LyK5ZBQ4ktMhcAcusV9az4X/O+afQwcMCTAcwLuzSU9+73P6lhTlWRYrNzmHLLTcLsXN7DULGW7DEAfv9IbeHkWPLTNoTK5bHv7+xP9TuI7dJXgu+j8gly6uy/thkfoNWEExo3FIuQMumcCZuKWCr13rpc/Y9lK7vTN84ILh/I653DB6GsfPlUui58Ln/OHhYudwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hc83/6HGwHA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh/NLueaa/weL8nM2sKqUXgAAAABJRU5ErkJggg==","data:image/png;base64,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","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAADkeSURBVHhe7b13cNXV9v+N9+tV77XrtXfFXkCxAAInp5/0TuhWQEUvCtiwYKUISEtvp35OSyW0QICEkIQOAUIgJCEJ6Y2E9HM+a+3Ps/cJqN+ZZ56Z38wzjyfP7NfMZ1AE4Y+99nq/915r7VEcDofz/yrSKOkf88ZJ/1wmk26g300bXie3JKikW9nH/nn1S+RG9t8in5Ouc0ZK/0N//TVXfiuHM7Jhiz+BLv7FdJGzBZ8yidwVP5ncZ1CQB+Lop5f13Zsyqecu+mtupd+/l/Eg4Pz/B7rzj5L+uXY8+VfsJOl2vZ90b6KaPGaWk6etcvI8+5LpP7Ofi9eS+wT6a1araaDMk/4ZSYOA/n4eBJyRC9v9t48m15upzGGLP1VFnrSopbE2DZloVBGZWSn66NXuN1O1rlcSNEPPxPmTB9ZqyB0JAdK/WdZYRn8/DwLOiIUu4GtzqKxhsidFKT1uVZKXLQoityjFYKuKTLUoIcqsJqGpWlGbqHOPT/Ibenatf/8D62TSbZ/RrEF9wbXDQcDhjDiGtX/yRHKzmcobh4I8Z1ZKPiYfEm7TwTx7IPk05yNYZg1yL9DryMxUf+KXEuR+IzFk6Klomi1WBZGbl0VK13EpxBmhSP9wUkOrHyPdRnX+I4LcPc7qQ/ydWnh/80z8Yd8PmFK+Cw/t/ApjrYGwWO9HZuv9RF1qAHklLlh6dJOS3LmMSyHOSIUt2mWP1NzgGE/usMnJEza5e6JdIUU6tLBox3u48cAazKkohgs7lmKaEIQrjb6wyBBIpuuDJZ/EcPJ8XAR5YF2wdNsGHbmeSSF+KsQZUTADrH9EusFId3Kbkjxlo4bXroE5WZH4Q/7nKJw0waGWauza9R3usQSKScYA/DUlABYY/ElocgCZEOc/9GRsKLnbGSndRD/P0SjPApwRw9UAYAaYHXuafUSlVQnv2jTiz5unoeVIAhzpqMGeU5nQkDYdNqfPxlRTEFlGvcC7+lCio5lgbLTfwCNJEeQOLoU4Iw7nKOl/qPz5FwsAm2roWYN8UOPUSPPSAnBVVihaj6yD441l0H3xKPRu+xxKMz/DXGEqRuv9YbExmEQlB5EpSSHk2U1B/febdeSWq1KInwpxRgRXAyBW3Xu3kQYAzQIaQQHz7VpcnR2B6Yd/h5NdtdhffxIvH0yEtpxv4Yh9LqYZQ8Xl+gDyQWowCUzyJ6/Hh5An2P+DlVCwC7Jly3gW4IwA/poBBI30jFVB1CwArArxN4cOncU/wYnOCzhQexQv1x/B3qNmaM7+GvYLUWKiIRC+TvGHOQlBoiopkLyUqhl4KNZfup3fDXBGDCwA1o6/SAOg5y49DQCTQlTblNI8q0r8LWsaZp/LxtrOJnRdLMP+8mxo76wDV34CVDsXYI4hCFfR3f/jlKArhjiMPGlSk7ujaRZgtULcC3C8HrZImQlOkEn/MU8c8phgiwrm2pS4KjMcM0tNUNVWi4MtZ3Ew/2us7SjHwaoDMLDlRzhgnobJKUHwTWogvJUSJKniNK4xCaqBh1f8JQvwY1GOV3M1ANgxKP2esihEuaBwvW9X44qMIEwv+hlOtVXhYNsFHNr5GdQdS8GWjlqEA+nYbP8EN5tDhrNAUqAYNpwFhp6MvZIF+IkQx+thC3TDaHJ9kobcEaciT7IyCLucvGNT4HK7Cu0758PhhpPY13ERXYfWQEv2u1DdUgYDDaXg2vozlFhmYZIxCr7XB8Bs5gU2+rvGxGjIQ+xyjGUBXjLN8WpYAHxCA4CVOAtK6XGbgkw2+7jesvngz3YZChmRUHxyM3ZcakB37X7s3bMELh6Jh8b2GnQf3wadm5dh7uYf0GiOgoWJgSQ4NtA9PjpwcDTLAtQP3MizAMerYbszM6z6MV230QX7mE1OJtp9YKZTQZbZFWjKDof9pTZsu9SI7rbTOFi8Clsy5oiVjSegp6kS3buT8NT2jbjD/A58nxQMM5KDiDzW3/VCoq7/QdZYQ33ADbxQjuPF0AAYJV1Hd+pbjSrpYbOMjLf5kCiaCb6xKjA1Mxz2HTNjS1c9ui7VoavcipcypomVB6Ohrr0ah8rype5dSVicthg3GsKkeTQA/On3akrY4OMJAT3/YT0D/EiU48VI1ySMkv6Z/TS5OfF18qBBLo2zyEmYXUG+oBkgIc0PdxWtFus6ynCgm8qg6h3QkzMDLzgioazxGHY2ncLBkgys3roK00wzYElKCJkaH+SekuRHnmXNNVfLpbkM4ngp0jX5o6RrTS+RG82TyX2mN8kYm5IEWBXkU7sSNzm0uD3vB6isK4Serovobj6OA7kfYr09AMoProOqxlNwufIE9u8x4SHr+/hLciC8nRxCNHo/19iYYPKQnpphLoM4Xk3kldtgdollnkSeEyYTLQ2AD2xKXOPUYta2/0LZsWhoajuFAywIDq7BtoypUGnWwPEDMXC28QwMnijCzsxvMEkfCguSA6SQFD/yRnzI4BNUAv0hg/hpEMcrYQGgp7u08bXhuwCbjB2FwjtWOf7i0KAtaw4c3j5frDybBl00AMSandC79X2os/nBKecsOHyhBNsO5+PArmjcY5gOXyYHwbSEACKLuSKD/vedAIfjZbCdmXWFZcmk2+jif1SYQiZQGcSM8FKHGlMzpkNhzhw4c2g9tLZfQFfbGRza/SU2OgKx3OQLh3b/CicO5EndhRnYaH0XVyQFwTvJAUSTEuoaYw4lD65UXbrV4wN4gRzHOxk+CTKPJrc4FOQB6gVesfmQYOYDnBqMzojA3My34eTeFdDUVIpDl5tQPJYIHRnTsNJCZZB9GhTvdcLFkj3Yt3MtbtWHkwVJASSQnQbFBQ8+ygrkmA/gzTIcL+VPI0wX/T3WN8nzrCrUqiJzqQxayW6E08OgJPcbrDu7B/outyDUFUPf1gXiRasOTgthcHhXHJ4rzsPLBRYsM80hXyb6k4hUPzIxOpCM3qDruYs1y3AfwPFarhphVhSXOoU8adaSyXYNmSko4TubAlPsWtyV8754pkiPnc2ncai9HIcKf8YWRxBUCBFQmhcN5w/n4aWSrdiW+SVuSAqBWUn+ok9CmPRMUiC5hy5+7gM43gtbmKwmiF2IJbwpPSzIpXE0C4Tah49D1zsUmOH0xwPbP4e60nS43HgMB09bsWvzXKxNmwHl+1KgruIg9BRtxua9sbjXEAnzYkJEzaZg8iIbpLVBR25hPcPcB3C8lOELMWqGb9LLpHvZOETWHUY9wXs2Ff5Mg8DkkGNedhSczl8JLefysb92P/YX/AKtWfPxQn401J0vxr6iNGzauQF3GWbCwsQQEhAf4HplfYD0MLsPYO2S3AdwvBTpmj9k0DjpPyYZGc3qgmxKiLKo4EsaBDF2BWbb5Fiydb5YdWY79rWUo+u0IHVvW4yNeWux/uw+GNifIXVvXY3bTNPhy4QAMTw2kIz/PWzw8U0h5E79W56p09wHcLwTJoOcV+qCzDLyoEUmjWVDstilGDPD9LPYlLgnPQBOFa+FtuZT6Go5gUOH4vHSrt9oVijBoeJM7MvdCAWmGfhTsj/MZGURNBM8laIjd3kG6o47Sn3AMu4DON7I8GkQewfANIHcbZ5InhZURCYoyUx2J2BViAl2OW6hWeHQ1rfFC+d2YX9HDYoVedi/PxG7asoRD+zFoe3r4ZAwXVydHARzqQFWbwp2vZis6r8/Oaj9Zm6EOV6N51b4EekG4UXpduoFHjXKyKvUDwQJKvhYUONqmwIdVgXsS/cVz+Qvw7bG4+hqrkD38Wzor6tCUpKP7q2/wGFTGMYYgoZ7BAz+0rgE5gNk0m3b2dgUboQ53grT51fNsPUNcg+rDbLKRYVVCW/ZVPC9oBBTaBDk2uVwPHsq1J4wYW9nA0JNGYr1tUgOsgD4HkqFUDQYA8g3xgCYkervnswmyLG6IPYGgYz6AB4AHC9FuoZNimBZYNNr5E7WJGPycb/BjkStavdnFjWupz4g0+YDJVQSndsxT2xtLEV3ax1iW4sksQDY9i2ctQVhukGHqww6aZ5BRzQGLXk+SUHuYXVB+TwAON4M0+j0u469C5Y8kdxvmeJ6kS52tVUD71pV+BP9jMwM2+RwKiNAvHgsBXqbzyNcvixJJwvRnbMIqiw63GHRYIygJYsMajE02df9KpsY4ekSe066jgYA9wEcb8VTG3Ttsvukf7ObYYOcPCEo3RNMaoi0qGCJoBSjrUrMEeRw2K4Wq3f/V+xoOIzuwX5JOn8Yxe3/hVqrFvZRz2AyK8UfzGoyK1XhnpwkI6M949RpdqFSiwcAx3thWeDqzbBVRe6nEuglo4poLRrXXEElLhfUbsGmgAKrUjyzOVxsPJcO/UM0ANpqEQt+gBaHLxy2KjDDJsc1DhV8YJOLGqvc9XzSG733sJojFmBcBnG8GI8MujaBZgFhnPQftnubNO6JdrUUSTPBF2Y1xtrUuNWmhKN2nXhh/8/Q3dMpSf2XkZSlQU9mEJy2y3GHzQfjbDKyxKwQQ1l5RYaOPMjeImP3DfxCjOPV/DULsOdSU+SuMXqNqBM0MM+kxRVmDdoEFRTafcWzecvgUk05kv5eJA1HcGjrHLGSeoQCuw+abDL8wSaD2bYpZLIwhTyZSc01M9nsyJVnAY4XM5wF2MUYmx2apCGj2WuRRg1EmTTkS7MWEwQNbreHwam81XDpxGEkPd1I2mtQLPgGG9O1cMg5BdMdMiqDZPAhDQBfxxTyYsZkcp9TJt3EnmblWYDj1fyRBVRXsoCGjDGoRV+jFj4w63CVRe25GCvaPFe8eCAdxEsdSC41I5ZlQvfW6Xja4YPbaQDEO6eQL+wyKdI6ibzh6Tp7UbqdPc3K/v88C3C8mOETIVYkJ7BeAdXQkxZf8qbJn0wza2GpRYdJNg3mpoWLFbvXwmBLPUJHA0LLWXQVrcSLmVrc5/RBc5oP/kx3/3dtPkSZqSLPUlPtMcM8C3C8HqbVr3qBRGpi9WpprFkr+pt8YYHgh2toEKRnToey/N+hr64SxYtHcaizHsXqYuzNWwilTgWVQT64Lm0K+S9rtUyb6H7V+Kb0cNYY6Tb2/+VZgOPlSNew21vmBRw6cleiL3kqJcAtM/vBLLMv+Y4GQGr623B0fyr0XjiJrsNx0NF0GPs76tF1Jguat0zHXXYZJjh8yDdWGZnlmERk6ROkZzJe6r3bdM/wkSjPAhwvxiODqBc4f71e1nUb9QMPGzTucUY/MdjgCwuNOlxvC8fNxQJ0VxzHgR2LoK4iCzraK3Cg6Sz27v4MSxwqNNIg+MXpQ+ZbJw/5p00gL2fIyINOmlXYRIrhLMDheClsh543Tvonq+Vhs36MfuTZVF+iMGngHZMv/mibitaDNug8fQB6Ns8TKw6ugbr6YrzU3YADh+OxnL03ZpfjWuoDFqXJyVT7ePebDhkZze4Y2F0Dqz/iMojjxUjXsPGGbIAWe0sgxV96XK9zj9f7knCLr3uxYwYmFeqhqTgb2jLfgtLcBVBWmYNNXc04WH8CO/f/CvvS/TDOKSPfOidLb2dMIeqMCeQF60RyPzsSZX0CXAZxvBomU5hcSZ5Ibk5WkfsNOvKS3o/ojL4wV4jCVXmpULo/B5oz3oeDaWFQcvA3ONt2Dru623GwYgee3zYLzXa5+KvDBxbYZWKIfQp5LV1OHmFvE/x5JMrheC3UC1AzTHfrf7MWR9bqmOpPJlsCSJR1Bvm2wAClRdugY8cvcMoWCQU7l8Dh1lPYPtiLYmsldu5ZilsyA3GDXeH+gsqf6WkKMjlTSZ6ipvgux4PkX8MyiMPxWobNMJvyxqa9sRfiU7XkFb2W+FvDyYLc1eg8sBXbCu3Ykvkx7MuchXurtmN1fxcO9nXhwHGTdDT3W8zMiGLPL8H7gg/RXr0ZTn6a3MzaMbkP4Hg1LACYXl9FZRA1xPeyt4UFHZGZ1GSaYyb5piAW9helQ0tBIlZlvod5B6PheG8r9g0NIlSXYkfxZqjY8jnq07TsTkAMTpORVy0TBh7xnAaN4qdBHK9Huoa1NC6jMshBzbBNKz1qVJFXrTQLWHTkvbS3cdX+FKgotmNT3joo3fUlFLZVYAcLgNYWdB3Zhy25P2JGWiD5ko1csfuQN02awdGO8eQOZrB5AHC8nCsyiJphz7Q3P+neFAV5jmUBGgRTLXRn374IhT1roKQkDVt3/QSH6k9B+0Af9QGtKB7ej207f8NdmRH4k0NN3qJGWC7Ihp5hUyhYuQX3AZwRwLAZZg3u7H1h1jfMsgDzAiYdvGfWkqW2WZi4Tw+VB3KwtakGe1kAdLSjeLwQO3bHYFH6bFxNM8hcm5po7DLyApNTfzbKcDheDqsPYkeirG/Y0zEmJ89bFERuVMIMiwYWm3S4ZvNnmHNoG1xqbkDX4ADi5R4kJ49hz+44OJA2XVxnU5IPBRXxY88ysWNV5it4AHBGCB4pdG0O9QJMvrCXZQSVe5JJIUUyGWTR4gpriNuYvxZOttahi3oA0nMZ4Uwhtmz/Erdb/fE3ixoWeLyD2jU2TtH/ALtfuHISxH0Ax/thAbD2QTZSvec/Nh15wuZHJrIXJi1a8AQAK5Lb+jHu7qjGfpYBqs9h/744PJ02He1WNa4U1PARqyq1yFxj2eS4PzMAPwrljACYDFr74EWPDxD8yZM2jXuiWUEizBryqVUj/ib4o2nXF1DYXYc9fT0IpbuxLXsBFAi+aLBoxF/NCvd8k1LUWZTkxatviXEJxBkxsBObhHGN/7YGknu2zCIvOAKIzKxyTRfU5HOLBtc7g9yOIzFQ2tOGg6wmqDgazjnCcItFLSZZVO5lggreMcmJQpBJz8RSGcVumHkAcEYErHCN6fXo56SbzFpyX/Y018tWBVHbVeQdQQPfW1RifM7buLU6Hxq7O9BddRA6d38FR+yBkEl3/xibhnxJA2WaRe1+0yYnT7ApdGxeEA0Arv853g8LAHZz67nBDZAe3hoijRMUYqBdTT5i+t6uc5t2fwFFVP/3dDSj+6AeatOnY75VgzaaHdYKWrLQ4keCDRppXIyGPOS5U+AT4zgjBc8UaZl0A+sTzowaejZTJ02y+ZAoqxq+sKlxY+ZU3HxuO9Z1t6GrqQaHdi6FMrsf7hTUbpOgEZdbNDDXrCYag5zNDO29Z7W6+UZ2t8ANMMfrYbs/0+rs4ordBG8OJy85NERtVQ7PDrVp0VDwDRzsboHBrnaEqqPYt+V9OEZ3/21U/iRR6fOdoCEz2UN8bNQK6y/4c04Qh+PleOQPlSse+aOSHqZy5zVW2CYo3AvtKly75S3cUlkILT3tKLY1IpZuh+7sWXDIpsFMixo3GTXuxZ6BuSryaqpm4CEzlT+stII3xHBGAMNvibEdOydA+k9umPRMmtY92SEnM2wK+CY9EJMKV8DhriYc7G5BsbkGxcMCtGZEQJGgQjvNAr9ZtOQDo5Zok9WuF9Yz+cNKILj84YwErp7+0AxwE6vj3+JPxtgUoq9dQebbFbgiMxKdJ4xQdbkFXc0XUKwrxcH9G/GiIxTzBbnbYNGQZUYtzDb4uacw+cPuEFhN0bD84QHA8XLYQmWzfNhMH/0bg4+mqd1v2H3EcIccljjlGL05ArfV5kFzZyUONp9Hd3k+XN75OZx1+OE2QS3GWTTuJUaVGGZUuan8IQ8lqC553gvgx5+cEcCf9T8ZE8jdNj/yrEMuKpwy6W27HH+kAWDYOhMKOs9Db2s1QuMZdB11QkfWHDhM9X8ae2OMLnwqf0StSd37Ansxhskf/mIMZ0Rw1fwmjLt0q23ywEPCJPc4q5wE2XxgIZv8xibAFXwKJ7rq0dVSgXgiDS7l/Qw1zmDcS/W/waRyU/njmp2qHZicpBkcvUl5+U52lMrlD2cE8OdD2mxStHESecouJ1McbNKbnHznlGEKDYDc0iSoaz2PwF6OLIqBlqx34CTd/XPMSjHarHYvMvlKIakK1yuJuv4HN+g6buHjUDgjArZIqfy5jjWvs9Jl4xTXyzaZGGCTwceegVc+kjMjAIrrDmJvayViLf1x70q4mBYK+81KtJnU4gp2+UXlj8o4hTxrUg/X/nD5wxkReI4+qVxhvbtJssHRgmxgkm0KzLD5kG/sMky2++COPZ+I5U3nQGyrQSjbBt25S+E8Nb87qfZPFFRkKQ2AKKOWTEhUDz4WO0m6/c/BuByOV/Nn4Zte1ncvezWSSh+dQwEf0IX/m02GDqcS9pWZoa35HGJHA7qP2aAjZy4ct6oxw6zC301qWCDoiF+KvG9MvJbcx45R2e7P5Q/H62G7NCt804/puk0vG3zU5EPeYI9dWHzgS6sME+xTcGtWoHS0uQzdlxoQOqpwaN8aqGXm10bNr1mNPxhVZLbFj0xJ9SdP8rN/zgjiL+Z3LLnLMZE8bZUTBTW+71Lt/4tDjhb65R/4VWzsrEG81IjuumPYl/upeMahwy2CEqMtavKZSSGGsMpPdvbPSx84I4Zh81tGzW/7zYbx/Q84J0pjWdmz4ONeaJOLGxxTICszGA5X7oGhxjJwd7WhWJ4P3Vmz4YBF47aaVeJysxbeN2olVYpi6Dl+9s8ZUbDdn5lVNsDWNHnwMUFJJthlMM2hIEttckxyaHDn3u/h4oV8cDefxMHOJhSPWqHZGYF5VPsnmFXSV2YtmZpMzW+sv/Q4lT688pMzcrja9sgG2AoThp6xTRKVNh94z+YjLrcp0JoRAcXncmGw1AK9nRU42Ez1f/5yOGcNwgyTGteY1fBRqk6k5pd4zC9rfOdn/5wRwvDpD5M/1on99ztlrrF2Kn8cPvBfu1xcb9fg5uJ1UF+ZD65SvedFmMFzB7Bv2yI4JGjdBtb3S/X+LIvaPSVORZ5MkEn/YSMVh6e/8QDgeDme0x9qVvUy6Tb2tKldRsY7lBBllcPXTh9MzA7B3ed3wcCRVOipzYfLrRdw6PgO6Mh6B3exun+zinxq8hVDqAR6hdX988I3zoiC6XR2XMlKHxzyoaftCiJnhW908f/EXoA/sh6qy3JgoHAVtLQcw77Gcziw34C1zhmYblXjLxY1vGdUiio2QZrd/LIiOl73zxkh/Hn5xd70ZXP82Uvvdh/ykUOOa3Jm4NbqXdibvxIulfwMda3l2H/uEFzetRyO2YLFFEEDX5lVMJVKoPHs5peZaP0jNdz8ckYGzKRenfpgm0wessrIq3YlCadZYDE1vzGlRqg+ngV9e5ZBwwkDNLeew/6jDriY8zHuEnzFdezmN1VH/Exy1xg2NmXVxHaP+eW7P2dEwHbq7TpyfdJ4codBPvgEm+Nv94GZdjn5Nu9jzKzeI3UXJUNXwS9QW5EHXY2nsWffCjiRMRsdFl/80aiC2UaVW8ZmhqZMIndx88sZUbDF6hl8S7U7e9TaLpNUDh/yHrv9rXDC+WMW6CiIh9aiaGyozIfO6mJo3/k55tuDMNasJotStWJYqpK8xt4Uph83v5yRxJ99v+wZ0yyZNDYrQApxysknhd+ivSIbmgtTsbPQCC2HzdBcVQDtJzKhNmsOZggaXE71/zyDmmiS1eSFpEByj2fuPze/nJHC1eI3J9259VeOP7OCSVR6IHxdWwj1xRuhviQLLh2wQdsREzZcKIK2ok1Qag9FvUnt/lavgZlCgDSJN71zRiRssbLiN/aKe7qKPGnXEHmajrx1YhNaW0qxpygROkq2YVeJHpvKMqDx/G5oyv0M82z+uMGsg08NOjbzx/0qlz+cEciw/GGyhe7+99LFPyZnuhSyfRb5rOkAnms9jQOHtkDfwV3YcyAZGqoKoeNEGlRlzoI0sw6Xm3QwT68RdfFK1x8jz/npD2cEIf2D7tbX0UV7q5Hu4Jn+5PWt78LsvUtw+Wkz5rWV49ChPOgvyYZLpWnQVHsMuwqWwxFrCKYafeE7gz/MMQYQWWwQeZo9pr02gvyL63/OiIHJn6utjyYZGZ0RISo2zyDvOVTk+z1fYGZbJc0AOdBbko5tVQew61wxtm39FHfrAzEmxR++SAqAqOQQMiE+hDyxiep//VvSDc5Irv85IwS6+1/LmtVZ3T4berv7ExKREQoLrApcsXsJ5rY1ovvILhw8lI2XzhZj1/4EqHTMgRx9gLheH0g+jQ8cCksIJa/FRUmPstfkl/EA4IwcpH8kjJL+yR6rMyjIA2YFeSUzVIq0KslnNgVu3LUQ97Y1oHisEF1nirD31BZozfkSThijMD01BNckhcDHScEkMDbSPS4hUnpYHyzdtuETcj0PAM4IQfoHa35hExvY279OnXtSVpT0tk0D3wsqTNn2ERa21aN48iCK1aewvyQGau3vQrEhDG1JIbgyPgw+jA8S/aMjpbExUeQhGgS38gDgjBiY/Bmu/iR3mbXkabMPUdo07nkWKn9sSrRu/wAONlaju6oCsfEMDOxaCmeNEbg3JRgtSWH4a2wkzIsPFXUbp5IxG2aSB3kAcEYQw3M/2bEl69wyyckYGgD+ViX8167CDTYVZm2eDyfKj+BQWxuSs3uhO+MdOJkS7NqVHIqGxAj8KWkqeSdhqqSKjyAvxkWQBzwBoCPXR/IA4Hg/w80v5tfJLez4U1CQ1wUFRAoq+MqixCSbBnMz3oVTx3fBQHsTYuE6aDBGwLHkEMxNCsfkhAj4Pi4C5sRMJfK4meS5TdPI/TQL3MIDgDMiYDe1TP97jj81ZLRdTaaYlfCW58kjJZrtStyTPh3Kyg/CUGsdYu7XUGsMhsNU/mxNDMP4uKnwdWwEzIifSqYkTJeeoT7g3lVB5OZlkdJ1PAA4Xo6n9v9/HBHkX7Fqcrd5EnnOpiYaqwo+ENS4hgZAGs0EhZlzxHONFehurEL31q/EGn0oHKTmdzPV/9EJkbAkcRpMjZtK3twURZ5aP43cQ4PgJhYAy5bxMgiOVyNdM2/c8PGnNYjcb1SSl00aMcSicC+2qsQYmgW2OHzh8J5voI6NPTxTBAM5X0FNajiUJAdjRkI4rqMSaOGmCDF0w1T3+A1R5IkNEeSu1bPIjawMgmWXK38Qh+N9eLq/qP73VH9qpUeNSvcEsxamW9TwrVWNqdQA70oLg9LjVuhsuYDukmzoTVtMM0CEWJwchk5qgFdT/f8xNcGB66eS1zZGkMc2hZA7EwKGe4D5CBSOV3NV/xtfI3ey2Z1mpehjVrreNSvE5VYl2mwKKMiZJ1Y0nYZBdgxavBn60mgG0IfDfqr/bXERuDImknwQPZX4xU4jL0fPII+sjSB3XK0D4gHA8Wo8+v9B8i+HjtxlnjTk0f8mhXuBXYW/U/Ob6dDCwaJ10NzdhkADQCzJoQHAMkAU7E8IRWvcVFyRMJXMj40ivrHTXC+zW+DYGdLtPAA4IwIWAKvvITdGy/ruNcn7xlg0JMAqh88sKoyxK3CrIxiOlzqhq6cDsf4YDuVvgk7rdPFccggUJoSgPYFmgPgI+PB/Z4BungE4I4Jrlo3Kv3anmtzIpr9ZZNJYNslZULo/p+Y3QVDizvQZUFZZDP1tF0CsPYquonjoSvsQqlLDoITq//S4cFxDTfDHMdQDxE8jr3o8wOxhDzBv3FFugjnezPANsFPWehMLAKPS9bJZLYZaFPCFRSkm2TW4O2uBWNl0EgbPZUNf7UFwHbJj344fodEUBUeTwjA7Phw30QywODpCjIgJd0+Mmz70ZGxo793Rka3Dx6CeAOBZgOOVDAcA6wAzTyb36WWusRYlCbaoYAnNAPFWX8zbuRRqWivAtX8ldJ3Lg8GTO2DwkB460z6GcpoBdsaFiUlxYe5voiNgNrsJjg53Pb9pWv8fN8G8Fojj1Vz1AGwECv1eMKqIn1lDPrGpcKPDH7cXbYCLLAB2L4eu+pPobixH98kt2Lt7LdSbZkJRQqjbmhgurogPhw82hYsBGyLd49YFDz76Vx/AZRDHa2FdYGsfJP/aMInclSwfetokJwqzirxvVYor7YGYyVofqwuht2CZ2NFIA6DtAsLFUzQIdkKPfR6cTAnFnKQQMSY+DD6PCYOojcHuyeuChp5eH/iX22AugzjeCluc7B6ATYFOVJPH6OIfL6jJNEFFvnGEoWXXGji3/RuxLm+x2NR6HtwN5xHaLtIgKMWhnCVitSEU85OD0JwYir/EhcDcxGBRGxfqGhMTPDDcE8BlEMe7ka5hJQvOq6XQGjJGrxX9TSr42BGJMTtXwtHM9+B0VjhUVe+F/rozKHY0I2mqRjF/vdgqTIdjqcHuzUkhuDExBBYlBIvh8SFuT1+wMYTcyWqMuAzieDHDxXCsGSZTSe5kA60EnTTJoINZzpnSytwVUOCcDgfSQuHMvp+wtbEc3C11iG21COXbsHczzQLGUMjXB6EhJVj6ITlYejsxVFSkRJDnfmeDca9UhXIZxPFa2GUVG2DFXnA0+JMHLGpprC2EBGf/lyzb8R2mOSMg1+kLxzbPhurqYhikMkhsr0OoO4YulgVss+BoSiBkpQaKvycGwycJQWJQfAB5JSFAengdlVa8L4Dj5dAAoDKFTYRjTxklBZLRFl/yphBK5tjD8UfBH01WHeY5w+B00UbsbDwBrrbKYS9wMhN7ti6CSnMI5ukDMSk1EL5ODiLT4nzdb14dj3JVBvEA4HgtTKIwL8DKojcF9d9v1ZGXDL6ir6CDD81qcbVVA06bDkq2vCNeOL8VeztqqBdoRLx4FIf2r8dm57tw2BSIdr0fLk8NIO8nBYrq6EDyfPSVCXHcB3C8nOEswLwAM68GHXnC5Ecm0kwQZdLC1+zZU4sadzgDoXTv52JTOzXBbVQGtVahWJaGXdu+gnO2qbjD6IebUvzgs8RAEpzkL42L0ZCH2IxQJoO4D+B4MZ5b4X8wL7DhdXILe9nFoiQvGrWi1uQP8wQtrhRUaLdpYH/WDDhfsw/622qoDLqAUFuI/fvXQH3621BiCUCjUQff63Uw0xjgnhTnP/SkEHDlhUjuAzjezf/OAin+0uN6HRlPs0EEzQRfmHUYR4Nge3ognChZAa0Np9FdXYbQQGVQWQ50710G56xhkE2DZrXRl3yg9yM6g871UrKK3M+kFWu84VmA48X8mQXYo9ZswrNBS56nAaChATDXosUVFhWmsR6BXR9BzSV2IVaNWFWEQ43HYKAsC9q2L4RiCzXDBj/4Uq+TItkr8SyQWECxwGJZgJdIc7yYv2QBJblToIs39YoXELRkKZVCBqsaCjZPg3PtVeC+1I5YmotDFwpgoCofegp+gTJ7OKRRQ7zC6A9zkwOIJtmfvMAu2Ta83nELDQCeBTjezHAWuDoniN0LWHWul006EmjWkU9NGjHeqsa8zEgoqz8A/T3dSEr3oHjaBn01RdBHvUBNWjDusPhiDDXRSxJ1YgQ1xONTwqTH2RErG77LT4Q4Xg2TKPl0kbIyafZOcLLM9YLRn2gFDfnQohHXMx+QGQInL+yFvq52IGWHEfJ/gJ6KLdB7IgM7N38AR4z+bqvJF39J9YX343WiJp4a6k1B5H522fYJOxHyjEvhWYDjlQzLILZbszLpFMXQcwa6iC1a8oGgwd9NKrRnhMAJKnv6WhsQaysQ877FvsPr4HJFHvTuWQXV9hm4w+Qvxuj9yWK9LwlPpGY6lnmBv1yMcS/A8VKka5hZZQGQ9Aa5x6B1Pc+ePjJpyQIaABsEJWamB8KpplIYqjkP2FRLA+BXGNjxvth1JhN6TqRBR/YiOGaLQKvJD39K1cG7KVpRlaIjzzEv4LkY++NEaBQPAo63MZwB6O5/49VhuQbVUJBZ7V5EF3+cVY5bMqaJ55qrAdqakdSeQzyVje6saeLlg+uk7oo87M2PgbqMBbjXFIQbzb6wMDWQBBt9yausPoiVXrOHuHl9EMdLoQHATDDV66magYdSle7XTDqJDctdalViqk2BuTsWiXWtFwGaLiA5no1iNfUBm98T+/Z8KnZX7Ya+sp3YlbcWyi1RaDZp4Vu9zjUz1d89Oc6fPEmD4D/LAvjFGMdLYdqcnQIJk6TbU5RUt6ukSSYlzGHDci1KtNrVmL/vd2htbwI8fwQhdykMnt8FYvHvMLjlban7bDr0XjyBg4cysCXrQ9xu9pdW0t1/LvMRidrh+iCWXdhIRu4DOF6H57G8R6QbWAmDIJOeEbSSyqyA+YIaV1sVmOHwh2L2XnBzHeLJ7ShmvS32layGofJMcGdFiZeLf4NuFgDlh7B/9yY47YjCJJOOfGbWkqBULXmFGuIHWbkFK77jAcDxMoYNcA6VKOytYKb/BbUYaFXDZ1T/R1P5szVrNpw+X4QDtWUIR+w4ZA8VezLDxd7zm8G1OULsyftM7Ko/goMNVeg+tA1bMj7EdAuVQTQLRLHSijjt8CN6rBWT3wdwvIzhFskNuo5bYqj+N2jcrwtqz2MZSwUFpgga3L3rJ6i/1IJYewrhUCz0WdVil10tXs5fAn1ZkfTHr+AyuxluqkXx5H68vO1rzLME4K8mDZlj8SNTmA9gfQLUaN/AA4DjVTBJwgwwO6mhOv0x4Yr+F1T4s1WOFlsolJwrwP72eoDmswgF34mXLSqx06oRu5wBYndWoNi9dxFcPhoHPfUV6CqjUmj3RjzhiMSNJg3MM1I5laQiz7K3CNgxq0zGG2U4XgTbkZn+Z9OijUryFBuTIihhHpU/q20qTNv2GZa3XwSx5hi6Oy+guO0jsdOsEdsEjdgh0EBICxC7dn8kducthktnD+FQOQ2AvfFY7gjDeLMGPjGoiS+bP5QUSO7hAcDxMqRrmAFmrZGxE8jdBjl53kYXrFlJPrEocKNNg9uOm6C5sxGgfA8OtleiOy0CWiwaaDarxRZBKbZlBIidefPE7twFcOn0Phw8SwNgXzJUpUViqqAmi8wqEqT3k8Z67hfU5EZWcsEDgOMl/FkDxBYoa443aaQQsxI8w3KdAbi3vgz6a4+Cq/44umqLsN8WKDZQk1wvaKCBZoDmdF+xbftb4qWdH8Ol0t04WHkKXUVp2JA5EwWLhnxJ/UKoVUdeZj0CbHAWDwCO18D0v8cAv05uYUeVqTryGt2xp9Kd+lvqAQw7v4CTdPd3H98C/a3n0XXSCF2OAKgStOIFqxpqbUqx3k6DYNs07Mj7ErpO78ehqgoUD27B1sy3MM2qJl8LGhIuaKRx7DV6Jw0A9ufxAOB4BUz/s6NJNsqEPZdkk5OJFi2ZbdXgT3ZfzKwqgM6GkzBwPBv6OmtwqOgXaLbq4LxFI1ZYlWIllUA1NAAatoRDe+EP2HWe+oQzR3AwPw6q00JQ8NwkK0gECwAWYKxLjF2G8QDgeAHDfQDsaJIdUSb6kqdoEPiYtfA+3f1XZc3GrZcuYP+BRGit2IN9bWU4sPNTOEP1/3GLCsuoRDpjVYiVaUq8uH0GtBSvge6KE+g+vBv7ti2BUocWjXYl+ZoFgFFFXmV9BjwAOF7E8AUY6wSjkuduukifpZ/WooYFgk6MLkuDCxePQO++tdhyoRj6Gw9K3VnvYJFVC4fMNAgEJV3kcrE8TQk1O2ZA8/FkvHyxCuHgbuzfPBcO2TWotythOABk5NVEGcsA7TfToOMegPP34zn/ZwZYTW78Xdt3n0FHXqILP1DwdS+yBmJqSzl0Hdgo1uWvgMbWMuyr3AaNWdNxj0UFxVT/lwhyOOzwgZNOOZ6nGaDxTDr2NzciHszD/qzZcMChxFSWAdgL9KlTqLfwBADhAcDxDjzy57nhkShMnxv8qVFVixGCTvqq4AfMq8qFxpz3xDMn0sRL9Ufx8imbWJkRgTstWtwjqDGfZoBCmxyOOuXiWZoBGirycaCpAbE4Cy6nh8F+h4JVkZKlVmqqBQV5PeHNgYep37glYRSXQBwvwBMAkdJ1zACzWh2jlkyw+MKMHQtxY30x1uz+Ek5vWwDnzu6ArtZz2HMsHo46QnAbG5ZFPcJ2qxzz7D5Q4lBC2Y53sb72IA411NMAsEFXeijst8upBJKRb+0ymGZ+k4xPlpNHzDQA6J97HQ8Azt8O69FlTSpJ48kdhhDyhMHPPYWa4LcLl6PQehranOFwoOBnqKnIFS+1nsbWwhVQ6AjGbCqBsujun0kX+BanDPY5FVC66xNoqD9OA+AiYmEytKcH0gwgoybYhyyjQTLTNplMNE0efEw/RrrNSQOAV4Ry/maka1h3ll4m3cAmN7AToFS1qND7wtzcL9BaV4g1mVFwYN8GsaE6HzqaT2Fj7se42RmE6dQAO6kEEmgApDl8MC9NBccKvob6iywAaAbIj8O2LD/Y75yCZrsMf3TIyex0H/KmoJQeF16Ubt8wilzPA4DzNzMcAOwEiBWpsWI1qv81Bh18aA/C2DNOLM+ZC8dL4sXGhqPYWV+C1Zvfw0waAA5B6zYIKjGFFco5ZbgtQwkHCxdjTWUR9rMMsC8R2zODoIgufsHpgz/Z5TAnbYp7skFOnvAEAC+J5vz9DB+BsjZFUyi52zMNzlf0NVMDbA10G48lwPHcJXCqJEVsajmLl87mwImsmWgTdCiYtZhgVWOslZpcusCzMjVYVPQFVFcVY//FOsT9CdjGAsAxhQaIJwDIHKdMmvTXAOAZgPM385cmGD/p3iQFeYlKoECzLyy1+mNy8Ro4SL9zxxzY0n4G2o8nQ2F6GFosfmi0aMVNVAKts8kx3u6DaekaKCj5BS5UH8MBFgD5CdiaEQCFHgnEAmAKzBFk7kms1ZIHAMdLkK5hN7LsDoD16+r9XGMN/iTI4gtfm30xYd+PcOCEAHWntkFj82ls2rcSc+yhqDfqMMmiw7U2Da6yKXAjkzmZAbj3+EaorTqM/XU1CAVx0JwVBAVUHhnsPu5lTh8yk5VY0D+Lm2COtzAcAGxezyZV//1GHXnZ4AdTTTpYZtHiprwvoODsDmiu2AXNLWewfvtCanqDMJkGR6yglVZa1PgLNcFrnXLJkB2IO4//DpXnC6Tui1Xo3hsHTSwoqEFOZcegVhlMpz+Ot0wgjzjHSbeyY1AeAJy/FbYAWQCwidCGCPJAagB5hY1BMWvhO8EPE3PmY151CXbUn8T2huNYnfkuptrCMJHq/00WDf5k05DvrUpppUOOSdn+uP1EAlZfKMX+2gso5sdDIw2AvDQfTKL6/2urnEx1KMjrtsnkoYTHhwOABeCVvwqH8/89LABYWTIrTUgM7ffcAtPdP1LQwDdWDcY7I3BbxT5s7boIl6v34PGM2dT4BmGsSYdrWLO7TSV9ZVPhz8wH5ITh1qqt0FB7BodqKtG9LwEbMgMxN00mUo9AvhB8RE85NCuFYBdh/CaY87fzRwAEsQAgD6YGuF+ju/9UQUWW0h0+3h6GO8pyoaHzAnaWOTDfPhVjLQGe3f9Xs5p8blbDIpuSfGfzwY3b5+CWmkJorSxH1wUmgRLgIg2AbTaZGEMDYLFVIYaaJ5NXDOPJA8lPt9/MA4Dzt3M1ALJpAKQGk4eoBHrNpIZIs8b9qaDBaPsM3FpZBM0dFdh6NBm3pc/BOGsArjdSiWTWwSeCmnxkVZAvqARak+GH9v0bsPxkCfZX0wywJx5rMgIxxynHDXYF+dQqF4OsU8jL1onkfudz0k08ADh/O1cDgD1m5wkA1gmmJhGClnwu+InRabNx68UT2NxajnWFa1DIeVtcRwPgV4sGFlt05D1BBe/YleQTaoR/yfCVDLt+gmOlhXi5uhyH8tbAufQAzLDLxbVWOXxiUYoB1knkJZoF7tv5ErmReoBrr/w1OJy/h6sB4JkFeiUA9BoS7hmGGyhuyJiPWa3nsPWEE/ZtXehanzFbXC4EUoOskebR3X8alT9RdHd/3ykn32YEY8rejXjyWD52Vh7Hni0L4YBdjYJTTk2ygnxgVRKdXUZeYEO3csZJ/+YBwPnbYaUInmG4r5NbYmgAJLOOLd1QqF4L/xX8cXX2QkzvqMWOAxswa8tHrtWO6VT6+MNCg5ZMt2hIgI19SpjhUMKizEiMKbRA+an92F5xADuyZ2KuTYEp1B/8bFfA+1QqqR2TyHOmCb138wDgeAUsAFgGuNoLwO4BjL4kwKCF+dYg8detSzGt4TTW7PkJLVnzxOX2CPjCqIN3zVrir1eKPhYFkaf5kGDBh8zPnoVrju6BC5UnsbN8Hzakh6JTkGO0zYd8Y1fCHJtM8nHIydM0CO5i41eco9iEaA7nb4RJoKv3AJtU5H6Dgmp0HdGY1fCWfSr5dvtydFw8jOU7PsfYrLfwB2sofMaeTmUl08m+NFtoyOsmhaimUmhG1tv448kiqGmqxo7y/XghIxz1NjmuEpSEnRRFCSr3JEE19CR7KSb/EekGHgAcL+DPm+D1CnKPXiM9Y9S5ZewyzBZFFu5ei5a6g3B860Jc45xBFlP9P0+vE5UsU7Dp0VY5ed4sI+MFBQnMmgtLTu6F450N2HYqBw46gsR1JiV8a1GRDyxKmiVosCSykYuTeCUox2v4syGePV5Bd/cn2K4u6IifYxa8VxCP+gtFULR5Pv7gnE7ms0rRZF/3q1QmPRXtN/BIrHLwccMk8pJRRWS2MJhx2IrGzhqo3PYdxluC4Fs2EtGkgZmsxNoik8ayhnh24sTeIGDZ58pfgsP5uxjuB2AjUWL9u29nl2EmNXmBavzJ9ukkvNiAiVX5mLtlvvizIwJmUHn0WrKWPM38QhLNGPHavvuSNIOj6a9/hS3y4o3ur7ovSkdNYe6Pjb4w16CDWUaNGJCqcU9MpvqfZpp7k58mNzPjzf7sK38JDufvYngmENuRmQxii5o9kG1Ru8baZ0uqIzaMOZ+LmdnvwkJzANGwx+5SNeQhKn/+w3qIkzTkjmRWRKckT6UqyWvHUsn87iYsTNWSsFStGJaqE/1S/clkNmki2o88wuYOUdPteS+YBwDHK2BShC1I1hbJRqOzvgCThow2Uqmz/UdYsucH/DFzJkyni/xlNjUuZRK5i9UOrX6p+UZPFany8p1xCvJAgmbomTPpMLunDXemUB/BFn5KEHkjxd81Jj5k8AlWbr1SVX3rBv5WMMe7oAFAFyQ7Dl39ErkxlppUlgnMQeS5rE/h/c0fkQ8dAW4Zm+bAjjDZnQHzDJ6FTINmOAjInclB5P6qAhLW14GWZH/XC8mhrhcSwoae2Rg4+NimoP779cHSbdRn8NfiOd7IFS9ApRBrj1w3RrotJWzw8cz5YnD2HDbSUHrYMZ7cwRa7p4GeBgtbyOwEiU2UYD/Pnj6qyCBjag4RXWoUeWh95MDDcRHkgfWK3nvW0cW/Wk1uZONXmOnmBpjjhQy/EXBlcd/ALsfsU12vOELI62yQ1R+7/qjhHdwjneiPLBDYz7PdnVWVssW+NoLcwb4V1Fizn2NBxRa/Z/fn8ofjvVxZ1HSRfzKKXM/O7de/Qe5h7YvzRkn/HL68+qt8+TMIEuax98XI9XTh/4t9CQGN/2Y/eoKGL37OyMKzUP/BHrNgcogt8uGF+3+3eIeD4Mpx6rXs4QsWDJ7vilTyTJ7gi58zwrjmo+eibxo9Wnf9lX//f2A4OP6QRXSx//HRfx/W/Hzxc0Ym/4cL9+pi/2PR/x/+fg6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8MZiYwa9X8BQHOX12AzxFYAAAAASUVORK5CYII=","data:image/png;base64,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","","","","","",""],"frame_max":16,"frames":[[[2,0,-56,50,150,0,0]],[[2,0,-40,70,200,0,0]],[[2,0,-8,100,255,0,0]],[[3,0,-8,100,150,0,0]],[[3,0,-8,100,255,0,0]],[[2,0,-8,100,255,0,0]],[[2,0,-8,100,160,0,0]],[[2,0,-8,100,255,0,0]],[[3,0,-8,100,255,0,0]],[[3,0,-8,100,200,0,0]],[[0,0,-8,100,255,0,0]],[[0,0,-8,100,150,0,0]],[[1,0,-8,100,200,0,0]],[[1,0,-8,100,150,0,0]],[[0,0,-8,100,100,0,0]],[]]}
\ No newline at end of file
+{"ratio":1,"bitmaps":["data:image/png;base64,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","data:image/png;base64,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","data:image/png;base64,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","data:image/png;base64,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","data:image/png;base64,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","data:image/png;base64,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","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAvHklEQVR4nO3d248lV3bn9+9ae8ft3PJSmXXjpdkkWy1VqVtq0baEka3mAD0zhh8Mv7D/BQH6J1j8Hww9GH40/CC+Gpix0fCwPbrOmBh1q4t9Y7NJFllFVlZW5rnFde+9/JCkNDMPFquYWTXdEx+ggAIqUXniRPxi7bVjRwSMRv8Fk6f9AX4dGaZ//Aru2gwH+P3GtFyIALQrs74lbvYkvnNEeu0m8bU3SYLYU/7Y/0XyT/sD/LoxTP+XV3DzwfLrmXjfWj4U+CKZNsCiqmPKU1xs5v31iuH2beA1sDdtDMFToE/7A/x6Mf1jcJvM/EsLyfOcKlbMpp5FbuzuGLtRJzuxms3swCazimL2jGUne+h3X0PBxor8hI1f+DkyTP/ly5Yd71OEA5lYb/NcZOrEJn0iU4sS1AZTawazOmX5uh5oZrm03GO4+zbxDTDGSvDEjBXgHN0CDTvi+pwidUxKY0a0vRjjYQZXBLni8ZdBD0V111u/IGuqek3+k8w830ZfH09KT9TYA5wb0+uvIPcLc8UUnw9W9iI7lmw/K+WSZExmz7Gz+Sg8CL0/9Q5nLthcif2UeHWHWBfEd17DeNNkrAJPxhiAc7TXINsgrissV0Llkp/6Iu0Vl+T67tfsucN/Ir995/92bx/fTr/ooqoESaL5EDP6yYahTsTv3MNugL2BMYbg4o1DoHPyOnB7+75OKtMpeIVCVSYGi7xkP59x6KZ2mJRDEzlUS4fi3J44WThvU79HuevI20NTvo2OR/6TMQbgnNwCXuAF2imC4lDJ8bHKF7Io97k0uWxXdq7KnnPsm6VLOLkULe1LsD3tWND0k0ItvzaX7OZl9M1xVuiJGANwzkKHhoSEiEsR3y6TW93B+gb1irv6Lft6MZPL0z2uZaoHCfZcxk7pi2nq2mpplt9u8Cfvfd4QjyG4SGMAzsmbIJNrZwerd71GCc47532ueepQaly3tbT7PDuTZ/mKHnDdlXYopD1N7ESzRZGXk7ZvypeD+c+HQuOs0MUaA3DOumorPeAoGEKUOKDiyM1wk5lkkkm69DWu+6ldcjtc0dwupcieCjsMzDOtqnXclg8bya5/HeF1GKvAxRkDcM6KZmpeC3OCAaQhWbchDRtSSkgc4JlvSXX96zxbHthVn3MgkvYspL3k4sJFpqW44sqM7Cc/NM9bYxW4SGMAztFHfARs6IFARMUZCvku+aVvyh4lTkv8+mNrv/pH7O+8wPXsQK8ispvQhcfNxZh2s7Kc9Za9VIjj6PN9NFaBizAG4JzcBtu/95wFNze/6UwSKUo0MTUbSO3KQuxJuUM//RvZ2lbSc9/kWnXZDt2ES+rSjlhaiMqUzTBprC3XM7LVwtw4LXpxxgCcs9KbpSo3UZKkaKIkG0ibD6gJoAXStyYf/BXL3WuSH9yUF7JDDnOVRUw6TxYWWZ5N0kKLnc+qwPUNcmucEboQYwDO0Soz6x1WC2bizVkWLWJDTdh+RNtvieqR3Wco7vyFbcPG+udetv3ZZTuUGfv5LO17k2nUOB06mZhQDLv4n2Tmb742Xha+CGMAztG7wKQWW5hEbxYHGxKJyEDcPGQ4fp9WFbny+zKd75Pd+XNOih2R67/H1+cv8dzub8lLfsq+mJt6lcqKrihqy781R0/eQ2+NVeDcjQE4J7fA9nOxfn1qUc0wYoYLTiXgiC6RrCYhMNnFl4eSf/iXVven1l79DZlPn+V6ts9lJuyIpmkuvtKkpXdN3pj4uzPcO6+Ns0HnbQzAORGAd6D3u2YmMSSSoSFCSGd/UgwkSZhfoHvPkdPDnb/gJFPS1Zf1eV+xKPflIHNuBkxyl5VuojnlOrs+R2/cR8Yp0fM1BuAcXQe7srHUrSxFlSEKg8CgMMRGuuaT1MUlUR1S7JnPVN0H32fdn7Ldv5SK2T5Xq8tc0zIuRJkGwiS1RZGnuT9Vc1wep0TP2xiAc/QbYKuCVBVE7S04pU/QI/QpEpqt9NuHFizB5Ir4fIfMGvTO/2MnhvWHL3K1usbzfiK7FtPEqy89Q1Fnll0WcdxHx2HQ+RoDcG7E/hSsmJCsJIowpJ4BaA06ga5/SPfgh2yGU0J5gN99iSKbkP38X7L68N9wd5Kb7r/Iy+UVrjjPlCCTRFY46fI+4j8fBo2zQednDMA5qwsxOyWmgqAqnVrqLNGa0fan1J/+nW2Pf2odIFe+YVWxIPcef+evWHdLWQ8D1ewaL0rJDI1lUMrYF3me8MMa/YdrAqPzMAbgHP0ZpOkRaTGRmAfpk1lnqrWI1BhNGmhDI/3qY/oQSNNnJSsviVcnvj3G3vvX9nEM2pfX+M28kl2DykFRFkPuC/Ob7MTdfXFcIHeexgCcIwFuvwObjy2psyEZHZHWoBahZpA6KGHbEIcVVuzh9l6ywk/JNJI9+Dvq5iSu/C47l27yDZ/pxKCwmGWb1PlFsafcR2++M1aA8zIG4Jy9CskmxAjBJTpTapRtGNgMp5ymFdt+I8Py2AKKHNykLC6lQpUs9mThWGpLxOIKL7gpMzMKDeQxFX6Ia88cvT32AedmDMC5+odGeB0lto4+ZrSq1Ka2tcQ2bGXTf5o2xx9KVx8RJnviF1c1dzk5Si7RNIOY73J5ds2uS5bKKDHPMvGTbKaMfcC5GgNwzm6AffKAxIZhiNJpL3UK1M50LcJaBtbtPV2t3rHNpz+1rm+wvZcoyitS5Dl5XlHszM2nSNz9Ct/IMiZ9Rt5Hy0LC71eme2MfcG7GAJyzN8DKdyXtNcTc0wvWRmMrsDZhbcLWajb9h6xO3qVZr0jz58h3vmKVn0uZGpAoSo8NA4GcKsPlWRyyTsQtCtF7a5OxDzgfYwAuwPcg2cJivyGEROdhkyRtIrb5PATNfVlvf2mb2GDlJfylr7oin1GETjQGU1OdDD2DJkoLsUiS5Slv/UbMLa6IjH3A+RgDcO7EboDJX0sEBoE2Jqkt6kaTLi2yTsYGpWk/lvr0x1ZbgMMbqTz4GpVFyyQTVUneFzZFZOpMSpWQz1LhJy364K6565u35Ra3xirwJY0BuABvgB1CWg0WrKe3wRrzbExYi8gKSVtJ1ENDc/J3tll+QvC7uN2XKKpdKYpdMt3Fp0TlLFU4Js580dlQWGiyvepY4RXOnkY0+jLGAFyIs9mgg6VEt5EhZNKFga0k1knTypyuTKjNaNtPae79BdvuhLR4nmx62XLNERM0bZDY6cTDxGAyD3key4l3ywP33KHp2Ah/eWMALsifQeo/IGaRoWit0UgNcSPGWs3WibQRpAmtdMsfW33/R/T5FN17WXL1n+2YntwZU0k6KyxNE8MkWVf0c/yPT9G33hr335c1foEXRIA9SNst4TgRrKIJZltMVyZpbU7XfFYF6gfWfvLnqW4fkCZztChVACRRaGRmwRYW3Eyjr6qQ51qbKwpxt57uJv5aGANwYcRug73/ASkJQ7+l02Q1xA2iSzVWJqxx0ohJX9+l++Rt61KHFdXZIqBYk8WeqU/MMrMZMU6DhippW2QZ7q2zR6aMQ6AvYQzABTp72wvp4R0JMZM+uKw2sU0w1glbmaW1wTZBO3QMJz+wLp6Scg9VifiAV7OJGPMU4sLhptpR6VDmvZlnOz4u5csaA3ChxIC0P7XIhiF3NGJ+a6YrNC4RVqZxrUKdEu32Y7rNhzYIsHsZnexTOqWSyNQnneWWZpVJNdWhKDdb/9KOuVuMT5H+MsYAXLA3gIfvSuQug51Iv43UomHtLT+NIqcJt8TJRpCm2dId/Zihb2G6hxzcZJJlVGpMMKZp0FkQpkZe7u9NMylxNxmrwJcxBuDCSQJSO7W4gSFzNMNg20bC2gmnpiyDsE5CjdC1gXT8aTIUdl+QPN+10rBKYAo281FmGm3S1lRTI9t+Bf3uWAUe2xiAJ+DzKrAaLMR+06cs22K2DrDE5BRhhcqGSgZmcLqBGKE4wM2e00mWU2liojBTmAEzD6WV5NMX8HtjFXhsYwCeiLMqkNeEUM77LNAk8RszW5mkJcKpGet0yqr+mW3aDy2GAK5ED16xabkvE1MmwExM5yIyi4lJr1IMD8n+p5dNb40PzXosYwCekDfAHr4rcXdjfRalk9TX3ruVeD3FbIljJV42/UOa7QeEviGliB38llS7v8NOVjAVYSpqczGbi2dWZFbJoeUPJvh74MYq8OjGADwxYu98dq/AZsMQfN4MQbYS4tqUpSjLqGxcLoMTYtdi9SeEbIZe++/Ym/+m7aBU6T8YBsU6TIdOirlIdnOsAo9lDMAT9Cakbz5z1gvsQDd4q/vMNiIsk8kSWKWC1u9isSZ98u9s092j33me/PqrXKmusDBjkpS5GfOkfjpNTJJt8r01nrEXeGRjAJ6wt75Pyut3Q90sBxukdT2bhK0jaRVhNazlYy2IQyQe/5zt+mNrrCbu/abMqqvMJKM0s8oL0yj9zLCKvWlePiv+5g301nhl+JGMAXiixG6B3d75WtqyG/KcXryvo7m1RlYiLHFsnRL7zkK/sfbkF2zbB7STOW7xdXaLXaYolSWmmc+n0cIkQDlAdnKCvzkOgx7JGIAnTICTF0lTCCFYH0Q6sVBHpyslrtSz7Vu61ae0sZPm9Jes22Nac8i13+fKpW/Zoa+YiDCxIJMs9xPfU0ph+d5voCevjMOgRzEG4IkTu/EmNj0iyYbBOmsFXyNsI7oKkYedcT8p0TLa9T1Wxz+x5bCknT/L5PLvybVqn1nSWJmL00HidMio8oJsiGTPLT9vhkdfxBiAp+ANsNuHpNhJFM/Ql7QmbJ3TlThZZwriyCYvMAmOfnmftfWEosTvvsyl8nl285nOTNNUcJXzlKoUHvPrFr05BuALGwPwtHyfdHdG6pyEvm87AtthYEPHSXskP3MmafqyXC6uINtPZLP+iFUKhOkB1d5v6rXJ7/Bcduh2LUvTPjEZBgov+PUUfzj2AV/YGICn4uyBDtc3xPWJBbZVV5jUubAJK46Xfys/6D60n6o39r8pz1AQH7xny9QTfUm+8830wvy/tpv581xzTidKLFUomtDmi5noEeO7hb+oMQBPyRtg//sMqzuJh4X1KrQhsPXKejjmk6N/K39pS5bZgsn8t+1wdYdNc0oLMLvKPN+VnWzGgpwKJ2UUijSXzDJz22+P+/WLGr+op+jV75NoCJ8owTnakKhN2Kix7u7Jx+vb8v+2H9n702flGlOKrjNLEUNQU1Qq5q6wqaqWJHLXie8EP+lMxj7gixkD8NSIvQHGISmcMjSdDZmjCYFtB9skaXt8W27f/1v50bCx1fx35QU3lxLAKXhD3ZRJqqgQcivIHLlf5aJdjd4eA/CFjAF4qsTe+T723Eri6ZrBG10WabKB2gYasdQND1id/lB+rM4yychF0azAuSk5as5C8inik+H7gCsz03uzcb9+UeMX9ZS9Cen2O6SvRglhSxiUQTQMYm5AdFBj2P4yntQ/4Y5GEEHESH5L3b8vJ8NKh6hJxSE6GWRIjVwCXgXAxv37jxi/oKfubEbo55+aNfkm5RlRc5/ULEICILUubn8pRy4QzLCje3QPbnO0/ZAVPUnAIhF6yBQ7Bt46+8/Hi8L/iDEA/xl4Bww+ovQzSw4lBExQM1W15MTh84nl3hNjwNYfsT35kR33p7RJUkwxRQtEfBZdPknT7PPn5o7Pz/3HjAH4z8BrwOyKk2yCX+xRaO4zdMjUyBKaZy4We19hoRXZsGXY/sQedvdkbSENJOtVtSe5XoIMzYmlbPNZ6Rj9o8YAPGWGySHI0FzX2KMxDFmsyTOyEkkVKZXlvpvu3+AwKe74A6ubj1jbYANC79S3iDbqQ6dqQwzEuw9IMIbgi/BP+wOM4Aj0coUjk8y3uRqhRFwlJhPn02Ry2XZ3npd5GODBj1mffiCb1NGBtElozdOEkLXLzPp0ieHmlvTdp71RvyLGCvCUfRd0+210mJH5aTftWypNbpJIM4FJvnA7z74qz/k5Rd+Slj9nE5b0ZnEQUmeWahtoGKzNw7bv46fx9iGJsQH+QsYAPEWGyQ0Qd2Ium+JdyLMhWWUuTTGZoSz2v2ZXrv6eXTbB1ceE/j5dCgQT6TDXCFqjNENGh58OBz+7Gt/5PjY2wF/MOAR6ym7eQMnE05M3KRTWy8TU5k7cdHqVS8/8C15QJ77tkc19C7ElCHSYtkFCbSZ1SK5x2naZluHdKenPII2Xgb+YsQI8NSbfBd1u0fIa2WLBxBmlipsqOvMVi53ftCsHL8tOihB7Un9CF1uGlOhVaJz4rairkaFdhdh/cpfI4XjwP4qxAjwlBrwFcjTFD0vLZEERBpmJMBdkpiU78+vsq6J1Df2K0B1LFyIDMbZJ/TaStuZSY5a1e5KFBxPS2fBn9EWNFeAp+S7oD182l2X4Vd8VbR9KSUzE0lyNuTOme9eZhjWJgG1PrK/v2JaOGi8NhC3RttJTO+haOQ2rlcQbjOP/RzFWgKfirPn96o64Ibe83Cuq1MSpmp8nSXOBmStsOv8Ks6BkqSXWRwz1p6xToAbdxBQ3OLaSujYG368e7IZXD0n/dJz9eSRjBXgKjLPm9x4nWe/bIq3CJOJmUeKOGAuE2eyQHa0kt4Dcf8e2Jz9lPSxlkxLbaHGDs21kqDvxbSvrcLAn8U/H4c8jGwPwxJ01v7Yw5yuf91ZWLvNTl1io6EKMBTDbvcl+3+AM4vY+/eY9VrFhkyxtRFiL5msGtzVNbcqGod8Q/wzSOPx5NGMAnjADboBbn+D73OXoMLUUF4m0a9iuic7dxOZ735B9BOlO6Po1fThlFSJbU9YiurYUNi5kTRmrvjy6FH5jNt4F/zjGADxh3wV94dvofI/MR628xCkmC0R3SOwYab77VdvLdq0Uj22OLfYr2tRJrcramVsDK3DbrujaTSNDu7T41vfHs//jGAPwRJn8Ccj2CF8XdV6ZVp5ypp6FYDsGc3U2ufLfyIEgqhmpWxH6IzZxYJOMTZS0FNV16Os6adEePGT45jMSb43N72MZA/AEvQ5yBDrNTj24Mmk2MWQ+JHaSsSPGNJu46aVvyW4xw2hJm4/ZtPflVIw1wspMV6ZsZDKpq0B/Z2HxT78/Dn8e1xiAJ8bkHRD7A3NJdrLJUBT+sxdeeJG5U6bimF79g3Atn+IQ0nZJaD6yrXVsk7ERZCkprkOQLQOtZgyrlYzN75cwBuAJOWt+b7v1ybF3ZZMLUpnEabAwN9KcaNNsYdODP5BL7daiZMh2ZaE5ltWQ4jpJWpmmtWV+E0PXxED/yV3iq+PShy9lDMAT8l3Q/ZdvSHV44DXTfKisclGmXv0UdEIpk93f4apTVKPEFKC+RzM0srHk1uBXoKsB23ZV0a5qhoPl53P/49n/cY0BeEJeA8qde85j3gUptIsTE6YpxRnC1C9sdv2fcLj6mC4voa+J6/dZhp6VCWskrgaJG+mpNVgTlKE/+Hzuf/S4xgA8EWe3PbpN7mJqsiyXUnImClMRJuKZXv1DnncFykCXgOURoX7A0rq4VotrnK7yaJveUUsrQ91J3Ht7HP58WeNaoCfgdZCjG6g7PHACecJKkTSJwtSbTvIJ08ObXDr9Jd3hV8lShtSn1vYnsrTk1oYsTeIG9ZvC2nbI2oFmL9weF759aWMFeALeAbmzMJfiOlPtChyVBFd5kypB+cyr9tW+heaIulyICz1p+6lsho6VwlIkra1noya1t7K7drI3cEh6Y5z7/9LGAFy4s4tfxUpclc+UmOcWKJPYxITJ5Dr7+zfk8tE7tL6nkwpZL21o7tpx3KaliW3MWGvmNltrO9fIcPzg/TTe9ng+xgBcMOMfnvogA3kUCsmYoFRJqJ7/F/Zby61Jaqir58hR2LzPsr0rx6lnFY314HVj3dBUWrQfpQehP3ghvjk2v+diDMAF+y7o7L83WWbmOt/lKhTEVGJUBze4Nn/WXaqPGVxGmDxDGQbi9j2OhyUnhq7MWLkQtqZZ028JdXcQ994eD/7zMgbggr0GhCNxxRw/a8sMk0rQEqx8/o/st0/vxRACvd8Vr57UrqxrH8rpsOTYgiyjs200X7cibSilp2Fsfs/RGIALdTb92Tao3+JdTlnMmYkwuf6HvEzOfNuLaIXlO+ZESKtP2daf8jC2nKqkjSa3SUqjlXXVfQtj83u+xgBcoM8Xv3Ed12WSd1iJs0Jnafb8P7c/fPAhwe+ZZDkqJlE9tv2Y027NKlqse9hmhdQmtHlNOBpvej93YwAu0OeL34YTsnlmGQVV6Chf+ufyjXIhO1ZSkYtYK6GamoSWsHlPjqxnJU43olY37dCmJH0rMt70fgHGC2EX5mz6806Nxj28UyaTS7Ljne1f+a/4PXH47BpqGcmipfKQcv0pp/WRnYYoW4PaEk0w64qCfrslXq+wPx6HP+dqrAAXR94CbTLxmpHnGYVWcV5etcPjd7kjDqVEUm2h2kH9VNzy55y0G1knsSY5Ws1dk6ZZn5LF7tDi3dl48J+3sQJckNdAXvg2OunMdQO57cZZbF1+9Le0pra+8gckGhJBwuxZqrZl2NyXZRdpktIloRNPrxDqgbQ/FXtOxgCct7ECXJAbIP0GXU3Idg6Y7Fxz+6FJZUxWWWLCBK+leOfxQ4KjH9ly+9BqLA2q2kcJQxSCFRJdKen9p71Bv6bGCnAhTK+DuMKcB786wcck0q00F2yaBnIM0RKdTMiGh1afvMem7aQ3LyGSgrN8GHxILmUp99j+wox6XPt53sYKcEHal017Fa+OvMjDRHKm4tI8KdNhwGPgc7RcoJsPaeojahsYIoSoxGgxJbIY1KzPx6HPRRkrwAV4HTQcoDPMi5J3rS9iGvIYXOWESpLlQy823cOVwWTzMU23ki5GIo6YHFGNmMTMPOb7p71Fv77GCnDuzh7QUBTihineekqgtKilVyYI1WAUy4ekxR6y+pR+fY8+DCGYEkyJmeggmQ95IuXdZ2f/n8ObT3Ozfk2NATh/cvMGutOYVlEyJxSqaWLCJNjZKtAw4NoTSxKwox+w2awJJj6ZEgwLIaUYsGgFMXiszW0cAl2QMQDn7HXgXm+SK17UcucokzARZOKglEhmzdnYPw1Q3ycwEMUIZoSkDAbBQdQkSaKkdo09nI9Xfy/CGIBzZXIT5OrvosdzvNTkBqUTKhMmQBnFMs3M7+yJhoEYzCwpKQlRIKgxeE8wiH2yFJzZtDg7+G/cGJdBnLcxAOfse6+g67v43QqfCopB4iSlNBVLlQmlzyh3npOqmMLpJxYSgilJjJCEAWPogg09ISaIEkhNYXb9PYw3nvbW/foZA3CODPhOgywmol0nOYRSRCqcVohWAoVW5Hs3mYUelg+I3WCImOGIIoQEsVQXDB8lkjSQFqdid2fYrXEd0LkbA3COboHc602apXnzlilSEGJl0SYkKpLlxYFVV7/BJBqYIGQCJilBjBCTaOgg5krQnNR7bFOOTfBFGQNwjm6CXG3R8hKaLfvMq8vNpMpUS4VCM8r935LF5IpkgIgAg4EHMwzFvGAqGAxkg1iVj2P+izQG4Jx9OKBHTe0sC1kUcm+aBygwckry2TOUqkg6JXYf0A136WKHYagmxFLSZAhkDJlJ0y/H9Q8XaAzA+ZHbvCXf/CbsD6KappJC9KbJK/goZG5KPn2GvF1ZioZkGZrtilfFi8cnwws4AafgUo/m1UJmrci9zdtyC8YwnLMxAOfGgFdZ9kcCEH0v4hAzlWRJncO5PSumM/ThD+kIRrYr2ewqlc/IJeEFCoPCUiziEPIs673bbN1Q3ddrL77y2cE/vgrgPI0BOGftyaFFV1kKmCSXUJKKxuSwyY54V6JHP2Fo16Ryx9z+85TVIRNTKrNUWkolSIXzRewlj4X6mB/q/trk5mtjBThvYwDOjdhNsE8/BSuJLs9CFAZT7QR6pwzTKziALsH0sriDr4grDyTf+yrzsrCpmk2dyMwb0xTjNKqUodE8dCsfZujt+8jr4zDoXI0BOEdvApqRThqsD/0gkZZEY5ZqU9rZdfzmU3rfWVQgK9G9r1Ac/jY7+ZS5x80kssCYq8lUeiaYFK5bZIWI4/Ln+2scBp2XMQDn6AaYL0kLJ0PyeS+OWoWNiVtLRn3/A1Y//T/t4bCh95XRByh30b0rkk8WNnMwl6QLNdnRxKJEJqWTMtM2z8CNw6DzNwbgHL0BVu5ImkJISmtK02tcR9ISx9ICm/YTWW3el3rzEUMcMM1QP8fNn2WWlbZQiQsxFg7mBjMxmTgp83Iwf3UcBp27MQDnbO9t0p3O4uVA38E2F79MnlPJdW3GJtRsQqL76M9l48Us9Jh3yJWv6WT2jO061YVPLJy5hcPPVaTKPMVxQ/5+jx+HQedrDMC5EnsN0molcZsxZBmNRTZFqev8kjVWyxEDS2tpT39um/aEGDqSCEyvki+eZZZPmSezHUlhkYhzi8yGlnKaSZYvxe2vTd4Zh0HnZgzAOROAQ1J+ytBtpGtK28SOB9s7/HL5Du8MjdwPJg+7LfW9t6WWrSXroTrE7T+v1fwyO7mTmaBzn5g53MRiqMxb5r25qzP0xv0xAOdlDMC5E+P7pNNBghusa6Wp1VgPbTyKW/sk9elTkp3EmvXJv0/L7cfSq8fUIXvPk+88L7Ni33YczCXKXBMz72USIqUUkh0diYOz544+7S39dTAG4AK8AXZ3hi0TYaFV18NWxS1N9KGpPIxJTmKUZfNAVh99P60tQQpYsYvbe4ZyeplFVrGjMLeU5oabFElKCZZlGW6/Mnf2m8Y+4MsaA3BRvn/WC5zeZXBGrR3rmOIpnmN1nIixjB3r5cey2XxkPQlEkdkV8sUB02xiO05Z+MQ8G9Isl6HSrC9nJdnDI3HjdOj5GANwIcTeAOOQFJQhVfRdKdskbpniWRVInpOUZB3XbO/9JZt+Q1rX4Ce4vd9gvv8V9jW3HczmKjpPyc+qKFXTWv5cYY7buLNh0FgFvowxABfpsyrwyX16NWox1sAKOBHj1GAbe7rNHerJDppVSNvC3jPkl3+X/d3nOHS57pqkHZLMg2VTKaTMLpPfWZi7+dp4g/CXNQbgwvxDFfCJoJ0NmZcmKRtgJchaHNuYaJuHdLG3NFvAZgPdGspdyskhOz63XXWyqy7ukjE3bNI05D49zAB3a6wCX8oYgIv2fdJzK4m6ZhiwrkxDk4w6CXW01IIMMRLaIwafIWS47T2Sy1BXMnVBZhpYiOlOCnGRlFk2laqsLuUn7+H5NjrOCD2+MQAXSuwW2OEhyVpi3hDqhsEcvSY6hdaMgYE4NFgcDD9HHvyU1J9gs6/KIr9mB1HjHma7XmQ3DXExLG3a71g+OTT/sDLH6zBWgcczBuCCCfAW0GRiwWHiLFmMZoIJmiKsDBIKfSc220FCEF2+S5osLJ99lf1ix+2haU9Udwpxc82YuihlGsj+2xnKW+jYCzyeMQBPwM3LZ48z6VaIy0QsoQkc4JyRW8SVu/i6NvICqEyPb1sKa2z/RXbKq3Y5q3TPme2YpR1ncVZEKxtPfnQkjiP01lnWxirwiMYAPAG37yPVvkncRbXPvKSYSwoFkVwSmUwtlzl+OhfpW7hyU3y7QdcfuDTZlWLnJQ7yK1zFs5sJc8nd1AsTySSbgv/95z9fHzTWgUc1BuBJOELF4XJrfdCQqy8KNS0FChGyyXUqzSA08PAnpOl1VKe47QcBJyaHL8ti8aJd1Yo9S8xlGGZRQ5XMin6O/xsv7rWnvY2/osYAXDADbgK6EWexypxkBUOsBCkTlOIoJs9KqR7ZHJPu/1sL8dTs4Ka4+tQznGKLy5SLF2R/us8l8W6mkk00SuUC+ZDwL3Um33tv7AMexxiAC/Zd0O0WZRdXBnLvKMWoTKjUKCS33M1wYRCaI6y5a/HBD4h7L+BCE+The0SA+bPM5zfsuXyWLokxc+ZKD0WezJ8sca887Q39FTUG4EKZvPYaXPoG2q/xUa0ghco5JiQqgSLfZ3H5hky6NdaviN2S9Mlf2+AdphGp75lJgMUlsvmLcuj32VNL06RUIuTRxGeH4tql6a2xCX5kYwAu2Ml76C/Dsa+LJktZKEBKMyqMKnnK6dfYPXiZggTpoYW0IfYr0sf/hiEJ5gvRYWumHikXVOUuO2RSSaTIlBxvWWxNHz4j48H/GMYAXCAD7jbIormkcyt9lrI8JiqQSoxCpzZ5/o9kPw5mRQbNPYvJSElIRz+xQItZDw9/TIgdyc3Ii2scZBVzSGWMkvsO7xR3fYO+9W10vCD2aMYAXKBbIC9sUa3NWSKL0XIHJXbW/C5ekN1LL1q+uS8pL7Dt8dk7wgzi0BKDYak1O3mXsDnFFNCcs+lTKCxZVgguK8ehz+MaA3BhTN4BmVwz2XqcJbLMUyS0MKNAmVz7lu2pQ5pTYopYfV8GQWIyAkZUSBYgthDas1O785arI1fTzBlZzMTHHq32TW497U3+FTQG4AL9ybeRrkZ1gfNeskGkgFSqUric6vD3WKzvEed76PZThtBZELOgIgEhWiQOn900HwfwDnU7UrqcwoTMSXRFMvERWe2OPcDjGANwQQz42QY5KXEquN5ZJslyUy0Mip0bdmmyR/bwHiGfwfIX1qtJizKIEdQIYSBap0mniCsQKVBfkuHJ1VATp5ZEfUIuf/b7nvZ2/6oZA3BBboG0S9NUiWYmvurIxFF4sdxlLF76H3i2eUAgYj7D1ndoYyCZMZBsSBCAmAazohKKCdqtCM1HtolLerN0VieAPkdWH5u8/XQ3+VfSGIALcTYT8/AZEe/NDWp5m0tupMISRXFAvv+8lHf+hvV0LsQtafuAhymxIemAaC9GcKbJFUQ3MzGF7ZJY/4J1agjOzi78hmSSu3ER0OMaA3BBbr6GLDqTHcUVA06jFZIo8Gn6tf/RbmyOLfVrsaw0GTba10s5UWEwtd7MBmcMYFHAql2Rao4mkLCkMyNBOvtFA/QbBI659vYYhEc1BuACGGcrQA/n6AOtnXky72MuPhWS6eTgJnsf/5U9TL3F6Y5YfRy3tHQpEpzRkugxGSzJYJCKXXxWIRikliQRA8VIEg2pALj0dDf6V9QYgAtwC4Qj9GSJm8nE4SQbIgWW5ddf4bnNh9RHP2Cz+7JVfUtsVlangYCT1pAOpU3CACkKmL+EmEHcWIhbAgZmiKhK4ZE6tLq9j1wfl0I8sjEAF+UmpEo0mngJlnsv+f7X0/WX/hkvv/+veehKceVMJJ8hw1KWIRDOzvw0kqQTozeVSClWVGgyoCX9/cEfUR2Spg51eSn7wN0xAI9sDMBFeB1+f20y60yrypy5kA3J5dMrXMoXNn34LpvpVQoVMwaa7Qk1xoBZi1mr0KqdTYe6qYnLAYO4JRBAEorgEJxXNA+dhqnoTcZbYh7VGIBzZ/LOO8injUgqRPsOlwbxaMzqU6Q9ka33IAvLfCEpGaH+WE7ECKYMqDRAayK9KDGfcfaWbIE4iLkIYihmKqKaOcTlpeQJuTeuA3pkYwAuyMPOJOamMuAUvBj+9Cecbj6h8QuKrECKuUjY0HYNEYgqqcZSm6ATo1dj0F5CV3PW9jrEPJIEVUGMJJaCDumzA//lz/qP0Rc2BuACvAasDkRmM8gcisc53E6yOG1PrM138GSInyKbB7ZKLd3QExKuE9EOoUfoxUlQZ0kEkoHa2QhH7PORjmKS/UejnlvjKOiRjAG4IK8AsRMdBlwKeCQqyQ3tmn5+lbyYqbpksbnPOjZEU4KQevvs7J8gJCzoApHPVnsGMEskAUsAMZ09VEjHJyQ+rjEAF+B776GnnckW8OWgmjsRsJiIYYtNrlFlM4shybB+IKfBGGKiR7TXz87+GL3mksoFahGzhEmypEpCiBCjqkZVnzI16xW79u4YhEc1BuCCrHoR62vVlAmWymTkkuj7LV25T15kqChxe481kajCIKZDPJv9GVR1UGEgMKRaB4mkBGZJkgkJ8zFYSpJIuiFNPXb7aW/0r6AxAOfs81PwdjCZ71YSPaLJmRhJHEWzlCHfkWxyRXzo6Ns1nXkSiWiWeifSJ9XBSAOJKFNRv5uypIgIBkSFiBJRjeJIzpNOTs5+79gBP5oxABfgFc4WJvSxETURiKiRJJDaY/owEGd7lncnLG1gsEAwoUOsJ0kvkoYEUQvS/BkrNMNZxFTEECKWIkY0izF4iUGxiZpdHxvgRzYG4KIcAFQkGVQMIaklICV0aGxIQULzgOXQEVMiaqKzpF2Q2GPSY/R+hrkF2SCICcSz3jcGzqZNRUmpMYsd1rnj8eB/DGMALsgB4BMCHktY0lALBEpiMcPZQGjX1L5EFGIUa3GpVbQ1o1Ohbx6w/ejfy3F9SjADM4kG0akGlIgRnWC5Ygt3MAbgMYwBuCCf1nL23QYQ1FR8hk84B8VUiJG2PuU019QCW2fUgtZYalRoDFpM22ZpjQUCAyltrDNjSKSQLMWkZ71DdNiON7sLxvjSmEfin/YH+HU18WbDZ38PgvkUouYSdcJQVOjdH9r7qzvxaIjamFgruDXRtmpqGE6RljxFvys+RkJqkfYOJ6GjVfwgYgMQ1JE6xLpsHP8/jrECnLNbIHcbhIfQcPb6U9E+BdVA0t6VRFfi2nvy0AaGEKRJidUgtjZhg2NrkmrTVEtO6/ctyzwpdfTxgSwt0kZLg5ECRpRIcv0mPe3t/lU1BuACXK+wh0DWYZkniuSDQCcu9X6KtWvW9ZJtCDrYQJciawerIcZNDGx91G2IutWCZnKNslqgsacNNatkNCAtQi9RBjJi4abWZGY3x1mgRzYG4JzdAnsbaD3WBZL1RDV6l2i1dI3OSKmh6des6LRPkcHQVXRhHXO3CZ5to7FWx9o826xApjMMpRdlq7BNjsbQLmVDCK5PbUG6fG8c+z+OMQDn7PMLUdNMLCaieekToTPnahPWecFgydrYUw+DrC2wNeKJJL+uatnkA1uJbp2MNZmt6TkpClI4sfthSKeD2tqEOkKL+n4refCdpB9mZrfHCvDIxgBcgO+8SOo6i9VEoqgNlnzjsK1maeOnDDFQx5YNxmYIdieKLRG2J9OmOdWuiZE6KKv2mLvdJ/J3DLa88+/kbwfkWBzLpGkdNDbWSU/PsClJ1/KzF/I97W3/VTMG4AK8CawKsWjL2Fd0atTJWFvU06xkSINslORsSGtn7gHJrzujLtqyVR+bYdLV6lh3a3swPIg/ds4tj2/HH8WBT6NyYtgyiW1ataZHgrtj6TbjMojHMU6DXoAbb2I3b5DuszOIs8FVUlvfe3xe5IUNqaOOgzzoW33Qw1aNumqlvQ9h5icqqZFkaMK5csYJPtVh6+9CBKElc2uNbOqK1job4kwiM8aZoMcwVoBzdzYUuX1ImkLwUbreqJNkm+7BcHr0M/vlnb/m71LH/dRwpCa11bTNYF04+WToOukbC11tbAfXr8tFqtXTmIRjvDuy3B0bw6otuy1It5VfhvbQIq+OAXgcYwAugAC8Suo3xAcnNjQrui6w1szX3Qmnm/vyybBMd4fEw8nWtnlPt0yE/PqVcARBwqILQuvKfFUc6FaVI3N2nPLhJPh+udW0GlJqphntXvni8LCRyBswXgV+dGMALoTYG29g33uRtAkyfLpLtzmWrvdda40d2Yajts1+OW9YHzlpQiX9bJDwsJF4b0N8sbJBgnR9lCYe84ujX8j/prNsufFxlTRfp22og0zqB7UNdyvCzcuMDfBjGvumC2XyGuh3XkHvznD7jeVXXhhelj7zn/yIn4QDBr9LevivJALpFtgtEL6N7lfmSi/Oqbm1iEuZKUDfrOzQLcKdJJGKwH0Sr5LeeGNcB/Q4xgBcOJPXz75nfYi5b/wzrtcr6ut/IyffA/sOpO+eLWJL/9HPfxu9/nWk/dA0zM4q9ay9J5vymvkN6eFcbDz4v7wxAE/M2Rn8f/2OXV0fSX36A1Zv/P2w5T89eM9C8M5ryI37yKvAz77+2b56G+7OsJuXsds3sPHg/3LGADxZ8ic3/ufp/9X/H8O77/6r7v//R8+e9WN89qyf1/+Df3rjbMnF2c4bD/4vYwzA0yE8UtP6nz7x7e+zMRqNRqPRaDQajUaj0Wg0Go1Go9FoNBqNRqPRaDQajUaj0Wg0Go1Go9FoNBqNRqPRaDQajUa/1v4/NtOuDUj8mcgAAAAASUVORK5CYII=","data:image/png;base64,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","data:image/png;base64,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","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAABH6ElEQVR4nO29+bNdV3bf911r7zPd+d43AHgASDQ4NBtQDxLbmmKHdKnluCJXSooNleSq2MkvTqVSlfwJBP8F/5CU/ZOrXE4cI3Elku04VssmZbelbgluqbvxqOYAkhjew5vue/fec+8Z9t5r5YcLECSbA0iChBo4n6qHB+CR555zsL57DXvvtYGGhkcYetA38OihBJB+6E+hdPG5l8woO2nGRUSj7HE90SU9vArd6kCBl7D58p6ewwV9Ebh9nQ+/XsNH0wjgC0fphTvv/QXg/CboyjkoXgLjDGxvrtQpiabVLeolx3ULW+jtB7WDUzLukm5fhZ7ovKTvFUEjgE8LP+gbeLRYGv8mQHgBwIvAlXPQiy9Cz69DO0FNv4YtvVpbH48Ws6M4KzciTrrJuEsRdsEnzoK28+fpwoUL77nug3qin3YaAXxh6DvD9LkXoOc3lyJ48UUSAumVc9B4H0ZjRKmluNWFjdqDNLPa1VE/Qw3biW+ZM7dFcGUXtHkBd71Jw6fCPugbeDRYjtAXb4/85zeXRvviiyTv/CcvgaMR0jCDSa0yERmOtW1blFQLnckRXJQdk/34FrB7HFgHzu1C8E4e8NG5RcMH03iAL4gXAHoR0BdfXBrsb16icOdnCqVjHXSNo5RjpN6j46K6l8V+zVq/HgmS9pomrsjj3Bwz6IJHM6Xt/DJtovECn4XmxX3uLEMf+ojR+YULGq9PimOUpq2oRhIZiry6dnvF9myMeDrGG/WCJtTSaj5H5VM4u3vDT6fTgLU9wcvPS5MMfzqaEOgL4KOMHwDOA1hwGqOkjhpNTfCpTanf7cuwKnViapNwhLRwpWSahumCwnT1NOE0gN0v5hkeVpoQ6HNFP3ZIVijtH+mgZKyK8X0rGDBodPpZc279HD1NwbDxSEjq1FIaB4XtJeBOpTSaNdWfz0ojgM8V0o8b/f/Rc0hSi2NWQp8VI2VZoQjHT/2SfjMbYeCDpE6RCigxro5DWlpDMyMZuFcQbeS4nQdcpKYc+slpBPAA+WcX1HAX68RhJWFaITWrTFjvb9DpVk9P7v4YM1cilggZk40lii0TmRARpzVovKa0dfYKLacELj7gp/nppBHAA0KhNK20paQDCAYaMLIqKxAaHvsqvjzdRz3fgndTRAaSWA6RqLNqEq59m4ou0bQkWmYQDZ+WRgAPiL//1zWWGn0R9COiARM6YGqbWLrDJ3H66A06XBwCyoi8IKrVWHDEJoByC07quxW8K7svNaHPp6QRwAPghReUewllGdCzhIEKBhbUJiDpn+AV00H74FXkYQFYhrUGxhBYGawG3Hrf9c6vP9+UPz8lTRn0AbCxDUNe22xpxNABDHehOrKAOf51PVWM4V1OkAAjBOMJLDZQBEXFVmND6uq717u0/GrmAT4FjQd4AAzGaiOgBaNDMNaItasGxsTo9Z/GqdkWinqKEAQkYCigGqBkrFiGAnO0YmgvVd24CsWlB/1EP700AviCUVUiolgYKwCOEekIhE5k0Fo/j2McIz56E4u6RCBAFaIMBLUIzkCCh7JvSRmr4sYNXAaARgGfmiYE+oK5/A9hQ41hxBgRyZAN9digSwFp/2kcL+eE+TZKBARYBCUENfAUjA8Mr1oFZ52Ws44ukqAnEugJXGhCn09J4wHuGx8/CaWqdHgVrZh1xJB1Y2nAEbrGohN30B09oSvTG8i1goBAUAiA2gX1Qt5bIAQkoYVOONGDjLLHFXjp83+0h5jGA9w3Pj4BvXQJjKvoM4XjHNEaR+gag45J0T3+TT3mDUWT17Ss51QFQg1CzRZ1xKidwjlX+46Jfe5IpISOr0E3zz+vTQL86Wk8wBdI/7uaCtWrwdBximiVGQObohN3NBs+hdVyDF/sYwGPigR1gFY+oHYBdYhsndjECRC4UolnkO0Meu4SGsP/DDQCuC/cU/jD4xvliITXI8Y6GCsmQc92tN/eoH66itbkJoqwgBdB8EClBqVhlCYyZV05Vxv4oAimSzLNVE90GuP/rDQh0H3ho7s8AMBL/wix9WZViNbAtGIiDIxFlzONR8/Qqq+Jpm9q4RZUKsMxoxSVEmxL9b7ONKpLr06VwlEBQZd0s4sm/PmMNB7gM/PRo//FF5ZLFnb/pXaDiVeMwXECRmzRM23NoiE63cfQns1Uyn2U4lGJooBqqYgKzygd2aq05IyB76oGzCDbV5vw537QCOAL4B/+Pdgq4JhKOKHQVSTaNbGmFCMZnKZ+nMHkb2he5yhI4IRQKKEwFnP2KKxB2VGtPRAOCwjWIU34c39oQqDPxsc2ubq0CXILdGyEFQBrFGEYGfRNiijqojM8i9ZsF276Iz4MBRZKqFhRBcLceS2CoKwKuFrJS40Q5SobY+i3Lzfhz/2g8QCfiY+2vUsXwFd2QYF1BcAxNjQ0pH0yyIxBmq5plq4gGV/FrJhohYBCBSUMiiCYM6OQFKVLUGexus4QwQ4gWx3ouY/78IZ7ohHA58Sd5HdtHaklvwIjIwAdikyLDTJuaTJ8nLr1AmFySwutUUnQSgS5iE4D68KJL2tC1VXUXinsFZDxtU3dXEfTEe4+0QjgU/PRfXguXQBfAUxnoX0lWiHFgCAd9UhMF3G2pt3hlyid3aQ6HKJwnkpRqWBRKiNnYwqytkiKys0wD/Xt5Bdr5+WTJb9KP/nVcIdGAJ8f5jwA0rpHQiMi7RlL/TTRbmuI7srTph2NEI9fReEOUWoNB0FQwSIQHCiUEDi1iWMTPN9Ofj/Z6L80dsWyL5G+7+8bGgF8LrzwgvKVXci00iQmXrWQISn6DPRMC1lrDWn/LDrVHGHyupZhTgULnBDVQuqUUQSyFRlyokVgp5In259q6bPidke629+bmOm9NAL41Hy4LZ3fXFbXkgodDxoqeADhDgWKmWBsgijuwszHEJlprYooAIEMVzBSqmpt4MIsqoSSllRz1d5+0MsAzn3C2P/i+5qfvf/PjzqNAD4VHx5C3E5+w/l1cKRunR2tqKeeCjIyGmd9bQ+fQCwWNBlD1ZFXDwAIXqQQZacwgQTSdlBv9DMN2hffVy16/58fdRoB3GcuvrDs3OwK9MTwCikGGtBSj1QNkt4paqenKIMCvoJ4gQbROkCDEotTBBigiCy8xGQD0XA4BE6detCP9lDSTIR9Kj48BNnYhikzZfFYB5tVJnShmhlFkli00g2KozbMvABs0OWKf09eFaJAgBGoV1Jr2FhQMMrjGXFJRCfOgjbPgnDpXjtBk9LSI+myPynw4sfc/6NG4wHuM3EFExlqKWNAHn1SbRlFLATrK2jah40syDlo0gJDICoQAIFIiCI2MDCq3hJgKi1NJ1JGtsujmdK53Zc+YTdo0rsd6qiZO3gfjQDuM9Md1VakIwhWiNAigVXAclCb9imODEhkOSyPzpA1LQRRVEEhIGYW5sAmMoasC4gMMlPS3IxmazwuiIDnb39SU8q8HzQC+BwQjz4MpV5gBDCkYG6BOxsax+uwxKD6CN4q5JnfwgnKEEGDqoJVJbJBYqkQE/uInEYGbSMJMbpgrF/hzQtNJed+0QjgPpNaMgIkokpggQIEA1AAYAGTgIig1Rh++jqK7gqSJ/66niQLJkZM4FgMxxFM7IONIoE1gLE0NcjAo9k5OrfbHIpxv2gEcJ+JZxBVBBVSKAsIQQVCjrzL4WSBoAHqS5ViR6urL9HB6f+MNtaeNEMEiTloGgVJmENiTUhgEImQFdvl0Uxvh0F3aMKgz0ojgPtM3QWzggjqAQQAAYIQFN7lVJdT9SEAkQXKKXy5J/7Wn+n0q38HPxtl3CZCTECCQElUIfbBRxmpMUQm7RKhC97IlwfkPehnfRhoBHCfKb0GVQQBPEE8K5wqXF3BF9tcTF7F3FcQjMiGGJSNiN/4NvYCwf7sf4evIyAmb2IGErYmjshGIrDVQk2IlgdjDM/iXWFQ4wU+C40A7jP/87/mioFKAzwraijVYDhSuGIuVbFLlXho1oehHqJ0iMjdQv3jb+vW+jmcOPOXcVoREhHEcIiMIysKO7TgsFDOBkTbzckw941GAJ8DxtAkTlALsVMsPYACnhx8XaijCqHVBkerSNrHkfoSYbaJydvf1Vvn/ia+2RlSJxKOrEWsrBHFMBXIiAWnlVKvINrOmxDoftAI4HNAZpg6h5ohlbJUJKhY4YKHz2+inF7XwpcQJGSjAUVpF2ZxnRavXaKr02s4/Pn/Qf8KK2J1iKwgMhUsVWpaFXh++2SYZwFsXrgzq9V4hE9LI4DPiH6A8b0F5EF9JTCVABUItQJOBa7cQbW4ScV8Amd7sNrRuPs0OqogLaGbv4tryYCGZ35ZT5OXZRiksNoCV4FIEuJOSbR1FnQBzerOz0ojgM+AQulO25P38DwkYluKasXgimgpAgnwoYbvn9YscghpAvJMtv0ldJMYBh7qZnBv/CGunf7L+Gp3xBkbWCIYrskYUpP45eeNZkpXdhvj/6w0AvgMEAC8uBTCnS8A2PgXMMTLXV1MKES1EEHFgAsO3jsSLTRYA9UYpnuS2qYDSwHwU7i0i1bUQW/wJVoTD8sOlpwaseBQKk+rJuS5XzSrQe8Dly6AD4fg4SFEL6lcOguaTOASaOU0LCKighgFe9RSkHO5utaXkGoMrkoEqyoyJYcA8BwhUhWbUW8+VYkMrBIsCYwNRMhAC1YeT5aJ8OFSh80Ct09J4wE+IxcBvQTg8mXg8Cr44gugKwAkplqDLYBQKskCKoUSKgjqsCBPIKUS3sSgYkFABAMAvoaiJi81KhwhmAAjJSw5mLnCTivllduf/ezt7818wKenEcBngpQAnLsEPdGBbp0FYRN2bRfxUaneKyrWZCHKC1VdBKBADF8TtJ7C0VTLzEJlgCzpaUIMJgJHHUTeI7gaKmGZAwTAdp1yFhHvL4h71XUCgOUZwQ2flkYA94GLgG6uQ7evQrELnveVmOBdD5UnLUV5ocYuoCjIooKBSg7PTAgVJFtFnJ5EGwzDFpS00SLHQRzIkJgIwRosvYANSsccaOpO01ZxpRn1PyONAD4z7/UCWIcshAITfJmTc0SlIRSqfgGWAoJanHoPSD2H9xOtsjZs6zytxF3ENmXLEWwIIqEQgcCIwhoGawCrA4+rCW+cAHD+PJpK0GejSYLvI5vr0OFVaDtSzToU2pW6hFABKI3hgoBCGaUEeBKV+S2UEKC9jizZQDda04xFxDkgNhATmLwKkwWRh0kcTK3gHno4qpSQNbb/WWk8wH2B9EUs25Wf6EB7pykYUh8pfE1wFKEUoIRyQZASAY5TQlDQ7DrKeowqGSFt/RyOd5/UYag0hAWC9yA1YFJDqQUQA1aIJo44q4nGzZqgz0wjgPvMnVwgH5NWIB9HVKOimpQrYikBroKg4gTkHcLsDeSTH+g4IqD1FK21TqLvjqgkAExgBkM0UFAQKwgZ0O0Ac6f0JIDtHLT5zmxwI4hPSiOA+8Z7vcBoTYPraFjki0BQR0Cp4FIVpXiqCBCp4OsKodrGQnMU8Qra6QYN3EyDryGsICNY1kcB1BEgruQyzGhlFRgXRM9iWQlqdoh9OhoB3Gcu3q4IpXskwy0EpcxpoFqVKgClBJRhhrkBXChRhRpu+hpme/+f3vQzVKXCHl2jYvIqxkrBqICJQWLC0gOkKaKsQ/Ma1FtT2jqLd5ZENAvjPjmNAO4rdytCWx3oXgvSbiHAoBbVSgOVrLQQh4WxGuobGLttmskhqogRuhEHiWGlrZ1rL2MMYSMG1qhhrcFqiOu6NFIT9xJimYCxu9whdv4C6CKa1aGflEYAnwMXAcXzELsPyY7IV6TOqKsUWljGHMCCEgKUSqlRuZqcZWgvFWkNkCZnsZqcwoAsUgqwgRCLNTZYtVmamAC1BwE2N2ODLrhcUz68Cm5E8MlpBHDfWXoBvAikfZLdYjdQuedIo5IDFiGVyhs47+CY4aGotUS52EIuR1r0W9D0BA3Sp/QYt9ECkIm6jENoRUqpBZKoU8WpwPbE2har8Z07IrjciOAT0gjgc+IioMPLkKq3FmrJvEhVgVCEBSblHnb3d3RS1yiJUKmgzndpMXuTJi0LWTuLbu8ZOp2sYMjQtpWorSzdUFU9qX0HuW+ZgJTIJt1ANiEyvgMenn2W1nabcOiT0Ajgc2HpBS4BOD2lAHg381IpYUFznrg92mIL+dLfxNP980igqNwExfgVHcsCRbcL0zuFTrKKARt0NegglqgfGds3oH47bXdNrW0bt9LSa6pjTXwNe13V/CBT04RD904jgM+RfwbIlU3I1A18arJaCYUIzcMt2dn/If1wfITi7N/FMyvfQFsdisUWTWdv4igx8MMVJGvncTJpY4WAgfFYMQGrBrQSAoZR6gcdj05qKQMhac0R+xp2bMk0OcG90wjgc2PpBc4Dmg8phAXVIBSQOq8KPsj/o35//8/wg/0tTB//23j65F/DyuIQi/0f6p5OUWYdRN1fwJPHf03PW8aqQFdJad0K1iOVNePtSHw5TJx2I4usVqRGKBn5A5s2IrhnmrVAnyukvwnVf/AygvmaOp6hdEk0twFTt8/bi+/gcijUe8U3jv8qzsYnsHf057RY7Gje6VIrTmFaP0dfOtXSzq1/St8vc8SkGglRRAE2tpkhAiuUTVYz+ZhSG6P0ijrsENaO+cOrhPMXIBeXhwrfbpfedIi+QzMifO4oKUB//0mNTvQpXUTaiQ0GsWAlIKxHPT3Z/XnzjfQxPHb8KZyUuSqVoBN/mU45INr5EWblBA4dmOmf683df05/KooDb2gciPbZ6r4wjrzB0Twgr0JZdOOsOCwPnaGBjw18ukcyPAu5cgl68R030IgAaATwBaH87wBOflGj60BGhjrG1UNvohVDWLOZHLMn6bHWeZw7+ct6rt1GkrUpzU6ge7iNenIZ470f6Wzw180JzoSOvos/L7dwY/cP6U/VYE+IDjz0gGM/qUVm0HhRIK8K360Nqc9rChs5QiOCn6QJgb4QSF6CYuOPyGdf02oQgQsTGQYYTFwvQO4NCiJqbmaUnj6PxxOrVmvy/WOI7VcxKLfhb/2D8Pap/4m+tPI8vlrv4nR6RlZv/jP82yBMYkEaiJhiquOabNmhYBXwhE6s2OoQcBXvhENYrpx45PcTNx7gC2MZCl0C7PTLmugArY5BR4FhzDRQhDUAa8kJ+lL7LJ5c+ao+cfoX6WS2jnZdQqd/htmVf6C3dBV06tdpNTmJrDrEPH8Lb7z1v+HbAXTLkRyouANlczSL7CwusThilMbTB3qC5rT5pgr0BUJKgF4B5HpJbnGAonQ094IjcTgMpGMIxtUNvTn/Ed6c/oCuj1/Vo2oKlyTgzmlk7ZNI/RbCzd/Tw/JVPUrayFqn8fhT/6P+1/2z+oypsULMK4FpkDl067RutT1lwWoclGwn1vdUh5rN9I0AvmBIXwQC3obvOarrAxTTQHkR6UzUHInyoTE88QWO6iMchQI1OQRfIXAP5vhfo6FhmGqTFjd+h/bzTT3IUiTZMdo4/dv4jeFX6JlEo1Ec7JA4DDoh6WirygaC9I4I7pRIv30VvIlGBI0AHgzy1tvwea31MEEVCXIDzETCPATkcDRzM+TiUYlCZIq63Ea58gTi4dMUU6lS3VK398c0m/5Ix1GNihXm9G/hN7pf1q+AwoqtzYCCH3RK7kSmzjooEpsiKr3asSWTrCmfew60iUuP9GaaRgBfOMuNM5uA/vgY+a2p1lpRXQgqjUwRDBUaUIYFZn6KnA0Ags7eQE4CWX0WnfQULCu0eF3n27+PvemrOm0JHE2Qn/oN/Nr61+lcRDKK1PSDpZ5XanvJ0oQ19h3YFqs5cwTGHvjccxce6eOWGgE8IC4B8q3LkNUJBWQIVuGtIx9DPQGeCT5ukxoLIgPM39b5wfcxyY6D155Fe/0byAZnEft9qm78S7px67u6c/IJjFoMWXsOz2UrtAHFIAZ6zNSNIrRNoJRmSCSQTRIyWLu7l+BRDYUaATwQ7lZe3gJQG6ixECFVF6BeKXAM6awhQwziFOQLlDe/owdSwK+eQ5adhu19CXHUhtYHWOz8Ae28/nv69spJ9HsrWD39t/Ct1hqOWzX9mGynRWglRtPYIO7HGuXrMBu39xI8yjvKGgE8YH4hUi0CqBYiViIGCKpkYxgz0BYYRBaUrsOUO5hP3tBpskbJ6s+g1zmFODulxlgEnXNx41/R26/8U/wwtXCd49g4/Rv6q8kQ65F3fQ7okKAdx0hcgVic2iNW44/eu6PsQb+PL5pGAA+YV0pw5JViC3akxlMwlsGiIGOJVQGtEOIujHeot7+Hg/JAF73TlHVOoXXsG9SNepCg4nyJ8ta3+fqP/lf8cRJQZsf01Mn/Sn8lXTFrEHQN0DIOWdZBZGuKYpoYeZ8XeNRoBPAAuXJ7xI0DCE6NZZgIwTqSZSMIgrIFJCCIwIkjN3uDZm/9Lm5UE616p0137Wu60juNBAZBAe9VJH8dk9f+CX4wHKLdPY7Huk/RWSPSFRc6HJC5BdK218hS32QDol5BdMcLPGphUCOAB4KSAtgGaHqMKE3AjJmNiIxKbAiwpGAAxAo2hgkCAcML4A9fo+n2H+HWfCyLuE/p2tcxbK/CGoU3QBABptdQcE3F8TNYSxJ0DNAhUFsDWokgpYiiNMDmgHmrC77TXeLiIxYGNQJ4QFwE6NlngbUCHBwY3DVOylhZIiNslREh1ggGxG2JOQZI4SCo6xkWO9+j3fwNPdSAkKxoq/8Y2jYBE6AMwASgmqDwxHFrHSegnLGgFTEyA58YQuwFNpqo6VRKo0e0y1yzGO4BsQnQaKJcroNSwHQ9jDWJUaZIJUTMFEWWDAIAAhGTAAiGUasC0zdQX/s98lFbz/TP0kqYa7HYovlsC3MWEAgc5vAEMcUYtREkgZFC6zQycayhjpyJTacCH/WVx5O3aTs/88gduNF4gC+cZfhzDqCeIzrFZKGIyFLsBbGqRsSagDhWB50VS4NUKNSyC4xaCaUSyslrGN/6Ht2EIHRP0XD9m1iP2khAMKhA9URrJpBpIUPQyAosI7biYMnHhqrS2ExpUYPO4Aze22Xu0fAIjQAeABcB2ngWtLIK7hYwcYxIRWNDIQV8RuCIUkmLCRwU6oNCHAJbCQyUSlgAmAeH+cEr2Jtv67S1ivbqz+mpzmn0DMMEhQkesDG41UVCEALEqAh7CkZDzV5SmtXgzB/R+J0ucy89EoZ/h0YAD4BNgMqJ8pvmwG61NEoKxGqRBjYZ1GbaQk9XsTrfU0eAhpp0dhN5KFEro1TCXBizQMjrIxztXaZr+RaOAOj61/S4aSOzhIgYNjUIaQQlsJJCmFgNWUUUwUVKdSAaYohpuX3b8J9/gG/mi6cRwBeK0gsAnXsO5Etwi0c2qaskWN/yEtqk0mZoi2K0h8/o8aSD1ALqAshPyalHHYBSgFxBMxBN6xxHRz/GrXKsOQIw/DrWW6fRowQRYsTi4NMOYigJwXqAgqoPJCSRIR32VLfaoA1s4FFMhBsBfMFsAoQ9sH8MNiFYcJrWBq2ITJsJbTXopj2Mho/RoM4hFKBQoM7hnIeDSAHWXCATiBwR0XSxg/3J27RDIJcdp97JX8ax1hpaQuBQw5s2YmEEYQkO3sNq8EaFLAQABjjCu49e3XyEdsk0VaAvjOXoj+dA0zfUHBuRLRRpK9QtK9wm4/tBTM8YdDee1zMaiNIhZZZUI5B3U1QQVCBTBJJcGAswE7zUfs66/ZJelQrm8VWMjj2L4+VMxRCMOoS4g4QUQmAfAb42COQgQIkqBAIPkA1Ae7u4MyGmFy+Bbu+afKi10HiAL4Rl5eel58Djm2qOPwYrFZJWpZllahtLfRtxP2LpDZ7E8d4TtGoUka9Ay6VBqs7BSUAt7MvAYS6kM1aaAJgEg1l1pOP9/4Qbk9d1mxKY479IJ9IBYqkR4gxJNNAUAlQIgAcQOxgB1QGUtJeTX3farT/QV/UF0wjgc2dp/BdfAP3tHPQzz5A5niHupWVWxb4Lpj7U9CRQV5V75/6ufj3poz09gFIbcfAQCKlNoYikBnEBw3MBcsc6U+YJVCYBmPkZJpMf0Va5q0fpCpL2iBJxCEiQdX8Wj0Wr0rFkDZE35GBqJCazLTZTmBArd0qi88Dy4L0XHo3VoY0APlfuGv/2v4DJI7XxDHHlkcWctFvG9hg0oKBDDRic+Rv6TLxC3XLBNL6iRXkNBTNQl+p8iYUIFYFQkMfCWp2r97kjzJzoVCVM/UInh29gr7yBieZwSQ+pMozN0ILAooKxTmOqKCaO4uDqOCSwTGokJ54OlK7sgje+DDq/+Wgsi2hygM+Nu8Z/fhM0WlMeAVFZa5LUaHmgbwlDgEcBYSVr88rj/yU9XZVMO2+LpwraW0NU5XCza9grDjAlxgIUimC4VNgSBs4AdQplJU6CoDW/gd29H9BN20Zr9HU+kazKUEquzVygc0kZ3GYypQmo20I+n8IZgbc99Uf7kN6aytYh0dbunQk44GHuJtcI4HPhtvFjafwAzLigCJkmHaJ2YO3HgiErrQB+1YCHT/83+g0xlBzeFPFbqEdfRpKdRDzb1iM3w9wHmQWlBTEvjJhiHuoSHDt2tWGKKaYQC6MllXb2vkfXfA7Kjku3+xTWJJaIBTF5kzLQIZbKk7rIRq4jzpkodvNDhLQDkYkG1NCNHDq8AHpXD6GHkiYEuu+8y/gvgK5cgfnujzXqJRqnnjL26CWKEQytKnSNFKvtL+Hk8Z+nU+WU9ehVlN2+0slvUntxgKLcw/TGy/RqXZupWCycmCKAqjqOqwpUGY4L9vVCoTOITpQwrac4nL+Fw8kb2CcCmGCOPYvH0xWsqqIXK3ejWjoc0IJGaa1VGjK1oxwmNjCP0tljjQDuK+8Key6ADq+Cez01p4YUxYLUinZSYECMEUPXGLrGxKOv/B39qheYm98PhWxrdfqX0FELme/o9OCHdOPoNWwxI1cyeR2jKI3WakvXd6jHQtUh4sIHnSswg2LCrLNyH+PdP8BNcfBxBrv+TZwdfQ1nokgH4n2f1HRJQycl38ocJR1H8Vw0igyZ6R6Z95899qDf7OdFI4D7gtK7jR8vgQ+H4D+P1DpHMRlNeopOSugH1pEhrJHqOhirJ/+qPjV4mlamB9BqC/XJX0RmW0Sz65rf+H16c+t7eLOs9cgTZjXrgr2vCKhMmfqDLjwD3mco80wW4sxMhacePPUB+fQq9ovrmPgSLjuG3uov4Kn0OI4ZmK4Bdw1Mm4VawVAmTpMkg3UTtaNM+VHxAo0APjNLo3gBoN+8AMZLYKyD4x/DnBkgWlvTuEvUdt73JGBkQKuqui7AajLCsTMXzBN1Cd3/IRanfpE6q89St5qhGl/BrfHruFWVOARjGgzmbFAo2bK05FoWzimCAXxYwLkqKVyGuRg/M4oJWGflHLPZNmaHV3UiFfzxn8Gx1XM4mQ4wAtChIF0f0IajlIDUMOJAsI+SF2iS4PvACwBtXgCd2wVhHdxTNaEPm04o1ra2DKNnEjs0NVZVwjoJrVmL1Sf/Nr4ctyR+6//VI+sorH0d3Xqi5c4fYfvGd+hNX+HAk06JMEMIczFaLKytTal+RyHrsfoSpOk6KJqDJKciRpQj0Tw45KxYiEPpF9SavobD0ddw7OSv4StxD3Lj97SYHklpDBdKXDD7She2TDLUJocZZRp8B7S1frci9KDf8+dB4wE+E8vlDe83fl8f2GKOmDJNbUDHMgbWySoR1hm0xhYrg/N66tgvYT3PoUc/RnHyF7Qdcq63/yPdeOtl+vFiD7vCNFHGxJHOQqKLotZKbeVKgucR+cMCsteFXL9JoTwijxRlHWkhirklMwdh4Z3WCAi3/j1257cwa6+i13lGTw+exInY2o4VbkUSWowoiSOXGkYct2ElIe6URKOZ0nYOurs+6OEKgxoBfGo+zPhhW/M4lggZcd1lg74EHYF5jVTXibGerOqJJ3+LzihAO9/B7OQvocUD0GJHZns/wo3FLnbEYCyCQ2aeMJnc13aRxFrJLHEDgqdKhfuQkdcwWtMwHamvc3gRVOxR1giFWqpgIEzwhz/E4dEPMdYAWXvGHF/7pj6erehAFW1mahn4NhClXaHIiVqbqzGsplcQ3dkoc/EhDIMaAXwqlF7ARdrETxp/mCO2alMmtILjHiSssJE1ga4DWLUWq6s/Ryd6jyHb/1Mt4khl7Rto1WPkW3+sbx6+gWsA9gNoHCwOhTFzWMb/C5OUmYE7EAoDoWBzyPga6X+4Rrr1CiTuwBsi5wxVCbigjohksKrqF/vID76vB/ObmkddSQfn6bHBkzgRRdQNAR1VaqkirRUpIkShBbu/IB6/Lxl+2GgE8Im5EwJcxLnnlkub7xi/LadRl5DUvSxNA3VjpgGUVoznNatYI8KqXcHqE38Dx8IUOn+diuN/ybSmb9Pktd+hV6++TK8Uhew5poNAGLPBBIyZBc2FUKZOXUHwhUPYmi2NH2uQc2uQMylkelPFq3pR9UFQW0ZFETQMqGOGSkev0eH8Gib1DK79GFZXflYfTwfSt8QtK9wyEloGmnCNOK3BvRIsE/DDvE+gEcCn4PayZsbess6fEJluIBtsPxaLzKjrmsT3wWaFRJahT8CqIQxO/ypOpCNEe69p9fhfQ5cgfudP9ebBK3grlNhFZPa9kbFEOPSgaS2UF5kWFVBVc/gpw/fWNIwzVaxBNtehL70MjGNSE5MEs1BycELBiUFVlzT3NXzrHHXmNzG5+ft0fXJVxypA5ywd5ww9Q2iB0GKYNAaSWBDFKWw7Uc5qIgC4kwc86Hd/v2kE8Im4G/dv5CCsgacJmdliEuU6T8hoxglaqUY9FoysyCqpWQOwCsKQDXon/xL6VQH0TpBxBdzb/0avbf0JvVUV2BfSw2BwAPCY2U+8upnEmBuhQms4MeQ2LHmbQ6o9ks116LlL0OcBeX4TEmUQnbSCxPA2mJqnPA2HvFOVKLtf13UllPObmB6+hnF9hMLEiEfncMzE2kFAZhWZ80hVEPkFrI/Ac6c0Lugdw3/YNsw3ZdB75rbxAzS8umwn2AkwtkXWs4kyaiWGkWHue4FpEAmtcqBVq1gzgqEEdFe/rkM7IONySNYHXvknem3nB/R2ucBuMDquKYxF9chEdqLezonqBYBiMkMdOlSXOfzRDLKRk3zrJw68Aza2tqCnToQI5D1pHYCy3JFbcQ8n4lU6ZVrwPkdx8AO61XkSg6wN0zujK7sdaoUCSVAkhDomjeNAsFSDUw9aRMCzAIYXgCuXHty/wOdB4wE+IeeeA504CxpbMrGBaQVYEpNIXWcofMfG1I89jVixQoQ1KEZQ7UeRdE7+Cvq+VI0j6Nv/Wnd3LtN2PVsmvGp4zCY6BJtJIciFMA8hKXihlUm0Hhv100oD9iBbHej7jX8T0NPtE6HXoiBF4R2jxgz5rW/rD9ur6HMPnWO/pefEoZq/jdne63pUTbWMu0hshFjUx2CJIxNHEcFEYdmwqwhE794u+bDRCOCeWI7+52+HPr3ralqsxndgc9XEek7VchtM/UioHymvaNBVEl1h1T6B2sOvUq99imI5JP/W7+rem/+KrhUVxsHIYSAcCtNRIJp4g9yTzl1AUYhWLqM66VN9PIbvnaaANcjmy8tJqbtHnZKeAzSPSQ+chqmkvvaog/NlyHk2/U/4IxvDdr5Cj6WPoYUQgk1h7XEaqhKpgIjJEthqEAuC0bC0jcI/fHH/u2kE8LEs1/hsYlkKLNeUpQvuBrKmQkSgJErjzHp0DKEvghVlXTGiK+ypD0E3Pabd0/8F+gevaHX923L4+u/gpveYMORISA8R4ZBIJySaW4c5iKqjBHWRUT0z6ivVYPPXBbvLpPccfvKExxcBHG5e1sMcQgqXmarSBBUUixv/Vjfd2/rn0RDD0a/pUyaOTLsLEyew+S4WvoAwGKQgUiYRMAsILWAA4NSDevVfAI0A7oGLAF24AGAP7Dvg2MC4oDZTSozRFIXvxMb2ONDQBIzgZYVh+iDtxn10Tv86VqoFhVsv0/TN3+NdAc0CYSKGx8J2rCFMpUZOUb2oCRVIq6FQzUb94na9P9176p2k90OON9UtzJRbkDSQJ5PWrFqKD6U7wOTa/03/QReYDM/R462z0us/TgMi6PQG8rqEh0LEQpRIlaCpIQGAll16m8sALl26/TYeIhoB3CNXdkGjx5SSPTJeYL0pYrKaWuPbUWS77GVoFSMWXTHKQxL0bAud4/85DY//DCVHf4bF0Zsyg2pOwJEajEF66K1MxJjpwtIir+OqDqjbFZwLGgZCYeQ1pHskw7OQu8b/wZzH82r3Ifn8UKaLhVevtY9sTY7LxRXaefN/kX8pAj35V/WM6XFrcRPT/HUcaQnniQIHeDLqDeCFVROz0EMAo4QUuIyl57n4UJ0t3AjgI7kb+98Z/fMIJmvDRlzHzrjUOttilR48BhAdQXWoHn3D2m2f0t6p59CZXUN9+KrmvqIZmCbB4hBM4xo4VOg0MPI41kWGopKI3IEchToglO8y/jtJ7/K+PtgAL2E5H+BOD4MOs7AwiXinQViCCnz+53yw/X/iezBEsRU5+oFuV7soiOGIqFZGFQS1ELxGCEnZ0swc6FsATnSefWiM/t00ArgH7oz+MgFHrIZqRJb6cVxGKVHosgt9azAwygMW008y7SfHdXDyV2lAAmz9gU7LPeRqKBfGkRIfevJHFOvEWDMLEYqgVPssq42BL9ww5DX9hPHfTXo/mHPv8g6ugAaqlCNSJaNggMGY/5APFtcwNQyTrFPGFuJZvML5AFTBolRDdajI79W5mGxFRpk+lMYPNAK4J7Zz0LggkgzciYlDUlqOEQOhxSIdA9PjQAMOoZ+0dJh8GavDX6Lh6llK8h2utUZJMRZCmASWI6VwyGwPAzCrFQXVqBZeXdBZ6KqG3poGrH9QufPDjP/uBN2oVgqFssTEWZQQgjMcggkEVhaOViTtPanD6a4W+Q0UiOBh4YKxhRAtiFBWRVVPM/Ut3wlFfEvH3Ycn5Hk/jQA+hs0LoGexbBqlCfFEYOHSKJRIAdNiMR0I9ThIL0rNIH0K6/FxdM78AmXMUCqCy3eR1xVNhWTiGRNneLLQOlcycx+hiBLUWQzntRcOC4jNIdtXoZvr7y93fjTndkFvrYJ7GTElRRT8PAkcYhchNkSxTRH3TqKXrFK3LCH5LmZOEGCgyq4KpGVQX0krrntMPk8mwv1jsrz6S5/bO36QNAL4CBTABQBbZ0GdkiipQZlV5gQmJsREyCDSJqBjDHeSDV1NT6B7/BSSzhqsMcDkdcrLA0xAmAaDKYw5Ciozb8yiJFQa4CYMHxShqxr49iK3b70n6f1449+8ANrcA28swNOgkXEUUxrHUWQThkmFNOEMre6XdcUm4Hwbh75CaWJ4NVoEiXIClSGyFVk4EQ1HWV9w4wY2rkLPrz//UHqBRgAfir6zDfA8gGmlJJFyRTAIiAIhVnEZEWfkpMUxuvFx9JIE0ePPUdtEgM1A022d1UK5WMyEMfMsebBmTqoFCJVauIQo5I7k+oR0mpBuZ9BLl4CL97QLaxn+XABwbg3cWyebtGGzkMQc0GKiFom2mDRrHcdg8GWsOQedv4o9JIB2IV7sVEyoyti5kMCLICzcTNa6JNPktALLEujyfh6uebFGAB/DnXXwx44BPQCpA3vAWEZkxMRWKTWWM25pO+pR9sRfobZNQOIhR2/rvDxEHhDyQJgJ6QzguZIvJbV1bMgJUQiqgSoIuhCsQ050lpNd9xr6AMClKzCdQzW1qk1ASRQhVaZWHdAhQstkaPefxGp2jHp+gnK+S3kxw5QMKtOGiEFljK3nDj5XhDztSXGkOspUt95zPw/X1shmMdzHcH4duj1TMiAqS3A7AnGhrAiWYa2oRMYgsgmi3ki5d4pidwi/82c6u/lvcWu2Q0cgMxfGnA3PS0ZhyZYCrQtoSBTBe8hqS2WyC+040uFZ6JV7vD8FcOkCaDRTGo9hBgprZ5pIjBbBtJjQVtJW1OFu7xlZjxKN8m0cVVOa+Tn265LH1UJnhlBX4lzLRN63ENoWAiIt/UNl7z9B4wE+FHqn7n6iS1oky1KgEyW2IGJDQDBYnulrkuNobXwDXRODiiN1hz/C9PBtTATL44wAWgTmggiVT9QxwcegUASIaZGUyTL8AYAr9xz7L8O0K7sgfwR+eo2MsYh9mzLm0AokbSFpAZKlfWkPz2BQBZJij2bi4HSBuRY6g0FZGK09watSOCyg5Uw1T1XHXdLz6w/XqP9uGgHcA1cAYAeorWqol0bJBCViJbDGGZtsA1nUAqtAyzHq/dcxdSXNRVE4ltIbKZVQMkIdgvcLdSLQwAmkmkPfHW58knvbvAAa31STJGT2Co0rqVOopkKmZcBtq9QylrPWcXRMB0l9gGpxCxOpUHlQHUgKZRQAqsqoy1VD2kEwXZLRHunG1U+Sj/z00YRAHwFhWQU6B6CXkOZWtRVBSEgCVAwQWCHVTMrpKzjY7iKNn8eaK+D8AiUEtcaoiLkKqrVRcRV5rzAhpcirhZCHZDEUgXQrg6K417u7feDGLujMSaJ6HaazKCzXWSIhZKqmZQktEcmijFu9x3QogfjoCLPZVOehpKl4mXrDCzDKKtaa57GPmIJzkGKhGjLo+PZK00+Sj/w00XiAj+MSsHEVuoUtsCPxdaHOqMAgBJUg0BoK52/RdH4deTFTZyxEAC8GXlWcqDpYODLq1dpgYEMtEF9D04jeCTeAZc5xr7d2Z2fa/qEa7CJagBNVpDEtY39RZKycxCni9inq1SXC4hB5ndPCBZ1Wijz4sCgCythFlVpyhcuFK5U8oYd6AuwOjQA+hnOAXsZlnJltSBVDRdKQUu0h5IThhOCEpK5yFLO3MTMWaB2jpHcKsU0hZDiAESIg1AohVfECoQjCCaQuVNsxFDeWQrvX+7ozR/GjNeU4HRs2arI8jTNQqioto8gYmjEhTlfQbq2huygRFnuYUS3TsOwjuuDYFERUTUPtDKvnftubLsmZGWRZ/384Q587NAL4SJaO/0TnWZ1mqlSpFPFCAsOLczUklCRwUNRQuLpArR7SOYZ07Zvow4Jwex6VhFUJConEMDRypFEFTS30AHdWXN4rd5PfM0fgaM0aYxEDderFZ0Y5o2X4k9oe2mtfw6pYmPk+5sUNbFcTPgyO52R44dmXwWod28QFRWA3keJIdXo7H3lXQn7f3+5fBBoBfDT6Ipaj4LhL2k72tM9t7516ieBhoooYCwbKQKF2Cyp3v48D04Ztj5BKtTxZghSkDLIeBDgYD/WsugAwBdD+RMa/5E74s9YFr4SeZUZsKEqE0BKSFpQyZk5sjKT9OEbzEpof6bw+xJGvaW4IZaBQBo8qSeuKeeGNge9qP3Af8gHVn4fSEzQCuAcuAcCVK4iKdclrlZrUx7AVSXCBUQezXE7s56hufRfjINCV82aYDZAAYljIwIlRtcQKcnDwQhTbTxdj3wl/yjXlwwnMoiBj8jpRi9SyyQxxi4CUFEnSRdJeR9d7qD9E7ieYOu8XQaUQg8LFtvJ54quq5XM3leuTPZ3uva3bD3n15w6NAO6FS5ewkZ3XPFXt9Cl0OPUFOx8sKmbUpKaAopYAXx3BVQco06Fko/O6YgxHtKy2GSZlVktABKD8lDfz3tp/tEaGI8TeJLGR0BIvLR+QCSTlCEnrFLoSwQQPV9+i7XoSJoZ5EVgXFEwVtK5rKjwzfCv0ArrrgvUzn2o2+qeRRgD3wDlc0Mu4jNHesmJTehIm9ajVeY8aKrUyOyIEl1O98yd6ZBOY038ZJ60NKRGiKCAiImOImC0o/Qz3s4ll+CNdcBLU1qwxW80USJWkZSi0SJCmI7RWzukon8LNDnRe3MS+1DZX4QJsy5pRcql1GqWO6ok8SsnvHRoB3DPP3v4+hjeqonGQzHpmrmFRk8IDCHBQLUg0QPtnaJAOTRuCSJQtebUENeqJnXz6rPLChdvVnwnMRGHVucQoUrbUYrIZgROOkfXOop+tUzsf62z+Gr1d7GFPAs3E0EJEC1HUhhM/y+ehI/0QFZAPSH4faiE0AvhI7jbDehbAeE0JGN3+WYWohgAhiLKwQgIA21Xbf0o7vkKIOojba+jFQMLwEQOWlChVJRNAtf/E/XbohXeqPzc4WiMTmzJOOIqVQssKWqRoKZBmI2Qrz+iIWoirA8zy13DTlzQNkc6D6iJiKn2EWi0c99v+qLUv+f51TfdIHpXRH2gEcE+cew70o7XXuFMS9RJiG4hMlBAsQGqIFBREKE7Az/w2Tg+foZ44qIlgNn5e120mKQVYE8SEyhsvjoJJPoWRLf+XZfhzipOg1hDHFkjZmNQDLSbNDCNNj6HVPkXd+b7Ox39Cbyyu6w1VyUEowb5cxFrpnJwx8B2iMJDVYAen3rML7f6+xb+YNAL4UN7bB3RUPEUuA+ekJha1sUdEhJgFrIAFs0n7SAePU4csaPYqFkxA7wyNoohjgrFKzIbBRol8qKgFIIs/WYixeQG0dRY0nIMnCtsp4qjikHmHliq3RJBSjLR9TLscI5rdoHG5I2MJUkBR1D4smG0RFLVNtD5ShKNKJd9XHV+7W/p82JPfOzQC+EDuNsM6d7sZVidWM1tMIqopkhSJCZRJQCZG2hyQRgZp/xQ6cY/jUEEpBvsaMntTc1cCUDFGYAwAIII1UG9JMQGwC7x1D/f0wu37mV5XYyIyHFFUERISk1lCi1UzVSS2jbR1hvqIQflb2A0L5MpceUJhIpSqrtYAZwz8SkSeC4gdQD7ZRpyHg0YAH8JFgO70//dH4KBkbd2L0lQTVGgFch3r0UOQHkM7UYLOylf1mB1KGmYI2SqS2dtazPdRaQ0YsKpANRg1pBpxqpgDlYXu3f7Mu82nPpg71Z+NLniaaZR6jSKL1AApgJQIiU2R9s6gF62iM93DLN/CuPZmrhaFkBY+mLLUqDYV/MKRlDPVO9swH5XS57tpBPATvLcP6Jk1sGfYoUO0nlAqDh0D9Kyzg0hlhYVXjMEKEfrHfoFOaACiISJqg1+7RLfe/he0HQo4VUjECJYhsZBQgHij2oqhnXi5FPrOHXxQ8yvFsvpTrilLBk50YY2vY/GUECNjRoqAOOogGTyNXjZCMnsTu26KKRMKVRQglEapLk3lcilCSxFMQbLch3DlEy3Ee1holkO/h7tVn+2r4PNrylsF2VMdRAvWNBW0M0HXhTAyoNUgspaQWTGEwcrTup6tUlsCVDx0+zs4mr2CqZujVMCByHkRT2AnRj0HEvKQ0qnmCenYK050oCc+sPnV7f3JuyCAaMODJWkx14gp0dg4xAyJOaGkcwa99kn0XQk/eQN7dY1FgNQKU6lB7Y36TFKJMg05Q4+wC2Ad29l53cRy6fejROMBPoA7LdBTSyYNk6jMkUZat9Wj64CRVbMKwXoMsxpFWGNC//Sv4KSJwdU+/Nv/Rsd7f4iDaoE5ERZg5BpkIYISirpSBFENLVluPOntq46ufXTIcSf8QRfMrAa+ikxElgSxEGIFWYrEDk5qh3tIJ29jf76DKQI5tlx79SGoEwlOfa06xxwA0InXHrlR/900HuAd7oY+h1dBeaWmHMCuxr3YEaWtOumI0aERrFjCGgmtJS0cS7pYf+LX9YmVczQ8+DEWxU2t3riEba6Re4fJMs2lKbFOjercEZVMqGb5PMwHTjpHfY0HkG0HPXwZ+qEj8AVgC6AnjpRcAUOdxNRBo5hCJCBLShy3mFtntV+U8AdXsBVmmCpQISAQQ4SsAg4pAEIbOYCsJspx+wAM3N799gjRCOBdbF4AbVwFb3VgWg5WC4qli4RUuyzoG4eRUayy6FqU4lg2xPH1n9Pj68/Syt6PdBHmkNf+sbnuZjIFY0LAfrDYI8W+Jz5Uwqx2dTlF5BjiW3dWXhLpiWIZ/nxU81sA2J6D24OFSYO1EdgSIksIRgmcriGNMqKD/4Q38h9jx1VwYCggIAUZAjsGH6UVay7GsuN5v0e9XdBWQbS1+xIBD2f/nw+jEQCAd28vLNeUNyxx0Kkl9JIY1JJAXYH2LWHEqqvZCk601/Tk8Ckc636ZhpM3Ub/1/2Dv6DVMpZY5E44CMCaDHYB2QNgD4dAbmiGNFhaoter6riCUucrGHt7XCeK94ZBiuSL138+URj2QDS3SUDMbsgjBssJEA6QrP4M1KdhPX5exL+FJoRKIg2HDIAtFlNrIssAqw9i4xWWtlK4S2YHSuHj+nc+j5Uruh14MjQDeFfpcuQL2PfBhB9GK9OLQQxoq7bQUfRGMDGGlcwaPbzyLrySrNOASdv+yzqdXMMu3kENoToyJEA6EZV+EdpR1Nygf+IwOvddcapRB4aZYnveFPVKsQbduz76++DF3W+wR+eMLXpPMoAqGLFujsFGicfs4enUZPISIHUgAy9AYQKqiWQSUSlRy0KpOUM8DbDAUTAbp7ZKkOWh4AXRxWYp96I0faAQAYJlgbl8Fn1gDe7cseVbtMk3KtB0Tel5lYJhH/Q09deoX8WT/Mawe/LmWh3+KfHINhdRUKGEegAkBBwDtQ2lPoXuB7b5nHHmveSDM54oqqag+A/i31iHA8sijc/jw2dd3NucXRMMhIEUGAdgQDHthVXDExGxh+ivofeW3cf61/wuv5LvQUJK4Sr2K+IjZiWrtCZUl1ANRpzb35awOdbfi4fqG3G4Epo+KF3jEBfDO6I8rAG0U4LxGVLKmLaQtS+iSom8SjDrH9fTJX8ZXVr6MjdlbqCY/wuzwLeQIVIGRK3CkRg6VaA/QfWE9UDXjWupJlcYz9ijuGH/7jvF/xJFHH8TopirOEOoY1M+BQIAxjCiFTdeprQtxIaJ68CVd+ep/i597+0/o7fymTGbXcLO8CVUl5ytfx4mtpNQ6JKhd6HpJ4KcLpa0ZeCOHPkpe4BEXwJJvXwWf6IDLTG3PI6osUvJoRxR6kppRa5VOHv8FnF//Oh73M8iNf4+dw1dpgYACQC4GRyCMlelAFAfMOg7GHKLCtE7jXBQl5lRNDdyZ9xv/x5z6codzl6CvPwk8OVXlHsQHiLXwBPhqIeXhFdrL34JAkXZOUe/p39avPPUtnD/cxtH+G1jd+QOy5XUNkdpavZYVULmAOiTqrMLUGUKvr7K1TrR12wt87i/+LwCPtADutBXEFVA+UrPqENVdxD2PlDx1oKaXEHorT+Hk+ldwKs5gd7+rO9O3aALBXAi5Mg6V6EB4ecC1UR3XhIlUlE8iLOKpli6m+sjA4yON/+NDjVFM2rb7qpIGorZT1toBpWWe14XksiCjhG65D7/Yoz/98t/SsytfpXUTaWSU6NZ3NMyvo/JBKmO0TCpTVlRVLU5cXJCHgKxXGj+kG+A/iEdYAHdnV0ePKbWmYHMMRjySyqEVG+1EAb3ucT2+9hU+TSpU7GJR7CKHYOYZR2wwFuiBIdp3jDGxHhnFdCH1AiZeZI6qwzY5Q+pHBj7dI9nCsu//JzN+0otQ/PcZdKNaDahmwXeoUtFFBMwUSIk4VijdHrqlvAls/mO6eupXtDr1V+mU/Toesx3Q7h8rTa5wTQ4LY3wxdGlBkVaO1VQzCsgQtnPQIe54gYc7D3iEBXCXcUGUtcCz2cKu2iy2jMwEaZuUu1kf/agduuIh6sgr05wMxkTYd0T7AO1XwDgwJkSY+JQWqUtK77Wmjroohl+e8rg87mjr0jLh/SQjP3A7Eb4MKZ/UkPa7DkApIZqzgfVUmwixCjQYYQcNXpm9O0S4/jtU+xyLJ34dTydfw5n2EMn1tobDP9WqnFHBrAUlqBKFWxTqx6Dl8H8BeOES6F7Cs59mHmkBbAL0rRy0BXAvA9cDsklFcVCfSqCWkrR8TXHtCLaLjAPm3EEpEQ6EaUcYBz7gwMU4gqWZNzrvLrS6WZArDbleT8OUKGzvQb/1Cc76+iiu9Eme3YLzQzVRr8gFGWBjDYCP2LgArSBaM6FSgatLCTf+nW6XB6b4yt/V8+tfocc9a80ZydEmQn3gSy1sOQeqXkbsK6XtRygEatYCAdg4AYRV5VaVmlo04oAkIU5QsSkOoa6EY4IPqhXHqMjQoRocKNN+zTg0Mabe6DytUB7UVNtMawB+ShSwCzm8L8ZPegmQw8uQsv1aOLKoHLKiahUzBo4A7AvpbuCwo5Z3BLonGg7APPYFHe7/EbZe/af0Z3GsOPYEnW4/gacH36Svd562jyvQNoZiXqiRBfhEcYXwEcuyHyYeWQG8c/xRcYWmlZKUObdjomh5AoxRlQikkU4hbh9FWOg8n9C0cjh0jEkd4agwOgsx5rlQsVigupaQ87G6vKaAD0h278c6+3O4qP/85M1wbfG6TxY7VVa6giymeYIjVRw41r2gvAPgFhnegYZdUj4IhMnB9+XW5HW6xQuUx9bQCdsospN4vPt4WI9LpFF3boedAwbO415Lsz/tPLICAJbLCzay84odADngghIcYI0hFgYEkAqu2MEhiKZRqkQJhBjzWCi3DvM6ogKklY/JrcXw3F+e8vJpKz0fDemLuKjPv/y8jE4+FVJ/3OVFv5oxlaZAvhhg4sSOhbEnkdkVy9vCuqNGd1TDfj3hndf+D1z2Fer8TRz4fXjKdN2eMhtxplkNtqG1yqNaafNh7YX4Ph5ZAdz5170MII9InYFyWDasFSEBSYiAoBVcsYsDN8bYplQGQRUsaida1wyXztQZA98KGqLbJzze6atzf43/Li8CipchOI+wVcDHDpUKynmOhY8xnSsmBfSgIr8P5Vtk9BYz3yLQ3sGP6OrBK3h9dB4nhmcwtDFia5FxhKRVtUxnB9w7SXThft3sX3AeWQEAy87PJzrQXqRKlcjUlyIFPFhrKOogVKrHothGMX8bh6FEng0QpRooiigwwRcO0lEK44Jk6/bWwp/srHA/w4jltS5i+RnnzyPUOYKJyO17qpKUipKQO6JJBTkgsnukuuNEd7yRXV/h1uv/u/6hzDA58ct4YnAMfVZYcmRLVuPTKY/fULrSeIBHh2lC6jr9MDKpU4+afCgROFfBDEIzt8vj/FXs1jvYynpIVr9JqxKUOUC6EWRnDkUXMspUtzPo5sufd2cFUsJdEQzPQuocYZSpqwNqylHUqvM6SaYHKI8qlQMh3WU2O9ZgrzzkrR//Y/397gZGg2NYBZblwGgO7qKLUwA2H4H4H3jEy6DA7QMprkB21xCKACdxVcZ1MnMUUstkFRyYNB6/SjNKtdc/B5O10Wuvg+qrRIDKqqhcdyTjPdITa/e2rv+zQ0rL7hV68RJw/gLk21cJJ85CpwzdYIReDQ+kfpZqFc2p1krrWMlbq/XkVVO5mWwPn8DPaiRcGaYEAGbLq58D6GGfBAMeaQ9AePH2CPrtDFpVGtiQoyhZBNDMkBkDuq+g/SByIA63xq/Q9ckrdKuY8lQ8otpB0oK0PKLlpva15crOd33GFyCCu57g8Owy+X7Gkc8H5GKHanqoRVFSAegsGJp4q4fq/KE4f7h/mf6QBIUdcNoZBEOBQouhNwCcf8gnwO7wKHuA5YpfAIdnIW99H5LE8NpGxarzRAmUGA/WwlhO4cCuCPbouhn0Mol6Q+6AVQ8LSM9C02uk4zW8q3z4RbH0BAD0hdsrOIcXQFu7oD/MoSc8Sa9S2WeE45kK1dCarFiCn7wZXlfD894TuqK3TBpvqU7HJF9JVb77iAjgEfYAwLKsuKzWjE5S2JvDZ1PUJseiSHRaJ9VhqLBPAXsgjFXNQbVH2/UucljAxUQ2IknGkMN3xf53rv1FPsedZ7l42xvg5eWk2fnzCB1HPt1FPdumShZU1J7mBpgefM9cNQHXs2v0nfw7eONgZ1FRqSF/p1vdwx3+AI+2B3iHi4BefBmC5+Cvv0Xo9FVW5xRYE193UXqHWIGo7YmN6mxxgyfZAN50Ie3r0LkhvXz5QYz+7+euN8DyF714CQQgnAfJNhTRGsGvqLoEwR1Uzs+TP6tm/sbswM57pl1JhnD4iIz+QCMAvCeZfBny0nPwz++R8FQlGZBvB1izQBUxbDBqnAdzgaQwSNMKmLXB0x+qfgskv/m5lD0/+fO887t3iQEAXgAF7CkMCPY4xJqkdkf4XmdDFz1PxSLAdSYahq+T/L172J75MPBI1HrvjeVKhRduv5PnnwO/tAc+MwfP27BRCcOpmmMZ8VGsbAXUWaNQXkV5bhP1JhB+E5C/yGGDQunSMuw1ekoN9cjEQalvSGcZxE40ZK9TeAmQF0HyoO/3i6ARwHtYikCx7A26CdA5gM6fA8/n4JVVcFmAdwH0rOpgj3R7Azg90fDd18n9NBjNHREc4jIPzz1L27XSiZj0bAb93ctQAPIorAG6QyOAD+TuwRUvvEsIAHj05PJn45h0I4PiMjAE5DdB4YHd7ifmdhsYAOcBuoRl/nLxEWuMCzQC+Bjec4ILvYDlHoI7f3HXaH5aDebdz/fT+gyfjUYAn5j3H2v0aBpOQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0PD/eH/B5fKPI0NNPM+AAAAAElFTkSuQmCC","data:image/png;base64,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","data:image/png;base64,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"],"frame_max":12,"frames":[[[0,0,-56,50,150,0,0]],[[1,0,-56,50,150,0,0]],[[2,0,-56,50,150,0,0]],[[3,0,-40,70,200,0,0]],[[4,0,-40,70,200,0,0]],[[5,0,-40,70,200,0,0]],[[6,0,-8,100,255,0,0]],[[7,0,-8,100,255,0,0]],[[8,0,-8,100,255,0,0]],[[9,0,-8,100,150,0,0]],[[10,0,-8,100,150,0,0]],[[11,0,-8,100,150,0,0]]],"se":{},"pitch":{}}
\ No newline at end of file
diff --git a/project/animates/yongchang.animate b/project/animates/yongchang.animate
index c4365f4..2173c5d 100644
--- a/project/animates/yongchang.animate
+++ b/project/animates/yongchang.animate
@@ -1 +1 @@
-{"ratio":2,"bitmaps":["","","data:image/png;base64,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","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAABSJSURBVHhe7ZoHVFznlcct76Y5ZbNOnOLE3Y5jJ4ptFat3gTrCRqhTVGhCFYEQSMJCBRBCDaGCLVRoU2HoZRgYylBnBhhmmBmmMMx37wMp0ibeZO2U4yz7XZDiTY5Pzsl6V7az73fOOwww82bm3vv97/9+7z0iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi8gVg9JHRR7MnG7504UXHV2TT2dfkr975RvZk97/wx4/n/mLke4XTbn+fftLv9Hf++Ov0XHrNaODoP90/jcjfZnTCO69avkzBlc8Sns6by6YWLkC/wkV4Ur4UlZLlrEy5GuXFb2O+IgBuFK/FXNU6lJdtxIrS9fjHko34++J1WFm0jsnoOcq3mEy2EkrlK1i51Beu5c2BiLxZMF8ybfiVW1PxO9mThcf+XyeHqpqqOW/S0A8LZ8MvpItwBwVa6YedpetYWWkwJFRtF7ZV78DQ2n0QUXcAY+oP4eH6o3hSmwxZjSehsDENf9WSBobmNJC2pKJCewLdzSmM1Sezm/VHIKPhMB6qiWe76mJwa+1uDCkLx+iyEDxfsg67ivyYRuILWYoFgm/udPbijdc836YVc//j/SMyOkE7b/SfSSIks/EnkkW4UrYMLin8oZ9Xc3bVNoyqjGYbq/fD7rpDcFR7Eo7qMjCq8yKu7MpmU7tzhl/V3fJOMRQI/noJK+uRYnWPAgONRWxXj0LwNSohQC9jb+rlbHu3lNkNEnalK5f/7QbMb8vGxbostqn5HMS3pI0l8GBdPG6t2gmby8PwiGo9qyvywyqpDyQUzsU3rr3hffLGM56vUpHc//BfXMb1W3gsZ4r3ecl8XKRchleLAsBash6z1eEYWbUX9tUnYJr2OGS0ZmC0/org03adTezNHXnOVAQ/7lGNPNun9k6xanC9tR4V/c1gdekw0qaDBbZWnOlohwB7G/ba2yHe0YaV9laItzbBin4tHjbXsSFLHZzurcJVehWbaJeNPNcrwZ/oc2Fa+1Vc13oWjzSl4FlaWeoYjCoPh8SSzUwjX810Mh+MvjXTO6VgsvBdksb7X+eLAwWe9LxghvBT6UIMVCxjbcUBOFoWzFrV0aynNo7ZNO+woeYMZu+8jB3Gm6g1SrDGKMcaUwXUmtWg7m9EraWVtQ10IQwY8EOHAS3OXtS7Tai1m0Ht7Idal52Vu22gcluwmA5nPyt3WJnGaYZmRw8zugyI/HXvO9rR3N/IdNY6rLdUQ22vCtR8xWgMedjYeoXL2BnwNKfAIC+Gvqoo1JeGglUVgCN8lR4tmCXMJqn8giRidAJpe/6M4WdIX3nF58sDmK0yBM+qd2G9Og6HuQTUtp2F4+2X0a+rANfri70v9FcMP2NRg5Qq16rDGfYuXOcyQYbTxLyufshw2NhGwS3Mdjq9P3M62Yter/f5TzpGhkaeGxjwPu9ywUuDA/CadwAXe+wY5TSj3GFiQw4D7BnogBXONmFSv0aY010OwT3FuLajAII738MoXSbm1h2HZk0C/r5qF1ws2wISRQAbkvkI26RzhEnktEhK73/ZzxfkKugDFs7AN6SL2Kbilfi+ai2mVnOpqdkLBzWJWKQ7hfVtmexO2zWM00tgvqkMF/XVwgle7VvNrWwqD07wQC/b5TKzXw7ZMJUHcrnD4X3BYrnzjdHRv9+1GAyGLzHGHqdkuKzCBk8/1rjN2DjYLax2dOEqWwtu7VWzJTwRLxmkcEJ/E891XGEftZ7BqvqjcLE2BqPLI2CPagMzylbApYK5sFwybeTZMRf1eeoRtDyLZox8TzEHZxaQo/FnH5RswLjqSAiqjcMd2mS82pYhHOi4jNF82Z81SNlvTZWwx9Eo+Nja2ESXXpjl6sMtvOKHBq1wjTkFf5eLTaTgWSyWL/PgT7j/Vn83/LWPejyerw4NDf2QVpHHgZEeC5pdJrzl6IY1tg5YYNbienMtJPeo8Hd6CR7qeA/2tWTCmaYUSK5LhGDuoCLLQri19WeawoWw5hY3EtdevvvNz0USKPhZUz0/oOBzdxOl9MfR0o24vySCbaqJhTCqJN0ZCGu7IszS5wmT9DJYYa7CQ/317AObDs9xjU8bMKKZKhPssNntZlNvu29/3+FwfOXTBP6voRU0MjLydZIpjwuWufvhGE/4Lx1GUPFGrjQ3st/2VWNkX6ngoy/kjTob/VrOQjJPQkLNQbapIhrCS0NAKlsNJZLF8DYlgYa+zzQJpIeXJ3r/VT4TX+dDU4hyJbvDfXZS+XYIrtgLQZojmNR8CuJbM2Fhz42RZ3WF3ieNld4p3J2E25rwlr2V/cnZhcOuPrg02A9BpPG8Wr+t1f7f6Cwl9M9JsAv+biuc9vSgicvRaL8OCgc0wk6ehBnUl3ry8fW2d9km3Rk835CMO9Rxwga+oneXBqFbvgr2Fi4UfGhopJ53//QPF8o8VYBkpveFwvmwQrYck1SBaKnYArvJ049LD2S1n8PQzmveKbqb/EvJ8XVLFazp12ABdyV3bJ1Q4ujGD7n8vDtoxRAuD2/Y7cJ3P63sfBIkRbSqHI7hJ+h9eF8Idpkhx21i95wGyOFOqam/mdlMagij3kRzReu7uJLPIod0qZhEUlS7F0PKt8FRZQD7SL4UwgvmsDdlrw8/8RkMceNbB/Tm8tnDk6WLcQufLr1FgXCqdAuEl+2AoIYE4UDjMTzXchZD2t+D5fo8WGNSYYqlAt8nf27Vse0DnRhqN8Be3nQ/cNvxvGeAN0oeHJIg0m0K2v03/FTQeeh8dF7BKUwacrNNQza+6sz4Ppe+HTY9rBloh7etTRhtVjNjbwk2GmUY2X4DwrhNPtx8Cs/VHoHwqn2wuToS41Qb2X9IVkGiZCEsK+AzzkOXInqzsa2EN+HH5JOp8fIEfKTaCCe4/IRVRuMWbuWSuH7mtJ7Dk9zindfnsd/0KOByX5ng310Dr5m08GNLG3txwMjmOnshyGvFEb4K8ngCtg45cSZvwD8iufi0SaDXC4LwGLepTw4OwjSvC0NdNswdtLC7gxYMcRuEOVb90A8tnZ4fWLkpMFfD2zwBMUY53O7IQW3HFbjeks7t6RGMqYnDrTURGKvahCb5arxADfnmLO/PaCvjodrTB/Jza7LwtGQWzKcEFPvhqHItnOYJ2Fu9C2Nq4+Eidz/1ujPsbscVbGzPgd1GKab2qGCvpRIW9jfA7nsd977Fe8BTQz3CLHcvbuXOpHfQjlqXDcI9Tpg/PDj8zD3HvW/db8iP8mPC33E8SjaULKzTiU+RA/K6IJyfv2jQAoPuPtxKyecJeNreBhmWFgg31+BKc5ngq5dhjCEfo7kbkvDZ4MOGNNamOYwXavfRHhUc44U2qPDHq7LFuDZ/Lps4vsH3EGWIPP+Y/k/Bp/KnC7MKFkKEcgWCai2UVoZCeuUOOF0Xj46Gw+yOLg2ruaU7wSfONYZ8SOhT4BFjKVtqrxJm97V4n/e0Cj+l4WvACG97TFyOTKybD059vEEm3B/A5nBL+nNewS+MeEaedbuFp+ngVT32878fD/5GiaNGO+wZfsXjxBl8Wl7jdcBBj41pKPhDZoxzGnAtT/5MT/vwKwONwpweNRwzVePLphJYwyfyw205fDjLhnTdWVA3pjBjQyL+W/VuzK8Ow+ySjfg7xWpIVyyBt3NnsJ/T/PNQJ+UHEkT2k7aOuS0LUi6nbWD495JN0FIeDrdr9mBlbQK0NCWjvuUMVuiy4Fp7DqYYCiCxWwkHzWUYa6nB/f11GGdpgoP9rZBsb8dMVzeXhx50ufrYXXc/Frlt+C5fDacGB/DwkEM4wAYx1uPG/XQwz18eXjfG0P+ZSzjgdUPioANP8tV0yWtHBZ+srVzzf+0yYoHTCJfsXXwAbINEPn3H9apxf18lxnSXQgKXnmOdN/B8ezYUtmdiU2MqNtYngbomlmmqI1hPeQgKxQH4R8lyiCfzwav/Jx9L0P+ucfgbjE6gJUdvPLbfwydE3oj3K/zwV7wRG8qDsaB8OxbwSVKpPsgr6DgYGlKhufU8FrVdhZyuXMw0SiCjSwGnTOWYaq7FtD7emO2NmGlthRu2dizmATLwKh3lwVK7TVg85ljMmEnWcagfU+8fKTQxD1nxJPf1R/mkm8b/f2qwD8/y5151mEDKX1vtMuCv+bnA3sHKbG2Ya9NBllkLGTz5aX1VcKq3HNK75Xi2Mx+vdlzHfC6ZVbx36RvTmK4ukRdSPBapo7C4YjsrKwpkf+Lyk6v0xSjJXGEOqQDtez3UJkw8kKGb09mPaBVIF+J6iS+coimY29EqnoTU8khIVMdAouYQpjQcg+vN6ZjdcgES2q9gqO46LDfkCXO6pGwqn0BfN5fDa7Tz2adm83giAq3NsM+uQ7mthX0w0AWX7Z0Y4+zhf+9i81x93inOHu/PHN3DrzqN7EVnH84YNGGq3Qi/IFlxGHHVgB4iHHo8aW1ndls76+E+P9HaAsHWJsG3txamWauFSX2q4cmGIphulHDbyV0aH752tF+B9OYzcKPhJFxsOIrvVMXCweqdkFy+FbJUGxGVb6FeuUzYOb4tMfwK7ZjSFbiHWP0PGF8FJTPvfvPaG8PPFMzEGZQE2VJM4SthlCehqGQL7CuPgDDyz/UHMIov5eSGZLjcnIHvtF6AIN1VWNCRA68ZbglP9+aOfK9Nxh53VA0/QYOQuVKY1a+GoD41pFvrcdSqxZP2ZthsbcQZQ00jz9GWtKWVN/NmdtNah98xN7ElPMDTaWvD1oKrbM2w29bIbLYG7DKrMcpaI/jwc79qLPE+6ZANPzE2FMrYi/qb7M2u93BV21W2i1f9WV4k53ng99cfxq2aWAytisIdFdR417M7XHp6S1ZiJNnP/OlsIi9AuhT6tYde/eNwp8HfmJoPJYEsKW3EFS6CFdKlsFeyjNmKAthQ6WZuTbcJOysiMLRiPwTVHICwukN4uIHPCM3pkN6YAXtaLmJgyxWY38KT0X4dXrJJRp41yfBlgxSm9yhwraEYErpV7D+5RmeZKtn2vio2r6vC+zx/PNFUhUqarrmGpxkr2FKykfzx/t4KuN2twmpjMW41FrGlXQp8wygZfqUrl/2cgs41fln7uxjKdf6ILgPPNaRgau1R2FebiKHVcfxz7oSwqjCMpT2gonX4B+lqyJH68FW+COZfnwYvUeWPBX/s0uZDr/4HjCfh45XgfZIqg7aiC3zZJukKUBf54fvlG1kZd0eJFeEQTpcHq3ki6hMgrCEJ4jXH+ZLnVceX/TEuT3ubstgmA02gN3BRWw4uNuQK/r18KOrKhxPdUp4EOebpZbC7V4mr+uTDk80qfIqSRZNrt0LYwP//jlHKmEGKen0BxnTm8kn8JnvLeB1Xdb6La1svQzg3BInN5+A0va82BZI1ycJOXhQh3DpvronBraXhbFfVdrxQvBn6+dR7V+mHSYU+7C0J7Xfxyf9B8KnxfkbV/9fwRIxvR3/tvVfZ47RlS1eUJHMEX5kvhBUuZeVFq/F3xYGsm7uk00VbYLcqjG2nibk2FjZzedrSkAi765PwSGMKpPNqzNSm4Xm+OtJb+CCnu4CprZmYyZvje7x//IEfXZ3ZmN1+FZI7smFf21WM4839dEc25ukusQ86LjNjK7mui3CxMwvP83NkNqVhZjM/Z9NJONF8XDigSYKIusMQzDV+c+0eDFVHY2RtmHCgLAQKlevZPUUACkWrMJU23grms3m3uN7ThRnaBaWC+5wE/i+hiqCGlPfmvW9Rc6YmRU5BsUhYrViG0XI/qFX6cxsXiCaeiBKaGaq3YzRdfC/fCcGV+yC44QCGNCQI25qTeM9IxljtcTjaeBzPalPhWmsaKrWpTNOczn7LrS20nGEa2rvnj2taMphOdxp/r02DwcZTWKFNxXztSbzQeAzfqefS0nAUIrSHMbQmHoJrYvl77YFgzU5hW00kxHONzykJYpqS9ejmsmmXrYIzsiXCBulitkS+YHiy7M2R56jqyXSQ5H4ug/8x46uBEkHVQvft3JzkfYGuKNF14YJFECDzwRjpclQoVvIqC2S/4cu8p3wT5paFYArprioMImqicAtdOK/ZxzZSYur2Q3h9LMaq4zBVHQ+XauPA05DA7tRzm1sfzzT1CewjdTw21MRBVl0cHNXEwR7NPmFb9V4IauCyR8FWRwg7+fkPlW2Bi6UhUMtdzUjJOvxQvpoZi/3gtHwJhhYs4O5mAc6kLQbqa3xVP04XYKjq5Y98oW5lGb8Tgu4woP5AFURuib5YwVycUThX8KFRPm8R20V3SPCqa1b4sYGit2CwZAP2lq7HhtLNWMGTcosCVrEF08q2Y0pFGKZVRuC5sjDM5I3dUhkJgxWR+H5VBH9+GLtSEQZZFdvwfFU4XCwLhWulIahQBYOaB7tDGQhW1VqqcrDK/UElWYpJCh8M4Z/DTzIP5hfMHp5MDZZ6GW2zPwj8eMV/Zo320/OgUdOqoGVMX470lO6WoKZNX1w6X5jFtXYJJaV4CUZyO5skXwFZyhUop/t4ZCtZt2w1s5UEjsnEUGkgSRl4VIHsrioQbvP+MlQcwLzcpzu5zFnoHiPZSqwo9sPcohWYqlomHJD7QvBYsLmT4VPsNLqOIZuJL9MwRTu7JJ3Ux0hmxqv9Cxz0T+Zj10TJ+PNthvzLU9WR1lLfyOeByZ0N027OYXML5uFiSgzdSzTWS3wwUOLLNkp8MJQulhcsZtvpGPt9CQQpluBa5ULBn7YJ6HXShbCAkkvD4nWebAo4XUghaSR5GW+qwmMU9M+Rq3lYUIWNTqBqoy9PQSDJolVC1UgrhYJEAw+tGNJkkrGxRHE7SHJBd7bRQb/T3+mOjLGbq6Z6fkCyR66MkjyebOExSjwVAL3fg4K4/2FExhkPytjBmzkFiw5KDgWPDu08z1dJKihZdNBjOh78n577IMj0k84zHuh/OEkR+Z/zyCP/BYRtiHY/HxjnAAAAAElFTkSuQmCC","data:image/png;base64,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","data:image/png;base64,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","","","",""],"frame_max":16,"frames":[[[2,0,-24,50,120]],[[3,0,-24,50,120]],[[2,0,-24,50,255]],[[3,0,-24,50,255],[5,-56,40,50,255],[5,0,64,30,255],[5,56,32,40,255]],[[4,0,-24,50,255],[5,56,8,40,255],[5,-32,32,30,255],[5,-56,8,50,255],[5,0,40,30,255]],[[3,0,-24,50,255],[5,-56,-16,50,255],[5,56,-16,40,255],[5,0,24,30,255],[5,-32,0,30,255]],[[4,0,-24,50,255],[5,-56,-32,50,255],[5,56,-32,40,255],[5,0,8,30,255],[5,-32,-16,30,255]],[[3,0,-24,50,255],[5,-56,-48,50,255],[5,56,-48,40,255],[5,0,8,30,255],[5,-32,-24,30,255]],[[2,0,-24,50,255],[5,-56,-64,50,150],[5,56,-56,40,150],[5,0,-16,30,150],[5,-32,-32,30,150]],[[3,0,-24,50,255],[5,-56,-80,50,150],[5,56,-72,40,150],[5,0,-32,30,150],[5,-32,-48,30,150]],[[4,0,-24,50,120],[5,-56,-96,50,80],[5,56,-96,40,100],[5,-32,-64,30,100],[5,0,-48,30,100]],[[4,0,-24,50,255],[5,-56,-112,50,80],[5,56,-112,40,100],[5,-32,-80,30,100],[5,0,-72,30,100]],[[3,0,-24,50,255]],[[2,0,-24,50,255]],[[2,0,-24,50,80]],[[2,0,-24,50,80]]]}
\ No newline at end of file
+{"ratio": 2.0, "bitmaps": ["", "", "data:image/png;base64,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", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAASfElEQVR4nO3aa6xdx3ke4Pf9ZmatfTt38vAmSpQsMREpyXYYX2QE1gWunQtiBHZl9EcqB3GrBE0aI0jSookNqUgdNG2AoCmS1DaSNrFTpWKBok3TFI0VS7KbuhEpxrJEmZRIkaJIHR5eDs8++7LWmpnv6w9WSGqkgXmR5aLrAfafDWxg1rx7vpk1M0Cr1Wq1Wq1Wq9VqtVqtVqvVarVarVar1Wq1Wq1Wq9VqtVqtVqvVarVarVar1Wq1Wq1Wq9VqtVqtVqvVarVarVar1Wq1Wq1Wq9VqtVqtVqvVarVardb/5/hmN+CbYTD5zL6Drlqfla2bOsJh6da6IzcfgqsnwfsumaZmZS+mSzHmbuyltclG6swN9aFb9in3M7/Zz/B/820UgPHhPc+HvdhcYCEt1i5vcU62QfAuH/AdWbQIQSpxaDItOkdHouMceqZ4vwlUMx436IhRopqGHNmhmWjk2TjF01Ac8cmdbVRXK+X0oVu21292OG9aAAaTx959qmwanXc9t1lKfo8E3C8FdoaunkXJ/xEKWWVhWUorJbAvAT0EdIU2R49FOH6vgx034CUaXcr4LicaYsSfIPE8jWtN1KGLMtaEXFcYoMZtWuE9earDpuLXfZT/NJ3m43mazzf+wvjHDn53/Fb2w7cwAOMX74E7Ojren+2WW1BitxT2fVLiXlfwy50Z/Ll1dF063OQ7WPQ9IJQ8G0qcYqFnvffjiY+9jvc3mOQf9ZQAh99W0a2i7ohSZzTbKRB3OcXPquGLGvkFZlyIDb1G3aKRN7DmbKptI024GsfW5Jo3pw19r04kxql9SWv+18lGPusu6sUfObmrIahvZK+84QFcrt9nOp5pa2/gbg5dPMCevdcFfqk3i0OpZ92yyy3SM190+XLR59FY5pWeDyP2U1Tx3vWbTV7crSA+bMH2lsJfi7AjIGsntk2NnwTtUTG+V82e0oTnTPl2Tfp3CO5PkU/FWk/MNGFUaQ4x2kKacJdOsDtVWEhjXMxTXKhHtpAndn+zgY5N5NFqnP+nr/2Jo9O14T8+fEfzRvTPGxaAwWT/ntVenEs3uK7d6Ur9adeTu31f/7Qzg5710HE9dIsZVGVPLvkepihRwwG+Z5QClILBgpYhyE4Ilggcp8dUiFEUi05gdNbQmJBpAKDUYESXmYUl60uWLQoMEHEq1rrOKLUmS6kCY2PCRnw9skGeYAk1LG5wVF9CHafW1w0uNBP7dBrKF3Qaj71UjS5c7yDegACM/+7dpzqRfrns2HewYw9qT/f1B/JHYRZvRQe3h4F9rZzBn7HDp90ceuzmp3tFSFbkX2bgcwx4XArc6Et7h8EeoOd+FXumX7hXJprWANZFYX9laSissGHd0DlxktFz4GY13JYi7jPVdyLyVy3hJVF5rZmgX0/1ZkZW9dQ6nLAfp7h7um67OOE7m5F9No2wqR7a3Tp0v2gVDjHmE8vlzuF9TzJdj966rgHYA+YeO3VqLlNukp7uKbry6+zhNzvzOMmezfse39GZw7x09Q705FdC354u+nQs7T5X8rgG/VrheDs6NuccPum9/FYK9iVVPdI0nbN79y5PyStbtRw4cCAsLy/PpCl3apY9zuyjqugw8ldTMs01NtdTPa01j+sYH7WK/TzVv58n8t+qDTuWhvx6MzafhvZgM+RX0gb+UGp/eJh09aGD26trnSOuWwAP73muuGtuaV59vrUp8LYwo/+86Moj5ZytyAxnigHuKvs8Lj0b+xm8BUH/bpjhJ7p9OZyLvBKCm0Vpu830YRf4BR/kPzfMx4oCp4fD4Wjv3r2RvFxmrpSZyYkTJwqSCyGHtzTZ7kCDn8gZz2i2P8gNLqQpt6Cx29OE/yBV+Cd5ZJM4xQ06wqgZ4dj0PHuo9b7pOpbykP8qNnw2nitf+9iRTeNrCcFf7Q//sof3PFds7vcX1edbUoG3ljP49dCTn7UZXeGAPd+328MAB9HjYTfg1Ao90ZmRC1LqL2VvnxEvdRb7AU9cKAt+ogl2pIB7pcrjSzt33tZcbce/jqQCqMxsdWVlZdipcbqSdJI17ibsN1zgf6ciR9oHnPKnnfBYbTY05ZaUbF8B7Miqr6QNPt4B7q8MP8yx/S421/hcuXLanrXp1YZwzQF88R7zL1x8pb8puK2xwG1FVx/xpTwsPTvHLsV3uS107VUGHOt25PTYNU13AGGQc+Ll35P6UwI5y2D/gYKvVE4PedHTL5zYMrrvvq3Xpc6+jmQ2s8nKyspqBx5V0hLU3xHl+6PHXaJ81Af6GjZC1vMddfWUNkOTdxRdrkvmWs76p1B+vFa7MSg3/IxWj7371Dl8BdOraZNcywMZTE6trZQLM1hMhe1wJW5yXTnne3ZJSkshcMZ5Ww4Fz/qeDsdsXN+75ZKyi+Q9avq95vkH5jEPMIAUb66o68Jv3vy8mNn1naPM5MUXXyw2NqxXNXneqLOWsaiiOyj228FxRyryT5izOwrvdqWghUHWQ4FzRYFNDBqkw3Up7HNS2K/4Qm+Okrei8oNP7zsQrqZN1zACjI/sed7vkcUeJcyr12Xv9WMK/n4GKhpd13NAIiaDeZPl0mGXBHwXlH/PzD4rHr8gYFK1J4T2KROZ0NiUYpjvbjpz4sSJdTNr/ncJuSavzwOzbnYua94RRW9nw3cB/LAJfz6ZrQpMabJNoD+elRsC+X0JlpFIFSyow0qmTXzgOJVWxQabJHAp+Xi+2+yYGCxfaSm66gAM4GOzs67RXIpJF4ZuAHZIQBQHE9IrrOO8zQq5W8C3A/qjmvB5OvmRlO1lF3lBRTvBY7tl/nhw+GcZtkSPbqWp64I7ubKycsnMptcSgpnJmTNnOiIyP7G405G3p0bul6zfB/LjqHjckF6KYiZW3InMTwHYBdojVL5gtJdJegEH5pFgMFCOOcGWBOvHEl2LVXjiHtR4ElfUzmsqQfUkiGYRgXoAIMTlhBJAXwQLWW2zRu4y1Ycs4W2p4Sc0cz1n3VVkLHnDh7ZKb1WyvBxMjqcGv6ARd5rib6dkd+Sat9nUNl148cLg6NGjpZmJmfEKPnLgwIHw/POrvcnElnzytzjFW3PCD0q27zGVfxhrfRnASYnuZ9D4D+bKSkQZxRqwhr8ItZUU+bei6q003MRkWzTbLMxmSJROKN5RpAju6OjgFZfMqy9BD4A4AhQ0y1kiTbNmvuqA3ZJgmo0e/IBFnUOUAzHaQQHOWGl95zhTixb9yj1zJow3zYgvJo2p69qlwuPf5NoeNJGfVLNHRylt7xd2Sqyz9sorr0wLLfJEVQGg0wGq6v9s1uvfdUlSKNuXtnfqFOc12Y7k7FbN9j5k3CLG34wNRqKSJLPPRv5jbPRviOFJqN4pZK+u7bxTnEKyL4tiCYofjpl/RGJMYBvMhuKQNMI6Tu34uHPFAVz1JPf6bua5nOfmum6nL/idoeAHUNoP+h6edX3cFro8yJ7NdjrsyABnWdqK63I1dGwkJTQUTCxgdBArzNGj64QLvsS8EO9Rp3N08hQEF8Tbmik3hGzEm2aDAYD7hjFsCiMhUIpRfc7sa7b5QC7H2vaKcJs2+C8Gu5Qz1nLCBDVjjFCJsJSstBrdNOasNraMmjvqMSxPrYkTE9vAUqpkOY6wuZ7aJ22C5+KYL2oTV3fN7xrd9yQy8M0vm696BBCwT8fV1E9LlXi3QeiFBBxynt+fG+s6x8ejAoXjtDabLQRbtcFsmbDQRFzymWOL1uQauexQRUkVcy4AjVqm8Fk63ugEHwLtj+G5ycTWDBjnZLWzy1sBChgEhEGzWRSwozQyIRjZy2rzDpyLEe82cNQk/ZKpZCgsRXQk0edoRAbTlD427FmDAWosasXNsdY6bsi6ZlYyJpusk2aid2mW3wuJw6gcFmZTF3vp3iehV9L51xQAQHvoFtPPHVmJ0eKGAueCcjZV9lkn9pMJXPXAV5uJbZQAkuNAStuaHSKJEzS81pRY7QTZqHOuQpLoPayxHNCwXxRcVsENEBw3sx+QEr9jxpdcgVNxaqtFR8eWMTULRksNgmx2xg/Wyf6tyxyYw5KpbSd4Y530wwROaOZ+Gl+FcqWpbL1QiakiG82BDfuabEEnXIbarjhBTBWOIcr52FjNCt1UYylV8kOW8Axr/lld6Ump5bwapqvNeiSWr/iF8ZpexLgf+ul9p5stctPw/Eb00lXvOoRV/BdJ8Y8ATOnw5dowKhSnGXkqJtvKKXZaH4VrkKtSpz6wyTXXSFdNypg2zXi3Poqvdkp/xoKez+AJ3/DnIPgl1LYKlcZP3YWpS7syM5nxIGv8TFXoE07YM6cbqGUJhhKqH6LKMCX8a6d8yStPbzTx0kwd4mqOoevYsykWNbKXsm2zKW/OkZImeM4S1qyCYsxejtZLE3vAIl/zEb81rfWkNfZqnPJC2Uvjn3rptvjxK/z3A9e8F2Q0gI/sed6/fX5LuZGqOee4GT3bLgG3Ge3Hih66vsvPSykr9DbCwLJ36LjALa7Eku9YVMFpV/IMvJ1DgTVPTOa7PjaSy2i24BxvzM7eIrRPQfgbztufk3ixUjtVkn1QHk6W/2mA+5vR9InCsWfKm9Xs5zTykBn2w/RMVjnrklQ5JkdFL9VcArkFFXbmBotNgyo2toqGaxotc4qO1pxLjb4jVvJDsbLPY8I/NrWV6QinyyRrPuTxR3bubLj/ysvPdQjgL0L4zL6Dbkt5U+f8dDLTKblUdt22JuTNLvCjwfGdxUCfkoJfsQLnQ4e1BtOiQIcBixqwVJQs4GxIj4vq7Fy/kPUcMM0KFoEDX9rWJtoN3tvPQ+T3stnTwfFlUTnDoKvaoNdA55y4t8Bst6l+zCBnLeNRzbgI1XWvklJCNyWbN8UmjVhAZMjJ1nOUc9bYhibLFlnUI+0HlVuryt6nU1tGlH/ZTPVrrOQscj6rtV/3IY+Xy53x3iehV7sXdB1f9Y32AOSxU6eK4RDdwUyYbVyzqXB+Ubp6Uxb7YFnK+1joC1Lw8VzglHibuMC67MG8MNDbjHnOuY7NKNihQOmtcY6RAiHRdwFdAx4E8FURHFKzFRKX1OgBWxZya0r6IU98PSsPiWEqZG4iRGuAgFq2EVWGTdR1U0xjBXWRngkdazhbN/q2prb3W5RaGvxuM7WnNdmFNPWrEptL9bg/yoOT1UMH913xm+83uu4HMl+8x/yzp190i4uLZZbJTGl+FqVt8gGLKOwGC/ZBEd4hAeelsJdDwFHxPIkC4ySmEoBuIOHofbAiOvRFbEBw1rzNFuR8YzrvHN5FJ5cAPSKQRgGB6YAm3x2znSF52BSXoLjAjItZbUhgwsS6jqbIQI5AmSWkpJtSwu5U202IcnOOGlPDP0QjByzni5L9eRvzYsq6kaNMj6UL8ZHDe9P1OC9+g44kL4+GXzv0ou+7haI3n3tNrAedvp8zZwvqbN4Lb7KAu53gPdLVGVMcKzvyNfN41Re4WMM2up6NOosSTDPoC0FHyNlMLEFs1hTfH7z1zPhVmAkE92aVp1TtsAPOE1hDklE0bUqlqNJrRDepzaVkW02xWyPvYsZcU+kL3vgnqebzsbFVAS/VTV53UdYLscml6CrgtbhwcJ9+BNfvKssbfCh/+SbEiRMn/MKOQRjXTTlV9n0vDoJzswQHrrCFxnRLUfA74XGn0LaIY3AdDmm4CI8JHS5AbCjgWB1UCKGgzAongvtJ6xm4KIZnouoRB2YokzhzqUHXjHNqNofE2Rxt1pGlZqtzxpFc8ZDPOKmGNY021Ow26piH2ui4SZi6wtfAa/FyuYFdzUT71/mWXUv5y7fbFnozfmRNMROs0wi7pWef3hfOWycjD7yXueCwGIllOlsWcJlOF5NiEQ7dspAiqzovEjKsIWwAMBusgoKq0sBQQzHOinNBcNEyTotyLWZdMeUlNRtaxtQ3rA2YaoOJJKmaoqgLmcTDw2Hee3hv/giubnXzzXoTLmb9xaqpWp+VbcVcWOuO3HzuFhuMYSYUpdI62WmpYqXSyiBSgOrESfC4vHGRqAEmhYAuWSYACCWJWBawZmTTqEaDJSdsoNJEzU1sUPVFGpLTlFzt2MSNtW7Mgyafma6lezfv1WtZ1Vypb4OriZcPXR4DZPM94BPnnpdd4764uY5jJ7iN6dgt9cl6Ejx97eCdq6NzM4GivpFpFvE0A4AgZpIKjc60qmJ0XrXQIk2mWbUb88J0kNe6Sav1ce7MDXX3YJ/d9ySyAfxWdfg3+jYI4K9yeZQAAB4AP3P8oADAmWmHi01BALhrR+Bq7Th5LRsA9LY5AsDK+UoB4GLR2PZuZbsH++zo6CAfumWfYj/sjajjrf+H/S/zEhVuFbmLUwAAAABJRU5ErkJggg==", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII="], "frame_max": 16, "frames": [[[2, 0, -24, 50, 120, 0, 0]], [[3, 0, -24, 50, 120, 0, 0]], [[2, 0, -24, 50, 255]], [[3, 0, -24, 50, 255], [5, -56, 40, 50, 255], [5, 0, 64, 30, 255], [5, 56, 32, 40, 255]], [[4, 0, -24, 50, 255], [5, 56, 8, 40, 255], [5, -32, 32, 30, 255], [5, -56, 8, 50, 255], [5, 0, 40, 30, 255]], [[3, 0, -24, 50, 255], [5, -56, -16, 50, 255], [5, 56, -16, 40, 255], [5, 0, 24, 30, 255], [5, -32, 0, 30, 255]], [[4, 0, -24, 50, 255, 0, 0], [5, -56, -32, 50, 255, 0, 0], [5, 56, -32, 40, 255, 0, 0], [5, 0, 8, 30, 255, 0, 0], [5, -32, -16, 30, 255, 0, 0]], [[3, 0, -24, 50, 255, 0, 0], [5, -56, -48, 50, 255, 0, 0], [5, 56, -48, 40, 255, 0, 0], [5, 0, 8, 30, 255, 0, 0], [5, -32, -24, 30, 255, 0, 0]], [[2, 0, -24, 50, 255, 0, 0], [5, -56, -64, 50, 150, 0, 0], [5, 56, -56, 40, 150, 0, 0], [5, 0, -16, 30, 150, 0, 0], [5, -32, -32, 30, 150, 0, 0]], [[3, 0, -24, 50, 255, 0, 0], [5, -56, -80, 50, 150, 0, 0], [5, 56, -72, 40, 150, 0, 0], [5, 0, -32, 30, 150, 0, 0], [5, -32, -48, 30, 150, 0, 0]], [[4, 0, -24, 50, 120, 0, 0], [5, -56, -96, 50, 80, 0, 0], [5, 56, -96, 40, 100, 0, 0], [5, -32, -64, 30, 100, 0, 0], [5, 0, -48, 30, 100, 0, 0]], [[4, 0, -24, 50, 255, 0, 0], [5, -56, -112, 50, 80, 0, 0], [5, 56, -112, 40, 100, 0, 0], [5, -32, -80, 30, 100, 0, 0], [5, 0, -72, 30, 100, 0, 0]], [[3, 0, -24, 50, 255, 0, 0]], [[2, 0, -24, 50, 255, 0, 0]], [[2, 0, -24, 50, 80, 0, 0]], [[2, 0, -24, 50, 80, 0, 0]]]}
\ No newline at end of file
diff --git a/project/animates/zone.animate b/project/animates/zone.animate
index 8c2b604..fa88a37 100644
--- a/project/animates/zone.animate
+++ b/project/animates/zone.animate
@@ -1 +1 @@
-{"ratio":2,"se":"zone.mp3","bitmaps":["data:image/png;base64,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","data:image/png;base64,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","","","","","","","",""],"frame_max":6,"frames":[[[0,0,32,30,100]],[[0,0,16,50,130]],[[0,0,0,80,150]],[[0,0,-8,90,180],[1,24,24,100,255]],[[0,0,-8,100,200],[1,24,8,100,255]],[[0,0,-8,100,255]]]}
\ No newline at end of file
+{"ratio": 2.0, "bitmaps": ["data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,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", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAqbElEQVR4nO2deZxdRZn3f89TdZa79t7p7qwkIcEkLCGAgmBgQEVeBBETQAVkC+AGDOM6OtfWUXF4GQZxIayCuJCoKIoCgoALeyRoICSQELJ2utPb7bucpaqe94/QGAFBkgA6b76fz/18+va59aynTtWpU1UH2MUudrGLXexiF28I9EYb8Apsa59s813eAFt2ga0JIJRKPG/ePAWAn/vs4nWE/vIp8Tbfd7GLf152ncH/pOxK3C528U/NP1oV/nv7+dv+jkoo0RPznqAZmKGAmXgCi+3ixYvd3yHnDecfLQEvBWGbQBffNyPQynVpj04HcJAzzqtLUnTGBkZc6MgFBCLrLGnWZRG73Br7k5F6bdElv/5E9Q325UX8wyeghBJ3nDKjE6BTROQAcW73xJi2SEzGWaMtiVGOYwKtZuIKKfgi2ARx/UawUchME5EDCMjDySDAj1YT+/GLbv3w4BvtG/CPlQAqlUrU3d0tALBgzkK9596N+yVp+jEx7q0CyYiTQARQxDUHWBIZIshjVqiLnHQSyTpH8gPL5veI4/5Nkatcftt5Cba5FJXmlkI0d85QoOMcYaX0b/xB973d5g1z+o1SPKr/vkvuC9ePX5/Mnz/fAZAFcxZ4k6e+ZX8rcqlYs5cDK097VZ+IIHQWGfeEU/wlkLSLlR6w218c3SmEh7PtDb9RBb9v8/25ke57D/u7grpgzkKvc7ybXXPl5Rff8qmR19jfF/GGJGDhgoVex/5TmuOGgS3z58+3AFCaUfL9WePf6qy71gKditQQkxTCXLCCUnXZv37v/dcvmLPQmz4lUxJxbxVy2dShJZMJv1bsan4ow7rn/V89ohc70PB++j2XtwSRS7tvO6+805x9BfTrpeg56Hufu2OqnSYbjz3liM2j//z1Dx6ctuTWJ29M69HsIJddm8kVV4l1uaam5nUnf23u/qO/mzY5PBlwR1pyzcS8vn3CmJPDhuJGN1TZsiL/uzp2sNdz0U8/1j9q54I5C/WVS85Od0Te38PrVgMuueCmTGe+ba9px07/8377ja2N6v/pf//2+JWPrLkiNXGhpX3ss42dY6ouTm1laOjRBV8/8qzR8hfPv/bdzsr/JVI+B+qq1kldN8V9T689+8rXPkivJa9LAr772V91eirYa7c92x978/xZPQCwcuXK4KEbn7163cpNxyomr7GtfShXLPZFlboQS/fplxz+k9HyX5t/9WHK6v92mpKgKX9e45j2jQ0gUwOgEWprxEvJ5pWSAoAiQfIuTbPlgcHcyHB5KI1qywcrIyv+v+yGXl26o8uzap/WMd7T/+djb3sKgKxduzaz/NbKJUvvW/IhxSxhtlDx4D8R5MMmIvrUqf819/bR8l899rpJyse/qzCzZ0NH2yW5bL4OkM9aeSCVI7AmdqEIFQnICpAjSEiCQAgaIA0IO3FKhByJrLdWvrcCt/yxu7vbvdb+vxKvaRtwVem25qzx9gpy9b6Htvz2aQCyaemm3P0/3HDdqsdXvMs54abmps0mtmuLHY3ZpFL/t1MvPvTO0fIllDgoBJOb2jv3DRsLKzTp94ApIyIBgZjYeQ7CAJgARRCGgAD2LUnIIgHYBQBAjq3AxjZ1e4hND5uGIyvf//yRqwTq2pV86+/eqGS8ZjVgYemWbNGFB0L7/gH/Z/x9U/abMnz33Xfr4aW5i1YuXXWWqceZzknjHhvpH7KtXRMCB1n4wS+9+YptbbvmX+86p9jcdC7AGQAQItlqNDnrrEAcbJIY5wzEsmGPDDEJkVdUCiRQTjFpsBA58hxxSBBOosTU+jb3x9FIVSwTK2W8TPgsx2bBmde+53Xtir4mCSiVSjxNvWs2RXHHmGnFNYd/aPYTpVKJDp08/wMP3fbIFdZZv2vq5JXlDZvXt4ybNE57euUJpTnHbWvXD7/wx0+zr97PQM4JDCwkTWphfWTYrw0O1UxUG3akngKZWBEFDspCOGZNeSavSWlxrMIBLxuGQTbb6WXCaQraI48rEAw4QKeVSqGyZeC3SVRrEbiJVtCiyf6w/7tPf7Qbr0+NeE0S8KPSI3vUTH9XRvvZN81ru2PWrFnJo/etHXvP1ffdWauMTM03NI0o6H9rGtN+oRdks/M/v89uo2UXLljoNU88oJvABzqRJpcaV69sGT/UM5CP4+hpn/hyG9R+2jolU14zc43rGuwSANi4caMAcDOfmEn19npjX0VPYkezfB3s5fnKg+ImEWlTvj+50Nha1IF/LwCY2BxSGe5fWNkyWK4NDewunjrY9/UWJPrET9x8Su9rEZ9t2eltwE8uf7ClvqVaVJrC1mmdT8+atUfSt7yvcO/Pn/rAyNDw7n7g2caW1lutsR/1w0zzQGqmjJYtzb1bN0xo/JwQ7wvrCuW+ns50uJKtR5XFwz1rFvyNIYPRwbpt6X/us+SmC+7L9PQ9O5sz+qAg0zjGE14+2LORvTDcr9DSVidPrWhoG3NWmM1+bsjXf6gNDz66pbd/qtLq1/95zBWf/dwt59z6N1x9Kb2vmp2egKSnMjN2Ir7vMbo2PQ0Aj/9x+JCVf1z5Gdaea2ptH7KxXZFraTnaWvPNs7v3qwFbgz/j8OKFDOyTpsnYoXVrd4uqlZv/9QennvwSaug7F/78eLE4D8Rt7CjvmDxSJNbBQKif4DZEdfPJEy49aBmA+wDc9z9nfH9MzN6RxWJTKxz/pHfVU2/y85ljC60diZ8rvLdxrL408HwJgvDp8mD59oHh/pmf+Zf/Ovurv/nklXhxsHfKUPdOvQTdfOmjjfXe4f1TrktDPo9Hozt/c8Y7zwju+vmT3167cvUpvufbCbvv8RtmbzY0eSd9fr8mYOtlJ9u2zzmZXHhwVIv3GVy7uqEqwwd8+rtnr91W/qJ5i1Q0Jf81M2SGksQ8JEmyWYQiETcTzJMZdCIxzYCm0M8EpAINq7SIxdVn/PfbF4zKuezMH4/L5XNzKZO9Ix0e2iseqc1o7hr7eb+Q/Y8kTZfGw2UjI5VqrVJOegf6XFyNOHefeeZvtAs7VBN2agIWf/EPs01qm51Nsiqb3XDi5w76413fWfmO+39+z8/AWjW3tQ41tXX8krV/rEN63Emf3/8eAHTDp353cqaQ38/GZk7vmhX4+Hc/eDBe4NQNH7wht+rGVfUXBIFKKBHmbp0btKnSRTPbIkZLc5sH70skciQ8NSbTWCAOfBfH6eVnXXbk+aOFrz7/jv3WNQz9aeJw86yh3p4jGjraP55rbn6fi1NJanXj2JSr/bVqUu6L+nq2SKCikZ09crrTEnD33c+EPfes3TeBy7JFYz7X+MjM43Ob7vzG49/vX9/3HhX66W7TZm4AdIHYmRP/Y04XAFz/yd+9N8jnpsPhbT1rVsr53znxqJewUYDnng2cvV9nJpt9B4EbWDFEiKxNjRJHSWISxPEj9XT4mUgoCq3aS5N6lwhOU1lvbNhYJGcxHFfTOedcddQqAPjOBXeO/dClR2y84d/vnbRlzfqTCs3NY/Nt7d8Y6d8U5DPFAKISZzCwbtOa8pa+jcnaXz8ULcZi+0Lbtped1gYEvSoLGPjOeOR5Mv7t7b0blgy/fXBD39EqYBME+RSkNjJjf2fs+wHgmgtu29vPBK0gPa1vw1Pp+d858ZhtRFLp1OsCXL8m6UY3rjv/jqMyjU0HaO21gCQQEQUhZZ0QxFqxaVULRsTYtjBurCUmHbQm7UsqI3exkw02St9R6Rt8W9iYawmL/qNXffz2i8/6+ju/9KFLj9hw0wU3ZU748txnvv/Fu37W+1TviWFjMc860ztcG/azTfmGAMWJxYYG4+rD5fzco54u3TtDnquJ/xiNcAkl3jLUm9fG9yOCl6HAhkkuXP74U+81JF5GB5X2jo6qVtJgoeondR/wkwULFnqBn5/kab+jPNi725Yh+45ReTdceHtupL/WHDDNq5/ccP0PJz98hgr82RC0AxIKWBMJEysfJGliDVlwLchk+0VsGYEpcxw1W6OLntKb03p1XRond7J1fjRUfUvQwDnW+oIrz7tt9wWXHXnKCZeeUAeA9//H4Y//4HP3fH+4XCk2NDYGG1b2DGi4cjkYVs2T2ne31dq+w2641Rzd9dC8X8yLt6kJ281OScAT82bSm6PAG5FqACc+h8Uym0rrlrWb/gUA/DC0nh9YgNuI7IMA8GY9dl8dZtviOJpRG+i7tHvxSQmwtUFORtKjQs3F3JTxdzWI/pIIZsJJhzACAE2D/b1h79AGfxsTLBOBQZJYJ8zwmNSq3cZOu4X91AMjZK37kmrtN2wd7GBltm7OVT3oQxd+9FcLz/7Gu84eFaRW9K5s3XPq5CRJfS8XhkMDw4O/WLcqnnfozHLTnk3krfeP7l/bk5v9nqMfWPzTxQPYwVqwUya2Ll483zlbF0HKFkmYy/rRwFDaUkuq7Uza6CArSrMFgCQyn7/01JsbM2G+qDxMHOrpKXz0Oyf9bFSW5zq/euaVRy9unjJBKeeVIOZgFowXkZbq8OC4FauWFjcPrONi7N3RHIXXNNeDy5vj8BvNUbiwIfK+15aEP2yKw5tbTL5/5frlH1zVs/JTfi43VmcyrSr0NgD4hRX3SDxcyZJ2G5Tmw7917i0Xjeqfv3i+1UGthwKOWlvb/YoMqkMBfLR7fmXdnzb+uWFc4ZeFxkI3Ufy2r77/W407GrudNbNYyEXaOkeKdMiedptX9h0mKYIw9CNfKwiUA6R+8pcOeNjXPAFeJl8fGW6TpPbJUSHXfvhn/5kYe/3irzz6Dmv53bBupkA3kTUdT61Z2rx+8zPUXA8va40yFyjH1zox3xipVP/9wzeeeP45N57wkZ51T54pYs8L/OCbNk1+NibJXN2um37w1OYnvxB7brew0Fiwivqh1O1k5PF4JB5LhCppf9ZVF/z6C6N2vOdTB1caivUy50Iqqo4C2mcyAPrsd0/tN5WhZcXxzZdFcfrtYrbzvaW5pR26iuysBFB9xDIAiCOGc3rL2p5DBE4a28dUcg2NhuDqACrf+vQvmnKZINTaNQ5v3pL/6A3vfxwArv7IT7tcjLPO+c5xf3ZQ5zvCdNLImTjqfOLZpaFneElzkv2UkPyyx4+u7k37b/1T75+faW4b51177i8OuvqsW47vmLjnRwB1empMS5DPLnfWXOyG4oVjTOELm/o2nBprN7bQ2OSz520Wxl0ujvtIxCrWXUkUN3y/9OCRz/kjZmCoqoyrFnxN0eDqTOnU6wIA2FypVlVI9we53MqoVr0wP3n6nB0J3M7qBYmFZYYyAoKfV369Wm+HImQLjbHnhZ7Y1IrYIe14egpSwyMjzc7YXz0vIOI/pF665+IvLzkcTqZA4EX1kY5161e7ooQ/14buGcrU5q9cdc83rr/3+hhABABX4mvA1jtdAEBp3iK/g+Xb8UhN60K+2S/kBp55+HcXdYyb9ftNfWu/P6Vr+hcCZ9PE2jUuTX4vkTnKy7AVrVttrXY0gNsA4JjuY+o3XXJf6JcbVBhqb0LXFL+EUlK5ZFV97Je7sk1jit/u3zjwzcZCw+kAHtzewO20GhAm0B4TkXPkElN0Lm1QxMKkRAk8EeecyPrqQBx5ShVNnDSfd+OJ3wOAG875cTvBjfvwFcf3klNXgEUl1XJ7+dkNlHXerzyj/jiYjf/n36897a3X33t9hJdp+LoXz0/OvXH+GUEu80Nbjc6O+oamTtr34GNFkscaKLf36p7lF6t8wVcexwL8OalX+wlSJkVTkiie9N1P3v2W50QJgLrKNLiGzt08Rdof/4m3d3Sj2wlbT2cCZyVZ7hL11h25DO201SXOOnHinCWqp3GaMbE0EpHTWsM6x2CyzpgeZ52QECFNG0bLpsa7Xlh//7rS3SEUKRfHKG/qyYzo+mrP0fKBbP2LtbQ+7tXYc8ZVx/wqLOYWOGM+Gg2W9yt0jTl0oELDzdT8FmvTAmezmj01ACOPiHU5htKiqGISe/6ojBMuPCgynpOW5naPrFWZ0JsIgD7wmXcuUaT2aGhue6BSGx7TPmPO7O2N244kQG37xSbJ1uetDmlSizIOVjO0IwBCBDbkxKLOismyUTaVx54vS3gLZTNfyevGyx1xXO8baqrb1BTS8Na+MDpdrLvlKzecu+HVGnjat45eGuRz54sxp8SVZNqU8W1HfeSa9y7f0P/shwEFIlUH0SobpUaxUxbiIUreUpq3aLSLK0lUriudJR0GmjQ3f+vc7zUCgLD6brGttdXEVSiiD21nDHdKDSAAGGlIByzYkXIuqsUNAOCUFeeEIIDT1oCUddYJrEKUxLcBwLx5ixQ5Cc687PAVUDiMnC3H1ZEiyK0QoKoIbZ//zunHvoTO55cmlbYuVXpJCh31WxXzorhaPg9w3jdOXbRPwwAdlo6UHfvKOMiQwA6Kc8QkGQCYMqFt2mj5jQ/8vqo0k4MLxUjIQfZ4ADjjorevDkI/ryjcXB+p7/tyNrwcO5IACwCfOe3LrSWUSFWyKQCQsSZ2Dsr3KqSClDSM8iAQMQ4GgWIihvq3m05aBwBvb7BTHEPdcOHtOedclCZx1ThxGaMeKgfR2524i16gd9uZ0QIAL/f0an73/CTfWlioHMXJSOVToe+P/dhPT+2v26iFhBwLjVirNoNIASpwQMxM7xwtPzr4phQHxGgQ0m8ulbYGOxG+sHlcZ1yvlsPWjxwwdXuCuKM1gPcYd8gFXQverWzet2RqjlhTGidJQ0vLkw3NzX3WAGRJjCXHJMrzAo+Inr+LJQkOUAak/dwCIh6xlcpwxHUIY7Nl7P8f157+mZfQ+6ruPvXY4rNO8U+SKN4Dyi98+303jfUcBmGMsswpOzPIDsJEARRGTGKO+GtlLoGQD6KcS1zjjODAyQBwWveBaxrbm9YaINJOjnlp7a8QwO0pNMpph58/yQ+yJzZOSNqTTSstV21v4qy1LjUdE8c/0dTcMggNpOKMYioYOK2siLHOe945wj5OQcS5d5NwLanFOSsYJKGdNux7woUHRb4OfgkrCs7tRZ7sK1atdkzkMREUV4x1AhA7IiNxNHvbS0oMrrHjgIQCa50HUe8ePeaMfCbwggwg07fHtr+VgL9rmFp5/r4s3Atkj883z8jXSAY9AwODKI1MojOZFBZgIAaogZx4BoCQfl6+AM0igDOuXcSmOgyGNWijY9StdQ+9hNrtGXuRSq2yjOGqNk3eJlqxsnaIjHNCCLQmJhE7apQxNoN5M5/vWtpa1QrDY8UZpdmzht82emwl7lipQlUjQdt22PU3E7DtqvS/7RVs7JxbqoALKZvvMomVKCoLUquqleERLVIjxRGTMBiecrqBxBKTe16vAm1mB4I1IuIiXcxZLd5mpbwyMf68PU69FJHVEbS3Vmy6h4jVVlkRCHtBmHfi55jICAkp0IumOvqu6gDyHUnG8zwCeMJoDenu7naa+NcWyL+CCS8Zz5e7BL1SAsia9EmBc46lxiynUyHXYFM7mDgr8XB9kMltImJrmGNNXgt7qh2eDqyY5+feCGOpI+EkdTFSK77nDzW2tT1EisU919DvHAYhQN0a8UmUIqFJwhQ4Jy1Q1CRAygRyiuoQ9sYX/OAFAnwi9rTnKXIUdP3roc2jB4yV7yFNXsmAl6y5L5eAlyrwV0npKfdvTm3SD+E7GPyeTLZ4gNHUbqvVQ+N6ZexAb/96FhkiNrEoR+wFU0WprBOpPy+Q3eMscMZES5wxTEKSaW4xjbuNE3b4l1fy6u/FE1ZKoQARMENA3CKGxrL2ZrGyRkRSceSIhAGBtWbsX0qPAYF8BQTaZ3aOgqziCaNHR9Y+udpYeVF8/h5eVQLmzi1te/MlffbJehRVH+etZ8cSP8h8RimeJaAQqdm7NlLmNK4+zsYbgUgfEbV5gd+uFI1849Sb9wGA6pr1T8EhFiNk0zRnrGEQAq18EpbdXmjD9lCaW9Khzo0jR51K8ZBzzgi4RTTtqTM8PbVYCxYSwIkgBwDsqdxo+YQrDJIMmLNMPtvEBPC8iaPHu+/tNsToL6G0UxPwIg6dNElvU4aWLFli61FlmUBCEfe4Yt4YZgrHaB8dAnkqLlffWR0e8Uni5RA8yyxhoP290qjGgfbeBgDn3XZe7DQNkrh3G+daJTGBcpxleH4uW7jxuU05RtmuZ9jtHXt0ktJHWZK8CP4ASDuLTMsU8geZxN1FQgkFWisAkroWBgmEn28L/Gw+w4obIBIqhoJinxSN31aHhazrWtClXqT8FXhVCegKEnvqxFN9AJiLuaqEEgaH1653gtVE6ALJfZl8UyCBTCCSRu2r9QNbNr97aGioGUI9Al3ljJrNfuBb/ouDzOYOEDebyogxLmm2YgMRV9xt3Iz79yocteTVOrUtCxfc0kqKpiulTxcnFSdYAmBGdkzrkWDdb8k8CKaxADthCBnbIGwZwPMLSBRMMwsVQRIQOLSOFIGz2+pRgqXlWsZ/of5X4lUl4Owrz06z4/fIAEAFFbpnLhhrhiri5M/kKCuOQu2Ha7XO9JNPraQoyGj/mXJP/4FRHM9muKd9z3uTUnoMe1y+4syfbZ2r4+mLBIjT2JQVvGkmTUIrtpWtNCil4tK80vOO/fiKhztvu2pZ898w8a+4oXR7u63U9oHg00pTk3P2OiI3rTBmzHu8IIuKGVyoiXLs0VhynIiFIkd5EY7c0p6BUTla6y5hKcLBJ2aPjVWiUNhWV8rugWI2fNWjoq/6Rizbpj0AaJu6R6Zt1eMe2sHV+shKYRcRSwEACg2dI+JSnwi+iDR4Sm+qbtpcMCYti3iVbK7wDg2pKNKFy468LDjrW8c+rYBbFdMhtS19jti9GcZkhPC2aZP3eUznJo022rLmzt8ORbWk47br/rTH3T9+bNwDv1xZXLZomY/nxoYWLVqkbr9hae4HX7z/TdVnR/aD4GzW6iBj7M0kmJZpav4AaVUejnq+GKpgtRPaV2n+sRAUnFMQqwj2gbOXnG2ArWNVTJgEkWYHYXGUYXDwwkiXVWajX8xmXvMEoIIqAGpUQb4SIr9pdZQZijYNi9BqssgJ4JQOtRcWi07VhDXntOZWkyZmpLd3JkG+7fv+EeL5WaekN+iY+EUA0Np9hoCNTqS9vqWsHTDHkhsgJwdNnzr7N1887ZoVc+Ys8C780S3pxieXb4qGXMPwGrd7z+ram1YM1Gf9+PKHZ9/09Yf3Vxun7rtxeXmfkTWbDnax/QpA7yKmO0TkGK2Dw0F821B9w9keq0dhMBvKZeF4PhNIrG0kEDvwFXiuE3L0jMljhagLwgGIlLXGI9IMkRV/FZcrl0RQufA1T8Alv/5EDYB0jZuab2ua0NRT6cv1925wxponAUBAjiBcaOlkB4Skky2OXKqZMiaKGstbtvSB9W+yjQ1nk1aGArXu22f+5IunLTxujQ7UpRAXxdWR4Wh4cBysHA6mAWaaMn3iXvXj9j7wpxd+8OjgpieuHFm3cc26tFobist2jBnmmekgDks3JSeUV/VdmG7Y/HVbj7/KLAXWbIXxNlG8Ank6pZrb9KmUvD6b0KFQXEhF/ZcjkIXARkkHAJBEvwO2nv2Bp94MoWYip9lRlpyE5JFKDH73amP3UmzPkxz5z/dddUAd9fw4T9l8EAxuenZtZUzz05s6x0zrY1BOBORxKLlcq5RH+pYplRSZ8wRDjbY8smCgWn1f0/iJd+ebW0+qbOm7SRsE3zzt5i+ddsWxn7/2rJ9lUpHTo4HySDpSa8qP69yNlJcHe+H0SbNl5bOP3X+Gf9mB1zx0Xu8x+x4zKNSxLp9paggRjHUxdYJpEhcbtpBJlolzZSg8I4r/FOn1j3teB6laodNPuIE9fVvVSV9R+78gJiWpyUEoI4qWnHXlCYMA8PZxbfsr4t0BWxAh7cQVrEVADlIffmz9i4KpOH61wdyubt08zFN7nnD4GfVKbcAHhgYqwxUdwE3b+4ADW5vGvQWCcUIua9KIKyND5b716z/mBfaGRtU+hYQDIpxjFC8tjGm5hJVOK5v7v+fSdIyzpklp/MxztGfCcoIYmeyEPQAIs16fDrItpDjqr29Zn2touqC/X55dvuL38aQCeMr0KRS7IBhirRvTmADA6RFbszVj61N0RkkXQHNgsOwjVx3z8KJFy/zq/Zs+C+K3iiblBiv7AC5jIAecc9Vxf77hwj+0i+9OzuSLEwhSFFCLS+KpSVQZp+CVP/C1Q8bjBfdKi0qL/Pnd81/xlniHEwAAX5531QcTSqYlteqTOV2oDkcDFWR168wZBx6SyTROVuTaROAq5S3M7Nf+tO7BoyZkWm8OXePBmpSxzv1PtVa+tbGjY76XadgnGhn6sa1HeWvtOGeTwPf002AeQ46minMTBJI66xxI8rBIla8HlB88hmLmEQtZr5RNYrFJaqMyE9e1USTGtnuO32SM2QOWWoncl8656vhNJZR4/Hlv2V3r4HLL4nFsmlw1msFB8K3TvnXk+TdceHuultI5ja2tXVqrnBXXDMHYJI3Gcy1qJhX8/v0XHXTkC0KyXfNEd2hy7ldOuu6auq0+w/WkNxMUy1vKfWnQEuw+ffoBe2b93HhxpJ0YXav2x9rLRSd/6eB3fPv0xWcy6zNZOMPAlt7+3k9UasO9XRN3X5DNZsOkVutD6loTmDGeIwMtW4Q4YUE7AxOFXOzAAyI0xA5w1uZZJLSOJ7Nni9axMFMNiqtCUhZQlQ197tzrj1uzbNkyf9asWck1H/tlm/L8G0SxD2s8W45nC9Gg7wezUchMU5AjoVSr52esU2hlyFibJmNsnOaRuib4+uKTv/rWL+xI7EbZoecB8cjIxblMYYbL+JMjW+tsKbQ1pCPJ5j8tv2d1rV7tE+KUlFcJs83KmpR/2P3Aj869dt5V6Ok9DM7+HMBIW2v7/91twtSzpB5dv2bjiu5aWn9MQm+9VvoZx0jE2E4SmeZEAge33An/GUpvYOXHCPwah/4GCfwe5LzHofxVFPAaUmq1sNw1IoOnfOSa936wZ9LStQ/8cmVx1qxZyVUX3DZVPHUVlPKFhGwlng5CjTN+KfHdAnH2XAqCTvKx2am0rmDbiAjsPHFp4mtWcZLUF70gFNt9Iu/w9PTuYy47TBcLX4iS2pCXYqmvdX9v1JemOp60z4x/2a2YaQqEydkkak3T2ogOCj1Siy78wEWHDC6cs9DjfdpOAHgiCRkhdAJ4BMBmwK63wjkI9nTO7emc5LSCTxAGs4WimEQnrGFFIM7xllTMLX3D8VPdi7dehxctWqTi3+VzJ19+VBkArj3/zvOIcRgUFxw5QSUeKw4FDv3F5Kmxvg7a4HtWTPrHVCf3hbrpJIJpgjWtSWTySOIW5fsbVt5/5747a53ADidgwZwFXvv4vafm8vlvRkl9HCXmXl97a4bSwWqdhtqm7rZfc1frVCZQaGw8No3qw14YboTBwIlffHPphfaUUKLRZ7yluSU9ZvxezR++8fjeEkrc/IGpec/PtAphIlLucUCv61tXGbhtIN32ufCyZcv8uxaupfMuPyoGgGvO/8VkRdmL4SFUTjwDcWQRpCPRnn5D/les9Rh4KqdYxamp3z8clhe1cPv7tXh7wyFjXdpQHSk3ZJWXNZCbT734sHN2NG7PO7wzhFzwvgsyuWTChEJD65m1tHIq1+2qIAgeHElr62uuXxWbxwQzJh8IZm6z1ow3aSRa600WXCPj1t/85NrLFy+evyNj/3+VuFGu+fivD2aPP6VALGy1CJOk4hNRYuv12ZzPLfGDIEseh05oKDG1W6reqp+0eVOPABqOJ5GcONM2Mlwm36GFtR6URP7zlK8f9sMdDNlfDN9ZghYcvSDbLjPGFpqaT7WcnJWWa5z1c48Ydo/V0+rmVCW1aVPmuFyuyXOgac6mrUmtGvnKTxxgrHVCUbpqeKT8o49d+56N22vH1RfceZgGzgBzk5B4DBgQwaY2R0ICFusS0+lns/06G2QEOjKI1w8lG7/Jw8sebWk7cC/x2j7MUG2wrjmuVTipVhuDTN6DTX9XS6P/OOfyratrdgY7dY3YvBnz/GmTDujMFBrfqXz/3LhWmZaRINJBeL+xZmlqq+sjloFsIYy6OqY2hmFhDpxhlyahMVZsan0iCIlhCwWSVMSAHOhZcfYZVsTCiIi0TyyOwLsJME1APokwEXkE0sTEJLCGABJiwDGsU0p5PjnborLZmEhDWDbX3eDCP5Xvu7uxjmT2uLeNT6X5I5bcZBJuSkyUqfb1BVk/VxCfe109um5N78hVo23MzmCnL9ReMGeBF7R1ZtrynRP9XPawNKp+kBPZOwgyBkRL0jRebW2yzjj0ps6WM8VMbuLEGRM59JmcsE1cAAjbOAmspFlykjdp6jMJgdgxezVR4hTY39qHI7aOlFYACZMddUkMnBHtQFr7Kgy0p0kpxQRtWfUZqf96VW31dXh2zcCcpi6dtkyanOZbT4Gj6R6hMY6TsH/TepXVYYMX5shB7nVp5Zunf/OYP+7MeL2Gu6WUuDQXfjh2Qhcz7xVb83lt3SyPPcvgpJbGg9ZGI+R4E7OU/UxuMNvQVFFhKKGXMR4HnCJuUk48G5usYeeTBaCImUDCTARiCAEEkLPijGNAeU4Z7ZOfIe2zUkqU1prJapDqi0z0o2Ea/NVvV3y3ZybNt1M74tAvTNiDM/n5wm6aE5WzqfE2r1lFntaNjQ2NoTG0xqXR9bdtqf1gB9uqF/G67Be0dfbwJB2Od9PF0dVk0r00e0ysiMWKtc4YS5Wcn+k1SIZgJeV8tqZZx6x0SsLMTL4TExBrYc2OICwEBUuKiD3SOvA9HRD7vvbFOkuGPcVCrESSZ2OJr++NNvxh+YN3bpnUPsnNkBkKuyMv/vi94WUOZ7g9lKAhMcKb16yKCK5YbGwrMKhmomRjzPb0D3/76J2+0+IbsmfcRfMWNkAF7ySiD0HsPux5hTDM+iF72gVMbFQKSTc4cBnkHMApsROlM1op9h1pwwoegAIReR6TA+lIBJY8TkSgJbUcm3iZ9aKr6iMr73/6qafjuC92Mw+ayRN4r0ySCVpdVu9Fit6poNrIopg6Q71r1w8nlWqmpaOlmSkT2LQWS5Qed+YOdAxejjd818TRP+bNm8cz6kcEDW35Ds/LNfuhP7XY2DyeFLdYSyOAaxShCUxurEldh9YcApQISQQjzARJHSsncWStuT2ioWufrN+9Or4vdp2TjyBkqzzFKqWDrrzqyu5BmcxsGDNDlG5XxjWkLol7ezb2RyPDurmhs9UPvEISxwUTRSeee93xj72cEzvC671p3wsRYOu4+4zexwnTAV83WBJURdRAVKmHnq+aQeoAUjyORFrBirVWEVnULBlhUuRI1ids79Ta/H7V0JplaLwnwj2TzCHth7DsJnok9rXX3uT7zbk9SAXjlFLTxdrpovyCcjYbRclg7/p169K4zi2tHW1KaaSVZHwcVQ756I0nPP1aBuA1qwEllPiJeTNpBqA2rR6UzskbadPqLunshNeWaWJuzXrKOuVy2QCMBp+5TYMmKOUdKqC9FKkGYQSKSUTEWoZoAayDACqyJl4pgb2lRtWHyasPbkr/NIh77jGbKtNpDuYgaot4oj/Rp7Z8tj6hYQaYpwEYq6zthNJ5R9IsqU3rUW1579pne0Ot/UKxsV0UTUvrrnnT0MOHdC/ufjXdzdd/NPTvpTT3bt2xrx2TDYI3aebJ7HGXwHbA6jwpyRJQdI5zxBKIFQ9gZidknAyKMiNkMEIaG63ipcbUH+tLe3t6zKbBYvEB27VptWxcsUQ2VRZQ5+QjqKse6nBiJqOz+Wad9afAwyQ4ahMxE9kLCnCSFxIySfrAwOaNK6P+IRcWMs05v9gJ5kOieu2BD1933GdfpYvbvWXBG9oGXFe6OwzDsEMT5wSuiVKtBcYYYyMKXHmgWqvHIiZNN1Rq2XXppq4ue+XZZ5sSQDMxj+6ccwTPAdA0eVpgOsNcksMYpXmKYprIggawtGriQFgXCJJPoAbEpQ/Wy8PLejdsiHPM2Wyu2ElK7eecfe9wpTz3E9//4LPb4co/ZwL+mhLPnXsoH3rvYa77L848t2s6qBuQefPm8TzMUOvGFVVrslvWeG0NQY7HOeVNYaBDO9eqtBcScw4MHyKBkNSt4EljoqXDvf2bBwYGBlQ8ooJic2MxLMyEYEFikps/ct37/ms7Df/H2a5mJ0Pz5s3j3t4ZdOj0Ln+MGhtozbmMny+mgYxX0FMCoQlK+1njURHCvlakSaHmrO1zgieSWm19rTzY37d5aLA+siVKlJGWsCVbaMjv65F3VGzs4o/fMO82vIHvGfhHTsCLKM29W0+cw51BIbunZgqEeHXKtreW0vCdT6yOFy+e//xo6HP7CPmRlwlcjVy2NVvIFxrHZnx/YjyC31z4oxMGXk7Xy7BTtirbVtj/RuhjR37M10OTuBhwEDaGjZbz8eduPrkH/wRv1fjfxMu95I0WzFno/Y1ju3jtKPHcrSvb/7fW/n9YRl97uIt/IHYlZBe72MUudrGLXexiF7vYxS52sYtd7GIXrxv/D9sNJPJt84+JAAAAAElFTkSuQmCC", "data:image/png;base64,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", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAO0lEQVR4nO3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNcAkGAAAR9NKNUAAAAASUVORK5CYII="], "frame_max": 18, "frames": [[[0, 0, 32, 30, 100]], [[0, 0, 32, 30, 100]], [[0, 0, 32, 30, 100]], [[0, 0, 16, 50, 130]], [[0, 0, 16, 50, 130]], [[0, 0, 16, 50, 130]], [[0, 0, 0, 80, 150, 0, 0]], [[0, 0, 0, 80, 150, 0, 0]], [[0, 0, 0, 80, 150, 0, 0]], [[0, 0, -8, 90, 180, 0, 0], [1, 24, 24, 100, 255, 0, 0]], [[0, 0, -8, 90, 180, 0, 0], [1, 24, 24, 100, 255, 0, 0]], [[0, 0, -8, 90, 180, 0, 0], [1, 24, 24, 100, 255, 0, 0]], [[0, 0, -8, 100, 200, 0, 0], [1, 24, 8, 100, 255, 0, 0]], [[0, 0, -8, 100, 200, 0, 0], [1, 24, 8, 100, 255, 0, 0]], [[0, 0, -8, 100, 200, 0, 0], [1, 24, 8, 100, 255, 0, 0]], [[0, 0, -8, 100, 255, 0, 0]], [[0, 0, -8, 100, 255, 0, 0]], [[0, 0, -8, 100, 255, 0, 0]]], "se": {"1": "zone.opus"}, "pitch": {"1": 100}}
\ No newline at end of file
diff --git a/project/bgms/Ascension.opus b/project/bgms/Ascension.opus
new file mode 100644
index 0000000..4ea0523
Binary files /dev/null and b/project/bgms/Ascension.opus differ
diff --git a/project/bgms/Blind_Alley.opus b/project/bgms/Blind_Alley.opus
index 92df164..0e37b2f 100644
Binary files a/project/bgms/Blind_Alley.opus and b/project/bgms/Blind_Alley.opus differ
diff --git a/project/bgms/Blood_Stain.opus b/project/bgms/Blood_Stain.opus
new file mode 100644
index 0000000..8d34051
Binary files /dev/null and b/project/bgms/Blood_Stain.opus differ
diff --git a/project/bgms/Halbmond.opus b/project/bgms/Halbmond.opus
new file mode 100644
index 0000000..cf8ae13
Binary files /dev/null and b/project/bgms/Halbmond.opus differ
diff --git a/project/bgms/ed.opus b/project/bgms/ed.opus
new file mode 100644
index 0000000..604d512
Binary files /dev/null and b/project/bgms/ed.opus differ
diff --git a/project/fonts/simhei.ttf b/project/bgms/theme.mp3
similarity index 54%
rename from project/fonts/simhei.ttf
rename to project/bgms/theme.mp3
index 5bd4687..3d4eeb3 100644
Binary files a/project/fonts/simhei.ttf and b/project/bgms/theme.mp3 differ
diff --git a/project/bgms/theme.opus b/project/bgms/theme.opus
deleted file mode 100644
index 5a178d6..0000000
Binary files a/project/bgms/theme.opus and /dev/null differ
diff --git a/project/data.js b/project/data.js
index 5b8e9ed..b3de946 100644
--- a/project/data.js
+++ b/project/data.js
@@ -2,6 +2,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 {
 	"main": {
 		"floorIds": [
+			"chushi",
 			"Caimhome",
 			"jiuguan",
 			"KTV",
@@ -11,11 +12,9 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 			"jiaotang",
 			"shengnvhome",
 			"shinvhome",
-			"jiedao",
+			"changguan2",
 			"street01",
 			"street02",
-			"guangchang",
-			"guangchang2",
 			"xiaoxiang01",
 			"xiaoxiang02",
 			"xiaoxiang3",
@@ -28,10 +27,25 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 			"yiqu7",
 			"yiqu8",
 			"yiqu9",
-			"yiqu10"
+			"yiqu10",
+			"changguan1",
+			"yushou",
+			"zhujuejia",
+			"guangchang",
+			"guangchang2",
+			"guangchang3",
+			"guangchang4",
+			"guangchang6",
+			"guangchang5",
+			"jiaocheng01",
+			"jiaocheng02",
+			"jiaocheng03"
 		],
 		"floorPartitions": [],
 		"images": [
+			"005-Attack03.webp",
+			"012-Heal01.webp",
+			"015-Fire01.webp",
 			"HPGaugeEnemy_A.webp",
 			"HPGaugeEnemy_B.webp",
 			"LOGO.webp",
@@ -432,19 +446,23 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 			"face_440110.webp",
 			"green.webp",
 			"hero.webp",
+			"jianji.webp",
 			"l.webp",
 			"lane1.webp",
 			"light.webp",
 			"lock.webp",
 			"lr.webp",
 			"maba.webp",
+			"miwu.webp",
 			"null.webp",
 			"other_0001.webp",
 			"other_0002.webp",
 			"other_0003.webp",
 			"other_0004.webp",
 			"r.webp",
+			"sound.webp",
 			"status.webp",
+			"statusBackground.webp",
 			"suiji.webp",
 			"tati_020101.webp",
 			"tati_020101a.webp",
@@ -776,6 +794,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 			"tati_120128.webp",
 			"tati_120131.webp",
 			"tati_120132.webp",
+			"tati_310101.webp",
 			"tati_340101.webp",
 			"tati_340101a.webp",
 			"tati_340101y.webp",
@@ -886,22 +905,29 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 			"8.webp",
 			"7.webp",
 			"10.webp",
-			"C5.webp"
+			"C5.webp",
+			"c6.png",
+			"2233.png"
 		],
 		"animates": [
 			"hand",
 			"jianji",
+			"jianji2",
 			"sword",
 			"thunder",
 			"yongchang",
 			"zone"
 		],
 		"bgms": [
+			"Ascension.opus",
 			"Asphodelus_Ceui.opus",
 			"Blind_Alley.opus",
+			"Blood_Stain.opus",
 			"Crawler.opus",
+			"Halbmond.opus",
+			"ed.opus",
 			"op.opus",
-			"theme.opus"
+			"theme.mp3"
 		],
 		"sounds": [
 			"aiy010000010.opus",
@@ -926,6 +952,143 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 			"aiy020000160.opus",
 			"aiy020000170.opus",
 			"aiy020000180.opus",
+			"aiy020000190.ogg",
+			"aiy020000200.ogg",
+			"aiy020000210.ogg",
+			"aiy020000220.ogg",
+			"aiy020000230.ogg",
+			"aiy020000240.ogg",
+			"aiy020000250.ogg",
+			"aiy020000260.ogg",
+			"aiy020000270.ogg",
+			"aiy020000280.ogg",
+			"aiy020000290.ogg",
+			"aiy020000300.ogg",
+			"aiy020000310.ogg",
+			"aiy020000320.ogg",
+			"aiy020000330.ogg",
+			"aiy020000340.ogg",
+			"aiy020000350.ogg",
+			"aiy020000360.ogg",
+			"aiy020000370.ogg",
+			"aiy030000010.ogg",
+			"aiy030000020.ogg",
+			"aiy030000030.ogg",
+			"aiy030000050.ogg",
+			"aiy030000060.ogg",
+			"aiy030000070.ogg",
+			"aiy030000080.ogg",
+			"aiy030000090.ogg",
+			"aiy030000100.ogg",
+			"aiy030000110.ogg",
+			"aiy030000120.ogg",
+			"aiy030000130.ogg",
+			"aiy050000010.ogg",
+			"aiy050000020.ogg",
+			"aiy050000030.ogg",
+			"aiy050000040.ogg",
+			"aiy050000050.ogg",
+			"aiy050000060.ogg",
+			"aiy050000070.ogg",
+			"aiy050000080.ogg",
+			"aiy050000090.ogg",
+			"aiy050000100.ogg",
+			"aiy050000110.ogg",
+			"aiy050000120.ogg",
+			"aiy120000020.ogg",
+			"aiy120000030.ogg",
+			"aiy120000040.ogg",
+			"aiy120000050.ogg",
+			"aiy120000060.ogg",
+			"aiy120000070.ogg",
+			"aiy120000080.ogg",
+			"aiy120000090.ogg",
+			"aiy120000100.ogg",
+			"aiy120000110.ogg",
+			"aiy120000120.ogg",
+			"aiy120000130.ogg",
+			"aiy120000140.ogg",
+			"aiy120000150.ogg",
+			"aiy120000160.ogg",
+			"aiy120000170.ogg",
+			"aiy120000180.ogg",
+			"aiy120000190.ogg",
+			"aiy120000200.ogg",
+			"aiy120000210.ogg",
+			"aiy120000220.ogg",
+			"aiy120000230.ogg",
+			"aiy120000240.ogg",
+			"aiy120000250.ogg",
+			"aiy120000260.ogg",
+			"aiy120000270.ogg",
+			"aiy120000280.ogg",
+			"aiy120000290.ogg",
+			"aiy120000300.ogg",
+			"aiy120000310.ogg",
+			"aiy120000320.ogg",
+			"aiy120000330.ogg",
+			"aiy120000340.ogg",
+			"aiy120000350.ogg",
+			"aiy120000360.ogg",
+			"aiy120000370.ogg",
+			"aiy120000380.ogg",
+			"aiy120000390.ogg",
+			"aiy120000400.ogg",
+			"aiy120000410.ogg",
+			"aiy120000420.ogg",
+			"aiy120000430.ogg",
+			"aiy120000440.ogg",
+			"aiy120000450.ogg",
+			"aiy120000460.ogg",
+			"aiy120000470.ogg",
+			"aiy120000480.ogg",
+			"aiy120000490.ogg",
+			"aiy120000500.ogg",
+			"aiy120000510.ogg",
+			"aiy120000520.ogg",
+			"aiy120000530.ogg",
+			"aiy120000540.ogg",
+			"aiy120000550.ogg",
+			"aiy120000560.ogg",
+			"aiy120000570.ogg",
+			"aiy120000580.ogg",
+			"aiy120000590.ogg",
+			"aiy120000600.ogg",
+			"aiy120000610.ogg",
+			"aiy120000620.ogg",
+			"aiy120000630.ogg",
+			"aiy120000640.ogg",
+			"aiy120000650.ogg",
+			"aiy120000670.ogg",
+			"aiy120000680.ogg",
+			"aiy120000690.ogg",
+			"aiy130000010.ogg",
+			"aiy130000020.ogg",
+			"aiy150000010.ogg",
+			"aiy150000020.ogg",
+			"aiy150000030.ogg",
+			"aiy150000040.ogg",
+			"aiy150000050.ogg",
+			"aiy150000060.ogg",
+			"aiy150000070.ogg",
+			"aiy150000080.ogg",
+			"aiy150000090.ogg",
+			"aiy150000100.ogg",
+			"aiy150000110.ogg",
+			"aiy150000120.ogg",
+			"aiy150000130.ogg",
+			"aiy150000140.ogg",
+			"aiy150000150.ogg",
+			"aiy150000160.ogg",
+			"aiy150000170.ogg",
+			"aiy150000180.ogg",
+			"aiy150000190.ogg",
+			"aiy150000200.ogg",
+			"aiy150000210.ogg",
+			"aiy150000220.ogg",
+			"aiy150000230.ogg",
+			"aiy150000240.ogg",
+			"aiy150000250.ogg",
 			"aiy310000010.opus",
 			"aiy310000020.opus",
 			"aiy310000030.opus",
@@ -955,6 +1118,170 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 			"aiy310000280.opus",
 			"aiy310000290.opus",
 			"aiy310000300.opus",
+			"aiy310000310.ogg",
+			"aiy310000320.ogg",
+			"aiy310000330.ogg",
+			"aiy310000340.ogg",
+			"aiy310000350.ogg",
+			"aiy310000360.ogg",
+			"aiy310000370.ogg",
+			"aiy310000380.ogg",
+			"aiy310000390.ogg",
+			"aiy310000400.ogg",
+			"aiy310000410.ogg",
+			"aiy310000420.ogg",
+			"aiy310000430.ogg",
+			"aiy310000440.ogg",
+			"aiy310000450.ogg",
+			"aiy310000460.ogg",
+			"aiy310000470.ogg",
+			"aiy310000480.ogg",
+			"aiy310000490.ogg",
+			"aiy310000510.ogg",
+			"aiy310000520.ogg",
+			"aiy310000530.ogg",
+			"aiy310000540.ogg",
+			"aiy310000550.ogg",
+			"aiy310000560.ogg",
+			"aiy310000570.ogg",
+			"aiy310000580.ogg",
+			"aiy310000590.ogg",
+			"aiy310000600.ogg",
+			"aiy310000610.ogg",
+			"aiy310000620.ogg",
+			"aiy310000630.ogg",
+			"aiy310000640.ogg",
+			"aiy310000650.ogg",
+			"aiy310000660.ogg",
+			"aiy310000670.ogg",
+			"aiy310000680.ogg",
+			"aiy310000690.ogg",
+			"aiy310000700.ogg",
+			"aiy310000710.ogg",
+			"aiy310000720.ogg",
+			"aiy310000730.ogg",
+			"aiy310000740.ogg",
+			"aiy310000750.ogg",
+			"aiy310000760.ogg",
+			"aiy310000770.ogg",
+			"aiy310000780.ogg",
+			"aiy310000790.ogg",
+			"aiy310000800.ogg",
+			"aiy310000810.ogg",
+			"aiy310000820.ogg",
+			"aiy310000830.ogg",
+			"aiy310000840.ogg",
+			"aiy310000850.ogg",
+			"aiy310000860.ogg",
+			"aiy310000870.ogg",
+			"aiy310000880.ogg",
+			"aiy310000890.ogg",
+			"aiy310000900.ogg",
+			"aiy310000910.ogg",
+			"aiy310000920.ogg",
+			"aiy310000930.ogg",
+			"aiy310000940.ogg",
+			"aiy310000950.ogg",
+			"aiy310000960.ogg",
+			"aiy310000970.ogg",
+			"aiy310000980.ogg",
+			"aiy310000990.ogg",
+			"aiy310001000.ogg",
+			"aiy310001010.ogg",
+			"aiy310001027.ogg",
+			"aiy310001030.ogg",
+			"aiy310001040.ogg",
+			"aiy310001050.ogg",
+			"aiy310001060.ogg",
+			"aiy310001070.ogg",
+			"aiy310001080.ogg",
+			"aiy310001090.ogg",
+			"aiy310001100.ogg",
+			"aiy310001110.ogg",
+			"aiy310001120.ogg",
+			"aiy310001130.ogg",
+			"aiy310001140.ogg",
+			"aiy310001150.ogg",
+			"aiy310001160.ogg",
+			"aiy310001170.ogg",
+			"aiy310001180.ogg",
+			"aiy310001190.ogg",
+			"aiy310001200.ogg",
+			"aiy310001210.ogg",
+			"aiy310001220.ogg",
+			"aiy310001230.ogg",
+			"aiy310001240.ogg",
+			"aiy310001250.ogg",
+			"aiy310001260.ogg",
+			"aiy310001270.ogg",
+			"aiy310001280.ogg",
+			"aiy310001290.ogg",
+			"aiy310001300.ogg",
+			"aiy310001310.ogg",
+			"aiy310001320.ogg",
+			"aiy310001330.ogg",
+			"aiy310001340.ogg",
+			"aiy310001350.ogg",
+			"aiy310001360.ogg",
+			"aiy310001370.ogg",
+			"aiy310001380.ogg",
+			"aiy310001390.ogg",
+			"aiy320000010.ogg",
+			"aiy320000020.ogg",
+			"aiy320000030.ogg",
+			"aiy320000040.ogg",
+			"aiy320000050.ogg",
+			"aiy320000060.ogg",
+			"aiy320000070.ogg",
+			"aiy320000080.ogg",
+			"aiy320000090.ogg",
+			"aiy320000100.ogg",
+			"aiy320000110.ogg",
+			"aiy320000120.ogg",
+			"aiy320000135.ogg",
+			"aiy320000140.ogg",
+			"aiy340000010.ogg",
+			"aiy340000020.ogg",
+			"aiy340000030.ogg",
+			"aiy340000040.ogg",
+			"aiy340000050.ogg",
+			"aiy340000060.ogg",
+			"aiy340000070.ogg",
+			"aiy340000080.ogg",
+			"aiy340000090.ogg",
+			"aiy340000100.ogg",
+			"aiy340000110.ogg",
+			"aiy340000120.ogg",
+			"aiy340000140.ogg",
+			"aiy340000150.ogg",
+			"aiy340000160.ogg",
+			"aiy340000170.ogg",
+			"aiy340000180.ogg",
+			"aiy340000190.ogg",
+			"aiy340000200.ogg",
+			"aiy340000210.ogg",
+			"aiy340000220.ogg",
+			"aiy340000230.ogg",
+			"aiy340000240.ogg",
+			"aiy340000250.ogg",
+			"aiy340000260.ogg",
+			"aiy340000270.ogg",
+			"aiy340000280.ogg",
+			"aiy340000290.ogg",
+			"aiy340000300.ogg",
+			"aiy340000310.ogg",
+			"aiy340000320.ogg",
+			"aiy340000330.ogg",
+			"aiy340000340.ogg",
+			"aiy340000350.ogg",
+			"aiy340000360.ogg",
+			"aiy340000370.ogg",
+			"aiy340000380.ogg",
+			"aiy340000390.ogg",
+			"aiy340000400.ogg",
+			"aiy340000410.ogg",
+			"aiy340000420.ogg",
+			"aiy340000430.ogg",
 			"aiy350000010.opus",
 			"aiy350000020.opus",
 			"aiy350000030.opus",
@@ -978,6 +1305,52 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 			"aiy350000210.opus",
 			"aiy350000220.opus",
 			"aiy350000230.opus",
+			"aiy350000240.ogg",
+			"aiy350000250.ogg",
+			"aiy350000260.ogg",
+			"aiy430000010.ogg",
+			"aiy430000020.ogg",
+			"aiy430000030.ogg",
+			"aiy430000040.ogg",
+			"aiy430000050.ogg",
+			"aiy430000060.ogg",
+			"aiy430000070.ogg",
+			"aiy430000080.ogg",
+			"aiy430000090.ogg",
+			"aiy430000100.ogg",
+			"aiy430000110.ogg",
+			"aiy430000120.ogg",
+			"aiy430000130.ogg",
+			"aiy430000140.ogg",
+			"aiy430000150.ogg",
+			"aiy430000160.ogg",
+			"aiy430000170.ogg",
+			"aiy430000180.ogg",
+			"aiy430000190.ogg",
+			"aiy430000200.ogg",
+			"aiy430000210.ogg",
+			"aiy430000220.ogg",
+			"aiy430000230.ogg",
+			"aiy430000240.ogg",
+			"aiy430000250.ogg",
+			"aiy430000260.ogg",
+			"aiy430000270.ogg",
+			"aiy430000280.ogg",
+			"aiy430000290.ogg",
+			"aiy440000010.ogg",
+			"aiy440000020.ogg",
+			"aiy440000030.ogg",
+			"aiy440000040.ogg",
+			"aiy440000050.ogg",
+			"aiy440000060.ogg",
+			"aiy440000070.ogg",
+			"aiy440000080.ogg",
+			"aiy440000090.ogg",
+			"aiy440000100.ogg",
+			"aiy440000110.ogg",
+			"aiy440000120.ogg",
+			"aiy510000010.ogg",
+			"aiy510000020.ogg",
 			"aiy710000010.opus",
 			"aiy710000020.opus",
 			"aiy710000030.opus",
@@ -991,9 +1364,68 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 			"aiy710000110.opus",
 			"aiy710000120.opus",
 			"aiy710000130.opus",
+			"aiy720000010.ogg",
+			"aiy730000010.ogg",
+			"aiy740000010.ogg",
+			"aiy750000010.ogg",
+			"aiy750000020.ogg",
+			"aiy750000030.ogg",
+			"aiy750000040.ogg",
+			"aiy750000050.ogg",
+			"aiy750000060.ogg",
+			"aiy750000070.ogg",
+			"aiy750000080.ogg",
+			"aiy750000090.ogg",
+			"aiy750000100.ogg",
+			"aiy750000110.ogg",
+			"aiy750000120.ogg",
+			"aiy750000130.ogg",
+			"aiy750000140.ogg",
+			"aiy750000150.ogg",
+			"aiy750000160.ogg",
+			"aiy750000170.ogg",
+			"aiy750000180.ogg",
+			"aiy750000190.ogg",
+			"aiy750000200.ogg",
+			"aiy750000210.ogg",
+			"aiy750000220.ogg",
+			"aiy750000230.ogg",
+			"aiy750000240.ogg",
+			"aiy750000250.ogg",
+			"aiy750000260.ogg",
+			"aiy750000270.ogg",
+			"aiy750000280.ogg",
+			"aiy750000290.ogg",
+			"aiy750000300.ogg",
+			"aiy750000310.ogg",
+			"aiy750000320.ogg",
+			"aiy750000330.ogg",
+			"aiy750000340.ogg",
+			"aiy800000010.ogg",
+			"aiy800000020.ogg",
+			"aiy800000030.ogg",
+			"aiy800000040.ogg",
+			"aiy800000050.ogg",
+			"aiy800000060.ogg",
+			"aiy800000070.ogg",
+			"aiy800000080.ogg",
+			"aiy800000090.ogg",
+			"aiy800000100.ogg",
+			"aiy810000010.ogg",
+			"aiy810000020.ogg",
+			"aiy810000030.ogg",
+			"aiy810000040.ogg",
+			"aiy810000050.ogg",
+			"aiy810000060.ogg",
+			"aiy810000070.ogg",
 			"aiy820000010.opus",
 			"aiy820000020.opus",
-			"attack.opus",
+			"aiy860000010.ogg",
+			"aiy860000020.ogg",
+			"aiy860000030.ogg",
+			"aiy860000040.ogg",
+			"aiy860000050.ogg",
+			"aiy860000060.ogg",
 			"attack.opus",
 			"bomb.opus",
 			"cancel.opus",
@@ -1019,9 +1451,9 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 		],
 		"fonts": [
 			"HATTEN",
+			"Verdana",
 			"number",
-			"pala",
-			"simhei"
+			"pala"
 		],
 		"nameMap": {
 			"确定": "confirm.opus",
@@ -1057,7 +1489,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 			"饰品",
 			"饰品"
 		],
-		"startBgm": "theme.opus",
+		"startBgm": "theme.mp3",
 		"styles": {
 			"startBackground": "project/images/background.webp",
 			"startVerticalBackground": "project/images/backgroundvertical.webp",
@@ -1091,22 +1523,22 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 	},
 	"firstData": {
 		"title": "秽翼的尤斯蒂娅",
-		"name": "Eustia",
+		"name": "Eustia_text",
 		"version": "鸽子窝造塔小队",
-		"floorId": "street01",
+		"floorId": "chushi",
 		"hero": {
 			"image": "hero.webp",
 			"animate": false,
-			"name": "Caim",
+			"name": "凯伊姆",
 			"lv": 1,
 			"hpmax": 9999,
 			"hp": 1000,
 			"manamax": -1,
 			"mana": 0,
-			"atk": 100,
-			"def": 100,
-			"mdef": 0,
-			"speed": 0,
+			"atk": 26,
+			"def": 16,
+			"mdef": 100,
+			"speed": 16,
 			"money": 0,
 			"exp": 0,
 			"equipment": [],
@@ -1117,15 +1549,21 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 			},
 			"loc": {
 				"direction": "up",
-				"x": 5,
-				"y": 11
+				"x": 6,
+				"y": 6
 			},
 			"flags": {
 				"itemDetail": true,
-				"useBetweenLight": true
+				"useBetweenLight": true,
+				"__mdef_buff__": 0,
+				"popmove": true
 			},
 			"followers": [],
-			"steps": 0
+			"steps": 0,
+			"matk": 0,
+			"spell": 0,
+			"spelldef": 0,
+			"mhp": 100
 		},
 		"startCanvas": [
 			{
@@ -1441,7 +1879,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 			},
 			{
 				"type": "function",
-				"function": "function(){\ncore.control.checkBgm()\n}"
+				"function": "function(){\ncore.checkBgm()\n}"
 			},
 			{
 				"type": "if",
@@ -1481,14 +1919,30 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 		],
 		"startText": [
 			{
-				"type": "setValue",
-				"name": "item:book",
-				"value": "1"
+				"type": "setText"
 			},
 			{
-				"type": "setValue",
-				"name": "item:fly",
-				"value": "1"
+				"type": "setHeroOpacity",
+				"opacity": 0
+			},
+			{
+				"type": "setCurtain",
+				"color": [
+					0,
+					0,
+					0,
+					1
+				],
+				"time": 500,
+				"keep": true
+			},
+			{
+				"type": "function",
+				"function": "function(){\ncore.getItem('book', 1);\ncore.getItem('fly', 1);\ncore.getItem('postman', 1);\ncore.getItem('I369', 1);\n}"
+			},
+			{
+				"type": "insert",
+				"name": "强制横屏"
 			}
 		],
 		"shops": [
@@ -1657,13 +2111,13 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 		"lavaDamage": 100,
 		"poisonDamage": 10,
 		"weakValue": 20,
-		"redGem": 3,
-		"blueGem": 3,
+		"redGem": 2,
+		"blueGem": 2,
 		"greenGem": 5,
 		"redPotion": 100,
 		"bluePotion": 250,
 		"yellowPotion": 500,
-		"greenPotion": 800,
+		"greenPotion": 900,
 		"breakArmor": 0.9,
 		"counterAttack": 0.1,
 		"purify": 3,
@@ -1671,7 +2125,8 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
 		"animateSpeed": 300,
 		"moveSpeed": 100,
 		"statusCanvasRowsOnMobile": 3,
-		"floorChangeTime": 500
+		"floorChangeTime": 0,
+		"yellowGem": 2
 	},
 	"flags": {
 		"statusBarItems": [
diff --git a/project/enemys.js b/project/enemys.js
index 931f40a..5e8a014 100644
--- a/project/enemys.js
+++ b/project/enemys.js
@@ -1,84 +1,88 @@
 var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = 
 {
-	"greenSlime": {"name":"绿头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"redSlime": {"name":"红头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"value":10},
-	"blackSlime": {"name":"青头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"slimelord": {"name":"怪王","hp":100,"atk":120,"def":0,"money":10,"exp":0,"point":0,"special":[1,9]},
-	"bat": {"name":"小蝙蝠","hp":100,"atk":120,"def":0,"money":2,"exp":0,"point":0,"special":[1]},
-	"bigBat": {"name":"大蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"redBat": {"name":"红蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
-	"vampire": {"name":"冥灵魔王","hp":888,"atk":888,"def":888,"money":888,"exp":888,"point":0,"special":[6],"n":8},
-	"skeleton": {"name":"骷髅人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"skeletonCaptain": {"name":"骷髅队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"zombie": {"name":"兽人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"magic":false},
-	"zombieKnight": {"name":"兽人武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"rock": {"name":"石头人","hp":50,"atk":50,"def":0,"money":3,"exp":0,"point":0,"special":3},
-	"bluePriest": {"name":"初级法师","hp":100,"atk":120,"def":0,"money":3,"exp":0,"point":1,"special":[9]},
-	"redPriest": {"name":"高级法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"brownWizard": {"name":"初级巫师","hp":100,"atk":120,"def":0,"money":16,"exp":0,"point":0,"special":15,"value":100,"range":2},
-	"redWizard": {"name":"高级巫师","hp":1000,"atk":1200,"def":0,"money":160,"exp":0,"point":0,"special":15,"value":200,"zoneSquare":true},
-	"swordsman": {"name":"双手剑士","hp":100,"atk":120,"def":0,"money":6,"exp":3,"point":0,"special":4},
-	"soldier": {"name":"冥战士","hp":120,"atk":50,"def":8,"money":10,"exp":7,"point":0,"special":0},
-	"yellowKnight": {"name":"金骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"redKnight": {"name":"红骑士","hp":500,"atk":200,"def":50,"money":0,"exp":0,"point":0,"special":[7]},
-	"darkKnight": {"name":"黑骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"blueKnight": {"name":"蓝骑士","hp":100,"atk":120,"def":0,"money":9,"exp":0,"point":0,"special":8},
-	"goldSlime": {"name":"黄头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"poisonSkeleton": {"name":"紫骷髅","hp":50,"atk":60,"def":70,"money":80,"exp":0,"point":0,"special":13},
-	"poisonBat": {"name":"紫蝙蝠","hp":100,"atk":120,"def":0,"money":14,"exp":0,"point":0,"special":13},
-	"skeletonPriest": {"name":"骷髅法师","hp":100,"atk":100,"def":0,"money":0,"exp":0,"point":0,"special":18,"value":20},
-	"skeletonKing": {"name":"骷髅王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"evilHero": {"name":"迷失勇者","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"demonPriest": {"name":"魔神法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"goldHornSlime": {"name":"金角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"silverSlime": {"name":"银头怪","hp":100,"atk":120,"def":0,"money":15,"exp":0,"point":0,"special":14},
+	"greenSlime": {"name":"绿头怪","hp":64,"atk":32,"def":2,"money":0,"exp":1,"point":0,"special":[],"mdef":0,"spell":0,"speed":17},
+	"redSlime": {"name":"红头怪","hp":84,"atk":27,"def":6,"money":0,"exp":1,"point":0,"special":[],"value":null,"mdef":0,"spell":0,"speed":19},
+	"blackSlime": {"name":"青头怪","hp":222,"atk":46,"def":10,"money":0,"exp":0,"point":0,"special":[],"mdef":0,"spell":0,"speed":15,"damage":null},
+	"slimelord": {"name":"怪王","hp":790,"atk":48,"def":8,"money":0,"exp":0,"point":0,"special":[],"mdef":0,"spell":0,"speed":20},
+	"bat": {"name":"小蝙蝠","hp":46,"atk":49,"def":0,"money":0,"exp":1,"point":0,"special":[1],"mdef":0,"speed":29,"spell":0},
+	"bigBat": {"name":"大蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"redBat": {"name":"红蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"mdef":0,"spell":0,"speed":1},
+	"vampire": {"name":"冥灵魔王","hp":888,"atk":888,"def":888,"money":888,"exp":888,"point":0,"special":[6],"n":8,"mdef":0,"spell":0,"speed":1},
+	"skeleton": {"name":"骷髅人","hp":77,"atk":77,"def":7,"money":0,"exp":2,"point":0,"special":0,"mdef":0,"spell":0,"speed":17},
+	"skeletonCaptain": {"name":"骷髅队长","hp":226,"atk":66,"def":1,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":18},
+	"zombie": {"name":"兽人","hp":444,"atk":43,"def":9,"money":0,"exp":3,"point":0,"special":[],"mdef":0,"spell":0,"speed":27},
+	"zombieKnight": {"name":"兽人武士","hp":10000,"atk":100,"def":100,"money":0,"exp":0,"point":0,"special":[22],"speed":10,"mdef":0,"damage2":20,"spell":0},
+	"rock": {"name":"石头人","hp":50,"atk":50,"def":0,"money":3,"exp":0,"point":0,"special":3,"damage2":15,"mdef":0,"spell":0,"speed":1},
+	"bluePriest": {"name":"初级法师","hp":108,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"mdef":0,"spell":270,"speed":12},
+	"redPriest": {"name":"高级法师","hp":162,"atk":0,"def":1,"money":0,"exp":0,"point":0,"special":[1],"mdef":0,"spell":308,"speed":14},
+	"brownWizard": {"name":"初级巫师","hp":162,"atk":120,"def":1,"money":16,"exp":0,"point":0,"special":[],"value":null,"range":2,"mdef":0,"spell":66,"speed":14},
+	"redWizard": {"name":"高级巫师","hp":1000,"atk":1200,"def":0,"money":160,"exp":0,"point":0,"special":15,"value":200,"zoneSquare":true,"mdef":0,"spell":0,"speed":1},
+	"swordsman": {"name":"双手剑士","hp":100,"atk":120,"def":0,"money":6,"exp":3,"point":0,"special":4,"mdef":0,"spell":0,"speed":1},
+	"soldier": {"name":"冥战士","hp":120,"atk":50,"def":8,"money":10,"exp":7,"point":0,"special":0,"mdef":0,"spell":0,"speed":8},
+	"yellowKnight": {"name":"金骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"redKnight": {"name":"红骑士","hp":500,"atk":200,"def":50,"money":0,"exp":0,"point":0,"special":[7],"mdef":0,"spell":0,"speed":1},
+	"darkKnight": {"name":"黑骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"blueKnight": {"name":"蓝骑士","hp":100,"atk":120,"def":0,"money":9,"exp":0,"point":0,"special":8,"mdef":0,"spell":0,"speed":1},
+	"goldSlime": {"name":"黄头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"poisonSkeleton": {"name":"紫骷髅","hp":50,"atk":60,"def":70,"money":80,"exp":0,"point":0,"special":13,"mdef":0,"spell":0,"speed":1},
+	"poisonBat": {"name":"紫蝙蝠","hp":100,"atk":120,"def":0,"money":14,"exp":0,"point":0,"special":13,"mdef":0,"spell":0,"speed":1},
+	"skeletonPriest": {"name":"骷髅法师","hp":100,"atk":100,"def":0,"money":0,"exp":0,"point":0,"special":18,"value":20,"mdef":0,"spell":0,"speed":1},
+	"skeletonKing": {"name":"骷髅王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"evilHero": {"name":"迷失勇者","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"demonPriest": {"name":"魔神法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"goldHornSlime": {"name":"小恶魔","hp":126,"atk":48,"def":12,"money":0,"exp":2,"point":0,"special":0,"mdef":0,"spell":0,"speed":16},
+	"silverSlime": {"name":"银头怪","hp":100,"atk":120,"def":0,"money":15,"exp":0,"point":0,"special":14,"mdef":0,"spell":0,"speed":1},
 	"whiteHornSlime": {"name":"尖角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"redSwordsman": {"name":"剑王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
-	"poisonZombie": {"name":"绿兽人","hp":100,"atk":120,"def":0,"money":13,"exp":0,"point":0,"special":[12]},
-	"octopus": {"name":"血影","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"bigImage":null},
-	"princessEnemy": {"name":"假公主","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"angel": {"name":"天使","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"elemental": {"name":"元素生物","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"steelGuard": {"name":"铁守卫","hp":50,"atk":50,"def":50,"money":0,"exp":0,"point":0,"special":[18],"value":20},
-	"evilBat": {"name":"邪恶蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"silverSlimelord": {"name":"银怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"goldSlimelord": {"name":"金怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"skeletonWarrior": {"name":"骷髅士兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"whiteSlimeman": {"name":"水银战士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"slimeman": {"name":"影子战士","hp":100,"atk":0,"def":0,"money":11,"exp":0,"point":0,"special":[9],"atkValue":2,"defValue":3},
-	"yellowGateKeeper": {"name":"初级卫兵","hp":80,"atk":25,"def":5,"money":3,"exp":1,"point":0,"special":0},
-	"blueGateKeeper": {"name":"中级卫兵","hp":80,"atk":25,"def":5,"money":3,"exp":1,"point":0,"special":0},
-	"redGateKeeper": {"name":"高级卫兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"magicMaster": {"name":"黑暗大法师","hp":100,"atk":120,"def":0,"money":12,"exp":0,"point":0,"special":11,"value":0.3333333333333333,"add":true,"notBomb":true},
-	"devilWarrior": {"name":"魔神武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"fairyEnemy": {"name":"仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"dragon": {"name":"魔龙","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"bigImage":null},
-	"skeletonKnight": {"name":"骷髅武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"skeletonPresbyter": {"name":"骷髅巫师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"ironRock": {"name":"铁面人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"grayRock": {"name":"灰色石头人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"yellowPriest": {"name":"中级法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"evilPrincess": {"name":"痛苦魔女","hp":1000,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[10]},
+	"redSwordsman": {"name":"剑王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"mdef":0,"spell":0,"speed":1},
+	"poisonZombie": {"name":"绿兽人","hp":100,"atk":120,"def":0,"money":13,"exp":0,"point":0,"special":[12],"mdef":0,"spell":0,"speed":1},
+	"octopus": {"name":"血影","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"bigImage":null,"mdef":0,"spell":0,"speed":1},
+	"princessEnemy": {"name":"假公主","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"angel": {"name":"天使","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"elemental": {"name":"元素生物","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"steelGuard": {"name":"铁守卫","hp":50,"atk":50,"def":50,"money":0,"exp":0,"point":0,"special":[18],"value":20,"mdef":0,"spell":0,"speed":1},
+	"evilBat": {"name":"邪恶蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"silverSlimelord": {"name":"银怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"goldSlimelord": {"name":"金怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"skeletonWarrior": {"name":"骷髅士兵","hp":226,"atk":66,"def":1,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":18,"displayIdInBook":null},
+	"whiteSlimeman": {"name":"水银战士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"slimeman": {"name":"影子战士","hp":243,"atk":28,"def":5,"money":0,"exp":0,"point":0,"special":[],"atkValue":2,"defValue":3,"mdef":0,"spell":0,"speed":69},
+	"yellowGateKeeper": {"name":"初级卫兵","hp":80,"atk":25,"def":5,"money":3,"exp":1,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"blueGateKeeper": {"name":"中级卫兵","hp":80,"atk":25,"def":5,"money":3,"exp":1,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"redGateKeeper": {"name":"高级卫兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"magicMaster": {"name":"黑暗大法师","hp":100,"atk":120,"def":0,"money":12,"exp":0,"point":0,"special":11,"value":0.3333333333333333,"add":true,"notBomb":true,"mdef":0,"spell":0,"speed":1},
+	"devilWarrior": {"name":"魔神武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"fairyEnemy": {"name":"仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"dragon": {"name":"魔龙","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"bigImage":null,"mdef":0,"spell":0,"speed":1},
+	"skeletonKnight": {"name":"骷髅武士","hp":330,"atk":113,"def":2,"money":0,"exp":4,"point":0,"special":0,"mdef":0,"spell":0,"speed":20},
+	"skeletonPresbyter": {"name":"骷髅巫师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"ironRock": {"name":"铁面人","hp":111,"atk":97,"def":37,"money":0,"exp":0,"point":0,"special":[3],"mdef":0,"spell":0,"speed":14},
+	"grayRock": {"name":"灰色石头人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"yellowPriest": {"name":"中级法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"evilPrincess": {"name":"痛苦魔女","hp":1000,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[10],"mdef":0,"spell":0,"speed":1},
 	"blademaster": {"name":"剑圣","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"evilFairy": {"name":"黑暗仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"greenKnight": {"name":"强盾骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"bowman": {"name":"初级弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"watcherSlime": {"name":"邪眼怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"devilKnight": {"name":"恶灵骑士","hp":150,"atk":100,"def":50,"money":0,"exp":0,"point":0,"special":[1,5,7,8]},
-	"grayPriest": {"name":"混沌法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"greenGateKeeper": {"name":"卫兵队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"ghostSoldier": {"name":"冥队长","hp":200,"atk":100,"def":50,"money":0,"exp":0,"point":0,"special":8},
-	"frostBat": {"name":"寒蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"blackKing": {"name":"黑衣魔王","hp":1000,"atk":500,"def":0,"money":1000,"exp":1000,"point":0,"special":0,"notBomb":true},
-	"yellowKing": {"name":"黄衣魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"greenKing": {"name":"青衣武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"redKing": {"name":"红衣魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"blueKing": {"name":"白衣武士","hp":100,"atk":120,"def":0,"money":17,"exp":0,"point":0,"special":[16]},
-	"keiskeiFairy": {"name":"铃兰花妖","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"tulipFairy": {"name":"郁金香花妖","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"purpleBowman": {"name":"高级弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
-	"bearDown": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"},"bigImage":"bear.png"},
-	"bearLeft": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"}},
-	"bearRight": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"}},
-	"bearUp": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"}}
+	"evilFairy": {"name":"黑暗仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"greenKnight": {"name":"强盾骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"bowman": {"name":"初级弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"watcherSlime": {"name":"邪眼怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"devilKnight": {"name":"恶灵骑士","hp":150,"atk":100,"def":50,"money":0,"exp":0,"point":0,"special":[1,5,7,8],"mdef":0,"spell":0,"speed":1},
+	"grayPriest": {"name":"混沌法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"greenGateKeeper": {"name":"卫兵队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"ghostSoldier": {"name":"冥队长","hp":200,"atk":100,"def":50,"money":0,"exp":0,"point":0,"special":8,"mdef":0,"spell":0,"speed":1},
+	"frostBat": {"name":"寒蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"blackKing": {"name":"黑衣魔王","hp":1000,"atk":500,"def":0,"money":1000,"exp":1000,"point":0,"special":0,"notBomb":true,"mdef":0,"spell":0,"speed":1},
+	"yellowKing": {"name":"黄衣魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"greenKing": {"name":"青衣武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"redKing": {"name":"红衣魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"blueKing": {"name":"白衣武士","hp":100,"atk":120,"def":0,"money":17,"exp":0,"point":0,"special":[16],"mdef":0,"spell":0,"speed":1},
+	"keiskeiFairy": {"name":"铃兰花妖","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"tulipFairy": {"name":"郁金香花妖","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"purpleBowman": {"name":"高级弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+	"bearDown": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"},"bigImage":"bear.png","mdef":0,"spell":0,"speed":1},
+	"bearLeft": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"},"mdef":0,"spell":0,"speed":1},
+	"bearRight": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"},"mdef":0,"spell":0,"speed":1},
+	"bearUp": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"},"mdef":0,"spell":0,"speed":1},
+	"E421": {"name":"蓝头怪","hp":104,"atk":33,"def":8,"money":0,"exp":1,"point":0,"special":[],"value":null,"mdef":0,"spell":0,"speed":19,"displayIdInBook":null},
+	"E422": {"name":"新敌人","hp":0,"atk":0,"def":0,"mdef":0,"speed":1,"money":0,"exp":0,"point":0,"special":[]},
+	"E425": {"name":"黄骷髅","hp":226,"atk":66,"def":1,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":18,"displayIdInBook":null},
+	"E426": {"name":"小偷","hp":377,"atk":53,"def":17,"mdef":0,"speed":34,"money":50,"exp":10,"point":0,"special":[],"spell":0}
 }
\ No newline at end of file
diff --git a/project/events.js b/project/events.js
index 1e860d2..634691d 100644
--- a/project/events.js
+++ b/project/events.js
@@ -154,1051 +154,964 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 				"time": 50
 			},
 			{
-				"type": "changebg",
-				"img1": "",
-				"memory1": false,
-				"img2": "",
-				"memory2": false,
-				"time": 30,
-				"style": "引入"
-			},
-			{
-				"type": "over",
-				"text": "人生不如意事,十常居七八。",
-				"image": "",
-				"memory": false,
-				"time": 50,
-				"hidetime": 30,
-				"sound": "",
-				"textColor": [
-					255,
-					255,
-					255,
-					1
-				],
-				"boldColor": [
-					0,
-					0,
-					0,
-					1
-				],
-				"font": "bold 48px Verdana"
-			},
-			{
-				"type": "over",
-				"text": "世间的万物皆被装缀着不公的色彩。",
-				"image": "",
-				"memory": false,
-				"time": 50,
-				"hidetime": 30,
-				"sound": "",
-				"textColor": [
-					255,
-					255,
-					255,
-					1
-				],
-				"boldColor": [
-					0,
-					0,
-					0,
-					1
-				],
-				"font": "bold 48px Verdana"
-			},
-			{
-				"type": "over",
-				"text": "没错,就像——",
-				"image": "",
-				"memory": false,
-				"time": 50,
-				"hidetime": 30,
-				"sound": "",
-				"textColor": [
-					255,
-					255,
-					255,
-					1
-				],
-				"boldColor": [
-					0,
-					0,
-					0,
-					1
-				],
-				"font": "bold 48px Verdana"
-			},
-			{
-				"type": "over",
-				"text": "十几年前的那一天,",
-				"image": "",
-				"memory": false,
-				"time": 50,
-				"hidetime": 30,
-				"sound": "",
-				"textColor": [
-					255,
-					255,
-					255,
-					1
-				],
-				"boldColor": [
-					0,
-					0,
-					0,
-					1
-				],
-				"font": "bold 48px Verdana"
-			},
-			{
-				"type": "over",
-				"text": "在都市的角落,同许多的生命共同消逝一般。",
-				"image": "",
-				"memory": false,
-				"time": 50,
-				"hidetime": 30,
-				"sound": "",
-				"textColor": [
-					255,
-					255,
-					255,
-					1
-				],
-				"boldColor": [
-					0,
-					0,
-					0,
-					1
-				],
-				"font": "bold 48px Verdana"
-			},
-			{
-				"type": "over",
-				"text": "没错,就像——",
-				"image": "",
-				"memory": false,
-				"time": 50,
-				"hidetime": 30,
-				"sound": "",
-				"textColor": [
-					255,
-					255,
-					255,
-					1
-				],
-				"boldColor": [
-					0,
-					0,
-					0,
-					1
-				],
-				"font": "bold 48px Verdana"
-			},
-			{
-				"type": "over",
-				"text": "十几年前的那天起以来,",
-				"image": "",
-				"memory": false,
-				"time": 50,
-				"hidetime": 30,
-				"sound": "",
-				"textColor": [
-					255,
-					255,
-					255,
-					1
-				],
-				"boldColor": [
-					0,
-					0,
-					0,
-					1
-				],
-				"font": "bold 48px Verdana"
-			},
-			{
-				"type": "over",
-				"text": "无数的生命被那无法逃脱的污泥囚禁一样。",
-				"image": "",
-				"memory": false,
-				"time": 50,
-				"hidetime": 30,
-				"sound": "",
-				"textColor": [
-					255,
-					255,
-					255,
-					1
-				],
-				"boldColor": [
-					0,
-					0,
-					0,
-					1
-				],
-				"font": "bold 48px Verdana"
-			},
-			{
-				"type": "over",
-				"text": "人生不如意事,十常居七八。",
-				"image": "",
-				"memory": false,
-				"time": 50,
-				"hidetime": 30,
-				"sound": "",
-				"textColor": [
-					255,
-					255,
-					255,
-					1
-				],
-				"boldColor": [
-					0,
-					0,
-					0,
-					1
-				],
-				"font": "bold 48px Verdana"
-			},
-			{
-				"type": "over",
-				"text": "世间的万物皆被装缀着不公的色彩。",
-				"image": "",
-				"memory": false,
-				"time": 50,
-				"hidetime": 30,
-				"sound": "",
-				"textColor": [
-					255,
-					255,
-					255,
-					1
-				],
-				"boldColor": [
-					0,
-					0,
-					0,
-					1
-				],
-				"font": "bold 48px Verdana"
-			},
-			{
-				"type": "over",
-				"text": "没错,就像——",
-				"image": "",
-				"memory": false,
-				"time": 50,
-				"hidetime": 30,
-				"sound": "",
-				"textColor": [
-					255,
-					255,
-					255,
-					1
-				],
-				"boldColor": [
-					0,
-					0,
-					0,
-					1
-				],
-				"font": "bold 48px Verdana"
-			},
-			{
-				"type": "over",
-				"text": "如今,这一天。",
-				"image": "",
-				"memory": false,
-				"time": 50,
-				"hidetime": 30,
-				"sound": "",
-				"textColor": [
-					255,
-					255,
-					255,
-					1
-				],
-				"boldColor": [
-					0,
-					0,
-					0,
-					1
-				],
-				"font": "bold 48px Verdana"
-			},
-			{
-				"type": "changebg",
-				"img1": "",
-				"memory1": false,
-				"img2": "other_0001.webp",
-				"memory2": false,
-				"time": 30,
-				"style": "场景切换"
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0001.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "这些天,街道不曾下雨。",
-				"bodyList": [
+				"type": "confirm",
+				"text": "跳过傻逼不能点点点快进的旁白",
+				"yes": [],
+				"no": [
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
+						"type": "changebg",
+						"img1": "",
+						"memory1": false,
+						"img2": "bg_0000.png",
+						"memory2": false,
+						"time": 30,
+						"style": "引入"
+					},
+					{
+						"type": "over",
+						"text": "人生不如意事,十常居七八。",
+						"image": "",
+						"memory": false,
+						"time": 50,
+						"hidetime": 30,
+						"sound": "",
+						"textColor": [
+							255,
+							255,
+							255,
+							1
+						],
+						"boldColor": [
+							0,
+							0,
+							0,
+							1
+						],
+						"font": "bold 48px Verdana"
+					},
+					{
+						"type": "over",
+						"text": "世间的万物皆被装缀着不公的色彩。",
+						"image": "",
+						"memory": false,
+						"time": 50,
+						"hidetime": 30,
+						"sound": "",
+						"textColor": [
+							255,
+							255,
+							255,
+							1
+						],
+						"boldColor": [
+							0,
+							0,
+							0,
+							1
+						],
+						"font": "bold 48px Verdana"
+					},
+					{
+						"type": "over",
+						"text": "没错,就像——",
+						"image": "",
+						"memory": false,
+						"time": 50,
+						"hidetime": 30,
+						"sound": "",
+						"textColor": [
+							255,
+							255,
+							255,
+							1
+						],
+						"boldColor": [
+							0,
+							0,
+							0,
+							1
+						],
+						"font": "bold 48px Verdana"
+					},
+					{
+						"type": "over",
+						"text": "十几年前的那一天,",
+						"image": "",
+						"memory": false,
+						"time": 50,
+						"hidetime": 30,
+						"sound": "",
+						"textColor": [
+							255,
+							255,
+							255,
+							1
+						],
+						"boldColor": [
+							0,
+							0,
+							0,
+							1
+						],
+						"font": "bold 48px Verdana"
+					},
+					{
+						"type": "over",
+						"text": "在都市的角落,同许多的生命共同消逝一般。",
+						"image": "",
+						"memory": false,
+						"time": 50,
+						"hidetime": 30,
+						"sound": "",
+						"textColor": [
+							255,
+							255,
+							255,
+							1
+						],
+						"boldColor": [
+							0,
+							0,
+							0,
+							1
+						],
+						"font": "bold 48px Verdana"
+					},
+					{
+						"type": "over",
+						"text": "没错,就像——",
+						"image": "",
+						"memory": false,
+						"time": 50,
+						"hidetime": 30,
+						"sound": "",
+						"textColor": [
+							255,
+							255,
+							255,
+							1
+						],
+						"boldColor": [
+							0,
+							0,
+							0,
+							1
+						],
+						"font": "bold 48px Verdana"
+					},
+					{
+						"type": "over",
+						"text": "十几年前的那天起以来,",
+						"image": "",
+						"memory": false,
+						"time": 50,
+						"hidetime": 30,
+						"sound": "",
+						"textColor": [
+							255,
+							255,
+							255,
+							1
+						],
+						"boldColor": [
+							0,
+							0,
+							0,
+							1
+						],
+						"font": "bold 48px Verdana"
+					},
+					{
+						"type": "over",
+						"text": "无数的生命被那无法逃脱的污泥囚禁一样。",
+						"image": "",
+						"memory": false,
+						"time": 50,
+						"hidetime": 30,
+						"sound": "",
+						"textColor": [
+							255,
+							255,
+							255,
+							1
+						],
+						"boldColor": [
+							0,
+							0,
+							0,
+							1
+						],
+						"font": "bold 48px Verdana"
+					},
+					{
+						"type": "over",
+						"text": "人生不如意事,十常居七八。",
+						"image": "",
+						"memory": false,
+						"time": 50,
+						"hidetime": 30,
+						"sound": "",
+						"textColor": [
+							255,
+							255,
+							255,
+							1
+						],
+						"boldColor": [
+							0,
+							0,
+							0,
+							1
+						],
+						"font": "bold 48px Verdana"
+					},
+					{
+						"type": "over",
+						"text": "世间的万物皆被装缀着不公的色彩。",
+						"image": "",
+						"memory": false,
+						"time": 50,
+						"hidetime": 30,
+						"sound": "",
+						"textColor": [
+							255,
+							255,
+							255,
+							1
+						],
+						"boldColor": [
+							0,
+							0,
+							0,
+							1
+						],
+						"font": "bold 48px Verdana"
+					},
+					{
+						"type": "over",
+						"text": "没错,就像——",
+						"image": "",
+						"memory": false,
+						"time": 50,
+						"hidetime": 30,
+						"sound": "",
+						"textColor": [
+							255,
+							255,
+							255,
+							1
+						],
+						"boldColor": [
+							0,
+							0,
+							0,
+							1
+						],
+						"font": "bold 48px Verdana"
+					},
+					{
+						"type": "over",
+						"text": "如今,这一天。",
+						"image": "",
+						"memory": false,
+						"time": 50,
+						"hidetime": 30,
+						"sound": "",
+						"textColor": [
+							255,
+							255,
+							255,
+							1
+						],
+						"boldColor": [
+							0,
+							0,
+							0,
+							1
+						],
+						"font": "bold 48px Verdana"
+					},
+					{
+						"type": "changebg",
+						"img1": "bg_0000.png",
+						"memory1": false,
+						"img2": "",
+						"memory2": false,
+						"time": 30,
+						"style": "引出"
 					}
 				]
 			},
 			{
-				"type": "cgtext",
-				"bg": "other_0001.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "所以,那浸湿地面的,定是那些女孩们流落的鲜血无疑。",
-				"bodyList": [
+				"type": "confirm",
+				"text": "我他妈要全跳了",
+				"yes": [],
+				"no": [
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0001.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "我蹲在充斥着铁锈味般恶臭的小巷中,悠闲地如是想着。",
-				"bodyList": [
+						"type": "changebg",
+						"img1": "",
+						"memory1": false,
+						"img2": "other_0001.webp",
+						"memory2": false,
+						"time": 30,
+						"style": "引入"
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "changebg",
-				"img1": "other_0001.webp",
-				"memory1": false,
-				"img2": "bg_3563.webp",
-				"memory2": false,
-				"time": 30,
-				"style": "场景切换"
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3563.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "扑哧。",
-				"bodyList": [
+						"type": "playBgm",
+						"name": "Blood_Stain.opus",
+						"keep": true
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3563.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "耳旁再次响起象征着某个女孩子死去的声音。",
-				"bodyList": [
+						"type": "cgtextList",
+						"textList": "chapter000"
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3563.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "再一次——",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "0",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3563.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "再一次。",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "1",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3563.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "女子们被肢解成单纯的肉块。",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "2",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3563.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "我任由流下的血浸满全身,屏住自己的呼吸。",
-				"bodyList": [
+						"type": "changebg",
+						"img1": "other_0001.webp",
+						"memory1": false,
+						"img2": "bg_3563.webp",
+						"memory2": false,
+						"time": 30,
+						"style": "场景切换"
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3563.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "祈求自己能拥有从猎人手中逃脱的幸运。",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "3",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3563.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "扑哧。",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "4",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "changebg",
-				"img1": "bg_3563.webp",
-				"memory1": false,
-				"img2": "other_0002.webp",
-				"memory2": false,
-				"time": 30,
-				"style": "场景切换"
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0002.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "直到刚才,我们还坐在去往娼馆的马车的路上。",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "5",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0002.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "而在这之中的某些人,已经不在这个世上了。",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "6",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0002.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "不,应该把“某些”换成“几乎所有”才更为恰当吧。",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "7",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0002.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "恐怕,不久之后我也会变成小巷中血腥的装饰品。",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "8",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0002.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "我是为了得到这种死法,才辛苦苟活至今的吗?",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "9",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0002.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "来个人告诉我啊——",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "10",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0002.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "谁都好。",
-				"bodyList": [
+						"type": "changebg",
+						"img1": "bg_3563.webp",
+						"memory1": false,
+						"img2": "other_0002.webp",
+						"memory2": false,
+						"time": 30,
+						"style": "场景切换"
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0002.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "来人啊!!",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "11",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "changebg",
-				"img1": "other_0002.webp",
-				"memory1": false,
-				"img2": "other_0001.webp",
-				"memory2": false,
-				"time": 30,
-				"style": "场景切换"
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0001.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "少女",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy010000010.opus",
-				"text": "「呃······!?」",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "12",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "changebg",
-				"img1": "other_0001.webp",
-				"memory1": false,
-				"img2": "other_0003.webp",
-				"memory2": false,
-				"time": 30,
-				"style": "场景切换"
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0003.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "漆黑的物体充斥了我的整个视野",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "13",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0003.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "我很快意识到,那是只很大的脚。",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "14",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "changebg",
-				"img1": "other_0003.webp",
-				"memory1": false,
-				"img2": "",
-				"memory2": false,
-				"time": 30,
-				"style": "场景切换"
-			},
-			{
-				"type": "cgtext",
-				"bg": "",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "必须要出声求救。",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "15",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "changebg",
-				"img1": "",
-				"memory1": false,
-				"img2": "other_0003.webp",
-				"memory2": false,
-				"time": 30,
-				"style": "场景切换"
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0003.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "可是,耳中却只能听到自己的牙关不停交战的声音。",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "16",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0003.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 50,
-				"wait": 1000,
-				"sound": "",
-				"text": "我是如此的无助。",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "17",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "changebg",
-				"img1": "other_0003.webp",
-				"memory1": false,
-				"img2": "",
-				"memory2": false,
-				"time": 30,
-				"style": "场景切换"
-			},
-			{
-				"type": "cgtext",
-				"bg": "",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "逃跑也好,道歉也罢。",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "18",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "就连抬头看一眼将要杀掉我的人的面孔都做不到。",
-				"bodyList": [
+						"type": "changebg",
+						"img1": "other_0002.webp",
+						"memory1": false,
+						"img2": "other_0001.webp",
+						"memory2": false,
+						"time": 30,
+						"style": "场景切换"
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "少女",
-				"time": 30,
-				"wait": 2000,
-				"sound": "aiy010000020.opus",
-				"text": "「······被杀」",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "19",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "会被杀。",
-				"bodyList": [
+						"type": "changebg",
+						"img1": "other_0001.webp",
+						"memory1": false,
+						"img2": "other_0003.webp",
+						"memory2": false,
+						"time": 30,
+						"style": "场景切换"
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "会被杀!!",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "20",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "来自内心深处的冰冷预感,渐渐地在体内蔓延开来。",
-				"bodyList": [
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "21",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "少女",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy010000030.opus",
-				"text": "「不,不要······」",
-				"bodyList": [
+						"type": "changebg",
+						"img1": "other_0003.webp",
+						"memory1": false,
+						"img2": "bg_0000.png",
+						"memory2": false,
+						"time": 30,
+						"style": "场景切换"
+					},
 					{
-						"name": "",
-						"px": 100,
-						"filter": false
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "22",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
+					{
+						"type": "changebg",
+						"img1": "bg_0000.png",
+						"memory1": false,
+						"img2": "other_0003.webp",
+						"memory2": false,
+						"time": 30,
+						"style": "场景切换"
+					},
+					{
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "23",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
+					{
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "24",
+						"time": 50,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
+					{
+						"type": "changebg",
+						"img1": "other_0003.webp",
+						"memory1": false,
+						"img2": "bg_0000.png",
+						"memory2": false,
+						"time": 30,
+						"style": "场景切换"
+					},
+					{
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "25",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
+					{
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "26",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
+					{
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "27",
+						"time": 30,
+						"wait": 2000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
+					{
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "28",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
+					{
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "29",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
+					{
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "30",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
+					{
+						"type": "cgtext",
+						"WindowSkin": false,
+						"head": {
+							"name": "",
+							"px": -300
+						},
+						"index": "31",
+						"time": 30,
+						"wait": 1000,
+						"bodyList": [
+							{
+								"name": "",
+								"px": 100,
+								"filter": false
+							}
+						]
+					},
+					{
+						"type": "changebg",
+						"img1": "bg_0000.png",
+						"memory1": false,
+						"img2": "",
+						"memory2": false,
+						"time": 30,
+						"style": "引出"
 					}
 				]
 			},
@@ -1206,2163 +1119,6 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 				"type": "playBgm",
 				"name": "Blind_Alley.opus",
 				"keep": true
-			},
-			{
-				"type": "changebg",
-				"img1": "",
-				"memory1": false,
-				"img2": "bg_6004.webp",
-				"memory2": false,
-				"time": 30,
-				"style": "场景切换"
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_6004.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "浮游都市,《诺瓦斯·艾蒂尔》。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_6004.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "《特别受灾地区》——",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_6004.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "通称,《牢狱》",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_6004.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "是被险峻的峭壁环绕,与世隔绝的,都市的最底部。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_6004.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "年轻人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy710000010.opus",
-				"text": "「放开我!」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_6004.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "年轻人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy710000020.opus",
-				"text": "「我只是在帮那个女人而已!」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "changebg",
-				"img1": "bg_6004.webp",
-				"memory1": false,
-				"img2": "other_0004.webp",
-				"memory2": false,
-				"time": 30,
-				"style": "场景切换"
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0004.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "年轻人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy710000030.opus",
-				"text": "「你们没听到吗!?」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0004.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "年轻人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy710000040.opus",
-				"text": "「她是被受骗才会被卖到娼馆来的」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "other_0004.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "年轻人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy710000050.opus",
-				"text": "「用肮脏的手段把钱借给她父母的,就是你们这些家伙吧!?」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "changebg",
-				"img1": "other_0004.webp",
-				"memory1": false,
-				"img2": "bg_3601.webp",
-				"memory2": false,
-				"time": 30,
-				"style": "场景切换"
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "年轻人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy710000060.opus",
-				"text": "「给我说些什么啊」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "凯伊姆",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy310000010.opus",
-				"text": "「这些话等到了娼馆再说吧」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "凯伊姆",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy310000020.opus",
-				"text": "「我来抓你,只是受雇于人而已」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "changebg",
-				"img1": "bg_3601.webp",
-				"memory1": false,
-				"img2": "bg_3531.webp",
-				"memory2": false,
-				"time": 30,
-				"style": "场景切换"
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "我走进娼馆《莉莉乌姆》的接待室。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "正在桌旁整理账簿的奥兹停下手头的工作,抬起头向我看来。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000010.opus",
-				"text": "「这不是凯伊姆先生吗,辛苦了」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000020.opus",
-				"text": "「委托已经完成了吗?」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "凯伊姆",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy310000030.opus",
-				"text": "「啊啊,是这家伙没错吧」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "奥兹用只要接触到就能杀人般的眼神在男人脸上搜过。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000030.opus",
-				"text": "「没错,就是这个人」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "凯伊姆",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy310000040.opus",
-				"text": "「是么」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "年轻人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy710000070.opus",
-				"text": "「你,你们要对我做什么」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000040.opus",
-				"text": "「······」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "奥兹用一个眼神,就让男人闭上了嘴。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "然后,向我这边转过身来。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000050.opus",
-				"text": "「抱歉啊,总是麻烦你去做这些无聊的事」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000060.opus",
-				"text": "「都怪我们这边的年轻人太没用」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "凯伊姆",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy310000050.opus",
-				"text": "「客套话就免了」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000070.opus",
-				"text": "「这还真是失礼了」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000080.opus",
-				"text": "「喂,来个人」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "光头男人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy820000010.opus",
-				"text": "「是」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000090.opus",
-				"text": "「凯伊姆先生做完工作回来了」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "光头男人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy820000020.opus",
-				"text": "「是,是,那个······」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000100.opus",
-				"text": "「我是要你拿些酒来,这个蠢材!」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "喀!",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "奥兹扔出的烟灰缸砸中了手下的额头。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "鲜血四溅。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "凯伊姆",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy310000060.opus",
-				"text": "「不用这么麻烦」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "凯伊姆",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy310000070.opus",
-				"text": "「我接下来要去《菲诺列塔》」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000110.opus",
-				"text": "「喔唷」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000120.opus",
-				"text": "「既然如此,我就不留您在这里喝难饮的劣质酒了」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "奥兹斜眼看着正捂住额头呻吟的手下,轻描淡写地说道。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "凯伊姆",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy310000080.opus",
-				"text": "「用这些钱去买药」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "我将几枚铜钱仍在那个手下的身前。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000130.opus",
-				"text": "「凯伊姆先生,不用对他们这么好」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "凯伊姆",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy310000090.opus",
-				"text": "「无妨」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "凯伊姆",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy310000100.opus",
-				"text": "「话说回来,那个要落跑的女人呢?」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000140.opus",
-				"text": "「我把她交给那些年轻人了,现在应该正在体会人生的严苛吧」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000150.opus",
-				"text": "「正好,趁此机会凯伊姆先生也来享受一番如何?」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "年轻人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy710000080.opus",
-				"text": "「你,你们这些家伙,要对她做什么!?」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "咣!",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "奥兹给了他一拳。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "一击即倒。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "喀,咚,咯!",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "奥兹毫不留情地向男人的脸上踩去。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "年轻人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy710000090.opus",
-				"text": "「咕······呃咳······」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "折断的牙齿伴着血泡被吐出。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "这份白色在鲜红色的液体中格外显眼。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "年轻人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy710000100.opus",
-				"text": "「你们以为做出这种事······卫兵会坐视不理吗······」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000160.opus",
-				"text": "「啊啊,不会坐视不理的」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000170.opus",
-				"text": "「应该会拿出你的钱包,和我们商量如何瓜分吧」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "年轻人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy710000110.opus",
-				"text": "「那,那种事······」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "这在牢狱是理所当然的事。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 2000,
-				"sound": "aiy350000180.opus",
-				"text": "「怎么,头一回来牢狱么?」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "男人点了点头。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000190.opus",
-				"text": "「为了被骗的女人而来到牢狱,真是个规矩人啊」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000200.opus",
-				"text": "「······前提是,被骗的人不是你」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "年轻人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy710000120.opus",
-				"text": "「你说······我被骗了?」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "年轻人",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy710000130.opus",
-				"text": "「那,那是怎么回事!?」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000210.opus",
-				"text": "「不用急,今天晚上会好好告诉你的」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "奥兹抓起男人的脸。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "为引诱客人的怜悯之心而装纯,是娼妇的惯用手段。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "双亲被骗而借钱,结果作为抵押而将自己卖到这里,这是典型的说法。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "如果只是头脑发热而成为常客也就罢了,这次的男人热血过头,居然想出了要带女人私奔的计划。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "虽然女人半开玩笑地予以拒绝,但不知天高地厚的这家伙还是拉着她逃跑了。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "不过,想要逃脱追击本来就是不可能的任务。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "但即便如此,这种事情还是会一再的出现。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "说谎的女人和被骗的男人。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "在娼馆街,这是令人看到生厌的日常的风景。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "凯伊姆",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy310000110.opus",
-				"text": "「我要走了」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000220.opus",
-				"text": "「好的,下次再麻烦您」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "奥兹",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy350000230.opus",
-				"text": "「之后吉克先生会将谢礼交给您的」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "凯伊姆",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy310000120.opus",
-				"text": "「啊啊」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "我背向奥兹走出娼馆。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "凯伊姆",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy310000130.opus",
-				"text": "「······?」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "changebg",
-				"img1": "bg_3531.webp",
-				"memory1": false,
-				"img2": "bg_3601.webp",
-				"memory2": false,
-				"time": 30,
-				"style": "场景切换"
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "从远方传来微弱的歌声。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "是关卡广场的方向。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "对了。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "今天有觐见圣女的仪式。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "当代的圣女伊莲——",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "俗称《盲眼之圣女》,据说即使在历代的圣女中,人气也是数一数二的。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "广场上的人估计相当多吧。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "虽然我也想去看看她长什么样,不过要在人潮中挤来挤去就免了。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "还是老老实实去菲诺列塔喝烧酒吧。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "",
-				"time": 30,
-				"wait": 1000,
-				"sound": "",
-				"text": "正当我这样想着的时候,一个身影自小巷的那头走来。",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "changebg",
-				"img1": "bg_3601.webp",
-				"memory1": false,
-				"img2": "bg_3531.webp",
-				"memory2": false,
-				"time": 30,
-				"style": "场景切换"
-			},
-			{
-				"type": "cgtext",
-				"bg": "bg_3531.webp",
-				"memory": false,
-				"WindowSkin": false,
-				"head": {
-					"name": "",
-					"px": -300
-				},
-				"name": "凯伊姆",
-				"time": 30,
-				"wait": 1000,
-				"sound": "aiy310000140.opus",
-				"text": "「艾莉斯」",
-				"bodyList": [
-					{
-						"name": "",
-						"px": 100,
-						"filter": false
-					}
-				]
-			},
-			{
-				"type": "changebg",
-				"img1": "bg_3531.webp",
-				"memory1": false,
-				"img2": "",
-				"memory2": false,
-				"time": 30,
-				"style": "引出"
-			},
-			{
-				"type": "comment",
-				"text": "好多立绘,先更这点(吐槽一下)"
 			}
 		],
 		"chapter01": [
@@ -3375,20 +1131,20 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 				"time": 30,
 				"style": "引入"
 			},
+			{
+				"type": "cgtextList",
+				"textList": "chapter01"
+			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020106.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "0",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000005.opus",
-				"text": "「啊,凯伊姆」",
 				"bodyList": [
 					{
 						"name": "",
@@ -3397,20 +1153,20 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 					}
 				]
 			},
+			{
+				"type": "playBgm",
+				"name": "Halbmond.opus"
+			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020141.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "1",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000010.opus",
-				"text": "「正好,我还想要去找你呢」",
 				"bodyList": [
 					{
 						"name": "tati_020141.webp",
@@ -3421,18 +1177,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020157.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "2",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000020.opus",
-				"text": "「没想到凯伊姆会主动出现······这是命运吗?」",
 				"bodyList": [
 					{
 						"name": "tati_020157.webp",
@@ -3443,18 +1195,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "3",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000150.opus",
-				"text": "「显然不是吧」",
 				"bodyList": [
 					{
 						"name": "tati_020157.webp",
@@ -3465,18 +1213,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020107.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "4",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000030.opus",
-				"text": "「啊,是么」",
 				"bodyList": [
 					{
 						"name": "tati_020107.webp",
@@ -3487,18 +1231,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "5",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "艾莉斯挑了挑整齐的双眉,微微地哼了一声。",
 				"bodyList": [
 					{
 						"name": "tati_020107.webp",
@@ -3509,18 +1249,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "6",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "虽然是个相当引人注目的美人,但她这个将亲切儿子丢入无底深渊的性格,为自己扣了不少的分",
 				"bodyList": [
 					{
 						"name": "tati_020107.webp",
@@ -3531,18 +1267,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "7",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "给人印象最深的,就是那潭水般的双瞳。",
 				"bodyList": [
 					{
 						"name": "tati_020107.webp",
@@ -3553,18 +1285,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "8",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "在漆黑的瞳孔中,完全看不出感情的波动。",
 				"bodyList": [
 					{
 						"name": "tati_020107.webp",
@@ -3575,18 +1303,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020157.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "9",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000040.opus",
-				"text": "「喜欢我的眼睛吗?」",
 				"bodyList": [
 					{
 						"name": "tati_020157.webp",
@@ -3597,18 +1321,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020157.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "10",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000050.opus",
-				"text": "「如果想要的话就给你吧?」",
 				"bodyList": [
 					{
 						"name": "tati_020157.webp",
@@ -3619,18 +1339,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "11",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000160.opus",
-				"text": "「用不着」",
 				"bodyList": [
 					{
 						"name": "tati_020157.webp",
@@ -3641,18 +1357,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020111.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "12",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000060.opus",
-				"text": "「阿拉,可惜」",
 				"bodyList": [
 					{
 						"name": "tati_020111.webp",
@@ -3663,18 +1375,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "13",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000170.opus",
-				"text": "「那么,找我有什么事」",
 				"bodyList": [
 					{
 						"name": "tati_020111.webp",
@@ -3685,18 +1393,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020101.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "14",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000070.opus",
-				"text": "「梅尔特的钱好像被偷了」",
 				"bodyList": [
 					{
 						"name": "tati_020101.webp",
@@ -3707,18 +1411,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "15",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000180.opus",
-				"text": "「钱被偷了?都几岁了还这么没用」",
 				"bodyList": [
 					{
 						"name": "tati_020101.webp",
@@ -3729,18 +1429,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020107.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "16",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000080.opus",
-				"text": "「不要对我说啊」",
 				"bodyList": [
 					{
 						"name": "tati_020107.webp",
@@ -3751,18 +1447,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "17",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000190.opus",
-				"text": "「那家伙,该不会说要让我去抓那个小偷吧?」",
 				"bodyList": [
 					{
 						"name": "tati_020107.webp",
@@ -3773,18 +1465,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020157.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "18",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000090.opus",
-				"text": "「就是这样」",
 				"bodyList": [
 					{
 						"name": "tati_020157.webp",
@@ -3795,18 +1483,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "19",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000200.opus",
-				"text": "「笨蛋吗」",
 				"bodyList": [
 					{
 						"name": "tati_020157.webp",
@@ -3817,18 +1501,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "20",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000210.opus",
-				"text": "「如果是小钱的话,就当做是买个教训吧」",
 				"bodyList": [
 					{
 						"name": "tati_020157.webp",
@@ -3839,18 +1519,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020125.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "21",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000100.opus",
-				"text": "「说起来,被盗的是这个月的上纳金」",
 				"bodyList": [
 					{
 						"name": "tati_020125.webp",
@@ -3861,18 +1537,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "22",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000220.opus",
-				"text": "「你说什么?」",
 				"bodyList": [
 					{
 						"name": "tati_020125.webp",
@@ -3883,18 +1555,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020121.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "23",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000110.opus",
-				"text": "「用这些钱买教训,也太过奢侈了呢」",
 				"bodyList": [
 					{
 						"name": "tati_020121.webp",
@@ -3905,18 +1573,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "24",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000230.opus",
-				"text": "「知道了,我去找」",
 				"bodyList": [
 					{
 						"name": "tati_020121.webp",
@@ -3927,18 +1591,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "25",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000240.opus",
-				"text": "「小偷的特征呢」",
 				"bodyList": [
 					{
 						"name": "tati_020121.webp",
@@ -3949,18 +1609,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020105.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "26",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000120.opus",
-				"text": "「男孩子」",
 				"bodyList": [
 					{
 						"name": "tati_020105.webp",
@@ -3971,18 +1627,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020103.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "27",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000130.opus",
-				"text": "「······而且,背后有翅膀」",
 				"bodyList": [
 					{
 						"name": "tati_020103.webp",
@@ -3993,18 +1645,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020141.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "28",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000140.opus",
-				"text": "「虽然姑且是藏在身后,但是仔细观察的话是很明显的」",
 				"bodyList": [
 					{
 						"name": "tati_020141.webp",
@@ -4015,18 +1663,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "29",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000250.opus",
-				"text": "「羽化病吗」",
 				"bodyList": [
 					{
 						"name": "tati_020141.webp",
@@ -4037,18 +1681,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020105.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "30",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000150.opus",
-				"text": "「那些人可是毫不留情的,所以即使是为了那个孩子,也要赶快抓到他」",
 				"bodyList": [
 					{
 						"name": "tati_020105.webp",
@@ -4059,18 +1699,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "31",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000260.opus",
-				"text": "「注意到他逃窜的方向了吗?」",
 				"bodyList": [
 					{
 						"name": "tati_020105.webp",
@@ -4081,18 +1717,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020105.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "32",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000160.opus",
-				"text": "「广场那边」",
 				"bodyList": [
 					{
 						"name": "tati_020105.webp",
@@ -4103,18 +1735,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020107.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "33",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000170.opus",
-				"text": "「虽然刚才《不蚀金锁》的人去追了,不过多半是······」",
 				"bodyList": [
 					{
 						"name": "tati_020107.webp",
@@ -4125,18 +1753,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "34",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000280.opus",
-				"text": "「偏偏还是广场吗」",
 				"bodyList": [
 					{
 						"name": "tati_020107.webp",
@@ -4147,18 +1771,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_020141.webp",
 					"px": -300
 				},
-				"name": "艾莉斯",
+				"index": "35",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy020000180.opus",
-				"text": "「今天是觐见圣女大人的日子」",
 				"bodyList": [
 					{
 						"name": "tati_020145.webp",
@@ -4169,18 +1789,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "36",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000290.opus",
-				"text": "「我知道」",
 				"bodyList": [
 					{
 						"name": "tati_020145.webp",
@@ -4191,18 +1807,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3601.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "37",
 				"time": 30,
 				"wait": 1000,
-				"sound": "aiy310000300.opus",
-				"text": "「尽量找找看就好」",
 				"bodyList": [
 					{
 						"name": "tati_020145.webp",
@@ -4231,20 +1843,20 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 				"time": 30,
 				"style": "引入"
 			},
+			{
+				"type": "cgtextList",
+				"textList": "chapter02"
+			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3561.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "不蚀金锁成员",
+				"index": "0",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「凯伊姆先生,凯伊姆先生」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4255,18 +1867,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3561.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "不蚀金锁成员",
+				"index": "1",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「您已经和艾莉斯大夫见过面了吗?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4277,18 +1885,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3561.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "2",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「啊啊,所以才会追过来的」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4299,18 +1903,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3561.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "3",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「看到小偷了吗?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4321,18 +1921,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3561.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "不蚀金锁成员",
+				"index": "4",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「没有,他向广场那边逃了过去,今天这么拥挤,我们也只能放弃了」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4343,18 +1939,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3561.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "不蚀金锁成员",
+				"index": "5",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「不过,我也只是刚好在店里所以才追了过去,并不是受人所托」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4365,18 +1957,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3561.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "不蚀金锁成员",
+				"index": "6",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我已经准备撤退了」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4387,18 +1975,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3561.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "不蚀金锁成员",
+				"index": "7",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「凯伊姆先生还要继续追吗?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4409,18 +1993,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3561.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "8",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「啊啊」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4431,18 +2011,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3561.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "9",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "做完情报交换之后,我跟男人道别。",
 				"bodyList": [
 					{
 						"name": "",
@@ -4462,18 +2038,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "10",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「和我想的一样啊······」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4484,18 +2056,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "11",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "在牢狱中最大的广场上,聚集着看不到尽头的人群。",
 				"bodyList": [
 					{
 						"name": "",
@@ -4506,18 +2074,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "12",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "就算是来参见圣女祈祷,这人数也太多了点吧。",
 				"bodyList": [
 					{
 						"name": "",
@@ -4528,18 +2092,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "13",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "自然,我也找不到逃跑的孩子。",
 				"bodyList": [
 					{
 						"name": "",
@@ -4550,18 +2110,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "14",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "是混杂到人群中了吧。",
 				"bodyList": [
 					{
 						"name": "",
@@ -4572,18 +2128,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "15",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "如果已经从广场上脱身了的话,就更难发现了。",
 				"bodyList": [
 					{
 						"name": "",
@@ -4594,18 +2146,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "16",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "只好赌他还在这里了。",
 				"bodyList": [
 					{
 						"name": "",
@@ -4625,18 +2173,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_0000.png",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "17",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "我先移动到了一个视野良好的地方。",
 				"bodyList": [
 					{
 						"name": "",
@@ -4647,18 +2191,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_0000.png",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "18",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "从这里,一眼就可以看到人群的变化。",
 				"bodyList": [
 					{
 						"name": "",
@@ -4669,18 +2209,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_0000.png",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "19",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "广场还是沸腾起来。",
 				"bodyList": [
 					{
 						"name": "",
@@ -4704,18 +2240,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "20",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "抬头望去,原来是在天台之上出现了一个人影",
 				"bodyList": [
 					{
 						"name": "tati_440101.webp",
@@ -4726,18 +2258,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "21",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "但是,与周围的期待不同,现身的是一名中年的神官。",
 				"bodyList": [
 					{
 						"name": "tati_440101.webp",
@@ -4748,18 +2276,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "22",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "骂声四溢。",
 				"bodyList": [
 					{
 						"name": "tati_440101.webp",
@@ -4770,18 +2294,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "23",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "神官则是笑着摆正衣领",
 				"bodyList": [
 					{
 						"name": "",
@@ -4792,18 +2312,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_440101.webp",
 					"px": -300
 				},
-				"name": "神官",
+				"index": "24",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「从现在开始,举行谒见的仪式」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4814,18 +2330,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_440105.webp",
 					"px": -300
 				},
-				"name": "神官",
+				"index": "25",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「在参见那位大人之前,我希望牢狱的诸位再次思考这个《诺瓦斯·艾蒂尔》存在的意义······」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4836,18 +2348,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_440101.webp",
 					"px": -300
 				},
-				"name": "神官",
+				"index": "26",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「初代圣女伊莲大人,便是也难怪这崇高的祈祷之力,令《诺瓦斯·艾蒂尔》浮在空中,拯救了我们的祖先」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4858,18 +2366,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_440110.webp",
 					"px": -300
 				},
-				"name": "神官",
+				"index": "27",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「这之后的几百年来,传承了初代大人力量的历代圣女伊莲大人,让这里留在了空中」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4880,18 +2384,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_440101.webp",
 					"px": -300
 				},
-				"name": "神官",
+				"index": "28",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「这座都市是被圣女大人守护的人类最后的圣域,而我们则是被选召的虔诚的信徒」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4902,18 +2402,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_440102.webp",
 					"px": -300
 				},
-				"name": "神官",
+				"index": "29",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「怀着对圣女的感激祈祷吧,感谢圣女伊莲吧!并献上祈祷!」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4950,18 +2446,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "eve_030101.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_030102.webp",
 					"px": -300
 				},
-				"name": "圣女",
+				"index": "30",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「不忘感谢与祈祷,神才会拯救我们」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4972,18 +2464,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "eve_030101.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_030101.webp",
 					"px": -300
 				},
-				"name": "圣女",
+				"index": "31",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「与我一起,向审虔诚地祈祷吧」",
 				"bodyList": [
 					{
 						"name": "",
@@ -4998,18 +2486,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "eve_030101.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "32",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "广场上欢声雷动。",
 				"bodyList": [
 					{
 						"name": "",
@@ -5020,18 +2504,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "eve_030101.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "33",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "圣女没有回应喧嚣的人声,而是静静地合上双眼面向广场。",
 				"bodyList": [
 					{
 						"name": "",
@@ -5042,18 +2522,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "eve_030101.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "34",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "虽然感觉有些冷淡,但总比像个傻瓜似的笑着向这群人挥手要强。",
 				"bodyList": [
 					{
 						"name": "",
@@ -5064,18 +2540,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "eve_030101.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "35",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "她掌握着这条街道,还有在这条街上生活的人的命运。",
 				"bodyList": [
 					{
 						"name": "",
@@ -5086,18 +2558,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "eve_030101.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "36",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "比起揽得人气,她更想要为了街道的继续存在而献出全力。",
 				"bodyList": [
 					{
 						"name": "",
@@ -5108,18 +2576,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "eve_030101.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "37",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "也是为了不让《大崩落》的惨剧再度发生。",
 				"bodyList": [
 					{
 						"name": "",
@@ -5130,18 +2594,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "eve_030101.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "38",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "十几年前的那场悲剧。",
 				"bodyList": [
 					{
 						"name": "",
@@ -5152,18 +2612,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "eve_030101.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "39",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "虽然在我脑海中的记忆已经相当模糊,但哪怕只是稍有触及,不快的感觉都会在胸口蔓延开。",
 				"bodyList": [
 					{
 						"name": "",
@@ -5174,18 +2630,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "40",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「······」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5196,18 +2648,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "eve_030101.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "41",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "这时我才想起,现在不是我在这里看圣女的时候。",
 				"bodyList": [
 					{
 						"name": "",
@@ -5222,18 +2670,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "eve_030101.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "女声",
+				"index": "42",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「——っ!?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5253,18 +2697,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "围观的女人",
+				"index": "43",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「羽,羽化病人!?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5275,18 +2715,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "围观的中年人",
+				"index": "44",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「喂,谁去叫下羽狩」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5297,18 +2733,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "惊慌的观众",
+				"index": "45",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你这家伙不要靠近我,要是传染了可怎么办」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5319,18 +2751,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "粗鲁的观众",
+				"index": "46",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你这小鬼赶快滚开」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5341,18 +2769,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3021.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "47",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「接下来」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5372,18 +2796,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_030107.webp",
 					"px": -300
 				},
-				"name": "圣女",
+				"index": "48",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「发生什么事了?看上去似乎很嘈杂」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5394,18 +2814,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_130104.webp",
 					"px": -300
 				},
-				"name": "随从",
+				"index": "49",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「似乎是某个人逃跑了······具体的我也不是很清楚」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5416,18 +2832,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_440103.webp",
 					"px": -300
 				},
-				"name": "神官",
+				"index": "50",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「圣女大人,继续待在天台上可能会出事,请您先回到室内吧」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5438,18 +2850,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_030145.webp",
 					"px": -300
 				},
-				"name": "圣女",
+				"index": "51",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「不用在意我,比起那个,我更关心究竟发生了什么事」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5460,18 +2868,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_440107.webp",
 					"px": -300
 				},
-				"name": "神官",
+				"index": "52",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「对不起,我真的不知道」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5482,18 +2886,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_030145.webp",
 					"px": -300
 				},
-				"name": "圣女",
+				"index": "53",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「······是吗」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5504,18 +2904,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_320101.webp",
 					"px": -300
 				},
-				"name": "男",
+				"index": "54",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「恕我僭越,请准许我说明情况」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5526,18 +2922,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_320105.webp",
 					"px": -300
 				},
-				"name": "男",
+				"index": "55",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「在来觐见的人群中出现了《羽化病》的患者」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5548,18 +2940,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_320101.webp",
 					"px": -300
 				},
-				"name": "男",
+				"index": "56",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「围观的人群因而产生了骚动」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5570,18 +2958,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_320102.webp",
 					"px": -300
 				},
-				"name": "男",
+				"index": "57",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「现在,《防疫局》已经派遣了部队。我想不久之后,他们就会安静下来了」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5592,18 +2976,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_030124.webp",
 					"px": -300
 				},
-				"name": "圣女",
+				"index": "58",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「羽化病······」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5614,18 +2994,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_320107.webp",
 					"px": -300
 				},
-				"name": "男",
+				"index": "59",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「怎么了?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5636,18 +3012,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_030125.webp",
 					"px": -300
 				},
-				"name": "圣女",
+				"index": "60",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「没什么」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5658,18 +3030,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_030141.webp",
 					"px": -300
 				},
-				"name": "圣女",
+				"index": "61",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「辛苦了,你的名字是?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5680,18 +3048,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_320102.webp",
 					"px": -300
 				},
-				"name": "男",
+				"index": "62",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「属下是在防疫局任职的,鲁基乌斯· 迪斯·米利尤」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5702,18 +3066,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_440102.webp",
 					"px": -300
 				},
-				"name": "神官",
+				"index": "63",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「噢噢,阁下就是鲁基乌斯卿吗,我听说过你的传闻」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5724,18 +3084,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_440109.webp",
 					"px": -300
 				},
-				"name": "神官",
+				"index": "64",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「阁下是在工作上相当出色的人呢」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5746,18 +3102,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_320101.webp",
 					"px": -300
 				},
-				"name": "鲁基乌斯",
+				"index": "65",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「不敢当」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5768,18 +3120,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_320108.webp",
 					"px": -300
 				},
-				"name": "鲁基乌斯",
+				"index": "66",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「话说回来,这次是属下警备工作的失职。让圣女大人见到这不成体统的一面,请您见谅」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5790,18 +3138,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_030145.webp",
 					"px": -300
 				},
-				"name": "圣女",
+				"index": "67",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「即使是目不见物的我,也能感受到聚集于此的民众数量之多。警备工作难以展开也在情理之中」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5812,18 +3156,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_320101.webp",
 					"px": -300
 				},
-				"name": "鲁基乌斯",
+				"index": "68",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「属下不胜惶恐」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5834,18 +3174,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_320102.webp",
 					"px": -300
 				},
-				"name": "鲁基乌斯",
+				"index": "69",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「接下来属下还要回到工作岗位上,在这里就先告退了」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5856,18 +3192,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_030101.webp",
 					"px": -300
 				},
-				"name": "圣女",
+				"index": "70",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「鲁基乌斯先生」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5878,18 +3210,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_320101.webp",
 					"px": -300
 				},
-				"name": "鲁基乌斯",
+				"index": "71",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「属下在」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5900,18 +3228,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_030105.webp",
 					"px": -300
 				},
-				"name": "圣女",
+				"index": "72",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你是怎样看待羽狩的工作的呢?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5922,18 +3246,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_440106.webp",
 					"px": -300
 				},
-				"name": "神官",
+				"index": "73",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「圣,圣女大人」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5944,18 +3264,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_320101.webp",
 					"px": -300
 				},
-				"name": "鲁基乌斯",
+				"index": "74",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「防疫局的工作是国王陛下赐予的重要职务。属下非常荣幸能够为这个都市的繁荣尽一份微薄之力」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5966,18 +3282,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_440102.webp",
 					"px": -300
 				},
-				"name": "神官",
+				"index": "75",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「不,不亏是鲁基乌斯卿,相当优秀的想法」",
 				"bodyList": [
 					{
 						"name": "",
@@ -5988,18 +3300,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_030125.webp",
 					"px": -300
 				},
-				"name": "圣女",
+				"index": "76",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「是吗。辛苦你了」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6010,18 +3318,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_130124.webp",
 					"px": -300
 				},
-				"name": "随从",
+				"index": "77",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「圣女大人······」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6032,18 +3336,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_320102.webp",
 					"px": -300
 				},
-				"name": "鲁基乌斯",
+				"index": "78",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「······」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6054,18 +3354,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3026.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_320101.webp",
 					"px": -300
 				},
-				"name": "鲁基乌斯",
+				"index": "79",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「那么,属下就回岗位去了」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6082,10 +3378,6 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 				"memory2": false,
 				"time": 30,
 				"style": "引出"
-			},
-			{
-				"type": "comment",
-				"text": "下一场景是追捕羽化病少年...做个标记"
 			}
 		],
 		"chapter03": [
@@ -6098,20 +3390,20 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 				"time": 30,
 				"style": "引入"
 			},
+			{
+				"type": "cgtextList",
+				"textList": "chapter03"
+			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "0",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "从羽化病的少年纷乱的足音中,可以听得出相当的疲劳。",
 				"bodyList": [
 					{
 						"name": "",
@@ -6122,18 +3414,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "1",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "显然,他并没有想到我会捷足先登吧。",
 				"bodyList": [
 					{
 						"name": "",
@@ -6144,18 +3432,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "2",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "少年惶恐地回头看了一眼后,微微露出安心的表情,双手拄在膝盖上。",
 				"bodyList": [
 					{
 						"name": "",
@@ -6166,18 +3450,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "3",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「辛苦你了」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6188,18 +3468,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "4",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「稀!?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6210,18 +3486,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "5",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「逃到贫民区是个不错的想法」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6232,18 +3504,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "6",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你,你是,羽狩吗?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6254,18 +3522,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "7",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「不是」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6276,18 +3540,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "8",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「什,什么啊······混蛋,不要吓我啊」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6298,18 +3558,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "9",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我对令你受惊这件事致以歉意」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6320,18 +3576,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "10",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「作为回报,麻烦你把从店里偷的钱交出来吧」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6342,18 +3594,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "11",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「钱?你在说什么」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6364,18 +3612,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "12",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你要找的腰上的东西,掉在你身后了」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6386,18 +3630,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "13",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「哎?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6412,18 +3652,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "14",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「呃呀」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6434,18 +3670,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "15",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你······你这混蛋」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6456,18 +3688,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "16",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「······」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6478,18 +3706,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "17",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「把偷的钱交出来」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6500,18 +3724,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "18",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我不知道你在······咕」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6530,18 +3750,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "19",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你,你说是我偷的······有什么证据吗」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6552,18 +3768,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "20",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你还挺倔的啊」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6574,18 +3786,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "21",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「不过,给我听好了」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6596,18 +3804,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "22",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你偷的那些钱,是要上缴给《不蚀金锁》的上纳金」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6618,18 +3822,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "23",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「而且,钱的主人是从前和吉克颇有渊源的女人」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6640,18 +3840,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "24",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「吉克?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6662,18 +3858,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "25",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「他是《不蚀金锁》的主人,这么说你就明白了吧」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6684,18 +3876,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "26",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「哎?哎?怎么会······」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6706,18 +3894,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "27",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「再问你一遍,钱在哪里?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6728,18 +3912,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "28",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「是,是,是,在我的怀里」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6750,18 +3930,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "29",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你没有擅自拿掉一部分吧」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6772,18 +3948,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "30",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「是,是的」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6794,18 +3966,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "31",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「那,那个,您是《不蚀金锁》的人吗?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6816,18 +3984,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "32",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「算是吧」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6838,18 +4002,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "33",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我什么都可以做,请您一定要帮帮我」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6860,18 +4020,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "34",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「抱歉,我并没有兴趣去帮助他人」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6882,18 +4038,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "35",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我什么······什么,都会做的······」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6904,18 +4056,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "36",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我一直都是生活在下层的」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6926,18 +4074,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "37",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「可是,不知何时染上了羽化病······背后长出了翅膀······」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6948,18 +4092,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "38",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「被寄宿工作的店赶了出来,只得流落到牢狱这里」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6970,18 +4110,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "39",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「因为独自实在是饿的不行了,所以才会偷这些钱的」",
 				"bodyList": [
 					{
 						"name": "",
@@ -6992,18 +4128,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "40",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我明明没有做任何坏事······为什么······会遇到这种事······」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7014,18 +4146,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "41",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「谁知道」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7036,18 +4164,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "42",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「呜······呜呜······接下来,要对我做什么?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7058,18 +4182,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "43",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我要把你带到组织那里」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7080,18 +4200,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "44",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「怎,怎么这样」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7102,18 +4218,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "45",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「不过,那样做的前提是你不是羽化病人」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7124,18 +4236,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "46",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「组织也没有笨到把羽化病人招待到家里的程度」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7146,18 +4254,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "47",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「那么,是要放我逃走吗?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7168,18 +4272,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "48",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我要让你学到教训」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7194,18 +4294,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "49",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「如果换做是组织的制裁,至少要有断条胳膊的觉悟」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7216,18 +4312,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "50",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你的运气不错」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7238,18 +4330,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "51",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「唔······啊,是的······」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7260,18 +4348,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "52",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「滚」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7282,18 +4366,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "53",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「非常感谢」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7304,18 +4384,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "54",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「唔啊!?」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7330,18 +4406,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430103.webp",
 					"px": -300
 				},
-				"name": "男",
+				"index": "55",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「到这里就结束了,羽化病人」",
 				"bodyList": [
 					{
 						"name": "tati_430103.webp",
@@ -7352,18 +4424,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430105.webp",
 					"px": -300
 				},
-				"name": "男",
+				"index": "56",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「确认他的翅膀」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -7374,18 +4442,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "57",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "趁还没有被卷入麻烦的事情之前,赶快离开这里吧",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -7414,18 +4478,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430106.webp",
 					"px": -300
 				},
-				"name": "羽狩的队长",
+				"index": "58",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「那边的那个人」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7436,18 +4496,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "59",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「······有什么事?」",
 				"bodyList": [
 					{
 						"name": "tati_430101.webp",
@@ -7458,18 +4514,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430101.webp",
 					"px": -300
 				},
-				"name": "羽狩的队长",
+				"index": "60",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「可以稍微让我问几句话吗」",
 				"bodyList": [
 					{
 						"name": "tati_430101.webp",
@@ -7480,18 +4532,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "61",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「······」",
 				"bodyList": [
 					{
 						"name": "tati_430101.webp",
@@ -7502,18 +4550,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "62",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「啊啊,无妨」",
 				"bodyList": [
 					{
 						"name": "tati_430101.webp",
@@ -7524,18 +4568,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430102.webp",
 					"px": -300
 				},
-				"name": "羽狩的队长",
+				"index": "63",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「感谢您的合作」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -7546,18 +4586,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430102.webp",
 					"px": -300
 				},
-				"name": "",
+				"index": "64",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "队长殷勤地致以谢礼。",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -7568,18 +4604,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430102.webp",
 					"px": -300
 				},
-				"name": "",
+				"index": "65",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "而在他的眼前,少年的衣服已经被他的补下们扯破。",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -7590,18 +4622,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430102.webp",
 					"px": -300
 				},
-				"name": "",
+				"index": "66",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "在瘦骨嶙峋的裸露后背上,长有纯白的羽翼。",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -7612,18 +4640,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430102.webp",
 					"px": -300
 				},
-				"name": "红发的羽狩",
+				"index": "67",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「副队长,确认翅膀的持有了」",
 				"bodyList": [
 					{
 						"name": "",
@@ -7634,18 +4658,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430105.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "68",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「保护他」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -7656,18 +4676,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "69",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「不要······请原谅,我······」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -7678,18 +4694,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430102.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "70",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我们只是要带你去治愈院治疗羽化病,不是什么应该感到害怕的事情」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -7700,18 +4712,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "71",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「可是,可是」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -7722,18 +4730,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430102.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "72",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「没关系的」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -7744,18 +4748,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "73",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「······哥,哥哥」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -7766,18 +4766,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430105.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "74",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你是羽化病人的亲属吗?」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -7788,18 +4784,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "75",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「只是路人而已」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -7810,18 +4802,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "76",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「顺带一提,我也没有打算找你们的麻烦」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -7832,18 +4820,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430101.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "77",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「前几天,有个和你说了同样的话的人,在我们背向他的瞬间对我们发动了袭击」",
 				"bodyList": [
 					{
 						"name": "tati_430101.webp",
@@ -7854,18 +4838,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430108.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "78",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我的一个部下就此永久失去了半截胳膊」",
 				"bodyList": [
 					{
 						"name": "tati_430108.webp",
@@ -7876,18 +4856,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "79",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我表示同情」",
 				"bodyList": [
 					{
 						"name": "tati_430108.webp",
@@ -7898,18 +4874,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "80",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我马上就会消失的,这样就没问题了吧?」",
 				"bodyList": [
 					{
 						"name": "tati_430108.webp",
@@ -7920,18 +4892,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430102.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "81",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「嘛,不要这么慌张」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -7942,18 +4910,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "82",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "副队长看着羽化的少年。",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -7964,18 +4928,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430105.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "83",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你与这个人是什么关系?没有被他殴打吗?」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -7986,18 +4946,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "84",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「没,没有」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8008,18 +4964,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430102.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "85",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「如何对我们保持合作,你就可以在治愈院得到优先的治疗」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -8030,18 +4982,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "86",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「······」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -8052,18 +5000,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "87",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「那个人,是《不蚀金锁》的组织成员······」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -8074,18 +5018,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "羽化病患少年",
+				"index": "88",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「突然说让我拿出钱来,我刚一拒绝他就打我」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -8096,18 +5036,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430105.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "89",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「原来如此······」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8118,18 +5054,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430107.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "90",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「那位少年说你是《不蚀金锁》的一员,不知此事是否属实?」",
 				"bodyList": [
 					{
 						"name": "tati_430107.webp",
@@ -8140,18 +5072,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "91",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「当然不是」",
 				"bodyList": [
 					{
 						"name": "tati_430107.webp",
@@ -8162,18 +5090,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "92",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我只是从那里接受工作而已,并不是他们的成员」",
 				"bodyList": [
 					{
 						"name": "tati_430107.webp",
@@ -8184,18 +5108,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430105.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "93",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你的意思是说,少年在说谎吗?」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8206,18 +5126,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "94",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「啊啊」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8228,18 +5144,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "95",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「如果你们和组织有关系的话,只要问问我是不是那里的成员就能明白事实了吧」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8250,18 +5162,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430107.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "96",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「就算我去询问,也无法从他们那里得到事实」",
 				"bodyList": [
 					{
 						"name": "tati_430107.webp",
@@ -8272,18 +5180,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430108.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "97",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「《不蚀金锁》的那些人一向都不对我们合作,我对此深感困扰」",
 				"bodyList": [
 					{
 						"name": "tati_430108.webp",
@@ -8294,18 +5198,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "98",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「真是辛苦啊」",
 				"bodyList": [
 					{
 						"name": "tati_430108.webp",
@@ -8316,18 +5216,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430102.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "99",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「说的是啊」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -8338,18 +5234,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430105.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "100",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「其实,砍下我部下胳膊的似乎也是组织的成员呢」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8360,18 +5252,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430102.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "101",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「无需如此警戒,我只是想在看守所向你咨询一些事情而已」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -8382,18 +5270,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430105.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "102",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「如果能够知晓牢狱与组织的事情,我们也可以尽可能地对更多的羽化病人进行保护」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8404,18 +5288,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430102.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "103",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「那和整条街道的和平也是紧密相关的吧?」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -8426,18 +5306,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "104",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我知道,你们有逮捕干扰狩猎羽化病人的权力」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -8448,18 +5324,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "105",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「但是,我没有对你们做出任何干扰,为什么要对我如此纠缠不休呢」",
 				"bodyList": [
 					{
 						"name": "tati_430102.webp",
@@ -8470,18 +5342,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430105.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "106",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「那些话,我们会在看守所对你详细说明的」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8492,18 +5360,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "107",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「······」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8514,18 +5378,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "108",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "在这里起争执的话,就会被羽狩加害。",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8536,18 +5396,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "109",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "就算能从这里脱身,今后只要碰面就会产生纠纷也是摆明的事情。",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8558,18 +5414,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "110",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "就算逃跑,也没有好的结果。",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8580,18 +5432,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "111",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "正当我想要打圆场的时候,刚才的气氛一瞬间产生了转变。",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8602,18 +5450,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "112",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "发生了什么事······",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8624,18 +5468,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_050101.webp",
 					"px": -300
 				},
-				"name": "??",
+				"index": "113",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我认为,那位先生是正确的」",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8646,18 +5486,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "114",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "耳边突然响起了一个能够将这阴暗的气息一扫而空的声音",
 				"bodyList": [
 					{
 						"name": "tati_430105.webp",
@@ -8668,18 +5504,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "115",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "羽狩们一起回头。",
 				"bodyList": [
 					{
 						"name": "",
@@ -8690,18 +5522,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "116",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "而在他们视线的焦点处,",
 				"bodyList": [
 					{
 						"name": "",
@@ -8712,18 +5540,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "117",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "伫立着一位女性。",
 				"bodyList": [
 					{
 						"name": "tati_050101.webp",
@@ -8734,18 +5558,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "118",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "在端正的容颜下,代表着强烈意志的双眉十分显眼。",
 				"bodyList": [
 					{
 						"name": "tati_050101.webp",
@@ -8756,18 +5576,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "119",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "身体的柔软与紧紧包裹在其身上的御兽支付,两者显得十分的不搭配。",
 				"bodyList": [
 					{
 						"name": "tati_050101.webp",
@@ -8778,18 +5594,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "120",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "我还是第一次看到女性的羽狩。",
 				"bodyList": [
 					{
 						"name": "tati_050101.webp",
@@ -8800,18 +5612,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430105.webp",
 					"px": -300
 				},
-				"name": "羽狩的副队长",
+				"index": "121",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「队长,这是获得《不蚀金锁》情报的好机会」",
 				"bodyList": [
 					{
 						"name": "tati_050101.webp",
@@ -8827,18 +5635,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430141.webp",
 					"px": -300
 				},
-				"name": "羽狩的队长",
+				"index": "122",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「兰格副队长,就算是为了获得情报,也不能做出恫吓的发言啊」",
 				"bodyList": [
 					{
 						"name": "tati_050141.webp",
@@ -8854,18 +5658,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430106.webp",
 					"px": -300
 				},
-				"name": "兰格副队长",
+				"index": "123",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我并没有打算去恫吓他······」",
 				"bodyList": [
 					{
 						"name": "tati_050141.webp",
@@ -8881,18 +5681,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_050221.webp",
 					"px": -300
 				},
-				"name": "羽狩的队长",
+				"index": "124",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「告诉我那个被砍掉胳膊的队员的名字」",
 				"bodyList": [
 					{
 						"name": "tati_050221.webp",
@@ -8908,18 +5704,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_050223.webp",
 					"px": -300
 				},
-				"name": "羽狩的队长",
+				"index": "125",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我会去探望他的」",
 				"bodyList": [
 					{
 						"name": "tati_050223.webp",
@@ -8935,18 +5727,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430104.webp",
 					"px": -300
 				},
-				"name": "兰格副队长",
+				"index": "126",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「那个是······」",
 				"bodyList": [
 					{
 						"name": "tati_050223.webp",
@@ -8962,18 +5750,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_050101.webp",
 					"px": -300
 				},
-				"name": "羽狩的队长",
+				"index": "127",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我知道,你一直在为有所收获而努力工作」",
 				"bodyList": [
 					{
 						"name": "tati_050101.webp",
@@ -8989,18 +5773,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_050105.webp",
 					"px": -300
 				},
-				"name": "羽狩的队长",
+				"index": "128",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「但是,正因为我们的工作是为民众提供帮助」",
 				"bodyList": [
 					{
 						"name": "tati_050105.webp",
@@ -9016,18 +5796,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_050103.webp",
 					"px": -300
 				},
-				"name": "羽狩的队长",
+				"index": "129",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「所以就更不能损害人与人之间的信赖」",
 				"bodyList": [
 					{
 						"name": "tati_050103.webp",
@@ -9043,18 +5819,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_430105.webp",
 					"px": -300
 				},
-				"name": "兰格副队长",
+				"index": "130",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我会铭记在心」",
 				"bodyList": [
 					{
 						"name": "tati_050103.webp",
@@ -9070,18 +5842,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_050101.webp",
 					"px": -300
 				},
-				"name": "羽狩的队长",
+				"index": "131",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「这位先生,我的部下失礼了」",
 				"bodyList": [
 					{
 						"name": "tati_050101.webp",
@@ -9092,18 +5860,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "132",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「只要不对我再来一次就好」",
 				"bodyList": [
 					{
 						"name": "tati_050101.webp",
@@ -9114,18 +5878,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_050126.webp",
 					"px": -300
 				},
-				"name": "羽狩的队长",
+				"index": "133",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「请稍等」",
 				"bodyList": [
 					{
 						"name": "tati_050126.webp",
@@ -9136,18 +5896,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "134",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「有什么事?」",
 				"bodyList": [
 					{
 						"name": "tati_050126.webp",
@@ -9158,18 +5914,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_050101.webp",
 					"px": -300
 				},
-				"name": "羽狩的队长",
+				"index": "135",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我想确认一件事」",
 				"bodyList": [
 					{
 						"name": "tati_050101.webp",
@@ -9180,18 +5932,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_050105.webp",
 					"px": -300
 				},
-				"name": "羽狩的队长",
+				"index": "136",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「你真的不是《不蚀金锁》的成员吗?」",
 				"bodyList": [
 					{
 						"name": "tati_050105.webp",
@@ -9202,18 +5950,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "137",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「真的」",
 				"bodyList": [
 					{
 						"name": "tati_050105.webp",
@@ -9224,18 +5968,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "138",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「如果我说是的话,你有什么打算?」",
 				"bodyList": [
 					{
 						"name": "tati_050105.webp",
@@ -9246,18 +5986,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_050143.webp",
 					"px": -300
 				},
-				"name": "羽狩的队长",
+				"index": "139",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「我听过传闻,说他们是用依靠暴力而得的钱在生活」",
 				"bodyList": [
 					{
 						"name": "tati_050143.webp",
@@ -9268,18 +6004,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "140",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「······这样啊」",
 				"bodyList": [
 					{
 						"name": "tati_050143.webp",
@@ -9290,18 +6022,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3801.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "141",
 				"time": 30,
 				"wait": 1000,
-				"sound": "",
-				"text": "「如果能有收获就好了啊」",
 				"bodyList": [
 					{
 						"name": "tati_050143.webp",
@@ -9357,20 +6085,20 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 				"time": 30,
 				"style": "场景切换"
 			},
+			{
+				"type": "cgtextList",
+				"textList": "chapter04"
+			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120122.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "0",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「欢迎光临」",
 				"bodyList": [
 					{
 						"name": "",
@@ -9381,18 +6109,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120101.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "1",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「辛苦了」",
 				"bodyList": [
 					{
 						"name": "tati_120101.webp",
@@ -9403,18 +6127,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120107.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "2",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「抱歉,又拜托给你了个这么麻烦的工作」",
 				"bodyList": [
 					{
 						"name": "tati_120107.webp",
@@ -9425,18 +6145,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "3",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「没什么,比想象中完成的更容易」",
 				"bodyList": [
 					{
 						"name": "tati_120107.webp",
@@ -9447,18 +6163,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120112.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "4",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「那就好」",
 				"bodyList": [
 					{
 						"name": "tati_120112.webp",
@@ -9469,18 +6181,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120102.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "5",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「这是我的一点谢意」",
 				"bodyList": [
 					{
 						"name": "tati_120102.webp",
@@ -9491,18 +6199,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "6",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「味道有些变化啊」",
 				"bodyList": [
 					{
 						"name": "tati_120102.webp",
@@ -9513,18 +6217,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120107.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "7",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「啊,被发现了?」",
 				"bodyList": [
 					{
 						"name": "tati_120107.webp",
@@ -9535,18 +6235,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120111.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "8",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「最近,没能到手什么好的原料呢」",
 				"bodyList": [
 					{
 						"name": "tati_120111.webp",
@@ -9557,18 +6253,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "9",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「去拜托吉克如何?」",
 				"bodyList": [
 					{
 						"name": "tati_120111.webp",
@@ -9579,18 +6271,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120127.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "10",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「话是这么说,但是总不能用店里采购的这种小事去麻烦他吧······」",
 				"bodyList": [
 					{
 						"name": "tati_120127.webp",
@@ -9601,18 +6289,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "11",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「那希望你也不要来麻烦我」",
 				"bodyList": [
 					{
 						"name": "tati_120127.webp",
@@ -9623,18 +6307,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120112.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "12",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「那 是 两 码 事」",
 				"bodyList": [
 					{
 						"name": "tati_120112.webp",
@@ -9645,18 +6325,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120113.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "13",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「再说,凯伊姆是靠着工作来生活的吧」",
 				"bodyList": [
 					{
 						"name": "tati_120113.webp",
@@ -9667,18 +6343,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120113.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "14",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「而且,自己的钱被偷了这么害羞的事,向凯伊姆意外的其他人都说不出口」",
 				"bodyList": [
 					{
 						"name": "tati_120113.webp",
@@ -9689,18 +6361,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "15",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「反正,也已经传到吉克的耳朵里了」",
 				"bodyList": [
 					{
 						"name": "tati_120113.webp",
@@ -9711,18 +6379,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120112.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "16",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「这是面子问题啊,面子问题」",
 				"bodyList": [
 					{
 						"name": "tati_120112.webp",
@@ -9733,18 +6397,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "17",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「嘛,算了」",
 				"bodyList": [
 					{
 						"name": "tati_120101.webp",
@@ -9755,18 +6415,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "18",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「这样就好了吧?」",
 				"bodyList": [
 					{
 						"name": "tati_120101.webp",
@@ -9777,18 +6433,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120121.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "19",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「这是钱包呢」",
 				"bodyList": [
 					{
 						"name": "tati_120121.webp",
@@ -9799,18 +6451,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120102.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "20",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「嗯,东西没少」",
 				"bodyList": [
 					{
 						"name": "tati_120102.webp",
@@ -9821,18 +6469,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120111.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "21",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「太好啦—这个月的上纳金,我可全部都放在里面了呢」",
 				"bodyList": [
 					{
 						"name": "tati_120111.webp",
@@ -9843,18 +6487,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120113.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "22",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「如果没有找到的话,说不定就又会被送到娼馆里了呢」",
 				"bodyList": [
 					{
 						"name": "tati_120113.webp",
@@ -9865,18 +6505,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "23",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「在那边不是来钱更快吗?」",
 				"bodyList": [
 					{
 						"name": "tati_120113.webp",
@@ -9887,18 +6523,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120106.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "24",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「阿拉,你是在说我还能有魅力吗?」",
 				"bodyList": [
 					{
 						"name": "tati_120106.webp",
@@ -9909,18 +6541,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "25",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「这是客套话而已」",
 				"bodyList": [
 					{
 						"name": "tati_120106.webp",
@@ -9931,18 +6559,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120113.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "26",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「欺负人」",
 				"bodyList": [
 					{
 						"name": "tati_120113.webp",
@@ -9957,18 +6581,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120122.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "27",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「总而言之,今天帮大忙了」",
 				"bodyList": [
 					{
 						"name": "tati_120122.webp",
@@ -9979,18 +6599,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120107.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "28",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「谢礼嘛······」",
 				"bodyList": [
 					{
 						"name": "tati_120107.webp",
@@ -10001,18 +6617,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "29",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「就记在账单上吧」",
 				"bodyList": [
 					{
 						"name": "tati_120107.webp",
@@ -10023,18 +6635,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120112.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "30",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「了解—盛谢惠顾了哦?」",
 				"bodyList": [
 					{
 						"name": "tati_120112.webp",
@@ -10045,18 +6653,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "31",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "喀啷喀啷",
 				"bodyList": [
 					{
 						"name": "",
@@ -10067,18 +6671,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "32",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "门铃响起",
 				"bodyList": [
 					{
 						"name": "",
@@ -10089,18 +6689,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "33",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "喧哗瞬间安静下来。",
 				"bodyList": [
 					{
 						"name": "",
@@ -10111,18 +6707,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "34",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "进来的人是吉克。",
 				"bodyList": [
 					{
 						"name": "tati_340101.webp",
@@ -10133,18 +6725,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "35",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "是掌控着牢狱的组织之一,《不蚀金锁》的头目。",
 				"bodyList": [
 					{
 						"name": "tati_340101.webp",
@@ -10155,18 +6743,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "36",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "不仅组织的成员,就连店内一般的客人也对他以注目礼表示敬意。",
 				"bodyList": [
 					{
 						"name": "tati_340101.webp",
@@ -10177,18 +6761,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340102.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "37",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「各位继续吧」",
 				"bodyList": [
 					{
 						"name": "tati_340102.webp",
@@ -10199,18 +6779,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "38",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "仿佛停滞的时钟重新转动了一般,店内恢复了热闹的气氛。",
 				"bodyList": [
 					{
 						"name": "tati_340102.webp",
@@ -10221,18 +6797,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340101.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "39",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「抱歉,今天拜托你去做了无聊的工作」",
 				"bodyList": [
 					{
 						"name": "tati_340101.webp",
@@ -10243,18 +6815,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "40",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「不用介意」",
 				"bodyList": [
 					{
 						"name": "tati_340101.webp",
@@ -10265,18 +6833,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "41",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "吉克轻轻点了点头,在我右边坐了下来",
 				"bodyList": [
 					{
 						"name": "tati_z340101.webp",
@@ -10287,18 +6851,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "42",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「逃跑的男人怎么样了?」",
 				"bodyList": [
 					{
 						"name": "tati_z340101.webp",
@@ -10309,18 +6869,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340104.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "43",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「嗯?已经不在这个世上了」",
 				"bodyList": [
 					{
 						"name": "tati_z340104.webp",
@@ -10331,18 +6887,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340107.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "44",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「有什么想要知道的事吗?」",
 				"bodyList": [
 					{
 						"name": "tati_z340107.webp",
@@ -10353,18 +6905,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "45",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「不,没什么」",
 				"bodyList": [
 					{
 						"name": "tati_z340107.webp",
@@ -10375,18 +6923,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340108.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "46",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「那个无聊的家伙,完全没有趣味呢」",
 				"bodyList": [
 					{
 						"name": "tati_z340108.webp",
@@ -10397,18 +6941,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340114.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "47",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「真希望他也替我负责清扫的部下也考虑考虑」",
 				"bodyList": [
 					{
 						"name": "tati_z340114.webp",
@@ -10419,18 +6959,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "48",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「真是灾难啊」",
 				"bodyList": [
 					{
 						"name": "tati_z340114.webp",
@@ -10441,18 +6977,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340102.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "49",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「比起那个,我听说了哦。你去追羽化病人了啊」",
 				"bodyList": [
 					{
 						"name": "tati_z340102.webp",
@@ -10463,18 +6995,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "50",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「消息真灵通」",
 				"bodyList": [
 					{
 						"name": "tati_z340102.webp",
@@ -10485,18 +7013,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340104.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "51",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「梅尔特也注意点」",
 				"bodyList": [
 					{
 						"name": "tati_z340104.webp",
@@ -10507,18 +7031,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340107.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "52",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「你丢钱已经不是一回两回了」",
 				"bodyList": [
 					{
 						"name": "tati_z340107.webp",
@@ -10529,18 +7049,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120132.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "53",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「好的—我会注意的。」",
 				"bodyList": [
 					{
 						"name": "tati_z340104.webp",
@@ -10556,18 +7072,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120101.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "54",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「吉克还是平常的点单吧」",
 				"bodyList": [
 					{
 						"name": "tati_z340102.webp",
@@ -10583,18 +7095,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120121.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "55",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「凯伊姆要再来一杯吗?」",
 				"bodyList": [
 					{
 						"name": "tati_z340102.webp",
@@ -10610,18 +7118,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "56",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "我们用眼神点头示意后,梅尔特开始准备起酒来。",
 				"bodyList": [
 					{
 						"name": "tati_z340102.webp",
@@ -10632,18 +7136,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "",
+				"index": "57",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "悠然地吐出眼圈后,吉克取出一个纸包放在柜台上。",
 				"bodyList": [
 					{
 						"name": "tati_z340102.webp",
@@ -10654,18 +7154,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340101.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "58",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「这是抓捕逃跑男人的报酬」",
 				"bodyList": [
 					{
 						"name": "tati_z340101.webp",
@@ -10676,18 +7172,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "59",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「下次有什么事再告诉我」",
 				"bodyList": [
 					{
 						"name": "tati_z340101.webp",
@@ -10698,18 +7190,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120102.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "60",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「来,久等了」",
 				"bodyList": [
 					{
 						"name": "tati_z340101.webp",
@@ -10725,18 +7213,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "61",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「话说回来梅尔特,为什么会被那种孩子偷到钱?」",
 				"bodyList": [
 					{
 						"name": "tati_z340101.webp",
@@ -10752,18 +7236,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340102.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "62",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「让我猜猜看」",
 				"bodyList": [
 					{
 						"name": "tati_z340102.webp",
@@ -10779,18 +7259,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340110.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "63",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「是那个吧,看某个特立独行的男人入迷了,所以就有了空隙?」",
 				"bodyList": [
 					{
 						"name": "tati_z340110.webp",
@@ -10806,18 +7282,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120113.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "64",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「可惜—」",
 				"bodyList": [
 					{
 						"name": "tati_z340110.webp",
@@ -10833,18 +7305,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120101.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "65",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「事实恰恰相反,是那家伙一直在纠缠我」",
 				"bodyList": [
 					{
 						"name": "tati_z340101.webp",
@@ -10860,18 +7328,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "66",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「完全把你当成新进的女佣了么」",
 				"bodyList": [
 					{
 						"name": "tati_z340101.webp",
@@ -10887,18 +7351,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120121.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "67",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「我从前可是很有名的,不会被当成这种下人吧」",
 				"bodyList": [
 					{
 						"name": "tati_z340101.webp",
@@ -10914,18 +7374,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120132.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "68",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「······而且,我没法对对我这么钟情的人发火啊」",
 				"bodyList": [
 					{
 						"name": "tati_z340101.webp",
@@ -10941,18 +7397,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340106.webp",
 					"px": -300
 				},
-				"name": "凯伊姆&吉克",
+				"index": "69",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「你傻啊」",
 				"bodyList": [
 					{
 						"name": "tati_z340106.webp",
@@ -10968,18 +7420,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340112.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "70",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「异口同声呢,不亏是兄弟」",
 				"bodyList": [
 					{
 						"name": "tati_z340106.webp",
@@ -10995,18 +7443,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "71",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「别用这种称呼,怪恶心的」",
 				"bodyList": [
 					{
 						"name": "tati_z340106.webp",
@@ -11022,18 +7466,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340108.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "72",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「说得没错」",
 				"bodyList": [
 					{
 						"name": "tati_z340108.webp",
@@ -11049,18 +7489,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340105.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "73",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「······说起来······」",
 				"bodyList": [
 					{
 						"name": "tati_z340105.webp",
@@ -11076,18 +7512,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120107.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "74",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「怎么了?」",
 				"bodyList": [
 					{
 						"name": "tati_z340105.webp",
@@ -11103,18 +7535,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340107.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "75",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「有件事我一直很在意,我和凯伊姆,哪个是哥哥啊?」",
 				"bodyList": [
 					{
 						"name": "tati_z340107.webp",
@@ -11130,18 +7558,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "",
 					"px": -300
 				},
-				"name": "凯伊姆",
+				"index": "76",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「你也说这么无聊的话题」",
 				"bodyList": [
 					{
 						"name": "tati_z340107.webp",
@@ -11157,18 +7581,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340103.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "77",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「不,这是很重要的事情」",
 				"bodyList": [
 					{
 						"name": "tati_z340103.webp",
@@ -11184,18 +7604,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340101.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "78",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「梅尔特,事实是怎么样的?」",
 				"bodyList": [
 					{
 						"name": "tati_z340101.webp",
@@ -11211,18 +7627,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120113.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "79",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「啊~是怎么样的呢~」",
 				"bodyList": [
 					{
 						"name": "tati_z340105.webp",
@@ -11238,18 +7650,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_120112.webp",
 					"px": -300
 				},
-				"name": "梅尔特",
+				"index": "80",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「我忘记了」",
 				"bodyList": [
 					{
 						"name": "tati_z340105.webp",
@@ -11265,18 +7673,14 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 			},
 			{
 				"type": "cgtext",
-				"bg": "bg_3551.webp",
-				"memory": false,
 				"WindowSkin": false,
 				"head": {
 					"name": "face_340107.webp",
 					"px": -300
 				},
-				"name": "吉克",
+				"index": "81",
 				"time": 0,
 				"wait": 2000,
-				"sound": "",
-				"text": "「骗人」",
 				"bodyList": [
 					{
 						"name": "tati_z340107.webp",
@@ -11289,6 +7693,15 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 						"filter": false
 					}
 				]
+			},
+			{
+				"type": "changebg",
+				"img1": "bg_3551.webp",
+				"memory1": false,
+				"img2": "",
+				"memory2": false,
+				"time": 30,
+				"style": "引出"
 			}
 		],
 		"chapter05": null,
@@ -11323,6 +7736,138 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
 					}
 				]
 			}
+		],
+		"chapter06": null,
+		"chapter07": null,
+		"chapter000001": [
+			{
+				"type": "changebg",
+				"img1": "",
+				"memory1": false,
+				"img2": "",
+				"memory2": false,
+				"time": 30,
+				"style": "场景切换"
+			},
+			{
+				"type": "cgtextList",
+				"textList": "chapter001"
+			},
+			{
+				"type": "cgtext",
+				"bg": "",
+				"memory": false,
+				"WindowSkin": false,
+				"head": {
+					"name": "",
+					"px": -300
+				},
+				"index": "0",
+				"time": 30,
+				"wait": 1000,
+				"bodyList": [
+					{
+						"name": "",
+						"px": 100,
+						"filter": false
+					}
+				]
+			},
+			{
+				"type": "cgtext",
+				"bg": "",
+				"memory": false,
+				"WindowSkin": false,
+				"head": {
+					"name": "",
+					"px": -300
+				},
+				"index": "1",
+				"time": 30,
+				"wait": 1000,
+				"bodyList": [
+					{
+						"name": "",
+						"px": 100,
+						"filter": false
+					}
+				]
+			},
+			{
+				"type": "cgtext",
+				"bg": "",
+				"memory": false,
+				"WindowSkin": false,
+				"head": {
+					"name": "",
+					"px": -300
+				},
+				"index": "2",
+				"time": 30,
+				"wait": 1000,
+				"bodyList": [
+					{
+						"name": "",
+						"px": 100,
+						"filter": false
+					}
+				]
+			},
+			{
+				"type": "cgtext",
+				"bg": "",
+				"memory": false,
+				"WindowSkin": false,
+				"head": {
+					"name": "",
+					"px": -300
+				},
+				"index": "3",
+				"time": 30,
+				"wait": 1000,
+				"bodyList": [
+					{
+						"name": "",
+						"px": 100,
+						"filter": false
+					}
+				]
+			}
+		],
+		"chapter00002": [
+			{
+				"type": "changebg",
+				"img1": "",
+				"memory1": false,
+				"img2": "bg_3531.webp",
+				"memory2": false,
+				"time": 30,
+				"style": "引入"
+			},
+			{
+				"type": "cgtextList",
+				"textList": "chapter002"
+			},
+			{
+				"type": "cgtext",
+				"bg": "bg_3531.webp",
+				"memory": false,
+				"WindowSkin": false,
+				"head": {
+					"name": "",
+					"px": -300
+				},
+				"index": "0",
+				"time": 0,
+				"wait": 2000,
+				"bodyList": [
+					{
+						"name": "",
+						"px": 0,
+						"filter": false
+					}
+				]
+			}
 		]
 	},
 	"CommonEventTemplate": {
diff --git a/project/floors/Caimhome.js b/project/floors/Caimhome.js
index f93c9a3..da785fe 100644
--- a/project/floors/Caimhome.js
+++ b/project/floors/Caimhome.js
@@ -16,7 +16,7 @@ main.floors.Caimhome=
     "eachArrive": [],
     "parallelDo": "",
     "events": {
-        "3,7": [
+        "3,8": [
             {
                 "type": "setHeroOpacity",
                 "opacity": 0,
@@ -38,1213 +38,11 @@ main.floors.Caimhome=
                 "type": "waitAsync"
             },
             {
-                "type": "showBgFgMap",
-                "name": "fg2",
+                "type": "changeFloor",
+                "floorId": "zhujuejia",
                 "loc": [
-                    [
-                        0,
-                        0
-                    ],
-                    [
-                        0,
-                        1
-                    ],
-                    [
-                        0,
-                        2
-                    ],
-                    [
-                        0,
-                        3
-                    ],
-                    [
-                        0,
-                        4
-                    ],
-                    [
-                        0,
-                        5
-                    ],
-                    [
-                        0,
-                        6
-                    ],
-                    [
-                        0,
-                        7
-                    ],
-                    [
-                        0,
-                        8
-                    ],
-                    [
-                        1,
-                        0
-                    ],
-                    [
-                        1,
-                        1
-                    ],
-                    [
-                        1,
-                        2
-                    ],
-                    [
-                        1,
-                        3
-                    ],
-                    [
-                        1,
-                        4
-                    ],
-                    [
-                        1,
-                        5
-                    ],
-                    [
-                        1,
-                        6
-                    ],
-                    [
-                        1,
-                        7
-                    ],
-                    [
-                        1,
-                        8
-                    ],
-                    [
-                        2,
-                        0
-                    ],
-                    [
-                        2,
-                        1
-                    ],
-                    [
-                        2,
-                        2
-                    ],
-                    [
-                        2,
-                        3
-                    ],
-                    [
-                        2,
-                        4
-                    ],
-                    [
-                        2,
-                        5
-                    ],
-                    [
-                        2,
-                        6
-                    ],
-                    [
-                        2,
-                        7
-                    ],
-                    [
-                        2,
-                        8
-                    ],
-                    [
-                        3,
-                        0
-                    ],
-                    [
-                        3,
-                        1
-                    ],
-                    [
-                        3,
-                        2
-                    ],
-                    [
-                        3,
-                        3
-                    ],
-                    [
-                        3,
-                        4
-                    ],
-                    [
-                        3,
-                        5
-                    ],
-                    [
-                        3,
-                        6
-                    ],
-                    [
-                        3,
-                        7
-                    ],
-                    [
-                        3,
-                        8
-                    ],
-                    [
-                        4,
-                        0
-                    ],
-                    [
-                        4,
-                        1
-                    ],
-                    [
-                        4,
-                        2
-                    ],
-                    [
-                        4,
-                        3
-                    ],
-                    [
-                        4,
-                        4
-                    ],
-                    [
-                        4,
-                        5
-                    ],
-                    [
-                        4,
-                        6
-                    ],
-                    [
-                        4,
-                        7
-                    ],
-                    [
-                        4,
-                        8
-                    ],
-                    [
-                        5,
-                        0
-                    ],
-                    [
-                        5,
-                        1
-                    ],
-                    [
-                        5,
-                        2
-                    ],
-                    [
-                        5,
-                        3
-                    ],
-                    [
-                        5,
-                        4
-                    ],
-                    [
-                        5,
-                        5
-                    ],
-                    [
-                        5,
-                        6
-                    ],
-                    [
-                        5,
-                        7
-                    ],
-                    [
-                        5,
-                        8
-                    ],
-                    [
-                        6,
-                        0
-                    ],
-                    [
-                        6,
-                        1
-                    ],
-                    [
-                        6,
-                        2
-                    ],
-                    [
-                        6,
-                        3
-                    ],
-                    [
-                        6,
-                        4
-                    ],
-                    [
-                        6,
-                        5
-                    ],
-                    [
-                        6,
-                        6
-                    ],
-                    [
-                        6,
-                        7
-                    ],
-                    [
-                        6,
-                        8
-                    ],
-                    [
-                        7,
-                        0
-                    ],
-                    [
-                        7,
-                        1
-                    ],
-                    [
-                        7,
-                        2
-                    ],
-                    [
-                        7,
-                        3
-                    ],
-                    [
-                        7,
-                        4
-                    ],
-                    [
-                        7,
-                        5
-                    ],
-                    [
-                        7,
-                        6
-                    ],
-                    [
-                        7,
-                        7
-                    ],
-                    [
-                        7,
-                        8
-                    ],
-                    [
-                        8,
-                        0
-                    ],
-                    [
-                        8,
-                        1
-                    ],
-                    [
-                        8,
-                        2
-                    ],
-                    [
-                        8,
-                        3
-                    ],
-                    [
-                        8,
-                        4
-                    ],
-                    [
-                        8,
-                        5
-                    ],
-                    [
-                        8,
-                        6
-                    ],
-                    [
-                        8,
-                        7
-                    ],
-                    [
-                        8,
-                        8
-                    ],
-                    [
-                        9,
-                        0
-                    ],
-                    [
-                        9,
-                        1
-                    ],
-                    [
-                        9,
-                        2
-                    ],
-                    [
-                        9,
-                        3
-                    ],
-                    [
-                        9,
-                        4
-                    ],
-                    [
-                        9,
-                        5
-                    ],
-                    [
-                        9,
-                        6
-                    ],
-                    [
-                        9,
-                        7
-                    ],
-                    [
-                        9,
-                        8
-                    ],
-                    [
-                        10,
-                        0
-                    ],
-                    [
-                        10,
-                        1
-                    ],
-                    [
-                        10,
-                        2
-                    ],
-                    [
-                        10,
-                        3
-                    ],
-                    [
-                        10,
-                        4
-                    ],
-                    [
-                        10,
-                        5
-                    ],
-                    [
-                        10,
-                        6
-                    ],
-                    [
-                        10,
-                        7
-                    ],
-                    [
-                        10,
-                        8
-                    ],
-                    [
-                        11,
-                        0
-                    ],
-                    [
-                        11,
-                        1
-                    ],
-                    [
-                        11,
-                        2
-                    ],
-                    [
-                        11,
-                        3
-                    ],
-                    [
-                        11,
-                        4
-                    ],
-                    [
-                        11,
-                        5
-                    ],
-                    [
-                        11,
-                        6
-                    ],
-                    [
-                        11,
-                        7
-                    ],
-                    [
-                        11,
-                        8
-                    ],
-                    [
-                        12,
-                        0
-                    ],
-                    [
-                        12,
-                        1
-                    ],
-                    [
-                        12,
-                        2
-                    ],
-                    [
-                        12,
-                        3
-                    ],
-                    [
-                        12,
-                        4
-                    ],
-                    [
-                        12,
-                        5
-                    ],
-                    [
-                        12,
-                        6
-                    ],
-                    [
-                        12,
-                        7
-                    ],
-                    [
-                        12,
-                        8
-                    ],
-                    [
-                        13,
-                        0
-                    ],
-                    [
-                        13,
-                        1
-                    ],
-                    [
-                        13,
-                        2
-                    ],
-                    [
-                        13,
-                        3
-                    ],
-                    [
-                        13,
-                        4
-                    ],
-                    [
-                        13,
-                        5
-                    ],
-                    [
-                        13,
-                        6
-                    ],
-                    [
-                        13,
-                        7
-                    ],
-                    [
-                        13,
-                        8
-                    ],
-                    [
-                        7,
-                        9
-                    ],
-                    [
-                        7,
-                        10
-                    ],
-                    [
-                        7,
-                        11
-                    ],
-                    [
-                        8,
-                        9
-                    ],
-                    [
-                        8,
-                        10
-                    ],
-                    [
-                        8,
-                        11
-                    ],
-                    [
-                        9,
-                        9
-                    ],
-                    [
-                        9,
-                        10
-                    ],
-                    [
-                        9,
-                        11
-                    ],
-                    [
-                        10,
-                        9
-                    ],
-                    [
-                        10,
-                        10
-                    ],
-                    [
-                        10,
-                        11
-                    ],
-                    [
-                        11,
-                        9
-                    ],
-                    [
-                        11,
-                        10
-                    ],
-                    [
-                        11,
-                        11
-                    ]
-                ]
-            },
-            {
-                "type": "setBlock",
-                "number": "starPortal",
-                "loc": [
-                    [
-                        3,
-                        10
-                    ]
-                ]
-            },
-            {
-                "type": "moveHero",
-                "steps": [
-                    "down:4"
-                ]
-            },
-            {
-                "type": "setCurtain",
-                "color": [
-                    0,
-                    0,
-                    0,
-                    0
-                ],
-                "time": 500,
-                "keep": true
-            },
-            {
-                "type": "setHeroOpacity",
-                "opacity": 1,
-                "time": 500
-            }
-        ],
-        "3,10": [
-            {
-                "type": "setHeroOpacity",
-                "opacity": 0,
-                "time": 500
-            },
-            {
-                "type": "setCurtain",
-                "color": [
-                    0,
-                    0,
-                    0,
-                    1
-                ],
-                "time": 500,
-                "keep": true,
-                "async": true
-            },
-            {
-                "type": "waitAsync"
-            },
-            {
-                "type": "hideBgFgMap",
-                "name": "fg2",
-                "loc": [
-                    [
-                        0,
-                        0
-                    ],
-                    [
-                        0,
-                        1
-                    ],
-                    [
-                        0,
-                        2
-                    ],
-                    [
-                        0,
-                        3
-                    ],
-                    [
-                        0,
-                        4
-                    ],
-                    [
-                        0,
-                        5
-                    ],
-                    [
-                        0,
-                        6
-                    ],
-                    [
-                        0,
-                        7
-                    ],
-                    [
-                        0,
-                        8
-                    ],
-                    [
-                        1,
-                        0
-                    ],
-                    [
-                        1,
-                        1
-                    ],
-                    [
-                        1,
-                        2
-                    ],
-                    [
-                        1,
-                        3
-                    ],
-                    [
-                        1,
-                        4
-                    ],
-                    [
-                        1,
-                        5
-                    ],
-                    [
-                        1,
-                        6
-                    ],
-                    [
-                        1,
-                        7
-                    ],
-                    [
-                        1,
-                        8
-                    ],
-                    [
-                        2,
-                        0
-                    ],
-                    [
-                        2,
-                        1
-                    ],
-                    [
-                        2,
-                        2
-                    ],
-                    [
-                        2,
-                        3
-                    ],
-                    [
-                        2,
-                        4
-                    ],
-                    [
-                        2,
-                        5
-                    ],
-                    [
-                        2,
-                        6
-                    ],
-                    [
-                        2,
-                        7
-                    ],
-                    [
-                        2,
-                        8
-                    ],
-                    [
-                        3,
-                        0
-                    ],
-                    [
-                        3,
-                        1
-                    ],
-                    [
-                        3,
-                        2
-                    ],
-                    [
-                        3,
-                        3
-                    ],
-                    [
-                        3,
-                        4
-                    ],
-                    [
-                        3,
-                        5
-                    ],
-                    [
-                        3,
-                        6
-                    ],
-                    [
-                        3,
-                        7
-                    ],
-                    [
-                        3,
-                        8
-                    ],
-                    [
-                        4,
-                        0
-                    ],
-                    [
-                        4,
-                        1
-                    ],
-                    [
-                        4,
-                        2
-                    ],
-                    [
-                        4,
-                        3
-                    ],
-                    [
-                        4,
-                        4
-                    ],
-                    [
-                        4,
-                        5
-                    ],
-                    [
-                        4,
-                        6
-                    ],
-                    [
-                        4,
-                        7
-                    ],
-                    [
-                        4,
-                        8
-                    ],
-                    [
-                        5,
-                        0
-                    ],
-                    [
-                        5,
-                        1
-                    ],
-                    [
-                        5,
-                        2
-                    ],
-                    [
-                        5,
-                        3
-                    ],
-                    [
-                        5,
-                        4
-                    ],
-                    [
-                        5,
-                        5
-                    ],
-                    [
-                        5,
-                        6
-                    ],
-                    [
-                        5,
-                        7
-                    ],
-                    [
-                        5,
-                        8
-                    ],
-                    [
-                        6,
-                        0
-                    ],
-                    [
-                        6,
-                        1
-                    ],
-                    [
-                        6,
-                        2
-                    ],
-                    [
-                        6,
-                        3
-                    ],
-                    [
-                        6,
-                        4
-                    ],
-                    [
-                        6,
-                        5
-                    ],
-                    [
-                        6,
-                        6
-                    ],
-                    [
-                        6,
-                        7
-                    ],
-                    [
-                        6,
-                        8
-                    ],
-                    [
-                        7,
-                        0
-                    ],
-                    [
-                        7,
-                        1
-                    ],
-                    [
-                        7,
-                        2
-                    ],
-                    [
-                        7,
-                        3
-                    ],
-                    [
-                        7,
-                        4
-                    ],
-                    [
-                        7,
-                        5
-                    ],
-                    [
-                        7,
-                        6
-                    ],
-                    [
-                        7,
-                        7
-                    ],
-                    [
-                        7,
-                        8
-                    ],
-                    [
-                        8,
-                        0
-                    ],
-                    [
-                        8,
-                        1
-                    ],
-                    [
-                        8,
-                        2
-                    ],
-                    [
-                        8,
-                        3
-                    ],
-                    [
-                        8,
-                        4
-                    ],
-                    [
-                        8,
-                        5
-                    ],
-                    [
-                        8,
-                        6
-                    ],
-                    [
-                        8,
-                        7
-                    ],
-                    [
-                        8,
-                        8
-                    ],
-                    [
-                        9,
-                        0
-                    ],
-                    [
-                        9,
-                        1
-                    ],
-                    [
-                        9,
-                        2
-                    ],
-                    [
-                        9,
-                        3
-                    ],
-                    [
-                        9,
-                        4
-                    ],
-                    [
-                        9,
-                        5
-                    ],
-                    [
-                        9,
-                        6
-                    ],
-                    [
-                        9,
-                        7
-                    ],
-                    [
-                        9,
-                        8
-                    ],
-                    [
-                        10,
-                        0
-                    ],
-                    [
-                        10,
-                        1
-                    ],
-                    [
-                        10,
-                        2
-                    ],
-                    [
-                        10,
-                        3
-                    ],
-                    [
-                        10,
-                        4
-                    ],
-                    [
-                        10,
-                        5
-                    ],
-                    [
-                        10,
-                        6
-                    ],
-                    [
-                        10,
-                        7
-                    ],
-                    [
-                        10,
-                        8
-                    ],
-                    [
-                        11,
-                        0
-                    ],
-                    [
-                        11,
-                        1
-                    ],
-                    [
-                        11,
-                        2
-                    ],
-                    [
-                        11,
-                        3
-                    ],
-                    [
-                        11,
-                        4
-                    ],
-                    [
-                        11,
-                        5
-                    ],
-                    [
-                        11,
-                        6
-                    ],
-                    [
-                        11,
-                        7
-                    ],
-                    [
-                        11,
-                        8
-                    ],
-                    [
-                        12,
-                        0
-                    ],
-                    [
-                        12,
-                        1
-                    ],
-                    [
-                        12,
-                        2
-                    ],
-                    [
-                        12,
-                        3
-                    ],
-                    [
-                        12,
-                        4
-                    ],
-                    [
-                        12,
-                        5
-                    ],
-                    [
-                        12,
-                        6
-                    ],
-                    [
-                        12,
-                        7
-                    ],
-                    [
-                        12,
-                        8
-                    ],
-                    [
-                        13,
-                        0
-                    ],
-                    [
-                        13,
-                        1
-                    ],
-                    [
-                        13,
-                        2
-                    ],
-                    [
-                        13,
-                        3
-                    ],
-                    [
-                        13,
-                        4
-                    ],
-                    [
-                        13,
-                        5
-                    ],
-                    [
-                        13,
-                        6
-                    ],
-                    [
-                        13,
-                        7
-                    ],
-                    [
-                        13,
-                        8
-                    ],
-                    [
-                        7,
-                        9
-                    ],
-                    [
-                        7,
-                        10
-                    ],
-                    [
-                        7,
-                        11
-                    ],
-                    [
-                        8,
-                        9
-                    ],
-                    [
-                        8,
-                        10
-                    ],
-                    [
-                        8,
-                        11
-                    ],
-                    [
-                        9,
-                        9
-                    ],
-                    [
-                        9,
-                        10
-                    ],
-                    [
-                        9,
-                        11
-                    ],
-                    [
-                        10,
-                        9
-                    ],
-                    [
-                        10,
-                        10
-                    ],
-                    [
-                        10,
-                        11
-                    ],
-                    [
-                        11,
-                        9
-                    ],
-                    [
-                        11,
-                        10
-                    ],
-                    [
-                        11,
-                        11
-                    ]
-                ]
-            },
-            {
-                "type": "setBlock",
-                "number": "X50030",
-                "loc": [
-                    [
-                        3,
-                        10
-                    ]
-                ]
-            },
-            {
-                "type": "moveHero",
-                "steps": [
-                    "up:3"
+                    5,
+                    2
                 ]
             },
             {
@@ -1286,13 +84,13 @@ main.floors.Caimhome=
     [ 17,10173,20130,40091,40099,40155, 17,  0,71224,90520,  0,40172, 17],
     [ 17,  0,  0,71182,71183,  0,  0,  0,  0,  0,  0,  0, 17],
     [ 17,71681,  0,  0,  0,  0, 17, 17,  0,  0, 17, 17, 17],
-    [ 17,71689,  0,  0,  0,  0, 17, 17,71606,71631,60111,71678, 17],
+    [ 17,71689,  0,  0,  0,  0,140, 17,71606,71631,60111,71678, 17],
     [ 17,  0,  0,  0,  0,  0, 17,71880, 17,71639,71686,71603, 17],
-    [ 17, 17, 17, 17, 17,  0,  0,  0,  0,  0,  0,  0, 17],
-    [120165,120166,120166,120166,120166,120166,120167, 17,  0,  0,  0, 17,120165],
-    [120173,120174,120174, 90,90212,120174,120175, 17,  0,  0,71336, 17,120173],
-    [  0, 17,80007,  0,120073,80011,40110, 17, 17, 17, 17, 17,  0],
-    [  0, 17,80003,  0,  0,  0,80010,120165,120166,120166,120166,120167,40118]
+    [ 17,  0,  0,  0,  0,  0, 17,  0,  0,  0,  0,  0, 17],
+    [  0, 17, 17, 17, 17,  0,  0,  0,  0,  0,  0, 17,120165],
+    [120165,120166,120172,200550,120168,120166,120167, 17,  0,  0,71336, 17,120173],
+    [120173,  0,120180,200558,120176,90214,120175, 17, 17, 17, 17, 17,  0],
+    [  0,120073,  0,  0,  0,  0,  0,120165,120166,120166,120166,120167,40118]
 ],
     "areas": "下层",
     "bgmap": [
@@ -1303,12 +101,12 @@ main.floors.Caimhome=
     [  0,70071,70070,70070,70070,70070,  0,70070,70070,70071,70070,70062,  0],
     [  0,70070,70062,70070,70070,70071,  0,  0,  0,  0,  0,  0,  0],
     [  0,70070,70070,70063,70070,70070,40017,40017,40017,40017,40017,40017,  0],
-    [  0,70071,70062,70070,70070,70062,40025,40025,40025,40025,40025,40025,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,70071,70062,70070,  0,  0],
+    [  0,70071,70062,70070,70070,70062,40017,40025,40025,40025,40025,40025,  0],
+    [  0,70062,70071,70071,70062,70071,40025,70062,70071,70062,70070,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,70070,70070,70062,  0,  0],
-    [  0,  0,  0,50030,120174,  0,  0,  0,70062,70070,70063,  0,  0],
-    [  0,  0,  0,10002,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,10010,  0,308,  0,  0,  0,  0,  0,  0,  0]
+    [90078,90078,90078,90078,90078,90078,90078,  0,70062,70070,70063,  0,  0],
+    [90078,120174,90078,120174,90078,120174,90078,  0,  0,  0,  0,  0,90078],
+    [90078,90078,90078,90078,90078,90078,90078,  0,  0,  0,  0,  0,90078]
 ],
     "fgmap": [
     [140,140,140,140,140,140,140,  0,  0,  0,  0,  0,140],
@@ -1317,13 +115,13 @@ main.floors.Caimhome=
     [140,  0,  0,  0,  0,  0,  0,  0,  0,10141,  0,  0,140],
     [140,71673,  0,  0,  0,  0,140,10165,  0,  0,70624,70625,140],
     [140,71586,  0,  0,  0,  0,140,140,140,140,140,140,140],
+    [140,  0,  0,  0,  0,  0,140,  0,  0,  0,  0,  0,140],
     [140,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140],
-    [140,70630,70631,  0,50062,  0,  0,  0,  0,  0,  0,  0,140],
-    [140,140,140,140,140,140,140,140,  0,  0,  0,140,140],
-    [  0,90207,90206,  0,90204,90206,  0,140,  0,  0,71320,140,110072],
-    [  0,90215,90214,  0,120065,90214,40102,140,30114,344,20059,140,110080],
-    [  0,  0,  0,  0,  0,  0,80013,140,140,140,140,140,110088],
-    [  0,  0,  0,  0,  0,  0,  0,  0,120072,  0,  0,  0,  0]
+    [140,70630,70631,  0,50062,  0,  0,  0,  0,  0,  0,140,140],
+    [140,140,140,140,140,140,140,140,  0,  0,71320,140,110072],
+    [  0,  0,  0,  0,140091,140092,140092,140,30114,344,20059,140,110080],
+    [120039,  0,  0,  0,140099,140100,140100,140,140,140,140,140,110088],
+    [120017,  0,  0,  0,140107,140108,140108,  0,120072,90223,  0,  0,80013]
 ],
     "bg2map": [
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
@@ -1333,26 +131,14 @@ main.floors.Caimhome=
     [  0,  0,  0,30150,30150,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0, 90,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,71694,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0, 90,  0,  0,  0,  0,  0,  0,71694,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,80020,  0,  0,  0,  0,  0,  0]
+    [  0,120065,  0,  0,  0,120174,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,90244,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
     "fg2map": [
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [80041,80042,80043,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [80049,80050,80051,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [80057,80058,80059,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [80065,80066,80067,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+
 ]
 }
\ No newline at end of file
diff --git a/project/floors/KTV.js b/project/floors/KTV.js
index eceffe1..5fd3f57 100644
--- a/project/floors/KTV.js
+++ b/project/floors/KTV.js
@@ -11,11 +11,201 @@ main.floors.KTV=
     "images": [],
     "ratio": 1,
     "defaultGround": "grass",
-    "firstArrive": [],
+    "firstArrive": [
+        {
+            "type": "changebg",
+            "img1": "",
+            "memory1": false,
+            "img2": "bg_3531.webp",
+            "memory2": false,
+            "time": 30,
+            "style": "引入"
+        },
+        {
+            "type": "cgtextList",
+            "textList": "chapter002"
+        },
+        {
+            "type": "cgtext",
+            "WindowSkin": false,
+            "head": {
+                "name": "",
+                "px": -300
+            },
+            "index": "0",
+            "time": 0,
+            "wait": 2000,
+            "bodyList": [
+                {
+                    "name": "",
+                    "px": 0,
+                    "filter": false
+                }
+            ]
+        },
+        {
+            "type": "cgtext",
+            "WindowSkin": false,
+            "head": {
+                "name": "",
+                "px": -300
+            },
+            "index": "1",
+            "time": 0,
+            "wait": 2000,
+            "bodyList": [
+                {
+                    "name": "",
+                    "px": 0,
+                    "filter": false
+                }
+            ]
+        },
+        {
+            "type": "cgtext",
+            "WindowSkin": false,
+            "head": {
+                "name": "",
+                "px": -300
+            },
+            "index": "2",
+            "time": 0,
+            "wait": 2000,
+            "bodyList": [
+                {
+                    "name": "",
+                    "px": 0,
+                    "filter": false
+                }
+            ]
+        },
+        {
+            "type": "cgtext",
+            "WindowSkin": false,
+            "head": {
+                "name": "",
+                "px": -300
+            },
+            "index": "3",
+            "time": 0,
+            "wait": 2000,
+            "bodyList": [
+                {
+                    "name": "",
+                    "px": 0,
+                    "filter": false
+                }
+            ]
+        },
+        {
+            "type": "cgtext",
+            "WindowSkin": false,
+            "head": {
+                "name": "",
+                "px": -300
+            },
+            "index": "4",
+            "time": 0,
+            "wait": 2000,
+            "bodyList": [
+                {
+                    "name": "",
+                    "px": 0,
+                    "filter": false
+                }
+            ]
+        },
+        {
+            "type": "cgtext",
+            "WindowSkin": false,
+            "head": {
+                "name": "",
+                "px": -300
+            },
+            "index": "5",
+            "time": 0,
+            "wait": 2000,
+            "bodyList": [
+                {
+                    "name": "",
+                    "px": 0,
+                    "filter": false
+                }
+            ]
+        },
+        {
+            "type": "cgtext",
+            "WindowSkin": false,
+            "head": {
+                "name": "",
+                "px": -300
+            },
+            "index": "6",
+            "time": 0,
+            "wait": 2000,
+            "bodyList": [
+                {
+                    "name": "",
+                    "px": 0,
+                    "filter": false
+                }
+            ]
+        },
+        {
+            "type": "cgtext",
+            "WindowSkin": false,
+            "head": {
+                "name": "",
+                "px": -300
+            },
+            "index": "7",
+            "time": 0,
+            "wait": 2000,
+            "bodyList": [
+                {
+                    "name": "",
+                    "px": 0,
+                    "filter": false
+                }
+            ]
+        },
+        {
+            "type": "changebg",
+            "img1": "bg_3531.webp",
+            "memory1": false,
+            "img2": "",
+            "memory2": false,
+            "time": 30,
+            "style": "引出"
+        },
+        {
+            "type": "setHeroOpacity",
+            "opacity": 1
+        },
+        {
+            "type": "setCurtain",
+            "time": 1000
+        }
+    ],
     "eachArrive": [],
     "parallelDo": "",
     "events": {},
-    "changeFloor": {},
+    "changeFloor": {
+        "12,10": {
+            "floorId": "changguan2",
+            "loc": [
+                2,
+                1
+            ]
+        },
+        "10,1": {
+            "floorId": "KTVF2",
+            "loc": [
+                10,
+                4
+            ]
+        }
+    },
     "beforeBattle": {},
     "afterBattle": {},
     "afterGetItem": {},
@@ -32,7 +222,7 @@ main.floors.KTV=
     [ 17,71797,71797,71797,71797,71797,71797,71797,71797,71797, 90, 17,  0],
     [ 17,90211,90211,90211,90211,71877,90211,90211,  0,90587,  0, 17,  0],
     [ 17,90541,90542,90543, 17,71761, 17, 17,71288,71116,  0, 17,  0],
-    [ 17,  0,30216,  0,  0,  0,  0,  0,  0,71257,  0, 17,  0],
+    [ 17,  0,30216,  0,  0,123,  0,  0,  0,71257,  0, 17,  0],
     [ 17,  0,  0,  0,71568,71754,20167,  0,  0,71265,  0, 17,  0],
     [ 17,  0,  0,  0,71887,  0,  0,  0,60160,71265,  0, 17,  0],
     [ 17,71340, 17, 17,  0,  0,  0, 17, 17,70568,  0,71796,71797],
diff --git a/project/floors/KTVF2.js b/project/floors/KTVF2.js
index 78260da..62626a0 100644
--- a/project/floors/KTVF2.js
+++ b/project/floors/KTVF2.js
@@ -15,7 +15,15 @@ main.floors.KTVF2=
     "eachArrive": [],
     "parallelDo": "",
     "events": {},
-    "changeFloor": {},
+    "changeFloor": {
+        "10,4": {
+            "floorId": "KTV",
+            "loc": [
+                10,
+                1
+            ]
+        }
+    },
     "beforeBattle": {},
     "afterBattle": {},
     "afterGetItem": {},
diff --git a/project/floors/changguan1.js b/project/floors/changguan1.js
new file mode 100644
index 0000000..833d90e
--- /dev/null
+++ b/project/floors/changguan1.js
@@ -0,0 +1,140 @@
+main.floors.changguan1=
+{
+    "floorId": "changguan1",
+    "title": "主塔 10 层",
+    "name": "10",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "grass2",
+    "firstArrive": [
+        {
+            "type": "setCurtain",
+            "time": 1000
+        },
+        {
+            "type": "autoText",
+            "text": "通称——",
+            "time": 2000
+        },
+        {
+            "type": "setCurtain",
+            "color": [
+                0,
+                0,
+                0,
+                1
+            ],
+            "time": 1000,
+            "keep": true
+        },
+        {
+            "type": "changeFloor",
+            "floorId": "changguan2",
+            "loc": [
+                0,
+                0
+            ]
+        }
+    ],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {
+        "6,0": {
+            "floorId": "guangchang",
+            "loc": [
+                6,
+                12
+            ]
+        },
+        "5,12": {
+            "floorId": "changguan2",
+            "loc": [
+                5,
+                0
+            ]
+        },
+        "6,12": {
+            "floorId": "changguan2",
+            "loc": [
+                6,
+                0
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [210178,210178,210178,210178,210171,  0, 91,  0,210171,110272,110273,110274,110275],
+    [110241,110242,110243,110244,210187,  0,  0,  0,210187,110280,110281,110282,110283],
+    [110249,110250,110251,110252,210195,  0,  0,  0,210195,110288,110289,110290,110291],
+    [110257,110258,110259,200199,  0,  0,  0,  0,  0,110296,110297,110298,110299],
+    [110265,110266,110267,110268,  0,  0,  0,  0,  0,110304,110305,110306,110307],
+    [110273,110274,110275,110276,  0,  0,  0,  0,  0,110116,110313,110314,110315],
+    [110281,110282,110283,110284,  0,  0,  0,  0,  0,110132,  0,  0,  0],
+    [110289,110290,110291,110292,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [110297,110298,110299,110300,  0,  0,  0,  0,  0,110116,  0,  0,  0],
+    [110305,110306,110307,110308,  0,  0,  0,  0,  0,110261,110262,110262,110263],
+    [110313,110314,110315,110316,110122,110122,  0,110122,110122,110269,110270,110270,110271],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,110277,110278,110278,110279],
+    [140,140186,120002,120003,  0, 93, 93,  0,  0,110285,110286,110286,110286]
+],
+    "bgmap": [
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078]
+],
+    "fgmap": [
+    [  0,  0,  0,200175,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,200183,  0,  0,  0,  0,140086,  0,  0,  0,  0],
+    [  0,  0,  0,200191,  0,  0,  0,  0,140094,  0,  0,  0,  0],
+    [  0,  0,  0,110260,  0,  0,  0,  0,140102,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,140110,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,110246,110246,110246,110246],
+    [140091,140092,140093,  0,110114,110114,  0,110114,110114,  0,  0,  0,  0],
+    [140099,140100,140101,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140107,140108,140109,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "bg2map": [
+    [  0,  0,  0,  0,130046,130046,130046,130046,130046,210178,  0,  0,210178],
+    [210186,210186,210186,210186,130046,130046,130046,130046,130046,  0,  0,  0,  0],
+    [210194,210194,210194,210194,130054,130054,130054,130054,130054,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,110312,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/floors/changguan2.js b/project/floors/changguan2.js
new file mode 100644
index 0000000..c0e530d
--- /dev/null
+++ b/project/floors/changguan2.js
@@ -0,0 +1,148 @@
+main.floors.changguan2=
+{
+    "floorId": "changguan2",
+    "title": "街道",
+    "name": "1",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X20003",
+    "firstArrive": [
+        {
+            "type": "setCurtain",
+            "time": 1000
+        },
+        {
+            "type": "autoText",
+            "text": "《牢狱》",
+            "time": 2000
+        },
+        {
+            "type": "setCurtain",
+            "color": [
+                0,
+                0,
+                0,
+                1
+            ],
+            "time": 1000,
+            "keep": true
+        },
+        {
+            "type": "changeFloor",
+            "floorId": "KTV",
+            "loc": [
+                10,
+                8
+            ]
+        }
+    ],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {
+        "5,0": {
+            "floorId": "changguan1",
+            "loc": [
+                5,
+                12
+            ]
+        },
+        "6,0": {
+            "floorId": "changguan1",
+            "loc": [
+                6,
+                12
+            ]
+        },
+        "12,8": {
+            "floorId": "street01",
+            "loc": [
+                0,
+                8
+            ]
+        },
+        "2,1": {
+            "floorId": "KTV",
+            "loc": [
+                12,
+                10
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [140193,130178,120010,120011,  0, 91, 91,  0,140184,140,140,140,140186],
+    [140193,130178, 90,  0,  0,  0,  0,  0,140192,140,140,140,140194],
+    [140193,130178,40163,120019,  0,  0,  0,  0,140200,140195,140,140,140194],
+    [140193,143,143,120027,  0,  0,  0,  0,70128,140192,140,140,140194],
+    [140193,210148,143,143,  0,  0,  0,71826,70136,140192,140,140,140194],
+    [140193,143,143,143,71226,  0,  0,  0,50151,140200,140201,140201,140202],
+    [70165,70165,70165,70166,71819,  0,  0,  0,  0,70128,70129,70129,70130],
+    [140193,210153,143,70174,71827,  0,  0,  0,71826,120056,70137,70137,70138],
+    [140193,210153,210156,143,71695,  0,  0,  0,  0,  0,  0,  0, 94],
+    [140193,143,143,143,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140193,140193,130178,70130,  0,  0,  0,  0,  0,  0,  0,140,140],
+    [140193,140193,130178,40165,200199,  0,  0,71791,  0,  0,140192,140,140],
+    [140193,140193,130186,110114,110114, 93, 93,  0,143,  0,140192,140,140]
+],
+    "areas": "牢狱",
+    "bgmap": [
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078]
+],
+    "fgmap": [
+    [140,140194,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140,140194,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140,140194,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140,140,140,140186,  0,  0,  0,71818,  0,  0,  0,  0,  0],
+    [140,140,140,140194,71218,  0,  0,  0,71818,  0,  0,  0,  0],
+    [140201,140201,140201,140202,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,71685,  0,  0,  0,71818,  0,90587,  0,  0],
+    [140,140,140,140186,71844,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140,140,140,140194,200175,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140,140,140196,140202,200183,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140,140,140194,  0,200191,  0,  0,  0,  0,71818,140184,140,140],
+    [140,140,140194,  0,  0,  0,  0,  0,71832,71833,140192,140,140],
+    [140,140,140194,  0,110117,  0,  0,140184,140,140,140,140,140]
+],
+    "bg2map": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,110293,110294,110294,110294,110294],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,71826,  0,  0,  0,  0],
+    [  0,  0,  0,  0,71693,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,70136,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,120064,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,70138,  0,  0,  0,  0,  0,71826,  0,  0,  0],
+    [  0,  0,  0,40173,  0,  0,  0,71799,71840,71841,  0,  0,  0]
+],
+    "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/floors/chushi.js b/project/floors/chushi.js
new file mode 100644
index 0000000..2ca6465
--- /dev/null
+++ b/project/floors/chushi.js
@@ -0,0 +1,129 @@
+main.floors.chushi=
+{
+    "floorId": "chushi",
+    "title": "开场剧情",
+    "name": "1",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "T400",
+    "firstArrive": [
+        {
+            "type": "insert",
+            "name": "chapter0"
+        },
+        {
+            "type": "choices",
+            "text": "要进行教程内容吗",
+            "choices": [
+                {
+                    "text": "确定",
+                    "action": [
+                        {
+                            "type": "changeFloor",
+                            "floorId": "jiaocheng01",
+                            "loc": [
+                                6,
+                                12
+                            ]
+                        }
+                    ]
+                },
+                {
+                    "text": "取消",
+                    "action": [
+                        {
+                            "type": "changeFloor",
+                            "floorId": "guangchang",
+                            "loc": [
+                                6,
+                                10
+                            ]
+                        }
+                    ]
+                },
+                {
+                    "text": "一区测试",
+                    "action": [
+                        {
+                            "type": "changeFloor",
+                            "floorId": "yiqu1",
+                            "loc": [
+                                0,
+                                7
+                            ]
+                        },
+                        {
+                            "type": "setValue",
+                            "name": "status:atk",
+                            "value": "16"
+                        },
+                        {
+                            "type": "setValue",
+                            "name": "status:def",
+                            "value": "16"
+                        },
+                        {
+                            "type": "setValue",
+                            "name": "status:spell",
+                            "value": "0"
+                        },
+                        {
+                            "type": "setValue",
+                            "name": "status:speed",
+                            "value": "20"
+                        },
+                        {
+                            "type": "setValue",
+                            "name": "status:hp",
+                            "value": "1000"
+                        }
+                    ]
+                }
+            ]
+        }
+    ],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {},
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "areas": "开场剧情",
+    "bgmap": [
+
+],
+    "fgmap": [
+
+],
+    "bg2map": [
+
+],
+    "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/floors/guangchang.js b/project/floors/guangchang.js
index 2adfdaa..3427e91 100644
--- a/project/floors/guangchang.js
+++ b/project/floors/guangchang.js
@@ -10,27 +10,276 @@ main.floors.guangchang=
     "canUseQuickShop": true,
     "images": [],
     "ratio": 1,
-    "defaultGround": "grass2",
-    "firstArrive": [],
+    "defaultGround": "X90078",
+    "firstArrive": [
+        {
+            "type": "setCurtain",
+            "time": 100
+        },
+        {
+            "type": "setText",
+            "position": "center"
+        },
+        {
+            "type": "move",
+            "loc": [
+                6,
+                7
+            ],
+            "time": 500,
+            "keep": true,
+            "async": true,
+            "steps": [
+                "up:1",
+                "left:1",
+                "up:2"
+            ]
+        },
+        {
+            "type": "sleep",
+            "time": 400
+        },
+        {
+            "type": "move",
+            "loc": [
+                8,
+                8
+            ],
+            "time": 500,
+            "keep": true,
+            "async": true,
+            "steps": [
+                "up:1",
+                "left:2"
+            ]
+        },
+        {
+            "type": "sleep",
+            "time": 500
+        },
+        {
+            "type": "move",
+            "loc": [
+                4,
+                9
+            ],
+            "time": 500,
+            "keep": true,
+            "steps": [
+                "right:1"
+            ]
+        },
+        {
+            "type": "waitAsync"
+        },
+        {
+            "type": "autoText",
+            "text": "浮游都市,《诺瓦斯·艾蒂尔》。",
+            "time": 2000
+        },
+        {
+            "type": "move",
+            "loc": [
+                6,
+                5
+            ],
+            "time": 500,
+            "keep": true,
+            "async": true,
+            "steps": [
+                "up:2"
+            ]
+        },
+        {
+            "type": "move",
+            "loc": [
+                6,
+                7
+            ],
+            "time": 500,
+            "keep": true,
+            "steps": [
+                "up:1"
+            ]
+        },
+        {
+            "type": "waitAsync"
+        },
+        {
+            "type": "sleep",
+            "time": 2000
+        },
+        {
+            "type": "move",
+            "loc": [
+                6,
+                3
+            ],
+            "time": 500,
+            "async": true,
+            "steps": [
+                "down:9"
+            ]
+        },
+        {
+            "type": "move",
+            "loc": [
+                5,
+                4
+            ],
+            "time": 500,
+            "keep": true,
+            "async": true,
+            "steps": [
+                "up:1",
+                "right:1"
+            ]
+        },
+        {
+            "type": "move",
+            "loc": [
+                6,
+                6
+            ],
+            "time": 300,
+            "keep": true,
+            "async": true,
+            "steps": [
+                "right:2"
+            ]
+        },
+        {
+            "type": "sleep",
+            "time": 1000
+        },
+        {
+            "type": "move",
+            "loc": [
+                8,
+                6
+            ],
+            "time": 500,
+            "keep": true,
+            "steps": [
+                "left:1"
+            ]
+        },
+        {
+            "type": "sleep",
+            "time": 2000
+        },
+        {
+            "type": "waitAsync"
+        },
+        {
+            "type": "jump",
+            "from": [
+                7,
+                6
+            ],
+            "to": [
+                7,
+                6
+            ],
+            "time": 500,
+            "keep": true,
+            "async": true
+        },
+        {
+            "type": "move",
+            "loc": [
+                6,
+                3
+            ],
+            "time": 500,
+            "async": true,
+            "steps": [
+                "up:2"
+            ]
+        },
+        {
+            "type": "move",
+            "loc": [
+                7,
+                9
+            ],
+            "time": 500,
+            "async": true,
+            "steps": [
+                "up:1",
+                "right:3"
+            ]
+        },
+        {
+            "type": "setCurtain",
+            "color": [
+                0,
+                0,
+                0,
+                1
+            ],
+            "time": 1000,
+            "keep": true
+        },
+        {
+            "type": "waitAsync"
+        },
+        {
+            "type": "setBlock",
+            "number": "0",
+            "loc": [
+                [
+                    5,
+                    9
+                ],
+                [
+                    7,
+                    6
+                ],
+                [
+                    4,
+                    4
+                ],
+                [
+                    6,
+                    3
+                ]
+            ]
+        },
+        {
+            "type": "changeFloor",
+            "floorId": "guangchang2",
+            "loc": [
+                0,
+                0
+            ]
+        }
+    ],
     "eachArrive": [],
     "parallelDo": "",
     "events": {},
     "changeFloor": {
-        "12,6": {
-            "floorId": "street02",
-            "loc": [
-                0,
-                6
-            ],
-            "direction": "right"
-        },
         "6,12": {
-            "floorId": "guangchang2",
+            "floorId": "changguan1",
             "loc": [
                 6,
                 0
+            ]
+        },
+        "6,0": {
+            "floorId": "guangchang5",
+            "loc": [
+                6,
+                12
+            ]
+        },
+        "12,8": {
+            "floorId": "guangchang2",
+            "loc": [
+                0,
+                8
             ],
-            "direction": "down"
+            "direction": "right"
         }
     },
     "beforeBattle": {},
@@ -41,29 +290,65 @@ main.floors.guangchang=
     "cannotMove": {},
     "cannotMoveIn": {},
     "map": [
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,141],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,141],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,141],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,141],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,140],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 94],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,140],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,141],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,141],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,141],
-    [  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,140,141]
+    [120007,120007,120007,120007,120020,  0, 91,  0,  0,130187,130188,130189,130190],
+    [120015,120015,120015,120015,120028,  0,  0,  0,  0,120144,120145,120146,120147],
+    [130172,130173,130174,130175,  0,  0,  0,  0,71320,120152,120153,120154,120155],
+    [130180,130181,130182,130183,200199,  0,  0,122,71328,120160,120161,120162,120163],
+    [130188,130189,130190,130191,121,  0,  0,  0,71336,120168,120169,120170,120171],
+    [130196,130197,130198,130199,140087,  0,121,  0,  0,120176,140020,140020,140020],
+    [130204,  0,130206,130207,140095,  0,  0,  0,  0,  0,140028,140028,140028],
+    [  0,  0,130214,130215,140103,  0,121,  0,  0,  0,  0,  0,  0],
+    [  0,  0,130214,120172,140111,  0,  0,  0,123,  0,  0,  0, 94],
+    [  0,  0,  0,120180,121,  0,  0,121,  0,200199,  0,  0,  0],
+    [140107,140108,140109,362,363,  0,  0,  0,361,362,362,362,362],
+    [210186,210186,210186,210186,210179,  0,  0,  0,210179,210185,210186,210186,210186],
+    [210178,210178,210178,210178,210171,  0, 93,  0,210171,210177,210178,210178,210178]
 ],
     "areas": "牢狱",
     "bgmap": [
-
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30055,30052,30052,30052,30052,30052,30055,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30055,30052],
+    [30052,30052,30052,30052,30055,30052,30052,30063,30062,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30055,30052,30062,30052,30052,30052,30052,30052,30052,30052,30055,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30062,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30062,30052],
+    [30052,30052,30052,30055,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [120177,120178,120179,30052,30052,30055,30052,30052,30055,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30062,30052,30052,30052,30052,30055,30052],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
     "fgmap": [
-
+    [  0,  0,  0,  0,200175,  0,  0,  0,  0,130187,130188,130189,130190],
+    [  0,  0,  0,  0,200183,  0,  0,  0,140086,130195,130196,130197,130198],
+    [  0,  0,  0,  0,200191,  0,  0,  0,140094,130203,130204,130205,130206],
+    [  0,  0,  0,  0,  0,  0,  0,  0,140102,130211,130212,130213,130214],
+    [  0,  0,  0,  0,  0,  0,  0,  0,140110,  0,140091,140092,140093],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140099,140100,140101],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,200175,140107,140108,140109],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,200183,  0,  0,  0],
+    [140091,140092,140093,  0,  0,  0,  0,  0,  0,200191,  0,  0,  0],
+    [140099,140100,140101,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [362,362,362,  0,  0,  0,  0,  0,  0,  0,  0,110242,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,110249,110250,110251],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,110256,110257,110258,110259]
 ],
     "bg2map": [
-
+    [200195,200196,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [90652,80106,90653,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [120145,120146,120147,  0,  0,  0,  0,  0,  0,  0,120177,120178,120179],
+    [120153,120154,120155,120156,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [120161,120162,120163,120164,90642,  0,  0,  0,  0,  0,  0,  0,  0],
+    [120169,120170,120171,  0,90642,  0,  0,  0,  0,  0,  0,  0,  0],
+    [130007,130007,130007,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [130015,130015,130015,  0,  0,  0,  0,  0,110239,110239,110239,110239,110239],
+    [  0,  0,  0,  0,130046,130046,130046,130046,130046,  0,  0,  0,  0],
+    [  0,  0,  0,  0,130046,130046,130046,130046,130046,  0,  0,  0,  0]
 ],
     "fg2map": [
 
diff --git a/project/floors/guangchang2.js b/project/floors/guangchang2.js
index 8247ca4..2d9947a 100644
--- a/project/floors/guangchang2.js
+++ b/project/floors/guangchang2.js
@@ -10,25 +10,52 @@ main.floors.guangchang2=
     "canUseQuickShop": true,
     "images": [],
     "ratio": 1,
-    "defaultGround": "grass2",
-    "firstArrive": [],
+    "defaultGround": "X90078",
+    "firstArrive": [
+        {
+            "type": "setCurtain",
+            "time": 1000
+        },
+        {
+            "type": "sleep",
+            "time": 2000
+        },
+        {
+            "type": "setCurtain",
+            "color": [
+                0,
+                0,
+                0,
+                1
+            ],
+            "time": 1000,
+            "keep": true
+        },
+        {
+            "type": "changeFloor",
+            "floorId": "guangchang5",
+            "loc": [
+                0,
+                0
+            ]
+        }
+    ],
     "eachArrive": [],
     "parallelDo": "",
     "events": {},
     "changeFloor": {
-        "6,0": {
+        "0,8": {
             "floorId": "guangchang",
             "loc": [
-                6,
-                12
-            ],
-            "direction": "up"
+                12,
+                8
+            ]
         },
-        "12,10": {
-            "floorId": "xiaoxiang01",
+        "2,0": {
+            "floorId": "guangchang6",
             "loc": [
-                0,
-                10
+                2,
+                12
             ]
         }
     },
@@ -40,29 +67,65 @@ main.floors.guangchang2=
     "cannotMove": {},
     "cannotMoveIn": {},
     "map": [
-    [  0,  0,  0,  0,  0,  0, 91,  0,  0,  0,  0,140,141],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,141],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,141],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,140],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 94],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140]
+    [  0,  0, 91,  0,210184,210186,210186,210186,210186,210186,210186,210186,143],
+    [  0,  0,  0,  0,210192,210194,210194,210175,210194,210194,210194,210194,143],
+    [120156,  0,  0,  0,90664,90648,90648,  0,90644,90648,90649,  0,143],
+    [120164,  0,  0,  0,90665,140110,122,  0,90645,140110,122,  0,120120],
+    [120172,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120136],
+    [120180,  0,  0,  0,90656,90648,90649,  0,90636,90649,90648,  0,120137],
+    [  0,  0,  0,  0,90657,140110,122,  0,90638,140110,122,  0,120145],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120160],
+    [ 92,  0,  0,  0,110384,110385,110376,  0,90652,90648,90649,  0,120168],
+    [  0,  0,  0,  0,110384,  0,122,  0,90653,  0,122,  0,120176],
+    [362,362,363,  0,  0,  0,  0,  0,  0,  0,  0,  0,90266],
+    [210181,210181,210181,  0,  0,  0,  0,  0,  0,  0,  0,  0,110189],
+    [210186,210186,210186,361,362,362,362,362,362,362,362,362,110197]
 ],
     "areas": "牢狱",
     "bgmap": [
-
+    [30052,30052,30052,30052,30052,30062,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30055,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30062,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30062,30052,30052,30052,30052,30052,30052],
+    [30052,30055,30052,30052,30052,30055,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30062,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30055,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [210209,210209,210209,30052,30052,30052,30062,30052,30055,30052,30052,30052,30052],
+    [210209,210209,210209,30062,30052,30052,30052,30052,30052,30052,30052,30052,30052]
 ],
     "fgmap": [
-
+    [130191,  0,  0,  0,  0,140086,140087,  0,  0,140086,140087,  0,  0],
+    [130199,140087,  0,  0,  0,140094,140095,  0,  0,140094,140095,  0,  0],
+    [130207,140095,  0,  0,  0,140102,140103,  0,  0,140102,140103,  0,  0],
+    [130215,140103,  0,  0,  0,140086,140087,  0,  0,140086,140087,  0,  0],
+    [  0,140111,  0,  0,  0,140094,140095,  0,  0,140094,140095,  0,  0],
+    [  0,  0,  0,  0,  0,140102,140103,  0,  0,140102,140103,  0,  0],
+    [  0,  0,  0,  0,  0,140086,140087,  0,  0,140086,140087,  0,  0],
+    [  0,  0,  0,  0,  0,140094,140095,  0,  0,140094,140095,  0,  0],
+    [  0,  0,  0,  0,  0,140102,140103,  0,  0,140102,140103,  0,  0],
+    [  0,  0,  0,  0,  0,140110,140111,  0,  0,140110,140111,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
     "bg2map": [
-
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,130192],
+    [  0,  0,  0,  0,  0,140110,140111,  0,  0,140110,140111,  0,130200],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,140110,140111,  0,  0,140110,140111,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [110239,110239,110239,364,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,364,  0,  0,  0,  0,  0,  0,  0,  0,90266],
+    [  0,  0,  0,110239,110239,110239,110239,110239,110239,110239,110239,110239,  0]
 ],
     "fg2map": [
 
diff --git a/project/floors/guangchang2_1.js b/project/floors/guangchang2_1.js
new file mode 100644
index 0000000..c460473
--- /dev/null
+++ b/project/floors/guangchang2_1.js
@@ -0,0 +1,98 @@
+main.floors.guangchang2_1=
+{
+    "floorId": "guangchang2_1",
+    "title": "广场",
+    "name": "1",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {
+        "6,12": {
+            "floorId": "guangchang",
+            "loc": [
+                6,
+                0
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [210094,210095,210144,210145,210145,210145,210145,210145,210145,210145,210146,210092,210093],
+    [210102,210103,210152,210153,210153,210153,210153,210153,210153,210153,210154,210100,210101],
+    [210110,210111,210160,210161,210161,210161,210161,210161,210161,210161,210162,210108,210109],
+    [210118,210119,210168,210169,210169,210169,210169,210169,210169,210169,210170,210116,210117],
+    [210126,210127,210181,210181,210176,210183,210181,210181,210176,210183,210181,210124,210125],
+    [362,363,  0,210178,210184,210177,210178,210178,210184,210177,  0,361,362],
+    [210181,210181,210181,210178,210184,210177,210178,210178,210184,210177,210181,210181,210181],
+    [210178,210178,210178,210178,210184,210185,210186,210186,210192,210177,210178,210178,210178],
+    [210194,210194,210194,210194,210192,210193,210150,210194,210192,210193,210194,210194,210194],
+    [201037,201037,201037,201029,  0,  0,  0,  0,  0,201029,201037,201037,201037],
+    [210070,210071,210002,201029,  0,  0,  0,  0,  0,201029,210002,210068,210069],
+    [210078,210079,210002,201029,  0,  0, 93,  0,  0,201029,210002,210076,210077]
+],
+    "areas": "牢狱",
+    "bgmap": [
+    [210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [180025,180025,  0,  0,  0,  0,  0,  0,  0,  0,  0,180025,180025],
+    [180025,180025,  0,  0,  0,  0,  0,  0,  0,  0,  0,180025,180025],
+    [180025,180025,  0,  0,  0,  0,  0,  0,  0,  0,  0,180025,180025],
+    [210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [190000,190000,190000,190000,210209,210209,210209,210209,210209,190000,190000,190000,190000],
+    [190000,190000,190000,190000,210209,210209,210209,210209,210209,190000,190000,190000,190000],
+    [190000,190000,190000,190000,210209,210209,210209,210209,210209,190000,190000,190000,190000],
+    [190000,190000,190000,190000,210209,210209,210209,210209,210209,190000,190000,190000,190000]
+],
+    "fgmap": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,210134,  0,  0,  0,210134,  0,  0,  0,  0],
+    [  0,  0,  0,  0,210142,  0,  0,  0,210142,  0,  0,  0,  0],
+    [  0,  0,210142,  0,210150,  0,210130,  0,210150,  0,210142,  0,  0],
+    [  0,  0,210150,  0,  0,  0,210138,  0,  0,  0,210150,  0,  0],
+    [  0,  0,  0,  0,  0,  0,210142,  0,  0,  0,  0,  0,  0],
+    [201021,201021,201021,201021,  0,  0,  0,  0,  0,201021,201021,201021,201021],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "bg2map": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,210206,  0,210194,  0,210207,  0,  0,  0,  0],
+    [  0,  0,  0,  0,210208,  0,  0,  0,210210,  0,  0,  0,  0],
+    [210002,210002,  0,  0,210208,  0,  0,  0,210210,  0,  0,210002,210002],
+    [  0,  0,  0,  0,210208,  0,  0,  0,210210,  0,  0,  0,  0]
+],
+    "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/floors/guangchang2_2.js b/project/floors/guangchang2_2.js
new file mode 100644
index 0000000..a70e8c9
--- /dev/null
+++ b/project/floors/guangchang2_2.js
@@ -0,0 +1,105 @@
+main.floors.guangchang2_2=
+{
+    "floorId": "guangchang2_2",
+    "title": "广场",
+    "name": "1",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {
+        "7,0": {
+            "floorId": "guangchang3",
+            "loc": [
+                7,
+                12
+            ]
+        },
+        "6,12": {
+            "floorId": "guangchang2",
+            "loc": [
+                6,
+                0
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [  0,  0,  0,  0,  0,  0,  0, 91,  0,  0,  0,  0,120160],
+    [210094,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120168],
+    [210102,210103,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120176],
+    [210110,210111,110231,110231,110231,  0,  0,  0,110231,110231,110231,110231,110231],
+    [210118,365,362,362,363,  0,  0,  0,361,362,362,362,362],
+    [210126,365,210177,210178,210176,  0,  0,  0,210176,210177,210178,210178,210178],
+    [362,363,210070,210071,210184,  0,  0,  0,210184,210068,210069,210178,210178],
+    [210181,210184,210078,210079,210192,  0,  0,  0,210192,210076,210077,210194,210194],
+    [210178,210184,210086,210087,  0,  0,  0,  0,  0,210084,210085,110239,110239],
+    [210194,210192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [201037,201037,201029,  0,  0,  0,  0,  0,  0,130171,130172,130173,130174],
+    [210002,210002,201029,  0,  0,  0,  0,  0,  0,130179,130180,130181,130182],
+    [210002,210002,201029,  0,  0,  0, 93,  0,  0,130187,130188,130189,130190]
+],
+    "areas": "牢狱",
+    "bgmap": [
+    [210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [180025,180025,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [180025,180025,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [180025,180025,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [190000,190000,190000,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [190000,190000,190000,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [190000,190000,190000,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209],
+    [190000,190000,190000,210209,210209,210209,210209,210209,210209,210209,210209,210209,210209]
+],
+    "fgmap": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,110231,110231],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [201021,201021,201021,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "bg2map": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120160],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120168],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120176],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,210119,110239,110239,110239,  0,  0,  0,110239,110239,110239,110239,110239],
+    [  0,210127,  0,  0,  0,130046,130046,130046,  0,  0,  0,  0,  0],
+    [  0,  0,210177,210178,  0,130046,130046,130046,  0,210177,210178,  0,  0],
+    [  0,  0,210193,210194,  0,130054,130054,130054,  0,210193,210194,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [210217,210217,210217,210206,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,210208,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,210208,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,210208,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/floors/guangchang3.js b/project/floors/guangchang3.js
new file mode 100644
index 0000000..06fa931
--- /dev/null
+++ b/project/floors/guangchang3.js
@@ -0,0 +1,132 @@
+main.floors.guangchang3=
+{
+    "floorId": "guangchang3",
+    "title": "主塔 10 层",
+    "name": "10",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [
+        {
+            "type": "setCurtain",
+            "time": 1000
+        },
+        {
+            "type": "sleep",
+            "time": 2000
+        },
+        {
+            "type": "setCurtain",
+            "color": [
+                0,
+                0,
+                0,
+                1
+            ],
+            "time": 1000,
+            "keep": true
+        },
+        {
+            "type": "changeFloor",
+            "floorId": "guangchang4",
+            "loc": [
+                0,
+                0
+            ]
+        }
+    ],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {
+        "0,9": {
+            "floorId": "guangchang4",
+            "loc": [
+                12,
+                9
+            ]
+        },
+        "6,12": {
+            "floorId": "guangchang5",
+            "loc": [
+                6,
+                0
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [210161,210161,210162,210185,210186,210186,210186,210186,210186,210186,210160,210161,210161],
+    [210169,210169,210170,210185,210186,210186,210186,210186,210186,210186,210168,210169,210169],
+    [210178,210178,210176,210193,210194,210194,210194,210194,210194,210194,210176,210177,210178],
+    [210178,210167,210184,  0,  0,  0,  0,  0,  0,  0,210184,210159,210178],
+    [210178,210178,210184,  0,  0,  0,132,  0,  0,  0,210184,210177,210178],
+    [210186,210186,210184,362,363,  0,  0,  0,361,362,210184,210185,210186],
+    [210194,210194,210192,210186,210186,  0,  0,  0,210186,210186,210184,210193,210194],
+    [71795,71814,210192,71655,210194,  0,  0,  0,210194,210194,210192,50165,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,71421,10168,71784,71785],
+    [ 92,  0,  0,  0,  0,  0,  0,  0,  0,  0,10176,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,122,  0,  0],
+    [210145,210145,210146,  0,  0,  0,  0,  0,  0,  0,  0,71799,  0],
+    [210153,210153,210154,  0,  0,  0, 93,  0,  0,  0,90648,90657,90850]
+],
+    "bgmap": [
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,210209,210209,210209,210209,210209,210209,210209,30052,30052,30052],
+    [30052,30052,30052,210209,210209,210209,210209,210209,210209,210209,30052,30052,30052],
+    [30052,30052,30052,210209,210209,210209,210209,210209,210209,210209,30052,30052,30052],
+    [30052,30052,30052,210209,210209,210209,210209,210209,210209,210209,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30062,30052,30052,30052,30052,30052,30052,30052,30052,30052,30055,30052],
+    [30052,30052,30052,30052,30055,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30062,30052,30052,30052,30062,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30055,30052,30052,30052],
+    [30052,30055,30052,30052,30052,30062,30052,30052,30052,30052,30052,30052,30052]
+],
+    "fgmap": [
+    [  0,  0,  0,  0,210142,  0,  0,  0,210142,  0,  0,  0,  0],
+    [  0,  0,  0,  0,210150,  0,  0,  0,210150,  0,  0,  0,  0],
+    [  0,210142,  0,  0,  0,  0,  0,  0,  0,  0,  0,210142,  0],
+    [210131,210150,  0,  0,  0,  0,  0,  0,  0,  0,  0,210150,210131],
+    [210139,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,210139],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [71787,71806,  0,  0,  0,  0,  0,  0,  0,  0,  0,50157,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,71413,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140086],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,50151,71217,140094],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,71791,140102],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140110],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140086]
+],
+    "bg2map": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,130046,130046,130046,  0,  0,  0,  0,  0],
+    [  0,  0,  0,210194,  0,130054,130054,130054,  0,210194,  0,  0,  0],
+    [  0,  0,  0,71663,  0,  0,  0,  0,90849,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,71792,71793],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,71225,71328],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,71336],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/floors/guangchang4.js b/project/floors/guangchang4.js
new file mode 100644
index 0000000..cb6d123
--- /dev/null
+++ b/project/floors/guangchang4.js
@@ -0,0 +1,138 @@
+main.floors.guangchang4=
+{
+    "floorId": "guangchang4",
+    "title": "主塔 10 层",
+    "name": "10",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [
+        {
+            "type": "setCurtain",
+            "time": 1000
+        },
+        {
+            "type": "autoText",
+            "text": "是被险峻的峭壁环绕,与世隔绝的,都市的最底部",
+            "time": 2000
+        },
+        {
+            "type": "setCurtain",
+            "color": [
+                0,
+                0,
+                0,
+                1
+            ],
+            "time": 1000,
+            "keep": true
+        },
+        {
+            "type": "changeFloor",
+            "floorId": "changguan1",
+            "loc": [
+                0,
+                0
+            ]
+        }
+    ],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {
+        "12,9": {
+            "floorId": "guangchang3",
+            "loc": [
+                0,
+                9
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [210161,210161,210161,210162,364,271,  0,271,365,210160,210161,210161,210161],
+    [210169,210169,210169,210170,364,  0,272,  0,365,210168,210169,210169,210169],
+    [210181,210181,210182,210176,361,362,362,362,363,210176,210180,210181,210181],
+    [210178,210178,210159,210184,210185,210186,210186,210186,210186,210184,210177,210178,210178],
+    [210178,210178,210178,210184,210177,10104,10105,10106,210167,210184,210177,210178,210178],
+    [210186,210186,210186,210184,210193,10112,10113,10114,210194,210184,210185,210186,210186],
+    [71834,71835,210194,210192,30167,  0,  0,  0,30167,210192,210175,210194,210194],
+    [130173,71835,130175,  0,  0,  0,  0,  0,  0,  0,71799,71799,  0],
+    [130181,130182,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [130189,130190,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 94],
+    [130189,130190,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [130189,130190,  0,  0,  0,  0,  0,  0,  0,  0,210144,210145,210145],
+    [130197,130198,  0,90601,90601,90601,90601,90601,90601,90601,210152,210153,210153]
+],
+    "bgmap": [
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30062,30052,30052,30052,30052,30052,30055,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30062,30052,30052],
+    [30052,30052,30052,30062,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30055,30052,30052,30052,30052,30052,30052,30062,30052,30052,30052,30055,30052],
+    [30052,30052,30052,30052,30055,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30055,30052,30052,30052,30052,30052,30052,30052,30052,30052,30062]
+],
+    "fgmap": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,210142,  0,  0,  0,  0,  0,  0,  0,210142,  0,  0],
+    [210131,210131,210150,  0,210142,  0,  0,  0,210142,  0,210150,210131,210131],
+    [210139,210139,  0,  0,210150,  0,  0,  0,210150,  0,  0,210139,210139],
+    [210142,  0,  0,  0,30159,  0,  0,  0,30159,  0,  0,  0,210142],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,71791,71791,71786],
+    [  0,130174,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,71794],
+    [  0,  0,130183,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,130191,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,130191,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,130191,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,130191,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "bg2map": [
+    [  0,  0,  0,  0,210212,210212,210212,210212,210212,  0,  0,  0,  0],
+    [  0,  0,  0,  0,210212,210212,210212,210212,210212,  0,  0,  0,  0],
+    [  0,  0,  0,  0,210212,210212,210212,210212,210212,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,210178,210178,210178,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,210194,210194,210194,  0,  0,  0,  0,  0],
+    [210150,210194,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [71842,71843,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [120146,120147,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "fg2map": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,210150],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+]
+}
\ No newline at end of file
diff --git a/project/floors/guangchang5.js b/project/floors/guangchang5.js
new file mode 100644
index 0000000..86715ef
--- /dev/null
+++ b/project/floors/guangchang5.js
@@ -0,0 +1,141 @@
+main.floors.guangchang5=
+{
+    "floorId": "guangchang5",
+    "title": "广场",
+    "name": "1",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [
+        {
+            "type": "setCurtain",
+            "time": 1000
+        },
+        {
+            "type": "autoText",
+            "text": "《特别受灾地区》——",
+            "time": 2000
+        },
+        {
+            "type": "setCurtain",
+            "color": [
+                0,
+                0,
+                0,
+                1
+            ],
+            "time": 1000,
+            "keep": true
+        },
+        {
+            "type": "changeFloor",
+            "floorId": "guangchang3",
+            "loc": [
+                0,
+                0
+            ]
+        }
+    ],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {
+        "6,12": {
+            "floorId": "guangchang",
+            "loc": [
+                6,
+                0
+            ]
+        },
+        "6,0": {
+            "floorId": "guangchang3",
+            "loc": [
+                6,
+                12
+            ]
+        },
+        "12,9": {
+            "floorId": "guangchang6",
+            "loc": [
+                0,
+                9
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [210161,210157,210162,  0,  0,  0, 91,  0,  0,  0,  0,  0,140094],
+    [210164,210165,210170,  0,  0,  0,  0,  0,  0,  0,  0,20110,140094],
+    [210162,210178,210179,  0,  0,  0,  0,  0,  0,  0,122,  0,140102],
+    [210170,210178,210171,  0,  0,  0,  0,  0,  0,  0,  0,20110,140110],
+    [  0,365,362,362,363,  0,  0,  0,361,362,362,362,362],
+    [  0,365,210177,210178,210176,  0,  0,  0,210176,210167,210178,210178,210178],
+    [362,363,210070,210071,210184,  0,  0,  0,210184,210068,210069,210178,210166],
+    [210181,210184,210078,210079,210192,  0,  0,  0,210192,210076,210077,210194,210194],
+    [210178,210184,210086,210087,  0,  0,  0,  0,  0,210084,210085,110239,110239],
+    [210194,210192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 94],
+    [200171,200172,120031,120031,120020,  0,  0,  0,  0,  0,  0,  0,  0],
+    [200179,200180,122,  0,  0,  0,  0,  0,200199,  0,130180,130181,130182],
+    [200187,200188,  0,  0,  0,  0, 93,  0,  0,130187,130188,130189,130190]
+],
+    "areas": "牢狱",
+    "bgmap": [
+    [30052,30052,30055,30052,30052,30052,30052,30052,30052,30062,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30055,30052],
+    [30055,30052,30052,30052,30052,30052,30055,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30062,30052,30052,30052,30052,30052,30052,30062,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30055,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [210209,210209,30052,30052,30052,30052,30062,30052,30052,30052,30052,30052,30052],
+    [210209,210209,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30052],
+    [30052,30052,30052,30052,30055,30052,30052,30052,30052,30052,30052,30052,30055],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30052,30052,30062,30052,30052],
+    [30052,30052,30052,30052,30052,30052,30052,30052,30055,30052,30052,30052,30052],
+    [30052,30052,30052,30062,30052,30052,30052,30052,30052,30052,30052,30052,30052]
+],
+    "fgmap": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,20102,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,20102,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,120080,  0,  0,  0,  0,  0,  0,  0,  0,120080,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [200115,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,110231,110231],
+    [200147,200124,  0,  0,  0,  0,  0,  0,200175,  0,  0,  0,  0],
+    [200147,200148,120026,120026,120004,  0,  0,  0,200183,  0,  0,  0,  0],
+    [200155,200156,  0,  0,  0,  0,  0,  0,200191,  0,130172,130173,130174],
+    [200163,200164,  0,  0,  0,  0,  0,  0,  0,130179,  0,  0,  0],
+    [  0,  0,  0,  0,120004,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "bg2map": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,210178,210179,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,210178,210195,  0,  0,  0,  0,  0,  0,  0,  0,  0,140110],
+    [210179,210178,110239,110239,110239,  0,  0,  0,110239,110239,110239,110239,110239],
+    [210171,  0,  0,  0,  0,130046,130046,130046,  0,  0,  0,  0,  0],
+    [210195,  0,210177,210178,  0,130046,130046,130046,  0,210177,210178,  0,  0],
+    [  0,  0,210175,210194,  0,130054,130054,130054,  0,210193,210194,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,200173,  0,120012,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,200181,  0,120028,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,200189,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/floors/guangchang6.js b/project/floors/guangchang6.js
new file mode 100644
index 0000000..e2f79e3
--- /dev/null
+++ b/project/floors/guangchang6.js
@@ -0,0 +1,116 @@
+main.floors.guangchang6=
+{
+    "floorId": "guangchang6",
+    "title": "广场",
+    "name": "1",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {
+        "2,12": {
+            "floorId": "guangchang2",
+            "loc": [
+                2,
+                0
+            ]
+        },
+        "0,9": {
+            "floorId": "guangchang5",
+            "loc": [
+                12,
+                9
+            ]
+        },
+        "12,7": {
+            "floorId": "yiqu1",
+            "loc": [
+                0,
+                7
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {
+        "4,12": [],
+        "4,11": [],
+        "4,10": []
+    },
+    "map": [
+    [140095,120160,120161,120162,120163,120164,365,  0,  0,  0,  0,143,143],
+    [140095,120168,120169,120170,120171,120172,365,  0,  0,  0,  0,143,143],
+    [140103,120176,120177,20122,120179,120180,365,20122,122,  0,  0,143,143],
+    [140111,20110,140107,140108,140109,20110,365,20130,  0,  0,130075,130192,130193],
+    [362,362,362,362,362,362,362,20113,  0,  0,130082,130200,130201],
+    [210178,210178,210178,210167,210178,210178,210176,  0,  0,  0,137,140099,140100],
+    [210178,210178,210178,210178,210178,210178,210184,20113,121,  0,  0,140107,140108],
+    [210194,210175,210194,210194,210194,210194,210192,20114,  0,  0,  0,  0, 94],
+    [110239,  0,  0,  0,  0,  0,365,  0,  0,  0,  0,120109,120110],
+    [ 92,  0,  0,  0,362,  0,363,128,  0,  0,10165,120117,120118],
+    [  0,  0,  0,  0, 17,  0, 17,  0,  0,  0,10173,120125,120126],
+    [130183,  0,  0,  0, 17,  0, 17,  0,  0,  0,10173,120133,120134],
+    [130191,  0, 93,  0, 17,  0,  0,  0,  0,138,10157,120141,120142]
+],
+    "areas": "牢狱",
+    "bgmap": [
+    [30055,30052,30052,30052,30052,30052,30052,90078,90078,90078,90078,90078,90078],
+    [30052,30052,30055,30052,30052,30052,30052,90078,90078,90078,90078,90078,90078],
+    [30052,30052,30052,30052,30052,30052,30052,90078,  0,90078,90078,90078,90078],
+    [30052,30052,30052,30052,30052,30052,30052,90078,90078,90078,90078,90078,90078],
+    [30052,30052,30052,30052,30052,30052,30052,90078,90078,90078,90078,90078,90078],
+    [30052,30052,30052,30052,30052,30052,30052,90078,90078,90078,90078,90078,90078],
+    [30052,30052,30052,30052,30052,30052,30052,  0,90078,90078,90078,90078,90078],
+    [30052,30052,30052,30052,30052,30052,30052,90078,90078,90078,90078,90078,90078],
+    [30052,30052,30052,30052,30052,30052,30052,90078,90078,90078,90078,90078,90078],
+    [30052,30052,30052,30052,30052,30052,30052,90078,90078,90078,90078,90078,90078],
+    [30052,30052,30052,30052,210187,210178,210187,90078,90078,90078,90078,90078,90078],
+    [30052,30052,30052,30052,210195,210178,210195,90078,90078,90078,90078,90078,90078],
+    [30052,30052,30052,30052,90078,90078,90078,90078,90078,90078,90078,90078,90078]
+],
+    "fgmap": [
+    [  0,  0,  0,  0,  0,  0,  0,140087,  0,  0,140094,  0,  0],
+    [  0,  0,140091,140092,140093,  0,  0,140095,  0,  0,140102,  0,  0],
+    [  0,20102,140099,140100,140101,20102,  0,140103,  0,  0,140110,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,140111,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,140087,  0,  0,  0,140091,140092],
+    [  0,  0,  0,  0,  0,  0,  0,140095,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,140103,  0,  0,  0,  0,  0],
+    [110231,  0,  0,  0,  0,  0,365,140111,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140086,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140094,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140102,  0,  0]
+],
+    "bg2map": [
+    [  0,  0,  0,  0,  0,  0,160032,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,160032,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,120178,  0,  0,160032,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,20130,  0,  0,160032,  0,  0,  0,130088,  0,  0],
+    [120103,120103,120103,120103,120103,120103,120103,  0,  0,  0,130096,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,130076,130076],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,130084,130084],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,365,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,365,130045,130046,130047,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,365,130045,130046,130047,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,365,130053,130054,130055,  0,  0,  0,  0,  0,  0]
+],
+    "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/floors/guangchangquan.js b/project/floors/guangchangquan.js
new file mode 100644
index 0000000..e5040e3
--- /dev/null
+++ b/project/floors/guangchangquan.js
@@ -0,0 +1,194 @@
+main.floors.guangchangquan=
+{
+    "floorId": "guangchangquan",
+    "title": "广场",
+    "name": "1",
+    "width": 26,
+    "height": 39,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {},
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [210178,210178,210178,210178,210171,  0,  0,  0,210171,210178,210178,210178,210178,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [210178,210178,210178,210178,210171,  0,  0,  0,210171,210178,210178,210178,210178,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "areas": "牢狱",
+    "bgmap": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,140061,140061,140061,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,140061,140061,140061,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "fgmap": [
+
+],
+    "bg2map": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0, 86, 86, 86, 86,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0, 86, 84, 84, 84, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0, 86, 84, 84, 84, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0, 86, 84, 84, 84, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0, 86, 84, 84, 84, 84,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0, 86, 86, 86, 86,140061,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,140061,140061,140061,140061,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,140061,140061,140061,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,140061,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "fg2map": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,20067,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,20067,20067,20067,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+]
+}
\ No newline at end of file
diff --git a/project/floors/jiaocheng01.js b/project/floors/jiaocheng01.js
new file mode 100644
index 0000000..98b85b0
--- /dev/null
+++ b/project/floors/jiaocheng01.js
@@ -0,0 +1,285 @@
+main.floors.jiaocheng01=
+{
+    "floorId": "jiaocheng01",
+    "title": "教程1",
+    "name": "1",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [
+        {
+            "type": "setHeroOpacity",
+            "opacity": 1
+        },
+        {
+            "type": "setCurtain",
+            "time": 100
+        }
+    ],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {
+        "0,11": [
+            "宝石介绍:攻防法速\n加点量:2/2/5/2"
+        ],
+        "12,11": [
+            "血瓶介绍:不同大小"
+        ],
+        "5,7": [
+            {
+                "type": "choices",
+                "text": "\t[小妖精,fairy]是否要进行钥匙和宝物方面的教学呢?",
+                "choices": [
+                    {
+                        "text": "我太需要了",
+                        "action": [
+                            "\t[小妖精,fairy]一种颜色的钥匙开一种颜色的门。\n一把钥匙只能开一扇门。",
+                            "\t[小妖精,fairy]除了钥匙以外,地图上常见的宝物还有宝石和血瓶。\n血瓶可以增加角色的生命值。\n血瓶的颜色、样式和所处的区域决定了血瓶增加的生命值数量。\n在第一个区域,四种颜色的基础血瓶分别可以回复角色100,\n250,500和900点生命值。",
+                            "\t[小妖精,fairy]宝石可以增加角色的四维。\n红宝石增加攻击力。\n蓝宝石增加防御力。\n绿宝石增加法术强度。\n黄宝石增加速度。",
+                            "\t[小妖精,fairy]不同样式、不同区域的宝石决定了宝石增加的能力幅度。\n在第一个区域,红、蓝、黄色的基础宝石可以增加角色对应能力2点。\n绿色的基础宝石可以增加角色法术强度5点。",
+                            {
+                                "type": "jump",
+                                "to": [
+                                    2,
+                                    2
+                                ],
+                                "time": 500,
+                                "keep": true
+                            }
+                        ]
+                    },
+                    {
+                        "text": "我已经了解了",
+                        "action": [
+                            {
+                                "type": "setValue",
+                                "name": "flag:跳过1",
+                                "value": "1"
+                            },
+                            {
+                                "type": "jump",
+                                "to": [
+                                    6,
+                                    1
+                                ],
+                                "time": 500,
+                                "keep": true
+                            },
+                            {
+                                "type": "hide",
+                                "loc": [
+                                    [
+                                        2,
+                                        2
+                                    ]
+                                ],
+                                "remove": true
+                            },
+                            {
+                                "type": "hide",
+                                "loc": [
+                                    [
+                                        8,
+                                        1
+                                    ]
+                                ],
+                                "remove": true
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "2,2": [
+            "\t[小妖精,fairy]在这个游戏中,不同颜色的钥匙珍贵程度也不相同。",
+            "\t[小妖精,fairy]黄色的钥匙最为常见。",
+            "\t[小妖精,fairy]蓝色的钥匙有点罕见,其价值在正式游戏中略高于2把黄钥匙,但低于3把黄钥匙。",
+            "\t[小妖精,fairy]红色的钥匙比较稀有,在正式游戏中一般一把红钥匙可以换取3把蓝钥匙,但反之则有价无市。\n红色的钥匙在正式游戏中一般仅用于boss战相关,开启非常重要的道具,或绕过非常非常强力的怪物。",
+            "\t[小妖精,fairy]绿色的钥匙为剧情道具,在游戏进程中绿钥匙和不可绕过的绿门一一对应,但存在通往相同区域的二选一绿门。\n绿色的钥匙一般被重兵把守,且不参与其他钥匙的相互兑换。",
+            {
+                "type": "jump",
+                "to": [
+                    8,
+                    1
+                ],
+                "time": 500,
+                "keep": true
+            }
+        ],
+        "8,1": [
+            "\t[小妖精,fairy]在地图上,偶尔会出现这种看起来白送一把蓝钥匙的房间。",
+            "\t[小妖精,fairy]然而,拿到这把“免费的”蓝钥匙,需要一把红钥匙作为前置。\n在教程关卡中,你肯定拥有这把红钥匙——如果你没有立即拿取旁边绿钥匙的话。",
+            "\t[小妖精,fairy]在正式游戏中,你可能当时没有,甚至在一时半会儿都不会有这把红钥匙。\n那样的话,这把蓝钥匙只能寄存在房间里。\n在拿到红钥匙之后,你的第一优先级行动就是回来拿上这把蓝钥匙。",
+            "\t[小妖精,fairy]这把红钥匙,以及用1红钥匙换取1红1蓝钥匙的操作,称为钥匙的周转。",
+            "\t[小妖精,fairy]当然,如果门口有怪物把守的话就另当别论——等到损失比较合适的时候再回来吧。",
+            {
+                "type": "jump",
+                "to": [
+                    6,
+                    1
+                ],
+                "time": 500,
+                "keep": true
+            },
+            {
+                "type": "setValue",
+                "name": "flag:教程1",
+                "value": "1"
+            }
+        ],
+        "6,1": [
+            {
+                "type": "if",
+                "condition": "((Math.max(flag:教程1,flag:跳过1))===1)",
+                "true": [
+                    "\t[小妖精,fairy]接下来就要开始适应本游戏的战斗系统了——",
+                    "\t[小妖精,fairy]在此之前,让我先确认一下吧。\n你拥有黄钥匙和蓝钥匙各一把,对吗?",
+                    "\t[小妖精,fairy]相对于其他RPG游戏来说,本作的战斗系统并不需要玩家在战斗中爆手速进行操作。\n暂停或挂机也是没问题的——怪物并不会因为现实中的你不操作而主动攻击你。\n换句话说,战斗的结果在战斗开始的一瞬间就已经确定了。",
+                    "\t[小妖精,fairy]除此之外,通过存档读档刷取随机数的操作在本作中也是不可行的。\n本作品将不涉及任何随机数的判定。\n这意味着如果你愿意,你可以百分百精确地复制一条攻略路线。",
+                    "\t[小妖精,fairy]换句话说,本作的战斗过程只依赖于战斗双方的各项数据。\n这包括双方的面板数值,各种技能,和多样的装备。",
+                    "\t[小妖精,fairy]本作还有另外一个特点——地图上的资源是有限的,并不会随时间自动刷新。\n这意味着不能在低级图反复刷取资源来碾压高级的怪物,必须仔细规划资源的获取及使用。",
+                    "\t[小妖精,fairy]在手部乘区、脸部乘区、肝部乘区都被限制住的情况下——\n请开发自己的脑部乘区,迎接后面的挑战吧!",
+                    {
+                        "type": "choices",
+                        "text": "\t[小妖精,fairy]是否需要进行简单的战斗系统讲解呢?",
+                        "choices": [
+                            {
+                                "text": "我太需要了",
+                                "action": []
+                            },
+                            {
+                                "text": "我已经很会了",
+                                "action": [
+                                    {
+                                        "type": "hide",
+                                        "loc": [
+                                            [
+                                                9,
+                                                10
+                                            ]
+                                        ],
+                                        "floorId": "jiaocheng02",
+                                        "remove": true
+                                    },
+                                    {
+                                        "type": "hide",
+                                        "loc": [
+                                            [
+                                                11,
+                                                8
+                                            ]
+                                        ],
+                                        "floorId": "jiaocheng02",
+                                        "remove": true
+                                    },
+                                    {
+                                        "type": "hide",
+                                        "loc": [
+                                            [
+                                                11,
+                                                4
+                                            ]
+                                        ],
+                                        "floorId": "jiaocheng02",
+                                        "remove": true
+                                    },
+                                    {
+                                        "type": "hide",
+                                        "loc": [
+                                            [
+                                                7,
+                                                4
+                                            ]
+                                        ],
+                                        "floorId": "jiaocheng02",
+                                        "remove": true
+                                    },
+                                    {
+                                        "type": "hide",
+                                        "loc": [
+                                            [
+                                                5,
+                                                2
+                                            ]
+                                        ],
+                                        "floorId": "jiaocheng02",
+                                        "remove": true
+                                    },
+                                    {
+                                        "type": "setBlock",
+                                        "number": "fairy",
+                                        "loc": [
+                                            [
+                                                4,
+                                                9
+                                            ]
+                                        ],
+                                        "floorId": "jiaocheng02"
+                                    },
+                                    {
+                                        "type": "setValue",
+                                        "name": "flag:跳过2",
+                                        "value": "1"
+                                    }
+                                ]
+                            }
+                        ]
+                    },
+                    {
+                        "type": "hide",
+                        "remove": true
+                    }
+                ]
+            }
+        ]
+    },
+    "changeFloor": {
+        "6,0": {
+            "floorId": "jiaocheng02",
+            "loc": [
+                6,
+                12
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [  1,  1,  1,  1,  1,  1, 91,  1,  1,  1,  1,  1,  1],
+    [  1, 22,  0,  1, 22,  1,  0,  1,  0,  0, 23, 22,  1],
+    [  1, 21,  0,  1, 81,  1, 84,  1, 83,  1,  1,  1,  1],
+    [  1, 82,  1,  1,  0,  0,  0, 81,  0, 83,  0, 24,  1],
+    [  1,  0,  0, 82,  0,  1, 81,  1, 82,  1,  1,  1,  1],
+    [  1, 21,  1,  1,  0,  1, 22,  1,  0,  0, 21, 23,  1],
+    [  1,  1,  1,  1, 83,  1,  1,  1,  1,  1,  1,  1,  1],
+    [401,  0,402,  1,  0,124, 82,  0, 22,  1, 31,  0, 32],
+    [  0,  0,  0,  1, 21,  1,  1,  1,  0,  1,  0,  0,  0],
+    [403,  0,404,  1, 23,  1, 21,  1,  0,  1, 34,  0, 33],
+    [  1,  1,  1,  1,  1,  1,  0,  1, 81,  1,  1,  1,  1],
+    [129,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,129],
+    [  1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1]
+],
+    "areas": "教程",
+    "bgmap": [
+
+],
+    "fgmap": [
+
+],
+    "bg2map": [
+
+],
+    "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/floors/jiaocheng02.js b/project/floors/jiaocheng02.js
new file mode 100644
index 0000000..7990160
--- /dev/null
+++ b/project/floors/jiaocheng02.js
@@ -0,0 +1,363 @@
+main.floors.jiaocheng02=
+{
+    "floorId": "jiaocheng02",
+    "title": "教程2",
+    "name": "1",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {
+        "9,10": [
+            "\t[小妖精,fairy]恭喜你!开始了接触本作战斗系统的第一步!\n希望你刚才有好好看过战斗动画哦——当然没有也没关系!我们一点点教!",
+            "\t[小妖精,fairy]刚才我们的剑砍到敌人身上的时候,敌人身上冒出了一个“-16”的数字。\n这意味着我们砍出去的剑对敌人造成了16点伤害。\n这个“-16”是怎么来的呢?",
+            "\t[小妖精,fairy]打开怪物手册!",
+            {
+                "type": "callBook"
+            },
+            "\t[小妖精,fairy]我们拥有26点攻击力——在左边的状态栏可以看到。\n敌人拥有10点防御力——在怪物手册可以看到。\n我们的每次普通攻击将对怪物造成26-10=16点伤害。",
+            "\t[小妖精,fairy]同理,怪物的每次普通攻击将对我们造成46-16=30点伤害。\n在战斗动画中也有体现哦!",
+            "\t[小妖精,fairy]一方的生命值降低到0,意味着这一方被对方击杀。\n换句话说,如果我们的生命值被怪物的攻击压低到了0,这意味着勇士在战斗中牺牲了。\n(也就是game over啦)。",
+            "\t[小妖精,fairy]虽然在相同的状态下,持有更多的生命值总是更好,但生命值只是一个“够用就行”的属性。\n相较于把自己的生命值把握在自我设定的“500点”“1000点”等“安全线”上,\n用这些多余的生命值换取钥匙、能力,甚至是金币等资源,对后续的游戏过程来说会更轻松。",
+            "\t[小妖精,fairy]话说回来。\n怪物的生命值一共有222点。\n我们想要击杀怪物需要攻击怪物——222÷16(向上取整)=14次。\n为什么是向上取整?因为哪怕怪物还剩1点生命值,没死就是没死。",
+            "\t[小妖精,fairy]在我们攻击怪物14次的过程中,敌人也反击了我们13次。\n我们的生命因此损失了13*30=390点。\n如果没有关闭显伤开关的话,这个”390点“的数字将会显示在在怪物的左下角。\n剩余的生命仍然足够击败第二个相同的敌人呢——但好像还有什么事需要做?",
+            {
+                "type": "jump",
+                "to": [
+                    11,
+                    8
+                ],
+                "time": 500,
+                "keep": true
+            }
+        ],
+        "11,8": [
+            "\t[小妖精,fairy]在本作中,有一个便捷操作,叫做“自动存档”。\n具体点说,就是在我们与怪物发生战斗前,或开门前,都会进行一个存档。\n后面我们发现之前哪一步做错了,都有机会撤销,“反悔”——最多支持反悔50步之前的错误。\n读取自动存档的快捷键是“A”键。",
+            "\t[小妖精,fairy]红宝石可以提高角色的攻击力。\n不同形状、不同区域的红宝石,提高攻击力的程度也不一样。\n刚才黄门里的红宝石,在当前区域每一颗可以提升角色2点攻击力。",
+            {
+                "type": "if",
+                "condition": "(status:hp!==280)",
+                "true": [
+                    "\t[小妖精,fairy]一般来说,在地图上有无需战斗就可以获得的资源时,优先获得这些资源再进行战斗。\n获得资源提升能力,会让我们在战斗中更具有优势。\n不用为了后面保存黄钥匙!钥匙是够的!",
+                    "\t[小妖精,fairy]所以你为什么没有拿红宝石就急匆匆地来战斗了!",
+                    "\t[小妖精,fairy]请读取自动存档,回去拿完宝石再与敌人作战!"
+                ],
+                "false": [
+                    "\t[小妖精,fairy]在提升攻击力后,角色的攻击将更有力度。\n在获得2颗红宝石之后,角色每次攻击对怪物造成的伤害将由16点提升到20点。\n原本需要222÷16=14次攻击击杀的怪物,现在只需要222÷20=12次即可击杀。",
+                    "\t[小妖精,fairy]由于怪物受到更少次数的攻击就被击杀了,角色受到的攻击次数也减少了。\n从13次减少到了11次。",
+                    "\t[小妖精,fairy]但要注意——不是所有时候提升攻击力都能降低角色受到的攻击次数。\n如果角色的攻击力仅提升了1点,攻击伤害从16提升到17——\n击败怪物需要的攻击次数是222÷17,还是14次。这意味着战斗伤害不会有任何变化。",
+                    "\t[小妖精,fairy]因此,能带来战斗伤害减少的攻击力提升节点特别重要——我们称之为“临界”。\n从最初的26点攻击力,16点攻击伤害,需要14次攻击击杀,开始计算——\n222÷13=17.077,这意味着我们至少要达到17.077的攻击伤害,才能减少击杀敌人的攻击次数——但由于本作的攻击力是整数,你必须达到18的攻击伤害,也就是28点攻击力,才能降低战斗伤害。",
+                    "\t[小妖精,fairy]同理,以现在的状态开始计算。现在我们需要12次攻击击杀怪物。\n222÷11=20.182,我们需要21的攻击伤害,也就是31点攻击力。",
+                    {
+                        "type": "callBook"
+                    },
+                    "\t[小妖精,fairy]我们的攻击力距离下一个临界点还差1点;达到临界点可以让我们受到的伤害减少30点。\n在怪物手册中记作[1,30]或\"1:30\"。\n同样地,右上角相同的怪物身上,在战斗伤害330的数字上面,显示的是距离下一个攻击临界点的距离,\n1点。",
+                    "\t[小妖精,fairy]点击怪物手册中的特定怪物,可以查看怪物的详细信息。\n其中不仅包括怪物特殊属性的具体效果,还包含了详细的临界表格。\n在攻击临界表格内,“:”前面的数值表示还差多少攻击抵达接下来的临界,后面的数值表示抵达该临界可以在战斗中少受到多少伤害。",
+                    "\t[小妖精,fairy]但请注意,有的时候用更少的攻击次数击杀怪物,并不会让自己承受怪物的伤害变少哦!\n这就与我们接下来要讲解的属性,”速度“,有关啦。",
+                    "\t[小妖精,fairy]哎呀——生命值好像不太够了!\n捡起后面黄门里的血瓶,补充生命值继续后面的内容吧!",
+                    {
+                        "type": "jump",
+                        "to": [
+                            11,
+                            4
+                        ],
+                        "time": 500,
+                        "keep": true
+                    }
+                ]
+            }
+        ],
+        "11,4": [
+            "\t[小妖精,fairy]与其他魔塔游戏不同的是,本作不仅引入了“速度”属性,还引入了实时战斗系统。\n这将带来比回合制战斗更丰富,更具有策略性的战斗体验。",
+            "\t[小妖精,fairy]在本作中,“速度”意味着角色进行一次攻击前摇的快慢程度。没有特殊说明的话,本作不涉及攻击后摇。\n现在角色的速度为16,这意味着在单位时间内,角色可以攻击16次。\n战斗开始时,参战的双方互相向对方表露敌意,并开始分别计算攻击前摇。\n另一方面,速度和攻击前摇挂钩,意味着角色下一次攻击的时刻以上一次攻击落下时的速度为准;在此之后受到任何额外的减速效果,都只会影响到再下一次攻击。",
+            "\t[小妖精,fairy]在刚才的战斗中,怪物的速度为18,角色的速度为16。\n因此在互相展现敌意后,怪物的攻击先命中角色,随后才是角色对怪物造成伤害。\n此后双方一直匀速造成伤害。",
+            "\t[小妖精,fairy]战斗结束于8次攻击/16速度=0.5时刻。\n此时角色攻击8次,完成对怪物的击杀;与此同时,怪物的第9次攻击前摇刚好准备完毕。\n在本作的战斗系统中,如果怪物死亡时刻正好作出一次攻击(时刻完全相同)的话,视为这次攻击有效!\n因此,角色在之前的战斗中受到怪物刚好9次伤害。",
+            "\t[小妖精,fairy]接下来,请获取黄门中的2颗黄宝石,将角色的速度从16提升到20。\n面对相同的敌人,提升速度又会展现什么效果呢?",
+            {
+                "type": "jump",
+                "to": [
+                    7,
+                    4
+                ],
+                "time": 500,
+                "keep": true
+            },
+            {
+                "type": "hide",
+                "remove": true
+            }
+        ],
+        "7,4": [
+            {
+                "type": "if",
+                "condition": "(status:hp!==380)",
+                "true": [
+                    "\t[小妖精,fairy]都告诉你要获取黄宝石啦!地图上的生命资源并不是那么充足!再浪费的话后面肯定不够啦!",
+                    "\t[小妖精,fairy]请读取自动存档,回去拿完宝石再与敌人作战!"
+                ],
+                "false": [
+                    "\t[小妖精,fairy]在提升速度后,角色可以在更短的时间内打出足以击杀怪物的攻击频率。\n相比获取宝石之前,角色的攻击前摇快了25%。",
+                    "\t[小妖精,fairy]虽然攻击威力没有变化,仍然需要8次攻击才能击杀怪物,但战斗时间却实打实地从0.5降低到了0.4。\n在0.4时刻之前,怪物最多只能打出18*0.4=7次攻击。\n当然,提升攻击力降低战斗伤害的本质也是缩短战斗时间,从而让怪物的攻击频率缩短。",
+                    "\t[小妖精,fairy]但要注意——不是所有时候提升速度都能降低角色受到的攻击次数。\n如果角色的速度从21提升到24,击杀怪物需要的时间将由8/21=0.381变为0.333。(实际计算中具体时刻将保留14位小数,确保精确)\n怪物的第6次攻击于0.333时刻落下,而第7次攻击将于0.389时刻落下。\n因此,将击杀怪物的时刻从0.381提前到0.333,不影响怪物的第6和第7次攻击,从而不会降低伤害。",
+                    "\t[小妖精,fairy]因此,能带来战斗伤害减少的速度提升节点也特别重要——我们也称之为“临界”。\n从最初的需要8次攻击击杀,16点速度,0.5时刻击杀怪物开始计算(当然是计算怪物的时间轴)——\n怪物的第8次攻击落于0.444时刻,第9次攻击落于0.5时刻。\n速度达到17时,击杀时刻为8/17=0.471;速度达到19时,击杀时刻为8/19=0.421,刚好在怪物的第9次和第8次攻击之前。",
+                    {
+                        "type": "callBook"
+                    },
+                    "\t[小妖精,fairy]同理,以现在的状态开始计算。现在我们需要0.4的攻击时间击杀怪物。\n怪物最后一次的攻击时刻为0.389;我们提升1点速度将会使我们的最后一次攻击时刻提前到0.381,从而少受到一次怪物的攻击——这1点速度就是一个速度临界值。继续提升速度,就需要考虑怪物在0.333时刻的攻击。",
+                    "\t[小妖精,fairy]我们的速度距离下一个临界点还差1点;达到临界点可以让我们受到的伤害减少50点。\n在怪物手册中记作[1,50]或\"1:50\"。速度临界值和临界表暂时需要到怪物手册中才能查阅。",
+                    "\t[小妖精,fairy]捡起后面的血瓶和黄钥匙,补充生命值继续后面的内容吧!",
+                    {
+                        "type": "jump",
+                        "to": [
+                            5,
+                            2
+                        ],
+                        "time": 500,
+                        "keep": true
+                    }
+                ]
+            }
+        ],
+        "5,2": [
+            "\t[小妖精,fairy]防御是另一个非常重要的属性。\n与攻击和速度相比,防御是通过降低被怪物攻击的单次伤害来减少战斗损失的。\n对物理攻击的怪物来说,每一点防御都能起到应有的作用。",
+            "\t[小妖精,fairy]而且角色的防御与敌人的攻击越接近,防御的减伤效果越好。\n一般来说,如果只考虑攻击和防御的话,攻防和高于怪物的时候,防御的减伤效果比攻击更好。",
+            "\t[小妖精,fairy]在刚才的战斗中,怪物的攻击为28,角色的防御为16。怪物每次攻击对角色造成12点伤害。\n在获取黄门中的2颗蓝宝石后,角色的防御将从16提升到20,怪物的攻击将仅造成8点伤害。",
+            {
+                "type": "callBook"
+            },
+            "\t[小妖精,fairy]当然,1点防御的具体减伤价值,和战斗中角色受到的物理攻击次数有关,且怪物的特殊属性经常会造成影响。\n以刚才的战斗为例,角色总共被怪物攻击34次。\n1点防御将使怪物造成的普通攻击物理伤害减少1点,从而降低战斗伤害34点。\n同理,对于之前战斗过的两个怪物,1点防御对它们的价值分别是9点和7点减伤。",
+            "\t[小妖精,fairy]但对于初级法师来说——由于初级法师的攻击类型是魔法攻击,物理防御不能起到作用。\n因此尽管怪物出手次数为2,1点防御也无法减少任何伤害。",
+            {
+                "type": "jump",
+                "to": [
+                    4,
+                    9
+                ],
+                "time": 500,
+                "keep": true
+            },
+            {
+                "type": "hide",
+                "remove": true
+            }
+        ],
+        "4,9": [
+            {
+                "type": "if",
+                "condition": "(flag:跳过2!==1)",
+                "true": [
+                    "\t[小妖精,fairy]接下来要介绍的是最后一个主要战斗属性——法强。\n任何生灵都有属于自己的魔法能量——只是他们大多数不知道如何去使用。\n在本作的初始阶段,角色不了解魔法的运作方式,自身所有的魔法能量都在无意识地保护自己。\n1点魔法强度可以给角色带来1点护盾效果——每次战斗(而不是每回合)抵挡1点战斗伤害。\n这个护盾效果可以抵挡所有种类的伤害,不拘泥于物理,魔法或真实伤害。",
+                    "\t[小妖精,fairy]对于不懂如何使用魔法的怪物而言,其魔法能量被简单地合并到其生命值中进行计算。\n但对于会使用魔法攻击的怪物而言,其普通攻击或技能将造成魔法伤害。\n在怪物手册中,怪物普通攻击的魔法攻击力将显示在“法强”一栏。",
+                    {
+                        "type": "callBook"
+                    },
+                    "\t[小妖精,fairy]怪物造成的魔法伤害无法通过简单地提高攻击/防御/速度抵挡。\n但有些装备可以提供百分比的法抗(魔法伤害抗性)。\n携带多件百分比法抗装备的话,抗性乘法叠加计算。",
+                    "\t[小妖精,fairy]当然,在携带特定装备后,角色也有着使用魔法攻击的机会。\n不同类型的法杖将允许角色以不同比例将魔法能量向魔法攻击力转化。\n当然,因为角色将一部分魔力用于攻击,剩余支撑护盾的魔力就没那么多了。\n具体的魔法攻击力和护盾强度,将显示在状态栏对应比例的括号外面。\n括号里面的百分比是魔法能量以多大的比例转化为魔法攻击力和护盾。"
+                ]
+            },
+            {
+                "type": "choices",
+                "text": "\t[小妖精,fairy]现在,你已经熟悉了简单的战斗系统。\n接下来的进阶部分,还需要我的引导嘛?",
+                "choices": [
+                    {
+                        "text": "我太需要了",
+                        "action": [
+                            {
+                                "type": "jump",
+                                "to": [
+                                    2,
+                                    12
+                                ],
+                                "time": 500,
+                                "keep": true
+                            }
+                        ]
+                    },
+                    {
+                        "text": "这还是太简单了",
+                        "action": [
+                            {
+                                "type": "jump",
+                                "to": [
+                                    5,
+                                    0
+                                ],
+                                "time": 500
+                            },
+                            {
+                                "type": "hide",
+                                "loc": [
+                                    [
+                                        2,
+                                        12
+                                    ]
+                                ],
+                                "remove": true
+                            },
+                            {
+                                "type": "hide",
+                                "loc": [
+                                    [
+                                        6,
+                                        11
+                                    ]
+                                ],
+                                "floorId": "jiaocheng03",
+                                "remove": true
+                            },
+                            {
+                                "type": "hide",
+                                "loc": [
+                                    [
+                                        6,
+                                        9
+                                    ]
+                                ],
+                                "floorId": "jiaocheng03",
+                                "remove": true
+                            },
+                            {
+                                "type": "hide",
+                                "loc": [
+                                    [
+                                        6,
+                                        7
+                                    ]
+                                ],
+                                "floorId": "jiaocheng03",
+                                "remove": true
+                            },
+                            {
+                                "type": "hide",
+                                "loc": [
+                                    [
+                                        6,
+                                        4
+                                    ]
+                                ],
+                                "floorId": "jiaocheng03",
+                                "remove": true
+                            },
+                            {
+                                "type": "hide",
+                                "loc": [
+                                    [
+                                        6,
+                                        2
+                                    ]
+                                ],
+                                "floorId": "jiaocheng03",
+                                "remove": true
+                            }
+                        ]
+                    }
+                ]
+            },
+            {
+                "type": "hide",
+                "remove": true
+            }
+        ],
+        "2,12": [
+            "\t[小妖精,fairy]这里是一个非常简单的生命价值判断。\n首先,我们的生命和路上的血瓶不足以让我们携带2把蓝钥匙击败把守着绿色血瓶的怪物。\n其次,路上没有任何机会获得宝石,提高能力,来减少战斗伤害。\n因此,我们至少要打开一扇蓝门来保存血量。\n当然,考虑到后面需要使用蓝钥匙来换取战斗属性以击败更强大的敌人,这里只允许打开一扇蓝门。",
+            "\t[小妖精,fairy]我们一共有2个选择:打开中间的蓝门绕开怪物前进,或者击败一个怪物并打开蓝门获取250生命值的血瓶。",
+            {
+                "type": "callBook"
+            },
+            "\t[小妖精,fairy]首先,观察到所有怪物的金币、经验均为0点。这意味着不需要清理怪物获得资源。\n绕过挡路的怪物取得900血瓶的这扇蓝门,其生命价值为252-0=252点(为什么不是302点?)。\n而把守250生命值血瓶的蓝门,其生命价值为250点。\n显然,打开绕怪门的收益更大。打开我身后的这扇蓝门,继续后面的内容吧。\n如果在正式游戏过程中可以以0伤害清理怪物获得资源时,也适用这样的计算方法。",
+            {
+                "type": "jump",
+                "to": [
+                    5,
+                    0
+                ],
+                "time": 500
+            },
+            {
+                "type": "hide",
+                "remove": true
+            }
+        ],
+        "3,8": [
+            {
+                "type": "animationDrawable",
+                "allFarme": 30,
+                "color": [
+                    0,
+                    0,
+                    0
+                ],
+                "imageList": [
+                    {
+                        "image": ""
+                    }
+                ],
+                "soundList": [
+                    {
+                        "sound": "",
+                        "startfarme": 0,
+                        "stopbefore": false
+                    }
+                ]
+            }
+        ]
+    },
+    "changeFloor": {
+        "6,12": {
+            "floorId": "jiaocheng01",
+            "loc": [
+                6,
+                0
+            ]
+        },
+        "6,0": {
+            "floorId": "jiaocheng03",
+            "loc": [
+                6,
+                12
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [  0, 31,  0,217, 33,  0, 91,  1,402,  1,404,  1,203],
+    [216,  1,  0,  1,  1,  1,  1,  1,402,  1,404,  1,  1],
+    [216,  1, 31,  1,  0,  0,  0, 81,  0,  1,  0,  1,425],
+    [425,  1, 21,  1,216,  1,216,  1,  1,  1, 81,  1,  1],
+    [  0,  1,  1,  1,  0,  1,  0,  0,  0,425,  0,  0,  0],
+    [ 31,  1, 32,  1,  0,  1,  1,  0,  1,  1,  1,  1,425],
+    [  0, 82,  0,  1,  0,  1, 21, 33,  1, 33,  0, 81,  0],
+    [  0,  1,  1,  1,217,  1,  1,  1,  1,  1,  1,  1, 22],
+    [203,  1, 33,  0,  0,403,403,403,403,  1,  0,  0,  0],
+    [  0,  1,  1,  1,  0,  1,  1,  1,  1,  1,203,  1, 82],
+    [ 33,  0,425,  1,  0,  1,  0,203,  0,124,  0,  1,  0],
+    [  0, 82,  0,  1,217,  1,  0,  1,  1, 81,  1,  1, 21],
+    [216,  0,  0, 22,  0,  1, 93,  1,401,  0,401,  1, 21]
+],
+    "areas": "教程",
+    "bgmap": [
+
+],
+    "fgmap": [
+
+],
+    "bg2map": [
+
+],
+    "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/floors/jiaocheng03.js b/project/floors/jiaocheng03.js
new file mode 100644
index 0000000..756affb
--- /dev/null
+++ b/project/floors/jiaocheng03.js
@@ -0,0 +1,175 @@
+main.floors.jiaocheng03=
+{
+    "floorId": "jiaocheng03",
+    "title": "广场",
+    "name": "1",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {
+        "0,0": [
+            "匕首:速度+20"
+        ],
+        "12,0": [
+            "法杖:魔攻比例10%,魔防比例0%"
+        ],
+        "6,0": [
+            {
+                "type": "setHeroOpacity",
+                "opacity": 0
+            },
+            {
+                "type": "function",
+                "function": "function(){\ncore.unloadEquip(0, () => {\n\tcore.setItem(\"sword0\", 0);\n\tcore.setItem(\"I375\", 0)\n\tcore.setItem(\"yellowKey\", 0)\n\tcore.setItem(\"blueKey\", 0)\n\tcore.setItem(\"redKey\", 0)\n\tcore.setItem(\"greenKey\", 0)\n\tcore.status.hero.hp = 1000\n\tcore.status.hero.atk = 16\n\tcore.status.hero.def = 16\n\tcore.status.hero.spell = 0\n\tcore.status.hero.speed = 20\n\tcore.updateStatusBar()\n})\n}"
+            },
+            {
+                "type": "tip",
+                "text": "教学层属性已清空"
+            },
+            {
+                "type": "changeFloor",
+                "floorId": "guangchang",
+                "loc": [
+                    6,
+                    10
+                ]
+            }
+        ],
+        "6,11": [
+            "\t[小妖精,fairy]接下来是能力价值判断。\n首先击败我右边的怪物,然后你需要在这三扇黄门中打开正确的一扇。\n打开错误的黄门将使你的生命值不足以抗住战斗伤害,并死亡。\n当然,你随时可以使用读取自动存档功能撤销错误的选择。",
+            {
+                "type": "jump",
+                "to": [
+                    6,
+                    9
+                ],
+                "time": 500,
+                "keep": true
+            },
+            {
+                "type": "hide",
+                "remove": true
+            }
+        ],
+        "6,9": [
+            "\t[小妖精,fairy]刚才你应该是选择了红宝石,对吗?\n选择蓝宝石将见不到我,而选择红血瓶你将会因为能力不够而折戟在后面的怪物上。\n在除决战时刻以外的场合,获取能力都应该优于获取生命值,哪怕是看似不起眼的法强/护盾。",
+            "\t[小妖精,fairy]刚才为什么要增加2点攻击而不是2点防御呢?\n你应该看过了怪物手册才对。\n攻击临界表中有一项\"2:84\",意味着2点攻击可以降低84点战斗伤害。\n而1防减伤仅有36,意味着2点防御仅能降低72点战斗伤害。\n多出来的这部分战斗伤害,暂时是不可承受之重。",
+            "\t[小妖精,fairy]实际战斗中又应该怎么规划呢?\n观察到,角色的攻击防御之和为50,而怪物的攻击防御之和为56。\n在攻击/防御二选一的时候,一般攻防和高于怪物时加防御效果更好,低于怪物时则选择爆攻击。\n当然,怪物生命极低,角色接近一刀将其秒杀时,加攻击的效果也很好。",
+            "\t[小妖精,fairy]接下来是含速度的能力价值判断。\n你需要在这三扇红门中打开正确的一扇。\n打开错误的红门将使你的生命值不足以抗住战斗伤害,并死亡。\n当然,你随时可以使用读取自动存档功能撤销错误的选择。",
+            {
+                "type": "jump",
+                "to": [
+                    6,
+                    7
+                ],
+                "time": 500,
+                "keep": true
+            },
+            {
+                "type": "hide",
+                "remove": true
+            }
+        ],
+        "6,7": [
+            "\t[小妖精,fairy]刚才你应该是选择了黄宝石,为什么呢?",
+            "\t[小妖精,fairy]首先排除2点防御力——敌人的单次攻击伤害高达93点,2点防御力的减伤杯水车薪。\n然后是在2点速度和2点攻击力中选择。\n在怪物手册中,速度临界值为1,可以减伤93点;攻击临界值为3,可以减伤93点。\n获取2点攻击力不足以达到怪物的攻击临界值。",
+            "\t[小妖精,fairy]实际战斗中又应该怎么决策呢?\n提高速度和攻击力都是为了减少被怪物攻击的次数,换句话说,缩短战斗的时间。\n因此,我们追求在更短的时间内打出更高的伤害,也就是更高的DPS。\n观察到,角色对怪物的DPS(速度*单次攻击伤害)为20*30=600。\n提高2点速度将使DPS提升为22*30=660,而提高2点攻击力将使DPS提升为20*32=640。\n简单地说,我们需要增加速度和(攻击-怪物防御)中较小的一项。就是个均值不等式。",
+            "\t[小妖精,fairy]下一个三选一见。\n怪物的“先攻”特殊属性,意味着怪物已经处于攻击姿态,在角色表现敌意的一霎那就会受到怪物的攻击。\n你需要在这三扇蓝门中打开正确的一扇。\n打开错误的蓝门将使你的生命值不足以抗住战斗伤害,并死亡。\n当然,你随时可以使用读取自动存档功能撤销错误的选择。",
+            {
+                "type": "jump",
+                "to": [
+                    6,
+                    4
+                ],
+                "time": 500,
+                "keep": true
+            },
+            {
+                "type": "hide",
+                "remove": true
+            }
+        ],
+        "6,4": [
+            "\t[小妖精,fairy]刚才你应该是选择了1黄宝石1红宝石的组合,但——到底是什么原理?",
+            "\t[小妖精,fairy]接下来要讲的是本作一个非常隐蔽的现象——混合临界。\n混合临界仅会出现在角色的速度高于怪物速度的时候。\n出现混合临界的条件是,在怪物对角色进行最后一次攻击后,角色进行了两次以上的攻击才击杀了怪物。\n为了方便理解,可以画一个时间轴,从怪物最后一次攻击算起。",
+            "\t[小妖精,fairy]单纯提高攻击力来降低被攻击次数的话,需要让角色击杀怪物的攻击次数减少2,而不是1。\n在刚才的战斗中,角色的攻击力为32,击杀怪物需要162/(32-1)=6次攻击。\n要达到降低被攻击次数效果的话,将攻击力提升至162/5+1=34点并不足够。\n需要将攻击力提升至162/4+1=42点。",
+            "\t[小妖精,fairy]同样地,单纯提高速度来降低被攻击次数的话,需要让角色的最后一次攻击提前到怪物攻击之前,而不是倒数第二次攻击。\n在刚才的战斗中,怪物最后一次攻击的时刻为3/14=0.214。\n角色在5/22=0.227,6/22=0.273两个时刻分别攻击了怪物,其中0.273时刻对怪物的攻击造成了击杀。\n要达到降低被攻击次数效果的话,将速度提升至5+/0.214=24点并不足够,因为角色需要6次攻击才能击杀怪物。\n需要将速度提升至6+/0.214=29点。",
+            "\t[小妖精,fairy]但值得庆幸的是,我们还要第三种办法——同时增强速度和攻击。\n我们少量提升攻击力至34点,使击杀怪物仅需要5次攻击。\n然后再少量提升速度至24点,使我们的第5次攻击落在0.214时刻,即怪物的最后一次攻击前。\n这样,我们仅用了4点能力提升,就达到了单独提升某项能力10点或7点的效果。",
+            "\t[小妖精,fairy]接下来是法强(护盾)和防御的价值判断。\n希望你能在这三扇黄门中打开正确的一扇。",
+            {
+                "type": "jump",
+                "to": [
+                    6,
+                    2
+                ],
+                "time": 500,
+                "keep": true
+            },
+            {
+                "type": "hide",
+                "remove": true
+            }
+        ],
+        "6,2": [
+            "\t[小妖精,fairy]防御和护盾的比较就非常简单了。\n2点防御的价值是2*2=4点减伤,而5点法强的价值是5点减伤。\n如果仅以这一个怪物为准的话,获取5点法强是更优解。\n当然,我不会责备你刚才选择了红血瓶——因为没命的话,就啥也不是了。",
+            "\t[小妖精,fairy]但最终的守卫怪物是个坚固怪物——它每次攻击至多只会受到1点物理伤害。\n左边的红门里面,守着的是一把提高20速度的匕首。\n右边的红门里面,守着的是一把以10%效率将魔法强度转化为魔法攻击的法杖(当然护盾就没有了)。\n值得一提的是,本作魔法强度在转化成魔法攻击的时候,是向下取整的。",
+            "\t[小妖精,fairy]除此之外,你还拥有2把蓝钥匙来进一步提升自己的战斗力。\n为了击败面前的最终怪物,进行最后的二选一和七选二吧!\n不要忘了上一张地图内含250生命值的蓝门哦。\n综合利用攻防判断,DPS判断等手段,保留更多的生命值吧!",
+            {
+                "type": "hide",
+                "remove": true
+            }
+        ]
+    },
+    "changeFloor": {
+        "6,12": {
+            "floorId": "jiaocheng02",
+            "loc": [
+                6,
+                0
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [129,  1,401,  1,402,  1, 91,  1,403,  1,404,  1,129],
+    [ 70,  1, 82,  1, 82,  1,236,  1, 82,  1, 82,  1,375],
+    [  0, 83,  0,403,  0, 33,  0, 31,  0, 23,  0, 83,  0],
+    [  1,  1,  1,  1,  1,  1,219,  1,  1,  1,  1,  1,  1],
+    [  0, 22,  0, 31,  0, 31,  0,  1,401,  1,404,  1,404],
+    [ 81,  1, 81,  1, 81,  1, 22,  1,401,  1,404,  1,401],
+    [403,  1, 31,  1, 31,  1,218,  1, 82,  1, 82,  1, 82],
+    [402,  1,402,  1,403,  1,  0, 81,  0, 33,  0, 21,  0],
+    [  1,  1,  1,  1,  1,  1,240,  1,  1,  1,  1,  1,  1],
+    [  0, 33,  0, 21,  0,403,  0,  1,401,  1,402,  1, 31],
+    [ 83,  1, 83,  1, 83,  1,204,  1, 81,  1, 81,  1, 81],
+    [402,  1,404,  1,401,129,124,204,  0, 33,  0, 23,  0],
+    [  1,  1,  1,  1,  1,  1, 93,  1,  1,  1,  1,  1,  1]
+],
+    "areas": "牢狱",
+    "bgmap": [
+
+],
+    "fgmap": [
+
+],
+    "bg2map": [
+
+],
+    "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/floors/jiuguan.js b/project/floors/jiuguan.js
index 02fa764..07f4309 100644
--- a/project/floors/jiuguan.js
+++ b/project/floors/jiuguan.js
@@ -32,6 +32,7 @@ main.floors.jiuguan=
                 "type": "over",
                 "text": "这段话将在屏幕中心",
                 "image": "bg_5043.png",
+                "memory": false,
                 "time": 3000,
                 "hidetime": 30,
                 "sound": "",
diff --git a/project/floors/street01.js b/project/floors/street01.js
index dceac7f..62ca09a 100644
--- a/project/floors/street01.js
+++ b/project/floors/street01.js
@@ -10,7 +10,7 @@ main.floors.street01=
     "canUseQuickShop": true,
     "images": [],
     "ratio": 1,
-    "defaultGround": "X90001",
+    "defaultGround": "X90078",
     "firstArrive": [],
     "eachArrive": [],
     "parallelDo": "",
@@ -25,68 +25,21 @@ main.floors.street01=
                 ],
                 "direction": "up"
             }
-        ],
-        "6,11": [
-            {
-                "type": "insert",
-                "name": "chapter04"
-            }
-        ],
-        "4,11": [
-            {
-                "type": "animationDrawable",
-                "allFarme": 300,
-                "color": [
-                    0,
-                    0,
-                    0
-                ],
-                "imageList": [
-                    {
-                        "image": "bg_1511.webp",
-                        "beforefarme": 50,
-                        "globalAlpha": 0,
-                        "afterfarme": 250,
-                        "aglobalAlpha": 100
-                    },
-                    {
-                        "image": "eve_010304.webp",
-                        "beforefarme": 70,
-                        "globalAlpha": 0,
-                        "afterfarme": 170,
-                        "aglobalAlpha": 100,
-                        "ax": 0,
-                        "ay": 0
-                    },
-                    {
-                        "image": "eve_010304.webp",
-                        "beforefarme": 171,
-                        "globalAlpha": 100,
-                        "afterfarme": 270,
-                        "aglobalAlpha": 100,
-                        "ax": 800,
-                        "ay": 0
-                    }
-                ],
-                "soundList": [
-                    {
-                        "sound": "",
-                        "startfarme": 0,
-                        "stopbefore": false
-                    }
-                ]
-            },
-            {
-                "type": "op"
-            }
         ]
     },
     "changeFloor": {
+        "12,9": {
+            "floorId": "zhujuejia",
+            "loc": [
+                0,
+                9
+            ]
+        },
         "0,8": {
-            "floorId": "street02",
+            "floorId": "changguan2",
             "loc": [
                 12,
-                6
+                8
             ]
         }
     },
@@ -116,27 +69,27 @@ main.floors.street01=
     [110124,  0,200176,200177,200178,200179,71786,90064,90064,90064,  0,90064,110125],
     [110124,  0,200088,200089,200004,200005,200006,71795,  0,  0,  0,  0,110125],
     [110118,110118,200096,110116,110020,  0,200014,  0,  0,  0,  0,  0,110125],
-    [ 92,  0,  0,110124,  0,201,  0,  0,110125,110122,110122,110122,110122],
-    [  0,  0,  0,110118,110118,202,110118,110118,110122,  0,  0,  0, 94],
-    [130170,  0,  0,  0, 71, 35,  0,  0,  0,  0,  0,  0,  0],
-    [130178,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,130168,130169],
-    [130225,130169,130169,130169,130169,130170,110122,110122,130168,130169,130169,130224,130177]
+    [ 92,  0,  0,110124,  0,  0,  0,  0,110125,110122,110122,110122,110122],
+    [  0,  0,  0,110118,110118,  0,110118,110118,110122,  0,  0,  0, 94],
+    [140,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,140],
+    [140,140,140,140,140,140186,110138,110138,140184,140,140,140,140]
 ],
     "areas": "牢狱",
     "bgmap": [
-    [90001,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,90001],
-    [90001,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,90001],
-    [90001,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,90001],
-    [90001,71818,71819,  0,  0,  0,  0,  0,  0,  0,10036,  0,90001],
-    [90001,71826,71827,  0,  0,  0,  0,  0,  0,  0,  0,  0,90001],
-    [90001,  0,  0,  0,  0,  0,71786,  0,60135,60135,60135,60135,  0],
-    [90001,  0,  0,  0,  0,  0,  0,  0,  0,90001,90001,90001,  0],
-    [90001,90001,90001,  0,  0,  0,  0,  0,90001,  0,  0,  0,  0],
-    [70032,70032,70025,  0,  0,90244,90001,90001,90001,  0,  0,  0,  0],
-    [70025,70025,70025,90001,90001,90244,90001,90001,90001,70025,70025,70025,70025],
-    [  0,70025,70025,70025,70025,70025,70025,70025,70025,70025,70025,70025,70025],
-    [  0,70025,70025,70025,70025,70025,70025,70025,70025,70025,70025,  0,  0],
-    [  0,  0,  0,  0,  0,  0,90001,90001,  0,  0,  0,  0,  0]
+    [90078,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,90078],
+    [90078,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,90078],
+    [90078,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,90078],
+    [90078,71818,71819,  0,  0,  0,  0,  0,  0,  0,10036,  0,90078],
+    [90078,71826,71827,  0,  0,  0,  0,  0,  0,  0,  0,  0,90078],
+    [90078,  0,  0,  0,  0,  0,71786,  0,60135,60135,60135,60135,90078],
+    [90078,  0,  0,  0,  0,  0,  0,  0,90078,90078,90078,90078,  0],
+    [90078,90078,90078,  0,  0,  0,  0,  0,90078,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,90244,90078,90078,90078,  0,  0,  0,  0],
+    [  0,  0,  0,90078,90078,90244,90078,90078,90078,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,90078,90078,  0,  0,  0,  0,  0]
 ],
     "fgmap": [
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,130076],
@@ -149,8 +102,8 @@ main.floors.street01=
     [  0,  0,  0,  0,  0,  0,  0,  0,110143,110114,110114,110114,110114],
     [  0,  0,  0,110114,120095,  0,120095,120095,110114,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,110114,110114,  0,  0,  0,  0,  0],
+    [  0,140186,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,140194,  0,  0,  0,  0,  0,  0,  0,  0,140184,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
     "bg2map": [
diff --git a/project/floors/street02.js b/project/floors/street02.js
index 2c49a82..9bce79d 100644
--- a/project/floors/street02.js
+++ b/project/floors/street02.js
@@ -16,13 +16,6 @@ main.floors.street02=
     "parallelDo": "",
     "events": {},
     "changeFloor": {
-        "12,6": {
-            "floorId": "street01",
-            "loc": [
-                0,
-                8
-            ]
-        },
         "0,6": {
             "floorId": "guangchang",
             "loc": [
@@ -30,6 +23,13 @@ main.floors.street02=
                 6
             ],
             "direction": "left"
+        },
+        "12,8": {
+            "floorId": "street01",
+            "loc": [
+                0,
+                8
+            ]
         }
     },
     "beforeBattle": {},
@@ -46,9 +46,9 @@ main.floors.street02=
     [141,141,141,141,141,141,141,141,141,141,141,141,141],
     [140,140,140,140,140,140,140,140,140,140,140,140,140],
     [  0,  0,140, 27,  0,210,  0,209,  0,  0,217,  0,  0],
-    [ 92,  0,140,140,140,140,  0,140,140,140,140,  0, 94],
+    [ 92,  0,140,140,140,140,  0,140,140,140,140,  0,140],
     [  0,  0,217,  0,  0,209,  0,210,  0, 28,140,  0,  0],
-    [140,140,140,140,140,140,140,140,140,140,140,140,140],
+    [140,140,140,140,140,140,140,140,140,140,140,140, 94],
     [141,141,141,141,141,141,141,141,141,141,141,141,141],
     [141,141,141,141,141,141,141,141,141,141,141,141,141],
     [141,141,141,141,141,141,141,141,141,141,141,141,141],
diff --git a/project/floors/xiaoxiang01.js b/project/floors/xiaoxiang01.js
index 3943dfe..6cc4e72 100644
--- a/project/floors/xiaoxiang01.js
+++ b/project/floors/xiaoxiang01.js
@@ -16,13 +16,6 @@ main.floors.xiaoxiang01=
     "parallelDo": "",
     "events": {},
     "changeFloor": {
-        "0,10": {
-            "floorId": "guangchang2",
-            "loc": [
-                12,
-                10
-            ]
-        },
         "12,7": {
             "floorId": "xiaoxiang02",
             "loc": [
@@ -36,6 +29,13 @@ main.floors.xiaoxiang01=
                 6,
                 0
             ]
+        },
+        "0,7": {
+            "floorId": "guangchang2",
+            "loc": [
+                12,
+                10
+            ]
         }
     },
     "beforeBattle": {},
@@ -46,31 +46,79 @@ main.floors.xiaoxiang01=
     "cannotMove": {},
     "cannotMoveIn": {},
     "map": [
-    [141,141,141,141,141,141,141,141,141,141,141,141,141],
-    [141,141,141,141,141,141,141,141,141,141,141,141,141],
-    [141,141,141,141,141,141,141,141,141,141,141,141,141],
-    [140,140,140,140,140,140,140,140,140,140,140,140,140],
-    [140, 30,140,  0, 81,  0,221,  0,224,  0, 28, 27,140],
-    [140,224,140,225,140, 31,140,  0,140,140,140,224,140],
-    [140,  0, 32,  0,140,  0,140,225,140,224,  0,  0,140],
-    [140,225,140,140,140, 81,140,  0,  0,  0,140,  0, 94],
-    [140,  0,222,  0,221,  0,140, 81,140,225,140,140,140],
-    [140,140,140, 81,140,140,140,  0,140,  0, 81, 31,140],
-    [ 92,  0, 32, 22, 32,140, 31,  0,140,  0,140,140,140],
-    [140, 21, 21, 21, 21,140,  0,  0, 81,  0,222, 29,140],
-    [140,140,140,140,140,140, 93,140,140,140,140,140,140]
+    [143,143,143,143,130193,130193,130193,130193,130193,143,143,143,143],
+    [143,143,143,143,130060,130061,130062,  0,120074,143,143,143,143],
+    [143,130193,130193,130194,130068,130069,130070,130090,120023,130192,130193,130193,143],
+    [130194,130201,130201,130202,130015,120041,130099,130098,120031,130200,130201,130201,143],
+    [130202, 30,201029,  0, 81,  0,221,  0,224,  0, 28, 27,130192],
+    [120139,224,201037,225,201037, 31,201021,  0,110121,110122,110122,224,130200],
+    [120147,  0, 32,  0,200199,  0,201029,225,110132,224,  0,  0,90675],
+    [120164,225,200998,200999,201037, 81,201029,  0,  0,  0,110116,  0, 94],
+    [120172,  0,222,  0,221,  0,201029, 81,110116,225,110137,110138,90650],
+    [120180,201037,201037, 81,201037,201037,201037,246,110124,  0, 81, 31,90658],
+    [ 92, 32, 32, 22, 21,80089, 31,  0,110132,  0,110122,110122,110197],
+    [140,110191, 21, 21, 21,80089,  0,246, 81,  0,222, 29,110197],
+    [140,140,140,110191,80083,80097, 93,110138,110138,140189,140,140,140]
 ],
     "areas": "牢狱",
     "bgmap": [
-
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078]
 ],
     "fgmap": [
-
+    [  0,  0,  0,  0,  0,120080,  0,  0,120066,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,130007,  0,130091,  0,  0,  0,  0,  0,  0],
+    [120124,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [120132,  0,  0,  0,201021,  0,  0,  0,110114,110114,110114,  0,  0],
+    [  0,  0,  0,  0,200191,  0,  0,  0,  0,  0,  0,  0,90667],
+    [  0,  0,200990,200991,201021,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,201021,201021,  0,201021,201021,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,110114,110114,110189],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
     "bg2map": [
-
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,130201,130201,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,120082,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,110134,110134,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
     "fg2map": [
-
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,201021,  0,200175,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,200183,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ]
 }
\ No newline at end of file
diff --git a/project/floors/xiaoxiang02.js b/project/floors/xiaoxiang02.js
index 13e9a9d..cd94f20 100644
--- a/project/floors/xiaoxiang02.js
+++ b/project/floors/xiaoxiang02.js
@@ -32,29 +32,65 @@ main.floors.xiaoxiang02=
     "cannotMove": {},
     "cannotMoveIn": {},
     "map": [
-    [141,141,141,141,141,141,141,141,141,141,141,141,141],
-    [141,141,141,141,141,141,141,141,141,141,141,141,141],
-    [141,141,141,141,141,141,141,141,141,141,141,141,141],
-    [140,140,140,140,140,140,140,140,140,140,140,140,140],
-    [140,  0, 81,  0,140,  0,  0,  0,  0,140,  0,  0,140],
-    [140,  0,140,  0,140,140,140,140, 81,140,140, 81,140],
-    [140,  0,140,  0,  0,  0,  0,  0,  0,  0,  0,  0,140],
-    [ 92,  0,140,140,140,140, 81,140,140,140, 81,140,140],
-    [140,  0,  0,  0,  0,  0,  0,  0,  0,140,  0,  0,140],
-    [140,140,140,140,140,  0,140,140, 82,140,140,  0,140],
-    [140,  0,  0,  0,140,  0,140,  0,  0,  0, 81,  0,140],
-    [140,  0,  0,  0, 81,  0,140,  0,  0,  0,140,  0,140],
-    [140,140,140,140,140,140,140,140,140,140,140,140,140]
+    [143,143,143,143,143,120166,120166,110205,110206,110206,110206,110206,110206],
+    [143,143,143,143,143,120174,120174,130192,130193,130193,130193,130193,130193],
+    [143,130193,130193,130193,130194,190142,90771,130192,130193,130193,130193,130193,130193],
+    [143,130201,130201,130201,130202,190150,190150,130200,130201,  0,130201,130201,130201],
+    [130194,  0, 81,  0,72106,  0,  0,  0,  0,72106,  0,  0,143],
+    [130202,  0,110116,  0,90064,90064,90064,90064, 81,90064,90064, 81,143],
+    [90675,  0,110124,  0,  0,  0,  0,  0,  0,  0,  0,  0,143],
+    [ 92,  0,110122,110122,110122,110122, 81,110122,110122,110122, 81,110122,143],
+    [90651,  0,  0,  0,  0,  0,  0,  0,  0,110129,  0,  0,143],
+    [90659,71844,110122,200199,110122,  0,110121,110122, 82,110122,110122,  0,143],
+    [110199,  0,  0,  0, 81,  0,110129,  0,  0,  0, 81,  0,130192],
+    [110199,  0,  0,  0,110117,  0,110129,  0,  0,  0,200637,  0,143],
+    [140,140,140,140,110191,72098,72098,72098,143,143,143,143,143]
 ],
     "areas": "牢狱",
     "bgmap": [
-
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078]
 ],
     "fgmap": [
-
+    [  0,  0,  0,  0,  0,200063,200063,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,90799,110072],
+    [  0,  0,90804,  0,  0,190023,190148,  0,90797,  0,  0,  0,110080],
+    [  0,  0,  0,  0,72112,  0,190030,  0,90805,72112,  0,  0,110088],
+    [  0,  0,  0,  0,  0,72098,72098,72098,  0,  0,72098,  0,  0],
+    [90667,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,110114,110114,110114,110114,  0,110114,110114,110114,  0,110114,  0],
+    [  0,  0,  0,200175,  0,  0,  0,  0,  0,110116,  0,  0,  0],
+    [  0,110114,110114,200191,110114,  0,110114,110114,  0,110114,110114,  0,  0],
+    [110191,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,200638,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
     "bg2map": [
-
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,110122,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,110133,  0,110132,  0,  0,  0,  0,  0,  0]
 ],
     "fg2map": [
 
diff --git a/project/floors/xiaoxiang3.js b/project/floors/xiaoxiang3.js
index 9b9d310..06871b2 100644
--- a/project/floors/xiaoxiang3.js
+++ b/project/floors/xiaoxiang3.js
@@ -14,7 +14,68 @@ main.floors.xiaoxiang3=
     "firstArrive": [],
     "eachArrive": [],
     "parallelDo": "",
-    "events": {},
+    "events": {
+        "4,8": {
+            "trigger": null,
+            "enable": false,
+            "noPass": null,
+            "displayDamage": true,
+            "opacity": 1,
+            "filter": {
+                "blur": 0,
+                "hue": 0,
+                "grayscale": 0,
+                "invert": false,
+                "shadow": 0
+            },
+            "data": []
+        },
+        "8,8": {
+            "trigger": null,
+            "enable": false,
+            "noPass": null,
+            "displayDamage": true,
+            "opacity": 1,
+            "filter": {
+                "blur": 0,
+                "hue": 0,
+                "grayscale": 0,
+                "invert": false,
+                "shadow": 0
+            },
+            "data": []
+        },
+        "7,10": {
+            "trigger": null,
+            "enable": false,
+            "noPass": null,
+            "displayDamage": true,
+            "opacity": 1,
+            "filter": {
+                "blur": 0,
+                "hue": 0,
+                "grayscale": 0,
+                "invert": false,
+                "shadow": 0
+            },
+            "data": []
+        },
+        "5,10": {
+            "trigger": null,
+            "enable": false,
+            "noPass": null,
+            "displayDamage": true,
+            "opacity": 1,
+            "filter": {
+                "blur": 0,
+                "hue": 0,
+                "grayscale": 0,
+                "invert": false,
+                "shadow": 0
+            },
+            "data": []
+        }
+    },
     "changeFloor": {
         "6,0": {
             "floorId": "xiaoxiang01",
@@ -28,117 +89,112 @@ main.floors.xiaoxiang3=
     "afterBattle": {
         "6,8": [
             {
-                "type": "setValue",
-                "name": "flag:door_xiaoxiang3_4_9",
-                "operator": "+=",
-                "value": "1"
-            },
-            {
-                "type": "setValue",
-                "name": "flag:door_xiaoxiang3_8_9",
-                "operator": "+=",
-                "value": "1"
-            },
-            {
-                "type": "setValue",
-                "name": "flag:door_xiaoxiang3_6_11",
-                "operator": "+=",
-                "value": "1"
+                "type": "show",
+                "loc": [
+                    [
+                        4,
+                        8
+                    ],
+                    [
+                        5,
+                        10
+                    ],
+                    [
+                        7,
+                        10
+                    ],
+                    [
+                        8,
+                        8
+                    ],
+                    [
+                        6,
+                        12
+                    ]
+                ],
+                "time": 500
             }
         ]
     },
     "afterGetItem": {},
     "afterOpenDoor": {},
-    "autoEvent": {
-        "4,9": {
-            "0": {
-                "condition": "flag:door_xiaoxiang3_4_9==1",
-                "currentFloor": true,
-                "priority": 0,
-                "delayExecute": false,
-                "multiExecute": false,
-                "data": [
-                    {
-                        "type": "openDoor"
-                    },
-                    {
-                        "type": "setValue",
-                        "name": "flag:door_xiaoxiang3_4_9",
-                        "operator": "=",
-                        "value": "null"
-                    }
-                ]
-            }
-        },
-        "8,9": {
-            "0": {
-                "condition": "flag:door_xiaoxiang3_8_9==1",
-                "currentFloor": true,
-                "priority": 0,
-                "delayExecute": false,
-                "multiExecute": false,
-                "data": [
-                    {
-                        "type": "openDoor"
-                    },
-                    {
-                        "type": "setValue",
-                        "name": "flag:door_xiaoxiang3_8_9",
-                        "operator": "=",
-                        "value": "null"
-                    }
-                ]
-            }
-        },
-        "6,11": {
-            "0": {
-                "condition": "flag:door_xiaoxiang3_6_11==1",
-                "currentFloor": true,
-                "priority": 0,
-                "delayExecute": false,
-                "multiExecute": false,
-                "data": [
-                    {
-                        "type": "openDoor"
-                    },
-                    {
-                        "type": "setValue",
-                        "name": "flag:door_xiaoxiang3_6_11",
-                        "operator": "=",
-                        "value": "null"
-                    }
-                ]
-            }
-        }
-    },
+    "autoEvent": {},
     "cannotMove": {},
     "cannotMoveIn": {},
     "map": [
-    [140,140,140,140,  0,  0, 91,  0,  0,140,140,140,140],
-    [140,140,140,140,  0,  0,  0,  0,  0,140,140,140,140],
-    [140,140,140,140,140,140,  0,140,140,140,140,140,140],
-    [140,140,140,140,140,140,  0,140,  0,140,140,140,140],
-    [140,140,140,140,  0,  0,  0,  0,  0,140,140,140,140],
-    [140,140,140,140,140,140, 83,140,140,140,140,140,140],
-    [140,140,140,140,  0,  0,  0,  0,  0,140,140,140,140],
-    [140,140,140,140,  0,  0,  0,  0,  0,140,140,140,140],
-    [140,140,140,140,  0,  0,247,  0,  0,140,140,140,140],
-    [140,140,140,140, 85,140,  0,140, 85,140,140,140,140],
-    [140,140,140,140, 34,140,  0,140, 27,140,140,140,140],
-    [140,140,140,140, 21,140, 85,140, 28,140,140,140,140],
-    [140,140,140,140,140,140, 93,140,140,140,140,140,140]
+    [  0,  0,  0,140199,80091,80092, 91,110146,110146,140197,  0,  0,  0],
+    [  0,  0,  0,140,140,140,  0,140,  0,  0,  0,  0,  0],
+    [  0,  0,  0,140204,140206,140206,140206,140206,140206,140203,  0,  0,  0],
+    [  0,  0,  0,140199,170263,170252,170253,170254,170263,140197,  0,  0,  0],
+    [  0,  0,  0,140199,170263,170260,  0,170262,170263,140197,  0,  0,  0],
+    [  0,  0,  0,140199,170263,170268, 83,170270,170263,140205,140206,140206,140206],
+    [  0,  0,  0,140199,71843,110122,  0,110122,90649,110208,110209,110209,110209],
+    [140206,140206,140206,140207,  0,  0,  0,  0,  0,110189,140,140,140],
+    [110209,110209,110209,110210, 21,  0,247,  0, 27,110197,140,140,140],
+    [140,140,140,110191,  0,  0,  0,  0,  0,110197,140,140,140],
+    [140,140,140,110199,  0, 34,  0, 28,  0,140,140,140,140],
+    [140,140,140,110199,110199,  0,  0,  0,110197,110204,110206,110206,110206],
+    [140,140,140,110199,110207,  0,  0,  0,110197,110199,110225,110225,110225]
 ],
     "areas": "牢狱",
     "bgmap": [
-
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078]
 ],
     "fgmap": [
-
+    [140,140,140,  0,  0,  0,  0,  0,  0,  0,140,140,140],
+    [140,140,140,140,140,140,140,140,140,140,140,140,140],
+    [140,140,140,  0,  0,  0,140206,110327,  0,  0,140,140,140],
+    [140,140,140,  0,  0,  0,170253,110335,  0,  0,140,140,140],
+    [140,140,140,  0,  0,110153,  0,110152,  0,  0,140,140,140],
+    [140,140,140,  0,71835,110161,  0,110160,90648,  0,  0,  0,  0],
+    [140,140,140,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,110191,  0,  0,  0,110189,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,110138,  0,110138,  0,  0,  0,  0,  0]
 ],
     "bg2map": [
-
+    [140,140,140,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140,140,140,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140,140,140,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140,140,140,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140,140,140,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,110216,  0,  0,  0],
+    [  0,  0,  0,110218,  0,  0,  0,  0,  0,110216,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,110218,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
     "fg2map": [
-
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,110319,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,110114,  0,110114,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ]
 }
\ No newline at end of file
diff --git a/project/floors/yiqu1.js b/project/floors/yiqu1.js
index 0fbd450..195b38f 100644
--- a/project/floors/yiqu1.js
+++ b/project/floors/yiqu1.js
@@ -11,41 +11,119 @@ main.floors.yiqu1=
     "images": [],
     "ratio": 1,
     "defaultGround": "grass2",
-    "firstArrive": [],
+    "firstArrive": [
+        {
+            "type": "setHeroOpacity",
+            "opacity": 1
+        },
+        {
+            "type": "setCurtain",
+            "time": 100
+        }
+    ],
     "eachArrive": [],
     "parallelDo": "",
     "events": {},
-    "changeFloor": {},
+    "changeFloor": {
+        "12,8": {
+            "floorId": "yiqu2",
+            "loc": [
+                0,
+                8
+            ]
+        },
+        "0,7": {
+            "floorId": "guangchang6",
+            "loc": [
+                12,
+                7
+            ]
+        }
+    },
     "beforeBattle": {},
     "afterBattle": {},
     "afterGetItem": {},
     "afterOpenDoor": {},
     "autoEvent": {},
-    "cannotMove": {},
-    "cannotMoveIn": {},
+    "cannotMove": {
+        "8,1": [
+            "right"
+        ]
+    },
+    "cannotMoveIn": {
+        "8,1": [
+            "right"
+        ]
+    },
     "map": [
-    [140,140,140,140,140,140, 91,140,140,140,140,140,140],
-    [140,140,140,140,140,140,  0,140,140,  0,  0,  0, 94],
-    [140,140,140,140,140,140,  0,  0,140,140, 81,  0,  0],
-    [140,140,140,140,140,140,  0,  0,  0,140,  0,140,140],
-    [140,  0,  0,  0,140,  0,  0,  0,140,140,140,140,140],
-    [140,  0,140,140,140,  0,140,  0,140,  0,  0,  0, 94],
-    [140,  0,  0,140,  0,  0,140,  0,  0,  0,  0,  0,140],
-    [ 92,  0,  0,140,140,140,140,  0,140,140, 81,140,140],
-    [140,140,  0,140,  0,  0,  0,  0,140,  0,  0,  0,140],
-    [140,  0,  0,  0,  0,  0,140,  0,140,  0,  0,  0,140],
-    [140,140,140,140,140,140,140,140,140,140,140,140,140],
-    [140,140,140,140,140,140,140,140,140,140,140,140,140],
-    [140,140,140,140,140,140,140,140,140,140,140,140,140]
+    [143,143,143,143,130193,130193,130193,130193,130193,143,143,143,143],
+    [143,143,143,143,130060,130061,130062,130201,130201,143,143,143,143],
+    [143,130193,130193,130194,130068,130069,130070,  0,120023,130192,130193,130193,143],
+    [130194,130201,130201,130202,130007,130006,130099,130098,120031,130200,130201,130201,143],
+    [130202, 32,  0, 21,201021,401,110116,  0,201, 81,  0, 21,130192],
+    [140101,  0,205,  0,201037,421,110124, 31,  0,110116, 31,  0,130200],
+    [140109,201037,  0,201037,200199, 81,110140,110138, 81,110138,110138,202,90667],
+    [ 92,201,  0,  0, 31,  0,202,  0,  0, 82,  0,  0,90675],
+    [120111,  0,  0, 21,  0,  0,201021,205,110138,110138,201021,  0, 94],
+    [120119,110122, 81,110122,201037,201,201029,402,  0, 21,201029,205,90650],
+    [120127,202, 31,202,201037,  0,201029,  0, 21,  0,201029,  0,110189],
+    [120135, 22,205,403,201037,202,201037,110122,110122, 81,201037,201,110197],
+    [143,130193,140170,130194,130068,130069,130070,  0,120023,130192,130157,130193,143],
+    [130194,130201,140178,130202,130007,130006,130099,130098,120031,130200,130167,130201,143],
+    [130202, 32,  0, 21,201021,401,220008,  0,201, 81,  0, 21,130192],
+    [140101,  0,205,  0,201037,421,220008, 31,  0,220008, 31,  0,130200],
+    [140109,201037,  0,201037,200199, 81,220012,220013, 81,220012,220013,202,90667],
+    [ 92,201,  0, 21,  0,  0,202,  0, 21,  0, 82,  0,90675],
+    [120111,  0,  0,  0,  0,  0,201021,205,110138,110138,201021,  0, 94],
+    [120119,220013, 81,220013,201037,201,201029,  0, 31,  0,201029,205,90650],
+    [120127,202, 31,202,201037,  0,201029, 21,  0,402,201029,  0,110189],
+    [120135, 22,205,403,201037,202,201037,220013,220013, 81,201037,201,110197],
+    [120143,110138,110138,110138,201029,  0,201,  0, 31,  0, 21,  0,110197]
 ],
     "bgmap": [
-
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078]
 ],
     "fgmap": [
-
+    [  0,  0,  0,  0,  0,120080,  0,  0,120066,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,120074,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,130091,130090,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,200175,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140093,  0,  0,  0,200183,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,201021,  0,201021,200191,  0,  0,220009,  0,  0,220009,  0,90667],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,220009,  0,220009,201021,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,201021,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,201021,  0,  0,220009,220009,  0,  0,  0,  0],
+    [  0,  0,  0,  0,201021,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
     "bg2map": [
-
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,130193,  0,  0,  0,  0,  0,120082,  0,130193,  0,  0],
+    [  0,  0,130201,  0,  0,  0,  0,  0,  0,  0,130201,  0,  0],
+    [  0,  0,  0,  0,130015,  0,  0,  0,  0,  0,  0,  0,  0],
+    [130076,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [130084,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,110146,110146,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,90658],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
     "fg2map": [
 
diff --git a/project/floors/yiqu10.js b/project/floors/yiqu10.js
index 98f1172..b276418 100644
--- a/project/floors/yiqu10.js
+++ b/project/floors/yiqu10.js
@@ -1,29 +1,29 @@
 main.floors.yiqu10=
 {
-"floorId": "yiqu10",
-"title": "主塔 10 层",
-"name": "10",
-"width": 13,
-"height": 13,
-"canFlyTo": true,
-"canFlyFrom": true,
-"canUseQuickShop": true,
-"images": [],
-"ratio": 1,
-"defaultGround": "grass2",
-"firstArrive": [],
-"eachArrive": [],
-"parallelDo": "",
-"events": {},
-"changeFloor": {},
-"beforeBattle": {},
-"afterBattle": {},
-"afterGetItem": {},
-"afterOpenDoor": {},
-"autoEvent": {},
-"cannotMove": {},
-"cannotMoveIn": {},
-"map": [
+    "floorId": "yiqu10",
+    "title": "主塔 10 层",
+    "name": "10",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {},
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
@@ -38,4 +38,16 @@ main.floors.yiqu10=
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
+    "bgmap": [
+
+],
+    "fgmap": [
+
+],
+    "bg2map": [
+
+],
+    "fg2map": [
+
+]
 }
\ No newline at end of file
diff --git a/project/floors/yiqu2.js b/project/floors/yiqu2.js
index 7dca682..9ebbfdc 100644
--- a/project/floors/yiqu2.js
+++ b/project/floors/yiqu2.js
@@ -10,12 +10,27 @@ main.floors.yiqu2=
     "canUseQuickShop": true,
     "images": [],
     "ratio": 1,
-    "defaultGround": "grass2",
+    "defaultGround": "X90078",
     "firstArrive": [],
     "eachArrive": [],
     "parallelDo": "",
     "events": {},
-    "changeFloor": {},
+    "changeFloor": {
+        "12,7": {
+            "floorId": "yiqu3",
+            "loc": [
+                0,
+                7
+            ]
+        },
+        "0,8": {
+            "floorId": "yiqu1",
+            "loc": [
+                12,
+                8
+            ]
+        }
+    },
     "beforeBattle": {},
     "afterBattle": {},
     "afterGetItem": {},
@@ -24,28 +39,64 @@ main.floors.yiqu2=
     "cannotMove": {},
     "cannotMoveIn": {},
     "map": [
-    [140,140,140,140,140,140,140,140,140,140,140,140,140],
-    [140,140,140,140,140,140,140,140,140,140,140,140,140],
-    [140,140,140,140,140,140,140,140, 32, 21, 28, 27,140],
-    [140,140,140,140,140,140,140,140,140, 82,140,140,140],
-    [140, 32,  0,  0,210,  0,140,  0,  0,214,  0,  0,140],
-    [140,140,140, 81,140,  0, 81,  0,140, 21,140,  0,140],
-    [140,  0,209,  0,140,140,140,210,140,140,140,  0,140],
-    [140,210,140,214,140, 27,140,  0,140, 22,  0,  0, 94],
-    [140,  0,209,  0, 81, 28,140,  0, 81, 21, 21, 21,  0],
-    [140,140,140,140,140,140,140,140,140,140,140,140,140],
-    [140,140,140,140,140,140,140,140,140,140,140,140,140],
-    [140,140,140,140,140,140,140,140,140,140,140,140,140],
-    [140,140,140,140,140,140,140,140,140,140,140,140,140]
+    [143,120034,140120,140121,120034,120012,  1,  1,  1,  1,  1,  1,  1],
+    [143,170007,140128,140129,170007,120019,  1,  1,  1,  1,  1,  1,  1],
+    [143,  0,  0,  0,  0,120019,  1,  1,  1,  1,  1,  1,  1],
+    [143, 81,  0, 22,  0,120020,  1,  1,  1,  1,  1,  0, 22],
+    [130194, 81,120014,120010,120010,120028,  1,  1,  1,  0, 83,  0,403],
+    [130202, 31,  0,209,  0,402,  1,  0, 34,  0,  1,209,  0],
+    [401,  0,202,  1, 32,  0,  1,405,  0,408,  1, 81,  1],
+    [  1,  1, 81,  1,  0,421,  1,  0,204,  0,  1,  0, 94],
+    [ 92,  0, 21,  1,  1, 81,  1,  1, 82,  1,  1,205,  1],
+    [  1,  1,  0,202,  0,  0, 32,209,  0,  1, 21,  0,  1],
+    [  0,201,  0,  1, 81,  1,  1,  1,  0,205,  0,  0,421],
+    [202,  1,  1,  1,  0,  1,402,  1,201,  1, 31,  1,  0],
+    [  0, 21, 21,  1,  0,202,  0,201,  0,  1,  1,  1, 22]
 ],
     "bgmap": [
-
+    [90078,90078,180033,180033,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078]
 ],
     "fgmap": [
-
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,120002,120002,120002,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
     "bg2map": [
-
+    [  0,180025,120034,120034,180025,180026,  0,  0,  0,  0,  0,  0,  0],
+    [  0,180025,180025,180025,180025,180026,  0,  0,  0,  0,  0,  0,  0],
+    [  0,180025,180025,180025,180025,180026,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,180025,130061,130060,180026,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
     "fg2map": [
 
diff --git a/project/floors/yiqu3.js b/project/floors/yiqu3.js
index 394234a..6acf6a5 100644
--- a/project/floors/yiqu3.js
+++ b/project/floors/yiqu3.js
@@ -1,41 +1,68 @@
 main.floors.yiqu3=
 {
-"floorId": "yiqu3",
-"title": "主塔 3 层",
-"name": "3",
-"width": 13,
-"height": 13,
-"canFlyTo": true,
-"canFlyFrom": true,
-"canUseQuickShop": true,
-"images": [],
-"ratio": 1,
-"defaultGround": "grass2",
-"firstArrive": [],
-"eachArrive": [],
-"parallelDo": "",
-"events": {},
-"changeFloor": {},
-"beforeBattle": {},
-"afterBattle": {},
-"afterGetItem": {},
-"afterOpenDoor": {},
-"autoEvent": {},
-"cannotMove": {},
-"cannotMoveIn": {},
-"map": [
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+    "floorId": "yiqu3",
+    "title": "主塔 3 层",
+    "name": "3",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {
+        "0,7": {
+            "floorId": "yiqu2",
+            "loc": [
+                12,
+                7
+            ]
+        },
+        "5,0": {
+            "floorId": "yiqu4",
+            "loc": [
+                5,
+                12
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [  1,  1,  1,  1,  1, 91,  1,  1,  1,  1,  1,  1,  1],
+    [  1,  1,  1,  1,  1,  0,  1,  1,  1, 31, 21,  1,  1],
+    [  1,  1,  1,  1,  1,203,  1,  1,  1,  1, 21,  1,  1],
+    [  1,  1,  1,  1,  1,  0,  1,  1,  1,  1,  0,  1,  1],
+    [  1,  1,  1,  1,  1,205,  1,  1,  1,  1, 82,  1,  1],
+    [  1,  0,202,  0,421,  0,421,  0, 31,  0,  0,  1,  1],
+    [  1,201,  1,  1, 81,  1,  1,  1,  1,  1, 81,  1,  1],
+    [ 92,  0,  1, 31,  0,209,  0,  1,403,  0,209,  1,  1],
+    [  1, 81,  1,  0,244,  0, 31,  1,  0,403,  0,  1, 23],
+    [205,  0,  1,  1,  1,  1, 82,  1,205,  1,  1,  1,  0],
+    [  0,209,  1,401,402,  0,  0,  1,  0,  1,244,  0, 31],
+    [205,  0,  1,  1,  1,  1,216,  1, 81,  1,  0, 81,  0],
+    [ 21,  0,203,  0, 31, 21,  0, 81,  0, 82,216,  0,203]
 ],
+    "bgmap": [
+
+],
+    "fgmap": [
+
+],
+    "bg2map": [
+
+],
+    "fg2map": [
+
+]
 }
\ No newline at end of file
diff --git a/project/floors/yiqu4.js b/project/floors/yiqu4.js
index 498b6cb..7462679 100644
--- a/project/floors/yiqu4.js
+++ b/project/floors/yiqu4.js
@@ -1,41 +1,68 @@
 main.floors.yiqu4=
 {
-"floorId": "yiqu4",
-"title": "主塔 4 层",
-"name": "4",
-"width": 13,
-"height": 13,
-"canFlyTo": true,
-"canFlyFrom": true,
-"canUseQuickShop": true,
-"images": [],
-"ratio": 1,
-"defaultGround": "grass2",
-"firstArrive": [],
-"eachArrive": [],
-"parallelDo": "",
-"events": {},
-"changeFloor": {},
-"beforeBattle": {},
-"afterBattle": {},
-"afterGetItem": {},
-"afterOpenDoor": {},
-"autoEvent": {},
-"cannotMove": {},
-"cannotMoveIn": {},
-"map": [
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+    "floorId": "yiqu4",
+    "title": "主塔 4 层",
+    "name": "4",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {
+        "5,12": {
+            "floorId": "yiqu3",
+            "loc": [
+                5,
+                0
+            ]
+        },
+        "12,11": {
+            "floorId": "yiqu5",
+            "loc": [
+                0,
+                11
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1],
+    [  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1],
+    [  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1],
+    [  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1],
+    [  1,  1,  1,421,  0,205,  0,421,  1,  1,  1,  1,  1],
+    [  1,  1,  1,  0,  1, 81,  1,  0, 81, 81,  0,205,  0],
+    [  0,244,  0, 31,  1,  0,  1, 31,  1,  1,216,  1, 31],
+    [  0,  1,425,  1,  1, 31,  1,  1, 22,  1,  0,  1,  1],
+    [ 31,  1,  0,  1,401,  1,402,  1,  0,  1, 32,  1,403],
+    [  0, 81, 21,  1,  0,  1,  0,  1,244, 81,  0, 81,  0],
+    [403,  1,  0,  1, 82,  1, 82,  1,  1,  1,216,  1,  1],
+    [  0,  1,421,  0, 21,  0, 32,  0,240, 21,  0,425, 94],
+    [  0,216,  0,  1,  1, 93,  1,  1,  1,  1,  1,  1,  1]
 ],
+    "bgmap": [
+
+],
+    "fgmap": [
+
+],
+    "bg2map": [
+
+],
+    "fg2map": [
+
+]
 }
\ No newline at end of file
diff --git a/project/floors/yiqu5.js b/project/floors/yiqu5.js
index 74f5bdd..2ebfddd 100644
--- a/project/floors/yiqu5.js
+++ b/project/floors/yiqu5.js
@@ -1,41 +1,61 @@
 main.floors.yiqu5=
 {
-"floorId": "yiqu5",
-"title": "主塔 5 层",
-"name": "5",
-"width": 13,
-"height": 13,
-"canFlyTo": true,
-"canFlyFrom": true,
-"canUseQuickShop": true,
-"images": [],
-"ratio": 1,
-"defaultGround": "grass2",
-"firstArrive": [],
-"eachArrive": [],
-"parallelDo": "",
-"events": {},
-"changeFloor": {},
-"beforeBattle": {},
-"afterBattle": {},
-"afterGetItem": {},
-"afterOpenDoor": {},
-"autoEvent": {},
-"cannotMove": {},
-"cannotMoveIn": {},
-"map": [
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
-    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+    "floorId": "yiqu5",
+    "title": "主塔 5 层",
+    "name": "5",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {
+        "0,11": {
+            "floorId": "yiqu4",
+            "loc": [
+                12,
+                11
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1],
+    [  1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1],
+    [  1,  0, 32,  1,  1,  1,426,  1,  1,  1,  1,  1,  1],
+    [  1, 82,  1,  1,  1,  1,  0,  1,  1, 31,  1,  1,  1],
+    [216,  0,216,  1,  1,  1, 83,  1,  1,  0,  1,  1,  1],
+    [  0,  1,  0,  1,  1,209,  0,209,  1, 81,  1,  1,  1],
+    [ 32,  1, 32,  0, 81,  0, 82,  0, 32,  0,216,  0, 22],
+    [  1,  1,  0,  1,  1,244,  1,  1, 81,  1,  1,  1,  1],
+    [ 31,  1,209,  1, 31,  0,403,  1,203,  0,244,  1, 31],
+    [  0,216,  0,  1,  1,  1,  1,  1,  0,203,  0,  1,  0],
+    [  1,  1, 32, 82,  0,402,  1,  1,209,  0, 34,  1, 81],
+    [ 92,  0,  0,  1,  1,  1,  1, 21,  1,  1, 21,  1, 22],
+    [  1,  1, 31, 82,  0,401,  1, 32,  0,425,  0,213,  0]
 ],
+    "bgmap": [
+
+],
+    "fgmap": [
+
+],
+    "bg2map": [
+
+],
+    "fg2map": [
+
+]
 }
\ No newline at end of file
diff --git a/project/floors/yiqu6.js b/project/floors/yiqu6.js
index 1399cff..633e6a3 100644
--- a/project/floors/yiqu6.js
+++ b/project/floors/yiqu6.js
@@ -1,29 +1,29 @@
 main.floors.yiqu6=
 {
-"floorId": "yiqu6",
-"title": "主塔 6 层",
-"name": "6",
-"width": 13,
-"height": 13,
-"canFlyTo": true,
-"canFlyFrom": true,
-"canUseQuickShop": true,
-"images": [],
-"ratio": 1,
-"defaultGround": "grass2",
-"firstArrive": [],
-"eachArrive": [],
-"parallelDo": "",
-"events": {},
-"changeFloor": {},
-"beforeBattle": {},
-"afterBattle": {},
-"afterGetItem": {},
-"afterOpenDoor": {},
-"autoEvent": {},
-"cannotMove": {},
-"cannotMoveIn": {},
-"map": [
+    "floorId": "yiqu6",
+    "title": "主塔 6 层",
+    "name": "6",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {},
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
@@ -38,4 +38,16 @@ main.floors.yiqu6=
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
+    "bgmap": [
+
+],
+    "fgmap": [
+
+],
+    "bg2map": [
+
+],
+    "fg2map": [
+
+]
 }
\ No newline at end of file
diff --git a/project/floors/yiqu7.js b/project/floors/yiqu7.js
index d47401f..459aded 100644
--- a/project/floors/yiqu7.js
+++ b/project/floors/yiqu7.js
@@ -1,29 +1,29 @@
 main.floors.yiqu7=
 {
-"floorId": "yiqu7",
-"title": "主塔 7 层",
-"name": "7",
-"width": 13,
-"height": 13,
-"canFlyTo": true,
-"canFlyFrom": true,
-"canUseQuickShop": true,
-"images": [],
-"ratio": 1,
-"defaultGround": "grass2",
-"firstArrive": [],
-"eachArrive": [],
-"parallelDo": "",
-"events": {},
-"changeFloor": {},
-"beforeBattle": {},
-"afterBattle": {},
-"afterGetItem": {},
-"afterOpenDoor": {},
-"autoEvent": {},
-"cannotMove": {},
-"cannotMoveIn": {},
-"map": [
+    "floorId": "yiqu7",
+    "title": "主塔 7 层",
+    "name": "7",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {},
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
@@ -38,4 +38,16 @@ main.floors.yiqu7=
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
+    "bgmap": [
+
+],
+    "fgmap": [
+
+],
+    "bg2map": [
+
+],
+    "fg2map": [
+
+]
 }
\ No newline at end of file
diff --git a/project/floors/yiqu8.js b/project/floors/yiqu8.js
index 18bb1e8..71c2a6f 100644
--- a/project/floors/yiqu8.js
+++ b/project/floors/yiqu8.js
@@ -10,7 +10,7 @@ main.floors.yiqu8=
     "canUseQuickShop": true,
     "images": [],
     "ratio": 1,
-    "defaultGround": "grass2",
+    "defaultGround": "X90078",
     "firstArrive": [],
     "eachArrive": [],
     "parallelDo": "",
diff --git a/project/floors/yiqu9.js b/project/floors/yiqu9.js
index 2b2d3e7..0bab892 100644
--- a/project/floors/yiqu9.js
+++ b/project/floors/yiqu9.js
@@ -1,29 +1,29 @@
 main.floors.yiqu9=
 {
-"floorId": "yiqu9",
-"title": "主塔 9 层",
-"name": "9",
-"width": 13,
-"height": 13,
-"canFlyTo": true,
-"canFlyFrom": true,
-"canUseQuickShop": true,
-"images": [],
-"ratio": 1,
-"defaultGround": "grass2",
-"firstArrive": [],
-"eachArrive": [],
-"parallelDo": "",
-"events": {},
-"changeFloor": {},
-"beforeBattle": {},
-"afterBattle": {},
-"afterGetItem": {},
-"afterOpenDoor": {},
-"autoEvent": {},
-"cannotMove": {},
-"cannotMoveIn": {},
-"map": [
+    "floorId": "yiqu9",
+    "title": "主塔 9 层",
+    "name": "9",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "X90078",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {},
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
@@ -38,4 +38,16 @@ main.floors.yiqu9=
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
 ],
+    "bgmap": [
+
+],
+    "fgmap": [
+
+],
+    "bg2map": [
+
+],
+    "fg2map": [
+
+]
 }
\ No newline at end of file
diff --git a/project/floors/yushou.js b/project/floors/yushou.js
new file mode 100644
index 0000000..5abf05c
--- /dev/null
+++ b/project/floors/yushou.js
@@ -0,0 +1,62 @@
+main.floors.yushou=
+{
+    "floorId": "yushou",
+    "title": "广场",
+    "name": "1",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "grass2",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {
+        "9,0": {
+            "floorId": "guangchang2",
+            "loc": [
+                9,
+                12
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0, 91,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "areas": "牢狱",
+    "bgmap": [
+
+],
+    "fgmap": [
+
+],
+    "bg2map": [
+
+],
+    "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/floors/zhujuejia.js b/project/floors/zhujuejia.js
new file mode 100644
index 0000000..bbee16b
--- /dev/null
+++ b/project/floors/zhujuejia.js
@@ -0,0 +1,106 @@
+main.floors.zhujuejia=
+{
+    "floorId": "zhujuejia",
+    "title": "新建楼层",
+    "name": "0",
+    "width": 13,
+    "height": 13,
+    "canFlyTo": true,
+    "canFlyFrom": true,
+    "canUseQuickShop": true,
+    "cannotViewMap": false,
+    "cannotMoveDirectly": false,
+    "images": [],
+    "ratio": 1,
+    "defaultGround": "ground",
+    "firstArrive": [],
+    "eachArrive": [],
+    "parallelDo": "",
+    "events": {},
+    "changeFloor": {
+        "0,9": {
+            "floorId": "street01",
+            "loc": [
+                12,
+                9
+            ]
+        },
+        "5,2": {
+            "floorId": "Caimhome",
+            "loc": [
+                3,
+                8
+            ]
+        }
+    },
+    "beforeBattle": {},
+    "afterBattle": {},
+    "afterGetItem": {},
+    "afterOpenDoor": {},
+    "autoEvent": {},
+    "cannotMove": {},
+    "cannotMoveIn": {},
+    "map": [
+    [120125,120126,120127,120157,120164,120161,120160,120159,120149,120150,120151,120159,120002],
+    [120133,120134,120135,120165,120172,200550,120168,120167,120157,120158,120159,120167,120010],
+    [120141,120142,120143,120173,120065,200558,120176,120175,120165,120166,120167,140132,140133],
+    [120149,120150,120151,120017,  0,90244,  0,  0,120173,120174,120175,110011,140141],
+    [120157,120158,120159,120017,  0,90244,  0,  0,  0,  0,120021,120002,120002],
+    [120165,120166,120167,110030,  0,  0,  0,120015,120010,120010,120010,120010,120010],
+    [120173,120174,120175,  0,  0,  0,  0,  0,  0,  0,  0,  0,90266],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,90266],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,90266],
+    [ 92,  0,  0,  0,  0,  0,200199,  0,  0,  0,  0,140184,140],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140192,140],
+    [140,140,140186,  0,  0,  0,  0,  0,  0,  0,  0,140192,140],
+    [140,140,140,140,140,140,140,140,140,140,140,140,140]
+],
+    "bgmap": [
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,120175,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078],
+    [90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078,90078]
+],
+    "fgmap": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,90204,  0,140116,140117],
+    [  0,  0,  0,  0,  0, 90,140093,140092,  0,90213,  0,140124,140125],
+    [  0,  0,  0,120038,  0, 90,140099,140100,  0,90223,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,140107,140108,  0,90231,120039,  0,  0],
+    [  0,  0,  0,110022,  0,  0,  0,120007,120007,120007,120007,  0,  0],
+    [140091,140092,140093,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [140099,140100,140101,  0,  0,  0,200175,  0,  0,  0,  0,  0,  0],
+    [140107,140108,140109,  0,  0,  0,200183,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,200191,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,140186,71832,71833,71759,71758,71786,71787,71784,71785,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "bg2map": [
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,120180,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,120073,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,110004,140149],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
+    [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]
+],
+    "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/fonts/Verdana.ttf b/project/fonts/Verdana.ttf
new file mode 100644
index 0000000..ea3c090
Binary files /dev/null and b/project/fonts/Verdana.ttf differ
diff --git a/project/functions.js b/project/functions.js
index e90a843..fc50b74 100644
--- a/project/functions.js
+++ b/project/functions.js
@@ -2,55 +2,57 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 {
     "events": {
         "resetGame": function (hero, hard, floorId, maps, values) {
-			// 重置整个游戏;此函数将在游戏开始时,或者每次读档时最先被调用
-			// hero:勇士信息;hard:难度;floorId:当前楼层ID;maps:地图信息;values:全局数值信息
+	// 重置整个游戏;此函数将在游戏开始时,或者每次读档时最先被调用
+	// hero:勇士信息;hard:难度;floorId:当前楼层ID;maps:地图信息;values:全局数值信息
 
-			// 清除游戏数据
-			// 这一步会清空状态栏和全部画布内容,并删除所有动态创建的画布
-			core.clearStatus();
-			// 初始化status
-			core.status = core.clone(core.initStatus, function (name) {
-				return name != 'hero' && name != 'maps';
-			});
-			core.control._bindRoutePush();
-			core.status.played = true;
-			// 初始化人物,图标,统计信息
-			core.status.hero = core.clone(hero);
-			window.hero = core.status.hero;
-			window.flags = core.status.hero.flags;
-			core.events.setHeroIcon(core.status.hero.image, true);
-			core.control._initStatistics(core.animateFrame.totalTime);
-			core.status.hero.statistics.totalTime = core.animateFrame.totalTime =
-				Math.max(core.status.hero.statistics.totalTime, core.animateFrame.totalTime);
-			core.status.hero.statistics.start = null;
-			// 初始难度
-			core.status.hard = hard || "";
-			// 初始化地图
-			core.status.floorId = floorId;
-			core.status.maps = maps;
-			core.maps._resetFloorImages();
-			// 初始化怪物和道具
-			core.material.enemys = core.enemys.getEnemys();
-			core.material.items = core.items.getItems();
-			// 初始化全局数值和全局开关
-			core.values = core.clone(core.data.values);
-			for (var key in values || {})
-				core.values[key] = values[key];
-			core.flags = core.clone(core.data.flags);
-			var globalFlags = core.getFlag("globalFlags", {});
-			for (var key in globalFlags)
-				core.flags[key] = globalFlags[key];
-			core._init_sys_flags();
-			// 初始化界面,状态栏等
-			core.resize();
-			// 状态栏是否显示
-			if (core.hasFlag('hideStatusBar'))
-				core.hideStatusBar(core.hasFlag('showToolbox'));
-			else
-				core.showStatusBar();
-			// 隐藏右下角的音乐按钮
-			core.dom.musicBtn.style.display = 'none';
-		},
+	// 清除游戏数据
+	// 这一步会清空状态栏和全部画布内容,并删除所有动态创建的画布
+	core.clearStatus();
+	core.status.animateObjs = []
+	core.plugin.playing.clear()
+	// 初始化status
+	core.status = core.clone(core.initStatus, function (name) {
+		return name != "hero" && name != "maps";
+	});
+	core.control._bindRoutePush();
+	core.status.played = true;
+	// 初始化人物,图标,统计信息
+	core.status.hero = core.clone(hero);
+	window.hero = core.status.hero;
+	window.flags = core.status.hero.flags;
+	core.events.setHeroIcon(core.status.hero.image, true);
+	core.control._initStatistics(core.animateFrame.totalTime);
+	core.status.hero.statistics.totalTime = core.animateFrame.totalTime =
+		Math.max(
+			core.status.hero.statistics.totalTime,
+			core.animateFrame.totalTime
+		);
+	core.status.hero.statistics.start = null;
+	// 初始难度
+	core.status.hard = hard || "";
+	// 初始化地图
+	core.status.floorId = floorId;
+	core.status.maps = maps;
+	core.maps._resetFloorImages();
+	// 初始化怪物和道具
+	core.material.enemys = core.enemys.getEnemys();
+	core.material.items = core.items.getItems();
+	// 初始化全局数值和全局开关
+	core.values = core.clone(core.data.values);
+	for (var key in values || {}) core.values[key] = values[key];
+	core.flags = core.clone(core.data.flags);
+	var globalFlags = core.getFlag("globalFlags", {});
+	for (var key in globalFlags) core.flags[key] = globalFlags[key];
+	core._init_sys_flags();
+	// 初始化界面,状态栏等
+	core.resize();
+	// 状态栏是否显示
+	if (core.hasFlag("hideStatusBar"))
+		core.hideStatusBar(core.hasFlag("showToolbox"));
+	else core.showStatusBar();
+	// 隐藏右下角的音乐按钮
+	core.dom.musicBtn.style.display = "none";
+},
         "win": function (reason, norank, noexit) {
 	// 游戏获胜事件
 	// 请注意,成绩统计时是按照hp进行上传并排名
@@ -62,117 +64,133 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 		core.status.extraEvent = core.clone(core.status.event);
 	}
 
-	// 游戏获胜事件 
+	// 游戏获胜事件
 	core.ui.closePanel();
 	var replaying = core.isReplaying();
 	if (replaying) core.stopReplay();
 	core.waitHeroToStop(function () {
 		if (!noexit) {
-			core.clearMap('all'); // 清空全地图
+			core.status.animateObjs = []
+			core.plugin.playing.clear()
+			core.clearMap("all"); // 清空全地图
 			core.deleteAllCanvas(); // 删除所有创建的画布
 			core.dom.gif2.innerHTML = "";
 		}
 		reason = core.replaceText(reason);
-		core.drawText([
-			"\t[" + (reason || "恭喜通关") + "]你的分数是${status:hp}。"
-		], function () {
-			core.events.gameOver(reason || '', replaying, norank);
-		})
+		core.drawText(
+			["\t[" + (reason || "恭喜通关") + "]你的分数是${status:hp}。"],
+			function () {
+				core.events.gameOver(reason || "", replaying, norank);
+			}
+		);
 	});
 },
         "lose": function (reason) {
-			// 游戏失败事件
-			core.ui.closePanel();
-			var replaying = core.isReplaying();
-			core.stopReplay();
-			core.waitHeroToStop(function () {
-				core.drawText([
-					"\t[" + (reason || "结局1") + "]你死了。\n如题。"
-				], function () {
-					core.events.gameOver(null, replaying);
-				});
-			})
-		},
+	// 游戏失败事件
+	core.ui.closePanel();
+	var replaying = core.isReplaying();
+	core.stopReplay();
+	core.status.animateObjs = []
+	core.plugin.playing.clear()
+	core.waitHeroToStop(function () {
+		core.drawText(
+			["\t[" + (reason || "结局1") + "]你死了。\n如题。"],
+			function () {
+				core.events.gameOver(null, replaying);
+			}
+		);
+	});
+},
         "changingFloor": function (floorId, heroLoc) {
-			// 正在切换楼层过程中执行的操作;此函数的执行时间是“屏幕完全变黑“的那一刻
-			// floorId为要切换到的楼层ID;heroLoc表示勇士切换到的位置
+	// 正在切换楼层过程中执行的操作;此函数的执行时间是“屏幕完全变黑“的那一刻
+	// floorId为要切换到的楼层ID;heroLoc表示勇士切换到的位置
 
-			// ---------- 此时还没有进行切换,当前floorId还是原来的 ---------- //
-			var currentId = core.status.floorId || null; // 获得当前的floorId,可能为null
-			var fromLoad = core.hasFlag('__fromLoad__'); // 是否是读档造成的切换
-			var isFlying = core.hasFlag('__isFlying__'); // 是否是楼传造成的切换
-			if (!fromLoad && !(isFlying && currentId == floorId)) {
-				if (!core.hasFlag("__leaveLoc__")) core.setFlag("__leaveLoc__", {});
-				if (currentId != null) core.getFlag("__leaveLoc__")[currentId] = core.clone(core.status.hero.loc);
+	// ---------- 此时还没有进行切换,当前floorId还是原来的 ---------- //
+	var currentId = core.status.floorId || null; // 获得当前的floorId,可能为null
+	var fromLoad = core.hasFlag("__fromLoad__"); // 是否是读档造成的切换
+	var isFlying = core.hasFlag("__isFlying__"); // 是否是楼传造成的切换
+	if (!fromLoad && !(isFlying && currentId == floorId)) {
+		if (!core.hasFlag("__leaveLoc__")) core.setFlag("__leaveLoc__", {});
+		if (currentId != null)
+			core.getFlag("__leaveLoc__")[currentId] = core.clone(
+				core.status.hero.loc
+			);
+	}
+
+	// 可以对currentId进行判定,比如删除某些自定义图层等
+	// if (currentId == 'MT0') {
+	//     core.deleteAllCanvas();
+	// }
+
+	// 根据分区信息自动砍层与恢复
+	if (core.autoRemoveMaps) core.autoRemoveMaps(floorId);
+
+	// 重置画布尺寸
+	core.maps.resizeMap(floorId);
+	// 设置勇士的位置
+	heroLoc.direction = core.turnDirection(heroLoc.direction);
+	core.status.hero.loc = heroLoc;
+	// 检查重生怪并重置
+	if (!fromLoad) {
+		core.extractBlocks(floorId);
+		core.status.maps[floorId].blocks.forEach(function (block) {
+			if (block.disable && core.enemys.hasSpecial(block.event.id, 23)) {
+				block.disable = false;
+				core.setMapBlockDisabled(floorId, block.x, block.y, false);
+				core.maps._updateMapArray(floorId, block.x, block.y);
 			}
+		});
+		core.control.gatherFollowers();
+	}
 
-			// 可以对currentId进行判定,比如删除某些自定义图层等
-			// if (currentId == 'MT0') {
-			//     core.deleteAllCanvas();
-			// }
+	// ---------- 重绘新地图;这一步将会设置core.status.floorId ---------- //
+	core.drawMap(floorId);
 
-			// 根据分区信息自动砍层与恢复
-			if (core.autoRemoveMaps) core.autoRemoveMaps(floorId);
+	// 切换楼层BGM
+	if (core.status.maps[floorId].bgm) {
+		var bgm = core.status.maps[floorId].bgm;
+		if (bgm instanceof Array)
+			bgm = bgm[Math.floor(Math.random() * bgm.length)]; // 多个bgm则随机播放一个
+		if (!core.hasFlag("__bgm__")) core.playBgm(bgm);
+	} else if (fromLoad && !core.hasFlag("__bgm__")) {
+		core.pauseBgm();
+	}
+	// 更改画面色调
+	var color = core.getFlag("__color__", null);
+	if (!color && core.status.maps[floorId].color)
+		color = core.status.maps[floorId].color;
+	core.clearMap("curtain");
+	core.status.curtainColor = color;
+	if (color)
+		core.fillRect(
+			"curtain",
+			0,
+			0,
+			core._PX_ || core.__PIXELS__,
+			core._PY_ || core.__PIXELS__,
+			core.arrayToRGBA(color)
+		);
+	// 更改天气
+	var weather = core.getFlag("__weather__", null);
+	if (!weather && core.status.maps[floorId].weather)
+		weather = core.status.maps[floorId].weather;
+	if (weather) core.setWeather(weather[0], weather[1]);
+	else core.setWeather();
 
-			// 重置画布尺寸
-			core.maps.resizeMap(floorId);
-			// 设置勇士的位置
-			heroLoc.direction = core.turnDirection(heroLoc.direction);
-			core.status.hero.loc = heroLoc;
-			// 检查重生怪并重置
-			if (!fromLoad) {
-				core.extractBlocks(floorId);
-				core.status.maps[floorId].blocks.forEach(function (block) {
-					if (block.disable && core.enemys.hasSpecial(block.event.id, 23)) {
-						block.disable = false;
-						core.setMapBlockDisabled(floorId, block.x, block.y, false);
-						core.maps._updateMapArray(floorId, block.x, block.y);
-					}
-				});
-				core.control.gatherFollowers();
-			}
-
-			// ---------- 重绘新地图;这一步将会设置core.status.floorId ---------- //
-			core.drawMap(floorId);
-
-			// 切换楼层BGM
-			if (core.status.maps[floorId].bgm) {
-				var bgm = core.status.maps[floorId].bgm;
-				if (bgm instanceof Array) bgm = bgm[Math.floor(Math.random() * bgm.length)]; // 多个bgm则随机播放一个
-				if (!core.hasFlag("__bgm__")) core.playBgm(bgm);
-			} else if (fromLoad && !core.hasFlag("__bgm__")) {
-				core.pauseBgm();
-			}
-			// 更改画面色调
-			var color = core.getFlag('__color__', null);
-			if (!color && core.status.maps[floorId].color)
-				color = core.status.maps[floorId].color;
-			core.clearMap('curtain');
-			core.status.curtainColor = color;
-			if (color) core.fillRect('curtain', 0, 0, core._PX_ || core.__PIXELS__, core._PY_ || core.__PIXELS__, core.arrayToRGBA(color));
-			// 更改天气
-			var weather = core.getFlag('__weather__', null);
-			if (!weather && core.status.maps[floorId].weather)
-				weather = core.status.maps[floorId].weather;
-			if (weather)
-				core.setWeather(weather[0], weather[1]);
-			else core.setWeather();
-
-			// ...可以新增一些其他内容,比如创建个画布在右上角显示什么内容等等
-
-		},
+	// ...可以新增一些其他内容,比如创建个画布在右上角显示什么内容等等
+},
         "afterChangeFloor": function (floorId) {
 	// 转换楼层结束的事件;此函数会在整个楼层切换完全结束后再执行
 	// floorId是切换到的楼层
 
 	// 如果是读档,则进行检查(是否需要恢复事件)
-	if (core.hasFlag('__fromLoad__')) {
+	if (core.hasFlag("__fromLoad__")) {
 		core.events.recoverEvents(core.getFlag("__events__"));
 		core.removeFlag("__events__");
 	} else {
 		// 每次抵达楼层执行的事件
 		core.insertAction(core.floors[floorId].eachArrive);
-		core.ui.statusBar._update_map()
+		core.ui.statusBar._update_map();
 		// 首次抵达楼层时执行的事件(后插入,先执行)
 		if (!core.hasVisitedFloor(floorId)) {
 			core.insertAction(core.floors[floorId].firstArrive);
@@ -180,6 +198,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 			core.plugin.bfs();
 		}
 	}
+	if (!core.isReplaying()) core.plugin.drawCommentSign()
 },
         "flyTo": function (toId, callback) {
 	// 楼层传送器的使用,从当前楼层飞往toId
@@ -188,9 +207,13 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	var fromId = core.status.floorId;
 
 	// 检查能否飞行
-	if (!core.status.maps[fromId].canFlyFrom || !core.status.maps[toId].canFlyTo || !core.hasVisitedFloor(toId)) {
-		core.playSound('操作失败');
-		core.drawTip("无法飞往" + core.status.maps[toId].title + "!", 'fly');
+	if (
+		!core.status.maps[fromId].canFlyFrom ||
+		!core.status.maps[toId].canFlyTo ||
+		!core.hasVisitedFloor(toId)
+	) {
+		core.playSound("操作失败");
+		core.drawTip("无法飞往" + core.status.maps[toId].title + "!", "fly");
 		return false;
 	}
 
@@ -200,8 +223,11 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	if (core.flags.flyRecordPosition) {
 		loc = core.getFlag("__leaveLoc__", {})[toId] || null;
 	}
-	if (core.status.maps[toId].flyPoint != null && core.status.maps[toId].flyPoint.length == 2) {
-		stair = 'flyPoint';
+	if (
+		core.status.maps[toId].flyPoint != null &&
+		core.status.maps[toId].flyPoint.length == 2
+	) {
+		stair = "flyPoint";
 	}
 	if (stair == null && loc == null) {
 		// 获得两个楼层的索引,以决定是上楼梯还是下楼梯
@@ -209,14 +235,15 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 			toIndex = core.floorIds.indexOf(toId);
 		var stair = fromIndex <= toIndex ? "downFloor" : "upFloor";
 		// 地下层:同层传送至上楼梯
-		if (fromIndex == toIndex && core.status.maps[fromId].underGround) stair = "upFloor";
+		if (fromIndex == toIndex && core.status.maps[fromId].underGround)
+			stair = "upFloor";
 	}
 
 	// 记录录像
 	core.status.route.push("fly:" + toId);
 	// 传送
 	core.ui.closePanel();
-	core.setFlag('__isFlying__', true);
+	core.setFlag("__isFlying__", true);
 	core.changeFloor(toId, stair, loc, null, function () {
 		core.removeFlag("__isFlying__");
 		if (callback) callback();
@@ -225,42 +252,47 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	return true;
 },
         "beforeBattle": function (enemyId, x, y) {
-			// 战斗前触发的事件,可以加上一些战前特效(详见下面支援的例子)
-			// 此函数在“检测能否战斗和自动存档”【之后】执行。如果需要更早的战前事件,请在插件中覆重写 core.events.doSystemEvent 函数。
-			// 返回true则将继续战斗,返回false将不再战斗。
+      // 战斗前触发的事件,可以加上一些战前特效(详见下面支援的例子)
+      // 此函数在“检测能否战斗和自动存档”【之后】执行。如果需要更早的战前事件,请在插件中覆重写 core.events.doSystemEvent 函数。
+      // 返回true则将继续战斗,返回false将不再战斗。
 
-			// ------ 支援技能 ------ //
-			if (x != null && y != null) {
-				var index = x + "," + y,
-					cache = core.status.checkBlock.cache[index] || {},
-					guards = cache.guards || [];
-				// 如果存在支援怪
-				if (guards.length > 0) {
-					// 记录flag,当前要参与支援的怪物
-					core.setFlag("__guards__" + x + "_" + y, guards);
-					var actions = [{ "type": "playSound", "name": "跳跃" }];
-					// 增加支援的特效动画(图块跳跃)
-					guards.forEach(function (g) {
-						core.push(actions, { "type": "jump", "from": [g[0], g[1]], "to": [x, y], "time": 300, "keep": false, "async": true });
-					});
-					core.push(actions, [
-						{ "type": "waitAsync" }, // 等待所有异步事件执行完毕
-						{ "type": "setBlock", "number": enemyId, "loc": [[x, y]] }, // 重新设置怪物自身
-						{ "type": "battle", "loc": [x, y] } // 重要!重新触发本次战斗
-					]);
-					core.insertAction(actions);
-					return false;
-				}
-			}
+      // ------ 支援技能 ------ //
+      if (x != null && y != null) {
+        var index = x + "," + y,
+          cache = core.status.checkBlock.cache[index] || {},
+          guards = cache.guards || [];
+        // 如果存在支援怪
+        if (guards.length > 0) {
+          // 记录flag,当前要参与支援的怪物
+          core.setFlag("__guards__" + x + "_" + y, guards);
+          var actions = [{ type: "playSound", name: "跳跃" }];
+          // 增加支援的特效动画(图块跳跃)
+          guards.forEach(function (g) {
+            core.push(actions, {
+              type: "jump",
+              from: [g[0], g[1]],
+              to: [x, y],
+              time: 300,
+              keep: false,
+              async: true,
+            });
+          });
+          core.push(actions, [
+            { type: "waitAsync" }, // 等待所有异步事件执行完毕
+            { type: "setBlock", number: enemyId, loc: [[x, y]] }, // 重新设置怪物自身
+            { type: "battle", loc: [x, y] }, // 重要!重新触发本次战斗
+          ]);
+          core.insertAction(actions);
+          return false;
+        }
+      }
 
-			return true;
-		},
-        "afterBattle": function (enemyId, x, y) {
+      return true;
+    },
+        "afterBattle": async function (enemyId, x, y) {
 	// 战斗结束后触发的事件
-
-	var enemy = core.material.enemys[enemyId];
-	var special = enemy.special;
-
+	var enemy = core.material.enemys[enemyId]
+	var special = core.getEnemyValue(enemy, "special", x, y);
 	// 播放战斗音效和动画
 	// 默认播放的动画;你也可以使用
 	var animate = 'hand'; // 默认动画
@@ -270,19 +302,30 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 		animate = core.material.items[equipId].equip.animate;
 	// 你也可以在这里根据自己的需要,比如enemyId或special或flag来修改播放的动画效果
 	// if (enemyId == '...') animate = '...';
+	if (core.getFlag('noAnimate')) {
+		// 检查该动画是否存在SE,如果不存在则使用默认音效
+		if (!(core.material.animates[animate] || {}).se)
+			core.playSound('attack.mp3');
 
-	// 检查该动画是否存在SE,如果不存在则使用默认音效
-	if (!(core.material.animates[animate] || {}).se)
-		core.playSound('attack.mp3');
-
-	// 播放动画;如果不存在坐标(强制战斗)则播放到勇士自身
-	if (x != null && y != null)
-		core.drawAnimate(animate, x, y);
-	else
-		core.drawHeroAnimate(animate);
-
+		// 播放动画;如果不存在坐标(强制战斗)则播放到勇士自身
+		if (x != null && y != null)
+			core.drawAnimate(animate, x, y);
+		else
+			core.drawHeroAnimate(animate);
+	}
 	// 获得战斗伤害信息
 	var damageInfo = core.getDamageInfo(enemyId, null, x, y) || {};
+	if ((!core.getFlag("noAnimate") || damageInfo.damage >= core.status.hero.hp) && (!main.replayChecking && !core.isReplaying())) await core.attackAnimate(
+		enemyId,
+		damageInfo.start[0],
+		damageInfo.start[1],
+		damageInfo.start[2],
+		damageInfo.start[3],
+		damageInfo.heroDiffList,
+		damageInfo.enemyDiffList,
+		damageInfo.heroanimateList,
+		damageInfo.enemyanimateList
+	)
 	// 战斗伤害
 	var damage = damageInfo.damage;
 	// 当前战斗回合数,可用于战后所需的判定
@@ -354,8 +397,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	}
 	// 退化
 	if (core.enemys.hasSpecial(special, 21)) {
-		core.status.hero.atk -= (enemy.atkValue || 0);
-		core.status.hero.def -= (enemy.defValue || 0);
+		core.status.hero.atk -= core.getEnemyValue(enemy, "atkValue", x, y) || 0;
+		core.status.hero.def -= core.getEnemyValue(enemy, "defValue", x, y) || 0;
 		if (core.status.hero.atk < 0) core.status.hero.atk = 0;
 		if (core.status.hero.def < 0) core.status.hero.def = 0;
 	}
@@ -410,7 +453,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	// 因为removeBlock和hideBlock都会刷新状态栏,因此将删除部分移动到这里并保证刷新只执行一次,以提升效率
 	if (core.getBlock(x, y) != null) {
 		// 检查是否是重生怪物;如果是则仅隐藏不删除
-		if (core.hasSpecial(enemy.special, 23)) {
+		if (core.hasSpecial(special, 23)) {
 			core.hideBlock(x, y);
 		} else {
 			core.removeBlock(x, y);
@@ -427,61 +470,72 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 
 },
         "afterOpenDoor": function (doorId, x, y) {
-			// 开一个门后触发的事件
+      // 开一个门后触发的事件
 
-			var todo = [];
-			// 检查该点的开门后事件
-			if (core.status.floorId) {
-				core.push(todo, core.floors[core.status.floorId].afterOpenDoor[x + "," + y]);
-			}
-			// 检查批量开门事件
-			var door = core.getBlockById(doorId);
-			if (door && door.event.doorInfo) {
-				core.push(todo, door.event.doorInfo.afterOpenDoor);
-			}
+      var todo = [];
+      // 检查该点的开门后事件
+      if (core.status.floorId) {
+        core.push(
+          todo,
+          core.floors[core.status.floorId].afterOpenDoor[x + "," + y]
+        );
+      }
+      // 检查批量开门事件
+      var door = core.getBlockById(doorId);
+      if (door && door.event.doorInfo) {
+        core.push(todo, door.event.doorInfo.afterOpenDoor);
+      }
 
-			if (todo.length > 0) core.insertAction(todo, x, y);
+      if (todo.length > 0) core.insertAction(todo, x, y);
 
-			if (core.status.event.id == null)
-				core.continueAutomaticRoute();
-			else
-				core.clearContinueAutomaticRoute();
-		},
+      if (core.status.event.id == null) core.continueAutomaticRoute();
+      else core.clearContinueAutomaticRoute();
+    },
         "afterGetItem": function (itemId, x, y, isGentleClick) {
-			// 获得一个道具后触发的事件
-			// itemId:获得的道具ID;x和y是该道具所在的坐标
-			// isGentleClick:是否是轻按触发的
-			if (itemId.endsWith('Potion') && core.material.items[itemId].cls == 'items')
-				core.playSound('回血');
-			else if (itemId.endsWith('Gem') && core.material.items[itemId].cls == 'items')
-				core.playSound('宝石')
-			else
-				core.playSound('获得道具');
+      // 获得一个道具后触发的事件
+      // itemId:获得的道具ID;x和y是该道具所在的坐标
+      // isGentleClick:是否是轻按触发的
+      if (
+        itemId.endsWith("Potion") &&
+        core.material.items[itemId].cls == "items"
+      )
+        core.playSound("回血");
+      else if (
+        itemId.endsWith("Gem") &&
+        core.material.items[itemId].cls == "items"
+      )
+        core.playSound("宝石");
+      else core.playSound("获得道具");
 
-			var todo = [];
-			// 检查该点的获得道具后事件。
-			if (core.status.floorId == null) return;
-			var event = core.floors[core.status.floorId].afterGetItem[x + "," + y];
-			if (event && (event instanceof Array || !isGentleClick || !event.disableOnGentleClick)) {
-				if (event.data) event = event.data;
-				core.unshift(todo, event);
-			}
+      var todo = [];
+      // 检查该点的获得道具后事件。
+      if (core.status.floorId == null) return;
+      var event = core.floors[core.status.floorId].afterGetItem[x + "," + y];
+      if (
+        event &&
+        (event instanceof Array ||
+          !isGentleClick ||
+          !event.disableOnGentleClick)
+      ) {
+        if (event.data) event = event.data;
+        core.unshift(todo, event);
+      }
 
-			if (todo.length > 0) core.insertAction(todo, x, y);
-		},
+      if (todo.length > 0) core.insertAction(todo, x, y);
+    },
         "afterPushBox": function () {
-			// 推箱子后的事件
-			if (core.searchBlock('box').length == 0) {
-				// 可以通过if语句来进行开门操作
-				/*
+      // 推箱子后的事件
+      if (core.searchBlock("box").length == 0) {
+        // 可以通过if语句来进行开门操作
+        /*
 				if (core.status.floorId=='xxx') { // 在某个楼层
 					core.insertAction([ // 插入一条事件
 						{"type": "openDoor", "loc": [x,y]} // 开门
 					])
 				}
 				*/
-			}
-		}
+      }
+    }
     },
     "enemys": {
         "getSpecials": function () {
@@ -491,36 +545,221 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	// 第五项为该特殊属性的标记;目前 1 代表是地图类技能(需要进行遍历全图)
 	// 名字和描述可以直接写字符串,也可以写个function将怪物传进去
 	return [
-		[1, "先攻", "怪物首先攻击", "#ffcc33"],
-		[3, "坚固", "怪物防御不小于角色攻击-1", "#c0b088"],
-		[6, function (enemy) { return (enemy.n || '') + "连击"; }, function (enemy) { return "怪物每回合攻击" + (enemy.n || 4) + "次"; }, "#ffee77"],
-		[7, "破甲", function (enemy) { return "战斗前,怪物附加角色防御的" + Math.floor(100 * (enemy.breakArmor || core.values.breakArmor || 0)) + "%作为伤害"; }, "#88c0ff"],
-		[8, "反击", function (enemy) { return "战斗时,怪物每回合附加角色攻击的" + Math.floor(100 * (enemy.counterAttack || core.values.counterAttack || 0)) + "%作为伤害,无视角色防御"; }, "#ffaa44"],
-		[9, "净化", function (enemy) { return "战斗前,怪物附加角色护盾的" + (enemy.purify || core.values.purify) + "倍作为伤害"; }, "#80eed6"],
+		[1, "先攻", "怪物首先攻击", "#ffcc33"], //√
+		//[2, "魔攻", "怪物无视角色的防御", "#bbb0ff"],
+		[3, "坚固", "怪物防御不小于角色攻击-1", "#c0b088"], //√
+		[
+			6,
+			function (enemy) {
+				return (enemy.n || "") + "连击";
+			},
+			function (enemy) {
+				return "怪物每回合攻击" + (enemy.n || 4) + "次";
+			},
+			"#ffee77",
+		], //想改成“以XX%、XX%攻击力各攻击一次”
+		[
+			7,
+			"破甲",
+			function (enemy) {
+				return (
+					"怪物无视角色防御的" +
+					Math.floor(
+						100 * (enemy.breakArmor || core.values.breakArmor || 0)
+					) +
+					"%"
+				);
+			},
+			"#88c0ff",
+		], //√
+		[
+			8,
+			"反击",
+			function (enemy) {
+				return (
+					"战斗时,怪物每回合附加角色攻击的" +
+					Math.floor(
+						100 * (enemy.counterAttack || core.values.counterAttack || 0)
+					) +
+					"%作为伤害,无视角色防御"
+				);
+			},
+			"#ffaa44",
+		],
+		[
+			9,
+			"净化",
+			function (enemy) {
+				return (
+					"战斗前,怪物附加角色护盾的" +
+					(enemy.purify || core.values.purify) +
+					"倍作为伤害"
+				);
+			},
+			"#80eed6",
+		],
 		[10, "模仿", "怪物的攻防和角色攻防相等", "#b0c0dd"],
-		[11, "吸血", function (enemy) { return "战斗前,怪物首先吸取角色的" + Math.floor(100 * enemy.vampire || 0) + "%生命(约" + Math.floor((enemy.vampire || 0) * core.getStatus('hp')) + "点)作为伤害" + (enemy.add ? ",并把伤害数值加到自身生命上" : ""); }, "#dd4448"],
-		[12, "中毒", "战斗后,角色陷入中毒状态,每一步损失生命" + core.values.poisonDamage + "点", "#99ee88"],
-		[13, "衰弱", "战斗后,角色陷入衰弱状态,攻防暂时下降" + (core.values.weakValue >= 1 ? core.values.weakValue + "点" : parseInt(core.values.weakValue * 100) + "%"), "#f0bbcc"],
-		[14, "诅咒", "战斗后,角色陷入诅咒状态,战斗无法获得金币和经验", "#bbeef0"],
-		[15, "领域", function (enemy) { return "经过怪物周围" + (enemy.zoneSquare ? "九宫格" : "十字") + "范围内" + (enemy.range || 1) + "格时自动减生命" + (enemy.zone || 0) + "点"; }, "#c677dd"],
+		[
+			11,
+			"吸血",
+			function (enemy) {
+				return (
+					"战斗前,怪物首先吸取角色的" +
+					Math.floor(100 * enemy.vampire || 0) +
+					"%生命(约" +
+					Math.floor((enemy.vampire || 0) * core.getStatus("hp")) +
+					"点)作为伤害" +
+					(enemy.add ? ",并把伤害数值加到自身生命上" : "")
+				);
+			},
+			"#dd4448",
+		],
+		[
+			12,
+			"中毒",
+			"战斗后,角色陷入中毒状态,每一步损失生命" +
+			core.values.poisonDamage +
+			"点",
+			"#99ee88",
+		],
+		[
+			13,
+			"衰弱",
+			"战斗后,角色陷入衰弱状态,攻防暂时下降" +
+			(core.values.weakValue >= 1 ?
+				core.values.weakValue + "点" :
+				parseInt(core.values.weakValue * 100) + "%"),
+			"#f0bbcc",
+		],
+		[
+			14,
+			"诅咒",
+			"战斗后,角色陷入诅咒状态,战斗无法获得金币和经验",
+			"#bbeef0",
+		],
+		[
+			15,
+			"领域",
+			function (enemy) {
+				return (
+					"经过怪物周围" +
+					(enemy.zoneSquare ? "九宫格" : "十字") +
+					"范围内" +
+					(enemy.range || 1) +
+					"格时自动减生命" +
+					(enemy.zone || 0) +
+					"点"
+				);
+			},
+			"#c677dd",
+		],
 		[16, "夹击", "经过两只相同的怪物中间,角色生命值变成一半", "#bb99ee"],
-		[17, "仇恨", "战斗前,怪物附加之前积累的仇恨值作为伤害;战斗后,释放一半的仇恨值。(每杀死一个怪物获得" + (core.values.hatred || 0) + "点仇恨值)", "#b0b666"],
-		[18, "阻击", function (enemy) { return "经过怪物周围" + (enemy.zoneSquare ? "九宫格" : "十字") + "时自动减生命" + (enemy.repulse || 0) + "点,同时怪物后退一格"; }, "#8888e6"],
+		[
+			17,
+			"仇恨",
+			"战斗前,怪物附加之前积累的仇恨值作为伤害;战斗后,释放一半的仇恨值。(每杀死一个怪物获得" +
+			(core.values.hatred || 0) +
+			"点仇恨值)",
+			"#b0b666",
+		],
+		[
+			18,
+			"阻击",
+			function (enemy) {
+				return (
+					"经过怪物周围" +
+					(enemy.zoneSquare ? "九宫格" : "十字") +
+					"时自动减生命" +
+					(enemy.repulse || 0) +
+					"点,同时怪物后退一格"
+				);
+			},
+			"#8888e6",
+		],
 		[19, "自爆", "战斗后角色的生命值变成1", "#ff6666"],
 		[20, "无敌", "角色无法打败怪物,除非拥有十字架", "#aaaaaa"],
-		[21, "退化", function (enemy) { return "战斗后角色永久下降" + (enemy.atkValue || 0) + "点攻击和" + (enemy.defValue || 0) + "点防御"; }],
-		[22, "固伤", function (enemy) { return "战斗前,怪物对角色造成" + (enemy.damage || 0) + "点固定伤害,未开启负伤时无视角色护盾。"; }, "#ff9977"],
+		[
+			21,
+			"退化",
+			function (enemy) {
+				return (
+					"战斗后角色永久下降" +
+					(enemy.atkValue || 0) +
+					"点攻击和" +
+					(enemy.defValue || 0) +
+					"点防御"
+				);
+			},
+		],
+		[
+			22,
+			"固伤",
+			function (enemy) {
+				return (
+					"战斗前,怪物对角色造成" +
+					(enemy.damage || 0) +
+					"点固定伤害,未开启负伤时无视角色护盾。"
+				);
+			},
+			"#ff9977",
+		],
 		[23, "重生", "怪物被击败后,角色转换楼层则怪物将再次出现", "#a0e0ff"],
-		[24, "激光", function (enemy) { return "经过怪物同行或同列时自动减生命" + (enemy.laser || 0) + "点"; }, "#dda0dd"],
-		[25, "光环", function (enemy) { return (enemy.range != null ? ((enemy.haloSquare ? "该怪物九宫格" : "该怪物十字") + enemy.haloRange + "格范围内") : "同楼层所有") + "怪物生命提升" + (enemy.hpBuff || 0) + "%,攻击提升" + (enemy.atkBuff || 0) + "%,防御提升" + (enemy.defBuff || 0) + "%," + (enemy.haloAdd ? "可叠加" : "不可叠加"); }, "#e6e099", 1],
-		[26, "支援", "当周围一圈的怪物受到攻击时将上前支援,并组成小队战斗。", "#77c0b6", 1],
-		[27, "捕捉", function (enemy) { return "当走到怪物周围" + (enemy.zoneSquare ? "九宫格" : "十字") + "时会强制进行战斗。"; }, "#c0ddbb"]
+		[
+			24,
+			"激光",
+			function (enemy) {
+				return "经过怪物同行或同列时自动减生命" + (enemy.laser || 0) + "点";
+			},
+			"#dda0dd",
+		],
+		[
+			25,
+			"光环",
+			function (enemy) {
+				return (
+					(enemy.range != null ?
+						(enemy.haloSquare ? "该怪物九宫格" : "该怪物十字") +
+						enemy.haloRange +
+						"格范围内" :
+						"同楼层所有") +
+					"怪物生命提升" +
+					(enemy.hpBuff || 0) +
+					"%,攻击提升" +
+					(enemy.atkBuff || 0) +
+					"%,防御提升" +
+					(enemy.defBuff || 0) +
+					"%," +
+					(enemy.haloAdd ? "可叠加" : "不可叠加")
+				);
+			},
+			"#e6e099",
+			1,
+		],
+		[
+			26,
+			"支援",
+			"当周围一圈的怪物受到攻击时将上前支援,并组成小队战斗。",
+			"#77c0b6",
+			1,
+		],
+		[
+			27,
+			"捕捉",
+			function (enemy) {
+				return (
+					"当走到怪物周围" +
+					(enemy.zoneSquare ? "九宫格" : "十字") +
+					"时会强制进行战斗。"
+				);
+			},
+			"#c0ddbb",
+		],
 	];
 },
         "getEnemyInfo": function (enemy, hero, x, y, floorId) {
 	// 获得某个怪物变化后的数据;该函数将被伤害计算和怪物手册使用
 	// 例如:坚固、模仿、仿攻等等
-	// 
+	//
 	// 参数说明:
 	// enemy:该怪物信息
 	// hero_hp,hero_atk,hero_def,hero_mdef:勇士的生命攻防护盾数据
@@ -528,18 +767,25 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	// floorId:该怪物所在的楼层
 	// 后面三个参数主要是可以在光环等效果上可以适用(也可以按需制作部分范围光环效果)
 	floorId = floorId || core.status.floorId;
-	var hero_hp = core.getRealStatusOrDefault(hero, 'hp'),
-		hero_atk = core.getRealStatusOrDefault(hero, 'atk'),
-		hero_def = core.getRealStatusOrDefault(hero, 'def'),
-		hero_mdef = core.getRealStatusOrDefault(hero, 'mdef');
-
-	var mon_hp = core.getEnemyValue(enemy, 'hp', x, y, floorId),
-		mon_atk = core.getEnemyValue(enemy, 'atk', x, y, floorId),
-		mon_def = core.getEnemyValue(enemy, 'def', x, y, floorId),
-		mon_special = core.getEnemyValue(enemy, 'special', x, y, floorId);
-	var mon_money = core.getEnemyValue(enemy, 'money', x, y, floorId),
-		mon_exp = core.getEnemyValue(enemy, 'exp', x, y, floorId),
-		mon_point = core.getEnemyValue(enemy, 'point', x, y, floorId);
+	var hero_hp = core.getRealStatusOrDefault(hero, "hp"),
+		hero_atk = core.getRealStatusOrDefault(hero, "atk"),
+		hero_def = core.getRealStatusOrDefault(hero, "def"),
+		hero_mdef = core.getRealStatusOrDefault(hero, "mdef"),
+		hero_speed = core.getRealStatusOrDefault(hero, "speed");
+	var mon_id = core.getEnemyValue(enemy, "id", x, y, floorId),
+		mon_name = core.getEnemyValue(enemy, "name", x, y, floorId);
+	var mon_hp = core.getEnemyValue(enemy, "hp", x, y, floorId),
+		mon_atk = core.getEnemyValue(enemy, "atk", x, y, floorId),
+		mon_def = core.getEnemyValue(enemy, "def", x, y, floorId),
+		mon_mdef = core.getEnemyValue(enemy, "mdef", x, y, floorId) || 0,
+		mon_spell = core.getEnemyValue(enemy, "spell", x, y, floorId) || 0,
+		mon_speed = core.getEnemyValue(enemy, "speed", x, y, floorId) || 1,
+		mon_special = core.getEnemyValue(enemy, "special", x, y, floorId);
+	var mon_money = core.getEnemyValue(enemy, "money", x, y, floorId),
+		mon_exp = core.getEnemyValue(enemy, "exp", x, y, floorId),
+		mon_point = core.getEnemyValue(enemy, "point", x, y, floorId);
+	var mon_barrier = 0,
+		mon_absorb_damage = 0;
 	// 模仿
 	if (core.hasSpecial(mon_special, 10)) {
 		mon_atk = hero_atk;
@@ -551,7 +797,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	}
 
 	var guards = [];
-
 	// 光环和支援检查
 	if (!core.status.checkBlock) core.status.checkBlock = {};
 
@@ -563,7 +808,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 		// 已经计算过的光环怪ID列表,用于判定叠加
 		var usedEnemyIds = {};
 		// 检查光环和支援的缓存
-		var index = x != null && y != null ? (x + "," + y) : floorId;
+		var index = x != null && y != null ? x + "," + y : floorId;
 		if (!core.status.checkBlock.cache) core.status.checkBlock.cache = {};
 		var cache = core.status.checkBlock.cache[index];
 		if (!cache) {
@@ -583,7 +828,12 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 								dy = Math.abs(block.y - y);
 							// 检查十字和九宫格光环
 							if (dx + dy <= enemy.haloRange) inRange = true;
-							if (enemy.haloSquare && dx <= enemy.haloRange && dy <= enemy.haloRange) inRange = true;
+							if (
+								enemy.haloSquare &&
+								dx <= enemy.haloRange &&
+								dy <= enemy.haloRange
+							)
+								inRange = true;
 						}
 						// 检查是否可叠加
 						if (inRange && (enemy.haloAdd || !usedEnemyIds[enemy.id])) {
@@ -594,10 +844,17 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 						}
 					}
 					// 检查【支援】技能,数字26
-					if (enemy && core.hasSpecial(enemy.special, 26) &&
+					if (
+						enemy &&
+						core.hasSpecial(enemy.special, 26) &&
 						// 检查支援条件,坐标存在,距离为1,且不能是自己
 						// 其他类型的支援怪,比如十字之类的话.... 看着做是一样的
-						x != null && y != null && Math.abs(block.x - x) <= 1 && Math.abs(block.y - y) <= 1 && !(x == block.x && y == block.y)) {
+						x != null &&
+						y != null &&
+						Math.abs(block.x - x) <= 1 &&
+						Math.abs(block.y - y) <= 1 &&
+						!(x == block.x && y == block.y)
+					) {
 						// 记录怪物的x,y,ID
 						guards.push([block.x, block.y, id]);
 					}
@@ -607,7 +864,12 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 				}
 			});
 
-			core.status.checkBlock.cache[index] = { "hp_buff": hp_buff, "atk_buff": atk_buff, "def_buff": def_buff, "guards": guards };
+			core.status.checkBlock.cache[index] = {
+				hp_buff: hp_buff,
+				atk_buff: atk_buff,
+				def_buff: def_buff,
+				guards: guards,
+			};
 		} else {
 			// 直接使用缓存数据
 			hp_buff = cache.hp_buff;
@@ -617,9 +879,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 		}
 
 		// 增加比例;如果要增加数值可以直接在这里修改
-		mon_hp *= (1 + hp_buff / 100);
-		mon_atk *= (1 + atk_buff / 100);
-		mon_def *= (1 + def_buff / 100);
+		mon_hp *= 1 + hp_buff / 100;
+		mon_atk *= 1 + atk_buff / 100;
+		mon_def *= 1 + def_buff / 100;
 	}
 
 	// TODO:可以在这里新增其他的怪物数据变化
@@ -630,19 +892,27 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	// 也可以按需增加各种自定义内容
 
 	return {
-		"hp": Math.floor(mon_hp),
-		"atk": Math.floor(mon_atk),
-		"def": Math.floor(mon_def),
-		"money": Math.floor(mon_money),
-		"exp": Math.floor(mon_exp),
-		"point": Math.floor(mon_point),
-		"special": mon_special,
-		"guards": guards, // 返回支援情况
+		id: mon_id,
+		name: mon_name,
+		hp: Math.floor(mon_hp),
+		atk: Math.floor(mon_atk),
+		def: Math.floor(mon_def),
+		mdef: Math.floor(mon_mdef),
+		spell: Math.floor(mon_spell),
+		speed: Math.floor(mon_speed),
+		barrier: Math.floor(mon_barrier),
+		absorb: Math.floor(mon_absorb_damage),
+		money: Math.floor(mon_money),
+		exp: Math.floor(mon_exp),
+		point: Math.floor(mon_point),
+		special: mon_special,
+		guards: guards // 返回支援情况
+
 	};
 },
         "getDamageInfo": function (enemy, hero, x, y, floorId) {
 	// 获得战斗伤害信息(实际伤害计算函数)
-	// 
+	//
 	// 参数说明:
 	// enemy:该怪物信息
 	// hero:勇士的当前数据;如果对应项不存在则会从core.status.hero中取。
@@ -651,43 +921,76 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	// 后面三个参数主要是可以在光环等效果上可以适用
 	floorId = floorId || core.status.floorId;
 
-	var hero_hp = core.getRealStatusOrDefault(hero, 'hp'),
-		hero_atk = core.getRealStatusOrDefault(hero, 'atk'),
-		hero_def = core.getRealStatusOrDefault(hero, 'def'),
-		hero_mdef = core.getRealStatusOrDefault(hero, 'mdef'),
-		origin_hero_hp = core.getStatusOrDefault(hero, 'hp'),
-		origin_hero_atk = core.getStatusOrDefault(hero, 'atk'),
-		origin_hero_def = core.getStatusOrDefault(hero, 'def');
-
-	// 勇士的负属性都按0计算
-	hero_hp = Math.max(0, hero_hp);
-	hero_atk = Math.max(0, hero_atk);
-	hero_def = Math.max(0, hero_def);
-	hero_mdef = Math.max(0, hero_mdef);
+	var hero_hp = core.getRealStatusOrDefault(hero, "hp"),
+		hero_atk = core.getRealStatusOrDefault(hero, "atk"),
+		hero_def = core.getRealStatusOrDefault(hero, "def"),
+		hero_matk = core.getRealStatusOrDefault(hero, "matk"),
+		hero_mdef = core.getRealStatusOrDefault(hero, "mdef"),
+		hero_mhp = core.getRealStatusOrDefault(hero, "mhp"),
+		hero_speed = core.getRealStatusOrDefault(hero, "speed"),
+		hero_spell = core.getRealStatusOrDefault(hero, "spell"),
+		origin_hero_hp = core.getStatusOrDefault(hero, "hp"),
+		origin_hero_atk = core.getStatusOrDefault(hero, "atk"),
+		origin_hero_def = core.getStatusOrDefault(hero, "def");
 
+	//编辑器特判
+	if (main.mode == "editor") {
+		hero_hp = hero?.hp ?? core.status.hero.hp,
+			hero_atk = hero?.atk ?? core.status.hero.atk,
+			hero_def = hero?.def ?? core.status.hero.def,
+			hero_matk = hero?.matk ?? core.status.hero.matk,
+			hero_mdef = hero?.mdef ?? core.status.hero.mdef,
+			hero_mhp = hero?.mhp ?? core.status.hero.mhp,
+			hero_speed = hero?.speed ?? core.status.hero.speed,
+			hero_spell = hero?.spell ?? core.status.hero.spell;
+	}
 	// 怪物的各项数据
 	// 对坚固模仿等处理扔到了脚本编辑-getEnemyInfo之中
 	var enemyInfo = core.enemys.getEnemyInfo(enemy, hero, x, y, floorId);
 	var mon_hp = enemyInfo.hp,
 		mon_atk = enemyInfo.atk,
 		mon_def = enemyInfo.def,
-		mon_special = enemyInfo.special;
-
+		mon_mdef = enemyInfo.mdef,
+		mon_spell = enemyInfo.spell,
+		mon_speed = enemyInfo.speed,
+		mon_special = enemyInfo.special,
+		mon_absorb_damage = enemyInfo.absorb,
+		mon_barrier = enemyInfo.barrier;
+	const { lcm, gcd } = core.plugin.utils
+	const equip0 = core.getEquip(0)
+	//---第一部分:静态属性修正---
+	//此处写入静态影响勇士属性的勇士或怪物技能(静态影响怪物属性的技能于getEnemyInfo中写入)
 	// 技能的处理
-	if (core.getFlag('skill', 0) == 1) { // 开启了技能1:二倍斩
-		hero_atk *= 2; // 计算时攻击力翻倍	
+	if (core.getFlag("skill", 0) == 1) {
+		// 开启了技能1:二倍斩
+		hero_atk *= 2; // 计算时攻击力翻倍
 	}
 
+	// 破甲
+	if (core.hasSpecial(mon_special, 7))
+		hero_def -= Math.floor(
+			(enemy.breakArmor || core.values.breakArmor) * hero_def
+		);
+
+	//勇士属性取整
+	hero_atk = Math.max(0, Math.floor(hero_atk));
+	hero_def = Math.max(0, Math.floor(hero_def));
+	hero_speed = Math.max(0, Math.floor(hero_speed));
+	hero_spell = Math.max(0, Math.floor(hero_spell));
+	hero_matk = Math.min(100, Math.max(0, Math.floor(hero_matk)));
+	hero_mdef = Math.min(100, Math.max(0, Math.floor(hero_mdef)));
+	hero_mhp = Math.min(100, Math.max(0, Math.floor(hero_mhp)));
+
 	// 如果是无敌属性,且勇士未持有十字架
 	if (core.hasSpecial(mon_special, 20) && !core.hasItem("cross"))
 		return null; // 不可战斗
 
 	// 战前造成的额外伤害(可被护盾抵消)
-	var init_damage = 0;
+	let init_damage = 0;
 
 	// 吸血
 	if (core.hasSpecial(mon_special, 11)) {
-		var vampire_damage = hero_hp * enemy.vampire;
+		let vampire_damage = hero_hp * enemy.vampire;
 
 		// 如果有神圣盾免疫吸血等可以在这里写
 		// 也可以用hasItem和hasEquip来判定装备
@@ -695,105 +998,334 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 
 		vampire_damage = Math.floor(vampire_damage) || 0;
 		// 加到自身
-		if (enemy.add) // 如果加到自身
+		if (enemy.add)
+			// 如果加到自身
 			mon_hp += vampire_damage;
 
 		init_damage += vampire_damage;
 	}
 
-	// 每回合怪物对勇士造成的战斗伤害
-	var per_damage = mon_atk - hero_def;
+	//——第二部分:变量定义和初始赋值——
 
-	// 战斗伤害不能为负值
-	if (per_damage < 0) per_damage = 0;
+	let hero_per_damage = Math.max(hero_atk - mon_def, 0),
 
-	// 连击
-	if (core.hasSpecial(mon_special, 6)) per_damage *= (enemy.n || 2);
+		hero_per_mdamage = Math.floor((hero_spell * hero_matk / 100) * (100 - mon_mdef) / 100);
 
-	// 每回合的反击伤害;反击是按照勇士的攻击次数来计算回合
-	var counterDamage = 0;
-	if (core.hasSpecial(mon_special, 8))
-		counterDamage += Math.floor((enemy.counterAttack || core.values.counterAttack) * hero_atk);
+	let damage = 0,
+		hero_turn = 0,
+		mon_turn = 0;
+	let equipInfo = [] //回合生效的装备列表
 
-	// 先攻
-	if (core.hasSpecial(mon_special, 1)) init_damage += per_damage;
+	for (let i = 0; i < 5; i++) {
+		const a = core.plugin.equip[core.getEquip(i)]
+		if (a) equipInfo.push(a)
+	}
 
-	// 破甲
-	if (core.hasSpecial(mon_special, 7))
-		init_damage += Math.floor((enemy.breakArmor || core.values.breakArmor) * hero_def);
-
-	// 净化
-	if (core.hasSpecial(mon_special, 9))
-		init_damage += Math.floor((enemy.purify || core.values.purify) * hero_mdef);
-
-	// 勇士每回合对怪物造成的伤害
-	var hero_per_damage = Math.max(hero_atk - mon_def, 0);
-
-	// 如果没有破防,则不可战斗
-	if (hero_per_damage <= 0) return null;
-
-	// 勇士的攻击回合数;为怪物生命除以每回合伤害向上取整
-	var turn = Math.ceil(mon_hp / hero_per_damage);
-
-	// ------ 支援 ----- //
-	// 这个递归最好想明白为什么,flag:__extraTurn__是怎么用的
-	var guards = core.getFlag("__guards__" + x + "_" + y, enemyInfo.guards);
-	var guard_before_current_enemy = false; // ------ 支援怪是先打(true)还是后打(false)?
-	turn += core.getFlag("__extraTurn__", 0);
-	if (guards.length > 0) {
-		if (!guard_before_current_enemy) { // --- 先打当前怪物,记录当前回合数
-			core.setFlag("__extraTurn__", turn);
+	//处理回合条长度
+	let oneTurn = [hero_speed, mon_speed];
+	if (equipInfo.length > 0) {
+		for (let i = 0; i < equipInfo.length; i++) {
+			equipInfo[i].now = 0;
+			equipInfo[i].isAttack = false;
+			oneTurn.push(equipInfo[i].speed);
 		}
-		// 获得那些怪物组成小队战斗
-		for (var i = 0; i < guards.length; i++) {
-			var gx = guards[i][0],
-				gy = guards[i][1],
-				gid = guards[i][2];
-			// 递归计算支援怪伤害信息,这里不传x,y保证不会重复调用
-			// 这里的mdef传0,因为护盾应该只会被计算一次
-			var info = core.enemys.getDamageInfo(core.material.enemys[gid], { hp: origin_hero_hp, atk: origin_hero_atk, def: origin_hero_def, mdef: 0 });
-			if (info == null) { // 小队中任何一个怪物不可战斗,直接返回null
-				core.removeFlag("__extraTurn__");
-				return null;
+	}
+	//需要变更
+
+	const onegcd = gcd(...oneTurn) //最大公约数
+	oneTurn = lcm(...oneTurn) //单次回合长度
+	//在这里处理equip的初始位置now
+	equipInfo.forEach(v => {
+		switch (v.id) {
+		case "sword1":
+		default:
+			v.now = 0
+			break
+		}
+		v.onAttack = false
+		if (v.now === oneTurn) v.onAttack = true //增加正在攻击的标志
+	})
+	const heroinfo = { hp: hero_hp, atk: hero_atk, def: hero_def, mdef: (!hero?.mdef || hero?.mdef === 100) ? hero_mdef : hero.mdef, spell: hero_spell, mhp: Math.floor(hero_spell * hero_mhp / 100), matk: Math.floor(hero_spell * hero_matk / 100), speed: hero_speed, now: 0, isAttack: false } //勇士属性
+	const enemyinfo = { hp: mon_hp, atk: mon_atk, def: mon_def, mdef: mon_mdef, spell: mon_spell, speed: mon_speed, special: mon_special, now: 0, onAttack: false, isAttack: false } //怪物属性
+	//先攻,先攻为怪物和勇士勇士行动前怪物出第一刀
+	if (core.hasSpecial(mon_special, 1)) {
+		enemyinfo.now = oneTurn
+		enemyinfo.onAttack = true
+	}
+	const start = [core.clone(heroinfo), core.clone(enemyinfo), core.clone(equipInfo), oneTurn] //记录开始战斗时的属性并转发
+	//---第三部分:递归开始---
+
+	const heroDiffList = [],
+		enemyDiffList = [],
+		heroanimateList = [],
+		enemyanimateList = [];
+
+	let beforehp = enemyinfo.hp
+	while (
+		enemyinfo.hp > 0
+	) {
+		let onattack = false
+		const hero_diff = {},
+			enemy_diff = {},
+			hero_animate = [],
+			enemy_animate = [];
+		if (enemyinfo.onAttack) { //怪物先攻的场合
+			//这里计算怪物攻击时发生的各种变化,同时计入enemy_diff
+			let mon_damage = 0
+			let hero_damage = 0
+			//伤害计算
+			let per_damage = Math.max(enemyinfo.atk - heroinfo.def, 0),
+				per_mdamage = Math.floor(enemyinfo.spell * (100 - heroinfo.mdef) / 100);
+
+			//这里记录伤害触发后的属性变化和动画,同时计入diff、damage(不要在此直接修改heroinfo和enemyinfo)
+			if (core.hasSpecial(mon_special, 6)) {
+				hero_damage += per_damage * enemy.n + per_mdamage * enemy.n
+			} else {
+				hero_damage += per_damage + per_mdamage
 			}
-			// 已经进行的回合数
-			core.setFlag("__extraTurn__", info.turn);
-			init_damage += info.damage;
+			let animate = core.plugin.enemyanimate[enemy.id] ?? "jianji2"
+			//这里可通过if更改默认的怪物攻击特效
+			hero_animate.push(animate) //勇士身上绘制jianji2动画
+			if (heroinfo.mhp + (hero_diff.mhp ?? 0) - hero_damage >= 0) {
+				hero_diff.mhp = (hero_diff.mhp ?? 0) - hero_damage
+				hero_damage = 0
+				hero_diff.hp = (hero_diff.hp ?? 0) - hero_damage
+			} else {
+				hero_damage -= heroinfo.mhp + (hero_diff.mhp ?? 0)
+				hero_diff.mhp = (hero_diff.mhp ?? 0) - heroinfo.mhp - (hero_diff.mhp ?? 0)
+
+				hero_diff.hp = (hero_diff.hp ?? 0) - hero_damage
+			}
+
+			damage += hero_damage
+			enemyinfo.onAttack = false
+			enemyinfo.now = 0
+			onattack = true
+
 		}
-		if (guard_before_current_enemy) { // --- 先打支援怪物,增加当前回合数
-			turn += core.getFlag("__extraTurn__", 0);
+		equipInfo.forEach(v => {
+			if (v.onAttack) {
+				let mon_damage = 0
+				let hero_damage = 0
+				//这里写生效装备的技能效果,同时对双方属性的修改计入diff(不要在此直接修改heroinfo和enemyinfo)
+				let animate = core.plugin.equipanimate[v.id] ?? "jianji2"
+				//这里可通过if更改默认的道具特效
+				enemy_animate.push(animate) //勇士身上绘制动画
+
+				v.now = 0
+				v.onAttack = false
+				onattack = true
+			}
+		})
+		if (onattack) { //先手处理完毕后的数据处理
+			heroDiffList.push(hero_diff)
+			enemyDiffList.push(enemy_diff)
+			heroanimateList.push(hero_animate)
+			enemyanimateList.push(enemy_animate)
+			//处理属性变化
+			for (let v in hero_diff) {
+				heroinfo[v] += hero_diff[v]
+			}
+			for (let v in enemy_diff) {
+				enemyinfo[v] += enemy_diff[v]
+			}
+			continue //进入下一循环
 		}
+		heroinfo.now += heroinfo.speed
+		enemyinfo.now += enemyinfo.speed
+		equipInfo.forEach(v => {
+			v.now += v.speed
+		})
+
+		if (
+			heroinfo.now >= oneTurn
+		) {
+			//勇士攻击的回合
+			let mon_damage = 0
+			let hero_damage = 0
+			//这里计算勇士攻击时发生的各种变化
+
+			//伤害计算
+			let per_damage = Math.max(heroinfo.atk - enemyinfo.def, 0)
+			let per_mdamage = Math.max(Math.floor(heroinfo.matk * (100 - enemyinfo.mdef) / 100), 0)
+			mon_damage = per_damage + per_mdamage
+			//这里记录伤害触发后的属性变化和动画,同时计入diff(不要在此直接修改heroinfo和enemyinfo)	
+			let animate = core.plugin.heroanimate[equip0] ?? "jianji2"
+			//这里可通过if更改默认的武器攻击特效
+			enemy_animate.push(animate)
+
+
+			enemy_diff.hp = (enemy_diff.hp ?? 0) - mon_damage
+			heroinfo.now -= oneTurn
+			hero_turn++
+			onattack = true
+		}
+
+
+		if (enemyinfo.now >= oneTurn) {
+			//怪物攻击的回合
+			let mon_damage = 0
+			let hero_damage = 0
+			//伤害计算
+			let per_damage = Math.max(enemyinfo.atk - heroinfo.def, 0),
+				per_mdamage = Math.floor(enemyinfo.spell * (100 - heroinfo.mdef) / 100);
+
+			//这里记录伤害触发后的属性变化和动画,同时计入diff、damage(不要在此直接修改heroinfo和enemyinfo)
+			if (core.hasSpecial(mon_special, 6)) {
+				hero_damage += per_damage * enemy.n + per_mdamage * enemy.n
+			} else {
+				hero_damage += per_damage + per_mdamage
+			}
+			let animate = core.plugin.enemyanimate[enemy.id] ?? "jianji2"
+			//这里可通过if更改默认的怪物攻击特效
+			hero_animate.push(animate) //勇士身上绘制sword动画
+			if (heroinfo.mhp + (hero_diff.mhp ?? 0) - hero_damage >= 0) {
+				hero_diff.mhp = (hero_diff.mhp ?? 0) - hero_damage
+				hero_damage = 0
+				hero_diff.hp = (hero_diff.hp ?? 0) - hero_damage
+			} else {
+				hero_damage -= heroinfo.mhp + (hero_diff.mhp ?? 0)
+				hero_diff.mhp = (hero_diff.mhp ?? 0) - heroinfo.mhp - (hero_diff.mhp ?? 0)
+
+				hero_diff.hp = (hero_diff.hp ?? 0) - hero_damage
+			}
+
+			damage += hero_damage
+			enemyinfo.now -= oneTurn
+			mon_turn++
+			onattack = true
+		}
+		equipInfo.forEach(v => {
+			if (v.now >= oneTurn) {
+				let mon_damage = 0
+				let hero_damage = 0
+				//这里写生效装备的技能效果,同时对双方属性的修改计入diff(不要在此直接修改heroinfo和enemyinfo)
+				let animate = core.plugin.equipanimate[v.id] ?? "jianji2"
+				//这里可通过if更改默认的道具特效
+				enemy_animate.push(animate) //怪物身上绘制动画
+
+				v.now -= oneTurn
+				onattack = true
+			}
+
+		})
+		if (onattack) {
+			//处理完毕后的数据处理
+			heroDiffList.push(hero_diff)
+			enemyDiffList.push(enemy_diff)
+			heroanimateList.push(hero_animate)
+			enemyanimateList.push(enemy_animate)
+			//处理属性变化
+			for (let v in hero_diff) {
+				heroinfo[v] += hero_diff[v]
+			}
+			for (let v in enemy_diff) {
+				enemyinfo[v] += enemy_diff[v]
+			}
+
+			//出手50回合怪物生命未降低直接判负,避免死循环
+			if (hero_turn === 50) {
+
+				if (enemyinfo.hp >= beforehp) {
+					return null
+				}
+			}
+		}
+
 	}
-	core.removeFlag("__extraTurn__");
+
+	//下面这些还没修改,原有技能除先攻、连击外暂时全部移除,所有技能需要在上方的模拟循环中做修正
+	/*
+		// 每回合的反击伤害;反击是按照勇士的攻击次数来计算回合
+		let counterDamage = 0;
+		if (core.hasSpecial(mon_special, 8))
+			counterDamage += Math.floor(
+				(enemy.counterAttack || core.values.counterAttack) * hero_atk
+			);
+
+
+
+		// 净化
+		if (core.hasSpecial(mon_special, 9))
+			init_damage += Math.floor(
+				(enemy.purify || core.values.purify) * hero_mdef
+			);
+		//上面这些还没修改
+		//勇士护盾计算
+		let barrier = Math.floor(hero_spell * hero_mhp / 100);
+
+
+		// ------ 支援 ----- //
+		// 这个递归最好想明白为什么,flag:__extraTurn__是怎么用的
+		/*var guards = core.getFlag("__guards__" + x + "_" + y, enemyInfo.guards);
+		var guard_before_current_enemy = false; // ------ 支援怪是先打(true)还是后打(false)?
+		turn += core.getFlag("__extraTurn__", 0);
+		if (guards.length > 0) {
+			if (!guard_before_current_enemy) { // --- 先打当前怪物,记录当前回合数
+				core.setFlag("__extraTurn__", turn);
+			}
+			// 获得那些怪物组成小队战斗
+			for (var i = 0; i < guards.length; i++) {
+				var gx = guards[i][0],
+					gy = guards[i][1],
+					gid = guards[i][2];
+				// 递归计算支援怪伤害信息,这里不传x,y保证不会重复调用
+				// 这里的mdef传0,因为护盾应该只会被计算一次
+				var info = core.enemys.getDamageInfo(core.material.enemys[gid], { hp: origin_hero_hp, atk: origin_hero_atk, def: origin_hero_def, mdef: 0 });
+				if (info == null) { // 小队中任何一个怪物不可战斗,直接返回null
+					core.removeFlag("__extraTurn__");
+					return null;
+				}
+				// 已经进行的回合数
+				core.setFlag("__extraTurn__", info.turn);
+				init_damage += info.damage;
+			}
+			if (guard_before_current_enemy) { // --- 先打支援怪物,增加当前回合数
+				turn += core.getFlag("__extraTurn__", 0);
+			}
+		}
+		core.removeFlag("__extraTurn__");*/
 	// ------ 支援END ------ //
+	/*
+		// 最终伤害:初始伤害 + 怪物对勇士造成的伤害 + 反击伤害
+		damage += init_damage + hero_turn * counterDamage;
+		// 再扣去护盾
+		damage -= barrier;
 
-	// 最终伤害:初始伤害 + 怪物对勇士造成的伤害 + 反击伤害
-	var damage = init_damage + (turn - 1) * per_damage + turn * counterDamage;
-	// 再扣去护盾
-	damage -= hero_mdef;
-
-	// 检查是否允许负伤
-	if (!core.flags.enableNegativeDamage)
-		damage = Math.max(0, damage);
-
-	// 最后处理仇恨和固伤(因为这两个不能被护盾减伤)
-	if (core.hasSpecial(mon_special, 17)) { // 仇恨
-		damage += core.getFlag('hatred', 0);
-	}
-	if (core.hasSpecial(mon_special, 22)) { // 固伤
-		damage += enemy.damage || 0;
-	}
+		// 检查是否允许负伤
+		if (!core.flags.enableNegativeDamage) damage = Math.max(0, damage);
 
+		// 最后处理仇恨和固伤(因为这两个不能被护盾减伤)
+		if (core.hasSpecial(mon_special, 17)) {
+			// 仇恨
+			damage += core.getFlag("hatred", 0);
+		}
+		if (core.hasSpecial(mon_special, 22)) {
+			// 固伤
+			damage += enemy.damage2 || 0;
+		}
+	*/
 	return {
-		"mon_hp": Math.floor(mon_hp),
-		"mon_atk": Math.floor(mon_atk),
-		"mon_def": Math.floor(mon_def),
-		"init_damage": Math.floor(init_damage),
-		"per_damage": Math.floor(per_damage),
-		"hero_per_damage": Math.floor(hero_per_damage),
-		"turn": Math.floor(turn),
-		"damage": Math.floor(damage)
+		start: start,
+		mon_hp: Math.floor(mon_hp),
+		mon_atk: Math.floor(mon_atk),
+		mon_def: Math.floor(mon_def),
+		mon_mdef: Math.floor(mon_mdef),
+		mon_speed: Math.floor(mon_speed),
+		heroDiffList: heroDiffList,
+		enemyDiffList: enemyDiffList,
+		heroanimateList: heroanimateList,
+		enemyanimateList: enemyanimateList,
+		hero_turn: Math.floor(hero_turn),
+		mon_turn: Math.floor(mon_turn),
+		damage: Math.floor(damage)
 	};
+	/*TODO:怪物手册的修改(需要修改这里return的内容以及一些战后判断)
+	1. 显示怪物是魔攻还是物攻(在怪物名字上做颜色变化,物攻是黄色,魔攻是蓝色)
+	2. 一防减伤是物防还是魔防(由怪物是物攻还是魔攻来转换)
+	3. 特殊战斗的怪物,在怪物手册里“伤害”写为“特殊战”*/
+	/*TODO:怪物和勇士同时跑条到终点时,谁先出手的逻辑确定
+	 怪物、勇士和装备同时跑条时的计算*/
 }
     },
     "actions": {
@@ -807,7 +1339,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	if (core.isMoving()) return;
 
 	// 商店长按时忽略
-	if (core.status.onShopLongDown) return core.status.onShopLongDown = false;
+	if (core.status.onShopLongDown)
+		return (core.status.onShopLongDown = false);
 
 	// Alt+0~9,快捷换上套装
 	if (altKey && keyCode >= 48 && keyCode <= 57) {
@@ -824,7 +1357,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 		core.openBook(true);
 		break;
 	case 71: // G:使用楼传器
-		core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));
+		flags.canMoveFloor = core.canMoveFloor();
+		core.useItem('fly', true)
+		core.status.route.push("key:71");
 		break;
 	case 65: // A:读取自动存档(回退)
 		core.doSL("autoSave", "load");
@@ -882,25 +1417,37 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 		core.actions._clickGameInfo_openComments();
 		break;
 	case 49: // 快捷键1: 破
-		if (core.hasItem('pickaxe')) {
+		if (core.hasItem("pickaxe")) {
 			core.status.route.push("key:49"); // 将按键记在录像中
-			core.useItem('pickaxe', true); // 第二个参数true代表该次使用道具是被按键触发的,使用过程不计入录像
+			core.useItem("pickaxe", true); // 第二个参数true代表该次使用道具是被按键触发的,使用过程不计入录像
 		}
 		break;
 	case 50: // 快捷键2: 炸
-		if (core.hasItem('bomb')) {
+		if (core.hasItem("bomb")) {
 			core.status.route.push("key:50"); // 将按键记在录像中
-			core.useItem('bomb', true); // 第二个参数true代表该次使用道具是被按键触发的,使用过程不计入录像
+			core.useItem("bomb", true); // 第二个参数true代表该次使用道具是被按键触发的,使用过程不计入录像
 		}
 		break;
 	case 51: // 快捷键3: 飞
-		if (core.hasItem('centerFly')) {
+		if (core.hasItem("centerFly")) {
 			core.ui._drawCenterFly();
 		}
 		break;
 	case 52: // 快捷键4:破冰/冰冻/地震/上下楼器/... 其他道具依次判断
 	{
-		var list = ["icePickaxe", "freezeBadge", "earthquake", "upFly", "downFly", "jumpShoes", "lifeWand", "poisonWine", "weakWine", "curseWine", "superWine"];
+		var list = [
+			"icePickaxe",
+			"freezeBadge",
+			"earthquake",
+			"upFly",
+			"downFly",
+			"jumpShoes",
+			"lifeWand",
+			"poisonWine",
+			"weakWine",
+			"curseWine",
+			"superWine",
+		];
 		for (var i = 0; i < list.length; i++) {
 			var itemId = list[i];
 			if (core.canUseItem(itemId)) {
@@ -926,9 +1473,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 		break;
 	case 70: // F:开启技能“二倍斩”
 		// 检测是否拥有“二倍斩”这个技能道具
-		if (core.hasItem('skill1')) {
+		if (core.hasItem("skill1")) {
 			core.status.route.push("key:70");
-			core.useItem('skill1', true);
+			core.useItem("skill1", true);
 		}
 		break;
 		// 在这里可以任意新增或编辑已有的快捷键内容
@@ -946,33 +1493,32 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 					break;
 				*/
 	}
-
 },
         "onStatusBarClick": function (px, py, vertical) {
-			// 点击状态栏时触发的事件,仅在自绘状态栏开启时生效
-			// px和py为点击的像素坐标
-			// vertical为录像播放过程中的横竖屏信息
-			// 
-			// 横屏模式下状态栏的画布大小是 129*416 (开启拓展装备栏后是 129*457)
-			// 竖屏模式下状态栏的画布大小是 416*(32*rows+9) 其中rows为状态栏行数,即全塔属性中statusCanvasRowsOnMobile值
-			// 可以使用 _isVertical() 来判定当前是否是竖屏模式
+      // 点击状态栏时触发的事件,仅在自绘状态栏开启时生效
+      // px和py为点击的像素坐标
+      // vertical为录像播放过程中的横竖屏信息
+      //
+      // 横屏模式下状态栏的画布大小是 129*416 (开启拓展装备栏后是 129*457)
+      // 竖屏模式下状态栏的画布大小是 416*(32*rows+9) 其中rows为状态栏行数,即全塔属性中statusCanvasRowsOnMobile值
+      // 可以使用 _isVertical() 来判定当前是否是竖屏模式
 
-			// 判定当前是否是竖屏模式。录像播放过程中可能会记录当时的横竖屏信息以覆盖。
-			var _isVertical = function () {
-				if (core.isReplaying() && vertical != null) return vertical;
-				return core.domStyle.isVertical;
-			}
+      // 判定当前是否是竖屏模式。录像播放过程中可能会记录当时的横竖屏信息以覆盖。
+      var _isVertical = function () {
+        if (core.isReplaying() && vertical != null) return vertical;
+        return core.domStyle.isVertical;
+      };
 
-			// 如果正在执行事件,则忽略
-			if (core.status.lockControl) return;
-			// 如果当前正在行走,则忽略;也可以使用 core.waitHeroToStop(callback) 来停止行走再回调执行脚本
-			if (core.isMoving()) return;
+      // 如果正在执行事件,则忽略
+      if (core.status.lockControl) return;
+      // 如果当前正在行走,则忽略;也可以使用 core.waitHeroToStop(callback) 来停止行走再回调执行脚本
+      if (core.isMoving()) return;
 
-			// 判定px和py来执行自己的脚本内容.... 注意横竖屏
-			// console.log("onStatusBarClick: ", px, py, _isVertical());
+      // 判定px和py来执行自己的脚本内容.... 注意横竖屏
+      // console.log("onStatusBarClick: ", px, py, _isVertical());
 
-			// 样例一:点击某个区域后使用一个道具
-			/*
+      // 样例一:点击某个区域后使用一个道具
+      /*
 			if (core.hasItem("pickaxe")) {
 				if (_isVertical()) {
 					// 竖屏模式下
@@ -988,8 +1534,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 			}
 			*/
 
-			// 样例二:点击某个区域后执行一段公共事件或脚本
-			/*
+      // 样例二:点击某个区域后执行一段公共事件或脚本
+      /*
 			if (core.hasFlag("xxx")) {
 				if (_isVertical()) {
 					// 竖屏模式下
@@ -1014,8 +1560,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 				}
 			}
 			*/
-
-		}
+    }
     },
     "control": {
         "saveData": function () {
@@ -1027,31 +1572,66 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 		if (!core.same(core.values[key], core.data.values[key]))
 			values[key] = core.clone(core.values[key]);
 	}
-
+	let cg = {}
+	if (core.getFlag("_cgText")) {
+		cg.index = core.ui.cgText.index
+		cg.head = core.ui.cgText.head
+		cg.name = core.ui.cgText.name
+		cg.text = core.ui.cgText.text
+		cg.bodyList = core.clone(core.ui.cgText.bodyList)
+		cg.nobg = core.ui.cgText.nobg
+		cg.image = core.ui.cgText.image
+		cg.time = core.ui.cgText.time
+		cg.WindowSkin = core.ui.cgText.WindowSkin
+		cg.sound = core.ui.cgText.sound
+		cg.beforeSound = core.ui.cgText.beforeSound
+		cg.wait = core.ui.cgText.wait
+		cg.memory = core.ui.cgText.memory
+		cg.textList = core.ui.cgText.textList
+		cg.page = core.ui.cgText.page
+		cg.overpage = core.ui.cgText.overpage
+		cg.log = core.ui.cgText.log
+		cg.index = core.ui.cgText.index
+	}
 	// 要存档的内容
 	var data = {
-		'floorId': core.status.floorId,
-		'hero': core.clone(core.status.hero),
-		'hard': core.status.hard,
-		'maps': core.clone(core.maps.saveMap()),
-		'route': core.encodeRoute(core.status.route),
-		'values': values,
-		'version': core.firstData.version,
-		'guid': core.getGuid(),
-		"time": new Date().getTime()
+		floorId: core.status.floorId,
+		hero: core.clone(core.status.hero),
+		hard: core.status.hard,
+		maps: core.clone(core.maps.saveMap()),
+		route: core.encodeRoute(core.status.route),
+		values: values,
+		version: core.firstData.version,
+		guid: core.getGuid(),
+		time: new Date().getTime(),
+		cg: cg,
+		animateObjs: core.status.animateObjs.filter(v => v.loop),
+		playing: [...core.plugin.playing].filter(v => v.loop)
 	};
 	return data;
 },
         "loadData": function (data, callback) {
 	// 读档操作;从存储中读取了内容后的行为
-	const play = core.status.played
+	const play = core.status.played;
 	// 重置游戏和路线
-	core.resetGame(data.hero, data.hard, data.floorId, core.maps.loadMap(data.maps, null, data.hero.flags), data.values);
+	core.resetGame(
+		data.hero,
+		data.hard,
+		data.floorId,
+		core.maps.loadMap(data.maps, null, data.hero.flags),
+		data.values
+	);
 	core.status.route = core.decodeRoute(data.route);
 	core.control._bindRoutePush();
 	// 文字属性,全局属性
-	core.status.textAttribute = core.getFlag('textAttribute', core.status.textAttribute);
-	var toAttribute = core.getFlag('globalAttribute', core.status.globalAttribute);
+	core.status.textAttribute = core.getFlag(
+		"textAttribute",
+		core.status.textAttribute
+	);
+	var toAttribute = core.getFlag(
+		"globalAttribute",
+		core.status.globalAttribute
+	);
 	if (!core.same(toAttribute, core.status.globalAttribute)) {
 		core.status.globalAttribute = toAttribute;
 		core.resize();
@@ -1063,36 +1643,46 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	icon = core.getMappedName(icon);
 	if (core.material.images.images[icon]) {
 		core.material.images.hero = core.material.images.images[icon];
-		core.material.icons.hero.width = core.material.images.images[icon].width / 4;
-		core.material.icons.hero.height = core.material.images.images[icon].height / 4;
+		core.material.icons.hero.width =
+			core.material.images.images[icon].width / 4;
+		core.material.icons.hero.height =
+			core.material.images.images[icon].height / 4;
 	}
-	core.setFlag('__fromLoad__', true);
+	core.setFlag("__fromLoad__", true);
 
 	// TODO:增加自己的一些读档处理
-	core.ui.statusBar.clearItemInfo()
+	core.ui.statusBar.clearItemInfo();
 	core.ui.statusBar.update();
-	core.plugin.playing.clear()
+	core.status.animateObjs = data.animateObjs
+	core.plugin.playing = new Set(data.playing)
+	if (core.getFlag("_cgText")) {
+		core.setFlag("_cgText", false)
+		for (let v in data.cg) {
+
+			core.ui.cgText[v] = data.cg[v]
+		}
+		core.drawbackground(core.ui.cgText.image, core.ui.cgText.memory)
+	}
 	// 切换到对应的楼层
 	core.changeFloor(data.floorId, null, data.hero.loc, 0, function () {
 		// TODO:可以在这里设置读档后播放BGM
-		if (core.hasFlag("__bgm__")) { // 持续播放
+		if (core.hasFlag("__bgm__")) {
+			// 持续播放
 			core.playBgm(core.getFlag("__bgm__"));
 		}
 
-		core.removeFlag('__fromLoad__');
-		if (!play) core.insertCommonEvent('强制横屏')
+		core.removeFlag("__fromLoad__");
+		if (!play) core.insertCommonEvent("强制横屏");
 		if (callback) callback();
 	});
-	if (play) core.doAction()
-
-
+	if (play) core.doAction();
 },
         "getStatusLabel": function (name) {
 	// 返回某个状态英文名的对应中文标签,如atk -> 攻击,def -> 防御等。
 	// 请注意此项仅影响 libs/ 下的内容(如绘制怪物手册、数据统计等)
 	// 自行定义的(比如获得道具效果)中用到的“攻击+3”等需要自己去对应地方修改
 
-	return {
+	return ({
 		name: "名称",
 		lv: "等级",
 		hpmax: "生命上限",
@@ -1101,72 +1691,76 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 		mana: "魔力",
 		atk: "攻击",
 		def: "防御",
-		mdef: "法强",
+		spell: "法强",
+		matk: "魔攻比例",
+		mhp: "护盾比例",
+		mdef: "法抗",
 		speed: "速度",
 		money: "金币",
 		exp: "经验",
 		point: "加点",
 		steps: "步数",
-	} [name] || name;
+	} [name] || name);
 },
         "triggerDebuff": function (action, type) {
-			// 毒衰咒效果的获得与解除
-			// action:获得还是解除;'get'表示获得,'remove'表示解除
-			// type:一个数组表示获得了哪些毒衰咒效果;poison, weak,curse
-			if (!(type instanceof Array)) type = [type];
+      // 毒衰咒效果的获得与解除
+      // action:获得还是解除;'get'表示获得,'remove'表示解除
+      // type:一个数组表示获得了哪些毒衰咒效果;poison, weak,curse
+      if (!(type instanceof Array)) type = [type];
 
-			if (action == 'get') {
-				if (core.inArray(type, 'poison') && !core.hasFlag("poison")) {
-					// 获得毒效果
-					core.setFlag('poison', true);
-				}
-				if (core.inArray(type, 'weak') && !core.hasFlag('weak')) {
-					// 获得衰效果
-					core.setFlag('weak', true);
-					if (core.values.weakValue >= 1) {
-						// >=1,直接扣数值
-						core.addStatus('atk', -core.values.weakValue);
-						core.addStatus('def', -core.values.weakValue);
-					} else {
-						// <1,扣比例
-						core.addBuff('atk', -core.values.weakValue);
-						core.addBuff('def', -core.values.weakValue);
-					}
-				}
-				if (core.inArray(type, 'curse') && !core.hasFlag('curse')) {
-					// 获得咒效果
-					core.setFlag('curse', true);
-				}
-			} else if (action == 'remove') {
-				var success = false;
-				if (core.inArray(type, "poison") && core.hasFlag("poison")) {
-					success = true;
-					// 移除毒效果
-					core.setFlag("poison", false);
-				}
-				if (core.inArray(type, "weak") && core.hasFlag("weak")) {
-					success = true;
-					// 移除衰效果
-					core.setFlag("weak", false);
-					if (core.values.weakValue >= 1) {
-						// >=1,直接扣数值
-						core.addStatus('atk', core.values.weakValue);
-						core.addStatus('def', core.values.weakValue);
-					} else {
-						// <1,扣比例
-						core.addBuff('atk', core.values.weakValue);
-						core.addBuff('def', core.values.weakValue);
-					}
-				}
-				if (core.inArray(type, "curse") && core.hasFlag("curse")) {
-					success = true;
-					// 移除咒效果
-					core.setFlag("curse", false);
-				}
-				if (success) core.playSound('回血');
-			}
-		},
+      if (action == "get") {
+        if (core.inArray(type, "poison") && !core.hasFlag("poison")) {
+          // 获得毒效果
+          core.setFlag("poison", true);
+        }
+        if (core.inArray(type, "weak") && !core.hasFlag("weak")) {
+          // 获得衰效果
+          core.setFlag("weak", true);
+          if (core.values.weakValue >= 1) {
+            // >=1,直接扣数值
+            core.addStatus("atk", -core.values.weakValue);
+            core.addStatus("def", -core.values.weakValue);
+          } else {
+            // <1,扣比例
+            core.addBuff("atk", -core.values.weakValue);
+            core.addBuff("def", -core.values.weakValue);
+          }
+        }
+        if (core.inArray(type, "curse") && !core.hasFlag("curse")) {
+          // 获得咒效果
+          core.setFlag("curse", true);
+        }
+      } else if (action == "remove") {
+        var success = false;
+        if (core.inArray(type, "poison") && core.hasFlag("poison")) {
+          success = true;
+          // 移除毒效果
+          core.setFlag("poison", false);
+        }
+        if (core.inArray(type, "weak") && core.hasFlag("weak")) {
+          success = true;
+          // 移除衰效果
+          core.setFlag("weak", false);
+          if (core.values.weakValue >= 1) {
+            // >=1,直接扣数值
+            core.addStatus("atk", core.values.weakValue);
+            core.addStatus("def", core.values.weakValue);
+          } else {
+            // <1,扣比例
+            core.addBuff("atk", core.values.weakValue);
+            core.addBuff("def", core.values.weakValue);
+          }
+        }
+        if (core.inArray(type, "curse") && core.hasFlag("curse")) {
+          success = true;
+          // 移除咒效果
+          core.setFlag("curse", false);
+        }
+        if (success) core.playSound("回血");
+      }
+    },
         "updateStatusBar": function () {
+	if (!core.control.noAutoEvents) core.checkAutoEvents()
 	// 更新状态栏
 	core.ui.statusBar.update();
 	// 更新阻激夹域的伤害值
@@ -1175,216 +1769,257 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	core.updateDamage();
 },
         "updateCheckBlock": function (floorId) {
-			// 领域、夹击、阻击等的伤害值计算
-			floorId = floorId || core.status.floorId;
-			if (!floorId || !core.status.maps) return;
+      // 领域、夹击、阻击等的伤害值计算
+      floorId = floorId || core.status.floorId;
+      if (!floorId || !core.status.maps) return;
 
-			var width = core.floors[floorId].width,
-				height = core.floors[floorId].height;
-			var blocks = core.getMapBlocksObj(floorId);
+      var width = core.floors[floorId].width,
+        height = core.floors[floorId].height;
+      var blocks = core.getMapBlocksObj(floorId);
 
-			var damage = {}, // 每个点的伤害值
-				type = {}, // 每个点的伤害类型
-				repulse = {}, // 每个点的阻击怪信息
-				ambush = {}; // 每个点的捕捉信息
-			var betweenAttackLocs = {}; // 所有可能的夹击点
-			var needCache = false;
-			var canGoDeadZone = core.flags.canGoDeadZone;
-			core.flags.canGoDeadZone = true;
+      var damage = {}, // 每个点的伤害值
+        type = {}, // 每个点的伤害类型
+        repulse = {}, // 每个点的阻击怪信息
+        ambush = {}; // 每个点的捕捉信息
+      var betweenAttackLocs = {}; // 所有可能的夹击点
+      var needCache = false;
+      var canGoDeadZone = core.flags.canGoDeadZone;
+      core.flags.canGoDeadZone = true;
 
-			// 计算血网和领域、阻击、激光的伤害,计算捕捉信息
-			for (var loc in blocks) {
-				var block = blocks[loc],
-					x = block.x,
-					y = block.y,
-					id = block.event.id,
-					enemy = core.material.enemys[id];
-				if (block.disable) continue;
+      // 计算血网和领域、阻击、激光的伤害,计算捕捉信息
+      for (var loc in blocks) {
+        var block = blocks[loc],
+          x = block.x,
+          y = block.y,
+          id = block.event.id,
+          enemy = core.material.enemys[id];
+        if (block.disable) continue;
 
-				type[loc] = type[loc] || {};
+        type[loc] = type[loc] || {};
 
-				// 血网
-				// 如需调用当前楼层的ratio可使用  core.status.maps[floorId].ratio
-				if (id == 'lavaNet' && !core.hasItem('amulet')) {
-					damage[loc] = (damage[loc] || 0) + core.values.lavaDamage;
-					type[loc][(block.event.name || "血网") + "伤害"] = true;
-				}
+        // 血网
+        // 如需调用当前楼层的ratio可使用  core.status.maps[floorId].ratio
+        if (id == "lavaNet" && !core.hasItem("amulet")) {
+          damage[loc] = (damage[loc] || 0) + core.values.lavaDamage;
+          type[loc][(block.event.name || "血网") + "伤害"] = true;
+        }
 
-				// 领域
-				// 如果要防止领域伤害,可以直接简单的将 flag:no_zone 设为true
-				if (enemy && core.hasSpecial(enemy.special, 15) && !core.hasFlag('no_zone')) {
-					// 领域范围,默认为1
-					var range = enemy.range || 1;
-					// 是否是九宫格领域
-					var zoneSquare = false;
-					if (enemy.zoneSquare != null) zoneSquare = enemy.zoneSquare;
-					// 在范围内进行搜索,增加领域伤害值
-					for (var dx = -range; dx <= range; dx++) {
-						for (var dy = -range; dy <= range; dy++) {
-							if (dx == 0 && dy == 0) continue;
-							var nx = x + dx,
-								ny = y + dy,
-								currloc = nx + "," + ny;
-							if (nx < 0 || nx >= width || ny < 0 || ny >= height) continue;
-							// 如果是十字领域,则还需要满足 |dx|+|dy|<=range
-							if (!zoneSquare && Math.abs(dx) + Math.abs(dy) > range) continue;
-							damage[currloc] = (damage[currloc] || 0) + (enemy.zone || 0);
-							type[currloc] = type[currloc] || {};
-							type[currloc]["领域伤害"] = true;
-						}
-					}
-				}
+        // 领域
+        // 如果要防止领域伤害,可以直接简单的将 flag:no_zone 设为true
+        if (
+          enemy &&
+          core.hasSpecial(enemy.special, 15) &&
+          !core.hasFlag("no_zone")
+        ) {
+          // 领域范围,默认为1
+          var range = enemy.range || 1;
+          // 是否是九宫格领域
+          var zoneSquare = false;
+          if (enemy.zoneSquare != null) zoneSquare = enemy.zoneSquare;
+          // 在范围内进行搜索,增加领域伤害值
+          for (var dx = -range; dx <= range; dx++) {
+            for (var dy = -range; dy <= range; dy++) {
+              if (dx == 0 && dy == 0) continue;
+              var nx = x + dx,
+                ny = y + dy,
+                currloc = nx + "," + ny;
+              if (nx < 0 || nx >= width || ny < 0 || ny >= height) continue;
+              // 如果是十字领域,则还需要满足 |dx|+|dy|<=range
+              if (!zoneSquare && Math.abs(dx) + Math.abs(dy) > range) continue;
+              damage[currloc] = (damage[currloc] || 0) + (enemy.zone || 0);
+              type[currloc] = type[currloc] || {};
+              type[currloc]["领域伤害"] = true;
+            }
+          }
+        }
 
-				// 阻击
-				// 如果要防止阻击伤害,可以直接简单的将 flag:no_repulse 设为true
-				if (enemy && core.hasSpecial(enemy.special, 18) && !core.hasFlag('no_repulse')) {
-					var scan = enemy.zoneSquare ? core.utils.scan2 : core.utils.scan;
-					for (var dir in scan) {
-						var nx = x + scan[dir].x,
-							ny = y + scan[dir].y,
-							currloc = nx + "," + ny;
-						if (nx < 0 || nx >= width || ny < 0 || ny >= height) continue;
-						damage[currloc] = (damage[currloc] || 0) + (enemy.repulse || 0);
-						type[currloc] = type[currloc] || {};
-						type[currloc]["阻击伤害"] = true;
+        // 阻击
+        // 如果要防止阻击伤害,可以直接简单的将 flag:no_repulse 设为true
+        if (
+          enemy &&
+          core.hasSpecial(enemy.special, 18) &&
+          !core.hasFlag("no_repulse")
+        ) {
+          var scan = enemy.zoneSquare ? core.utils.scan2 : core.utils.scan;
+          for (var dir in scan) {
+            var nx = x + scan[dir].x,
+              ny = y + scan[dir].y,
+              currloc = nx + "," + ny;
+            if (nx < 0 || nx >= width || ny < 0 || ny >= height) continue;
+            damage[currloc] = (damage[currloc] || 0) + (enemy.repulse || 0);
+            type[currloc] = type[currloc] || {};
+            type[currloc]["阻击伤害"] = true;
 
-						var rdir = core.turnDirection(":back", dir);
-						// 检查下一个点是否存在事件(从而判定是否移动)
-						var rnx = x + scan[rdir].x,
-							rny = y + scan[rdir].y;
-						if (rnx < 0 || rnx >= width || rny < 0 || rny >= height) continue;
-						// 如需禁止阻击被推到已隐藏的事件处(如重生怪处),可将这一句的false改为true
-						if (core.getBlock(rnx, rny, floorId, false) != null) continue;
-						if (core.utils.scan[rdir] && !core.canMoveHero(x, y, rdir, floorId)) continue;
-						repulse[currloc] = (repulse[currloc] || []).concat([
-							[x, y, id, rdir]
-						]);
-					}
-				}
+            var rdir = core.turnDirection(":back", dir);
+            // 检查下一个点是否存在事件(从而判定是否移动)
+            var rnx = x + scan[rdir].x,
+              rny = y + scan[rdir].y;
+            if (rnx < 0 || rnx >= width || rny < 0 || rny >= height) continue;
+            // 如需禁止阻击被推到已隐藏的事件处(如重生怪处),可将这一句的false改为true
+            if (core.getBlock(rnx, rny, floorId, false) != null) continue;
+            if (core.utils.scan[rdir] && !core.canMoveHero(x, y, rdir, floorId))
+              continue;
+            repulse[currloc] = (repulse[currloc] || []).concat([
+              [x, y, id, rdir],
+            ]);
+          }
+        }
 
-				// 激光
-				// 如果要防止激光伤害,可以直接简单的将 flag:no_laser 设为true
-				if (enemy && core.hasSpecial(enemy.special, 24) && !core.hasFlag("no_laser")) {
-					for (var nx = 0; nx < width; nx++) {
-						var currloc = nx + "," + y;
-						if (nx != x) {
-							damage[currloc] = (damage[currloc] || 0) + (enemy.laser || 0);
-							type[currloc] = type[currloc] || {};
-							type[currloc]["激光伤害"] = true;
-						}
-					}
-					for (var ny = 0; ny < height; ny++) {
-						var currloc = x + "," + ny;
-						if (ny != y) {
-							damage[currloc] = (damage[currloc] || 0) + (enemy.laser || 0);
-							type[currloc] = type[currloc] || {};
-							type[currloc]["激光伤害"] = true;
-						}
-					}
-				}
+        // 激光
+        // 如果要防止激光伤害,可以直接简单的将 flag:no_laser 设为true
+        if (
+          enemy &&
+          core.hasSpecial(enemy.special, 24) &&
+          !core.hasFlag("no_laser")
+        ) {
+          for (var nx = 0; nx < width; nx++) {
+            var currloc = nx + "," + y;
+            if (nx != x) {
+              damage[currloc] = (damage[currloc] || 0) + (enemy.laser || 0);
+              type[currloc] = type[currloc] || {};
+              type[currloc]["激光伤害"] = true;
+            }
+          }
+          for (var ny = 0; ny < height; ny++) {
+            var currloc = x + "," + ny;
+            if (ny != y) {
+              damage[currloc] = (damage[currloc] || 0) + (enemy.laser || 0);
+              type[currloc] = type[currloc] || {};
+              type[currloc]["激光伤害"] = true;
+            }
+          }
+        }
 
-				// 捕捉
-				// 如果要防止捕捉效果,可以直接简单的将 flag:no_ambush 设为true
-				if (enemy && core.enemys.hasSpecial(enemy.special, 27) && !core.hasFlag("no_ambush")) {
-					var scan = enemy.zoneSquare ? core.utils.scan2 : core.utils.scan;
-					// 给周围格子加上【捕捉】记号
-					for (var dir in scan) {
-						var nx = x + scan[dir].x,
-							ny = y + scan[dir].y,
-							currloc = nx + "," + ny;
-						if (nx < 0 || nx >= width || ny < 0 || ny >= height || (core.utils.scan[dir] && !core.canMoveHero(x, y, dir, floorId))) continue;
-						ambush[currloc] = (ambush[currloc] || []).concat([
-							[x, y, id, dir]
-						]);
-					}
-				}
+        // 捕捉
+        // 如果要防止捕捉效果,可以直接简单的将 flag:no_ambush 设为true
+        if (
+          enemy &&
+          core.enemys.hasSpecial(enemy.special, 27) &&
+          !core.hasFlag("no_ambush")
+        ) {
+          var scan = enemy.zoneSquare ? core.utils.scan2 : core.utils.scan;
+          // 给周围格子加上【捕捉】记号
+          for (var dir in scan) {
+            var nx = x + scan[dir].x,
+              ny = y + scan[dir].y,
+              currloc = nx + "," + ny;
+            if (
+              nx < 0 ||
+              nx >= width ||
+              ny < 0 ||
+              ny >= height ||
+              (core.utils.scan[dir] && !core.canMoveHero(x, y, dir, floorId))
+            )
+              continue;
+            ambush[currloc] = (ambush[currloc] || []).concat([[x, y, id, dir]]);
+          }
+        }
 
-				// 夹击;在这里提前计算所有可能的夹击点,具体计算逻辑在下面
-				// 如果要防止夹击伤害,可以简单的将 flag:no_betweenAttack 设为true
-				if (enemy && core.enemys.hasSpecial(enemy.special, 16) && !core.hasFlag('no_betweenAttack')) {
-					for (var dir in core.utils.scan) {
-						var nx = x + core.utils.scan[dir].x,
-							ny = y + core.utils.scan[dir].y,
-							currloc = nx + "," + ny;
-						if (nx < 0 || nx >= width || ny < 0 || ny >= height) continue;
-						betweenAttackLocs[currloc] = true;
-					}
-				}
+        // 夹击;在这里提前计算所有可能的夹击点,具体计算逻辑在下面
+        // 如果要防止夹击伤害,可以简单的将 flag:no_betweenAttack 设为true
+        if (
+          enemy &&
+          core.enemys.hasSpecial(enemy.special, 16) &&
+          !core.hasFlag("no_betweenAttack")
+        ) {
+          for (var dir in core.utils.scan) {
+            var nx = x + core.utils.scan[dir].x,
+              ny = y + core.utils.scan[dir].y,
+              currloc = nx + "," + ny;
+            if (nx < 0 || nx >= width || ny < 0 || ny >= height) continue;
+            betweenAttackLocs[currloc] = true;
+          }
+        }
 
-				// 检查地图范围类技能
-				var specialFlag = core.getSpecialFlag(enemy);
-				if (specialFlag & 1) needCache = true;
-				if (core.status.event.id == 'viewMaps') needCache = true;
-				if ((core.status.event.id == 'book' || core.status.event.id == 'bool-detail') && core.status.event.ui) needCache = true;
-			}
+        // 检查地图范围类技能
+        var specialFlag = core.getSpecialFlag(enemy);
+        if (specialFlag & 1) needCache = true;
+        if (core.status.event.id == "viewMaps") needCache = true;
+        if (
+          (core.status.event.id == "book" ||
+            core.status.event.id == "bool-detail") &&
+          core.status.event.ui
+        )
+          needCache = true;
+      }
 
-			// 对每个可能的夹击点计算夹击伤害
-			for (var loc in betweenAttackLocs) {
-				var xy = loc.split(","),
-					x = parseInt(xy[0]),
-					y = parseInt(xy[1]);
-				// 夹击怪物的ID
-				var enemyId1 = null,
-					enemyId2 = null;
-				// 检查左右夹击
-				var leftBlock = blocks[(x - 1) + "," + y],
-					rightBlock = blocks[(x + 1) + "," + y];
-				var leftId = core.getFaceDownId(leftBlock),
-					rightId = core.getFaceDownId(rightBlock);
-				if (leftBlock && !leftBlock.disable && rightBlock && !rightBlock.disable && leftId == rightId) {
-					if (core.hasSpecial(leftId, 16))
-						enemyId1 = leftId;
-				}
-				// 检查上下夹击
-				var topBlock = blocks[x + "," + (y - 1)],
-					bottomBlock = blocks[x + "," + (y + 1)];
-				var topId = core.getFaceDownId(topBlock),
-					bottomId = core.getFaceDownId(bottomBlock);
-				if (topBlock && !topBlock.disable && bottomBlock && !bottomBlock.disable && topId == bottomId) {
-					if (core.hasSpecial(topId, 16))
-						enemyId2 = topId;
-				}
+      // 对每个可能的夹击点计算夹击伤害
+      for (var loc in betweenAttackLocs) {
+        var xy = loc.split(","),
+          x = parseInt(xy[0]),
+          y = parseInt(xy[1]);
+        // 夹击怪物的ID
+        var enemyId1 = null,
+          enemyId2 = null;
+        // 检查左右夹击
+        var leftBlock = blocks[x - 1 + "," + y],
+          rightBlock = blocks[x + 1 + "," + y];
+        var leftId = core.getFaceDownId(leftBlock),
+          rightId = core.getFaceDownId(rightBlock);
+        if (
+          leftBlock &&
+          !leftBlock.disable &&
+          rightBlock &&
+          !rightBlock.disable &&
+          leftId == rightId
+        ) {
+          if (core.hasSpecial(leftId, 16)) enemyId1 = leftId;
+        }
+        // 检查上下夹击
+        var topBlock = blocks[x + "," + (y - 1)],
+          bottomBlock = blocks[x + "," + (y + 1)];
+        var topId = core.getFaceDownId(topBlock),
+          bottomId = core.getFaceDownId(bottomBlock);
+        if (
+          topBlock &&
+          !topBlock.disable &&
+          bottomBlock &&
+          !bottomBlock.disable &&
+          topId == bottomId
+        ) {
+          if (core.hasSpecial(topId, 16)) enemyId2 = topId;
+        }
 
-				if (enemyId1 != null || enemyId2 != null) {
-					var leftHp = core.status.hero.hp - (damage[loc] || 0);
-					if (leftHp > 1) {
-						// 夹击伤害值
-						var value = Math.floor(leftHp / 2);
-						// 是否不超过怪物伤害值
-						if (core.flags.betweenAttackMax) {
-							var enemyDamage1 = core.getDamage(enemyId1, x, y, floorId);
-							if (enemyDamage1 != null && enemyDamage1 < value)
-								value = enemyDamage1;
-							var enemyDamage2 = core.getDamage(enemyId2, x, y, floorId);
-							if (enemyDamage2 != null && enemyDamage2 < value)
-								value = enemyDamage2;
-						}
-						if (value > 0) {
-							damage[loc] = (damage[loc] || 0) + value;
-							type[loc] = type[loc] || {};
-							type[loc]["夹击伤害"] = true;
-						}
-					}
-				}
-			}
+        if (enemyId1 != null || enemyId2 != null) {
+          var leftHp = core.status.hero.hp - (damage[loc] || 0);
+          if (leftHp > 1) {
+            // 夹击伤害值
+            var value = Math.floor(leftHp / 2);
+            // 是否不超过怪物伤害值
+            if (core.flags.betweenAttackMax) {
+              var enemyDamage1 = core.getDamage(enemyId1, x, y, floorId);
+              if (enemyDamage1 != null && enemyDamage1 < value)
+                value = enemyDamage1;
+              var enemyDamage2 = core.getDamage(enemyId2, x, y, floorId);
+              if (enemyDamage2 != null && enemyDamage2 < value)
+                value = enemyDamage2;
+            }
+            if (value > 0) {
+              damage[loc] = (damage[loc] || 0) + value;
+              type[loc] = type[loc] || {};
+              type[loc]["夹击伤害"] = true;
+            }
+          }
+        }
+      }
 
-			// 取消注释下面这一段可以让护盾抵御阻激夹域伤害
-			/*
+      // 取消注释下面这一段可以让护盾抵御阻激夹域伤害
+      /*
 			for (var loc in damage) {
 				damage[loc] = Math.max(0, damage[loc] - core.getRealStatus('mdef'));
 			}
 			*/
 
-			core.flags.canGoDeadZone = canGoDeadZone;
-			core.status.checkBlock = {
-				damage: damage,
-				type: type,
-				repulse: repulse,
-				ambush: ambush,
-				needCache: needCache,
-				cache: {} // clear cache
-			};
-		},
+      core.flags.canGoDeadZone = canGoDeadZone;
+      core.status.checkBlock = {
+        damage: damage,
+        type: type,
+        repulse: repulse,
+        ambush: ambush,
+        needCache: needCache,
+        cache: {}, // clear cache
+      };
+    },
         "moveOneStep": function (callback) {
 	// 勇士每走一步后执行的操作。callback为行走完毕后的回调
 	// 这个函数执行在“刚走完”的时候,即还没有检查该点的事件和领域伤害等。
@@ -1399,7 +2034,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	core.updateFollowers();
 	core.drawHero();
 	// 检查中毒状态的扣血和死亡
-	if (core.hasFlag('poison')) {
+	if (core.hasFlag("poison")) {
 		core.status.hero.statistics.poisonDamage += core.values.poisonDamage;
 		core.status.hero.hp -= core.values.poisonDamage;
 		if (core.status.hero.hp <= 0) {
@@ -1421,12 +2056,16 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 
 	// ------ 检查目标点事件 ------ //
 	// 无事件的道具(如血瓶)需要优先于阻激夹域判定
-	var nowx = core.getHeroLoc('x'),
-		nowy = core.getHeroLoc('y');
+	var nowx = core.getHeroLoc("x"),
+		nowy = core.getHeroLoc("y");
 	var block = core.getBlock(nowx, nowy);
 	var hasTrigger = false;
-	if (block != null && block.event.trigger == 'getItem' &&
-		!core.floors[core.status.floorId].afterGetItem[nowx + "," + nowy]) {
+	core.showComment(nowx, nowy)
+	if (
+		block != null &&
+		block.event.trigger == "getItem" &&
+		!core.floors[core.status.floorId].afterGetItem[nowx + "," + nowy]
+	) {
 		hasTrigger = true;
 		core.trigger(nowx, nowy, callback);
 	}
@@ -1434,13 +2073,12 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	core.checkBlock();
 
 	// 执行目标点的script和事件
-	if (!hasTrigger)
-		core.trigger(nowx, nowy, callback);
+	if (!hasTrigger) core.trigger(nowx, nowy, callback);
 
 	// 检查该点是否是滑冰
 	if (core.onSki()) {
 		// 延迟到事件最后执行,因为这之前可能有阻激夹域动画
-		core.insertAction({ "type": "moveAction" }, null, null, null, true);
+		core.insertAction({ type: "moveAction" }, null, null, null, true);
 	}
 
 	// ------ 检查目标点事件 END ------ //
@@ -1456,19 +2094,23 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	if (ignoreSteps == null) ignoreSteps = core.canMoveDirectly(x, y);
 	if (ignoreSteps >= 0) {
 		// 中毒也允许瞬移
-		if (core.hasFlag('poison')) {
+		if (core.hasFlag("poison")) {
 			var damage = ignoreSteps * core.values.poisonDamage;
 			if (damage >= core.status.hero.hp) return false;
 			core.status.hero.statistics.poisonDamage += damage;
 			core.status.hero.hp -= damage;
 		}
-
-		core.clearMap('hero');
-		if ((core.bigmap.width * 32) === (core.bigmap.height * 32) && (core.bigmap.width * 32) === core.__PIXELS__) core.addPopMove(32 * core.status.hero.loc.x + 16, 32 * core.status.hero.loc.y + 16, 32 * x + 16, 32 * y + 16)
+		core.showComment(x, y)
+		core.clearMap("hero");
+		if (
+			core.bigmap.width * 32 === core.bigmap.height * 32 &&
+			core.bigmap.width * 32 === core.__PIXELS__
+		)
+			if (core.getFlag('popmove')) core.addPopMove(32 * core.status.hero.loc.x + 16, 32 * core.status.hero.loc.y + 16, 32 * x + 16, 32 * y + 16);
 		// 获得勇士最后的朝向
 		var lastDirection = core.status.route[core.status.route.length - 1];
-		if (['left', 'right', 'up', 'down'].indexOf(lastDirection) >= 0)
-			core.setHeroLoc('direction', lastDirection);
+		if (["left", "right", "up", "down"].indexOf(lastDirection) >= 0)
+			core.setHeroLoc("direction", lastDirection);
 		// 设置坐标,并绘制
 		core.control._moveDirectyFollowers(x, y);
 		core.status.hero.loc.x = x;
@@ -1479,7 +2121,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 		// 统计信息
 		core.status.hero.statistics.moveDirectly++;
 		core.status.hero.statistics.ignoreSteps += ignoreSteps;
-		if (core.hasFlag('poison')) {
+		if (core.hasFlag("poison")) {
 			core.updateStatusBar(false, true);
 		}
 
@@ -1489,148 +2131,266 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
 	return false;
 },
         "parallelDo": function (timestamp) {
-			// 并行事件处理,可以在这里写任何需要并行处理的脚本或事件
-			// 该函数将被系统反复执行,每次执行间隔视浏览器或设备性能而定,一般约为16.6ms一次
-			// 参数timestamp为“从游戏资源加载完毕到当前函数执行时”的时间差,以毫秒为单位
+      // 并行事件处理,可以在这里写任何需要并行处理的脚本或事件
+      // 该函数将被系统反复执行,每次执行间隔视浏览器或设备性能而定,一般约为16.6ms一次
+      // 参数timestamp为“从游戏资源加载完毕到当前函数执行时”的时间差,以毫秒为单位
 
-			// 检查当前是否处于游戏开始状态
-			if (!core.isPlaying()) return;
+      // 检查当前是否处于游戏开始状态
+      if (!core.isPlaying()) return;
 
-			// 执行当前楼层的并行事件处理
-			if (core.status.floorId) {
-				try {
-					eval(core.floors[core.status.floorId].parallelDo);
-				} catch (e) {
-					console.error(e);
-				}
-			}
-		}
+      // 执行当前楼层的并行事件处理
+      if (core.status.floorId) {
+        try {
+          eval(core.floors[core.status.floorId].parallelDo);
+        } catch (e) {
+          console.error(e);
+        }
+      }
+    }
     },
     "ui": {
         "getToolboxItems": function (cls) {
-	// 获得道具栏中当前某类型道具的显示项和显示顺序
-	// cls为道具类型,只可能是 tools, constants 和 equips
-	// 返回一个数组,代表当前某类型道具的显示内容和顺序
-	// 默认按id升序排列,您可以取消下面的注释改为按名称排列
+      // 获得道具栏中当前某类型道具的显示项和显示顺序
+      // cls为道具类型,只可能是 tools, constants 和 equips
+      // 返回一个数组,代表当前某类型道具的显示内容和顺序
+      // 默认按id升序排列,您可以取消下面的注释改为按名称排列
 
-	return Object.keys(core.status.hero.items[cls] || {})
-		.filter(function (id) { return !core.material.items[id].hideInToolbox; })
-		.sort( /*function (id1, id2) { return core.material.items[id1].name <= core.material.items[id2].name ? -1 : 1 }*/ );
-},
+      return Object.keys(core.status.hero.items[cls] || {})
+        .filter(function (id) {
+          return !core.material.items[id].hideInToolbox;
+        })
+        .sort(/*function (id1, id2) { return core.material.items[id1].name <= core.material.items[id2].name ? -1 : 1 }*/);
+    },
         "drawStatusBar": function () {
 	// 这真的是人能写出来的东西?
-	var ctx, fill = function (text, x, y, style) {
-		core.ui.setFont(ctx, (/\w+/.test(text) ? 'italic ' : '') + 'bold 18px Verdana');
-		core.ui.fillBoldText(ctx, text, x, y, style);
-	};
-	if (core.flags.statusCanvas) { // 系统开关「自绘状态栏」开启
-		core.ui.clearMap(ctx = core.dom.statusCanvasCtx); // 清空状态栏
+	var ctx,
+		fill = function (text, x, y, style) {
+			core.ui.setFont(
+				ctx,
+				(/\w+/.test(text) ? "italic " : "") + "bold 18px Verdana"
+			);
+			core.ui.fillBoldText(ctx, text, x, y, style);
+		};
+	if (core.flags.statusCanvas) {
+		// 系统开关「自绘状态栏」开启
+		core.ui.clearMap((ctx = core.dom.statusCanvasCtx)); // 清空状态栏
 		core.ui.setFillStyle(ctx, core.status.globalAttribute.statusBarColor);
-		if (core.domStyle.isVertical) { // 竖屏
+		if (core.domStyle.isVertical) {
+			// 竖屏
 			core.drawImage(ctx, core.statusBar.icons.floor, 6, 6, 25, 25);
 			fill((core.status.thisMap || {}).name || "Loading", 42, 26);
 			core.drawImage(ctx, core.statusBar.icons.hp, 137, 6, 25, 25);
-			fill(core.formatBigNumber(core.getRealStatus('hp')), 173, 26);
+			fill(core.formatBigNumber(core.getRealStatus("hp")), 173, 26);
 			core.drawImage(ctx, core.statusBar.icons.atk, 268, 6, 25, 25);
-			fill(core.formatBigNumber(core.getRealStatus('atk')), 304, 26);
+			fill(core.formatBigNumber(core.getRealStatus("atk")), 304, 26);
 			core.drawImage(ctx, core.statusBar.icons.def, 6, 38, 25, 25);
-			fill(core.formatBigNumber(core.getRealStatus('def')), 42, 58);
+			fill(core.formatBigNumber(core.getRealStatus("def")), 42, 58);
 			core.drawImage(ctx, core.statusBar.icons.mdef, 137, 38, 25, 25);
-			fill(core.formatBigNumber(core.getRealStatus('mdef')), 173, 58);
+			fill(core.formatBigNumber(core.getRealStatus("mdef")), 173, 58);
 			core.drawImage(ctx, core.statusBar.icons.money, 268, 38, 25, 25);
 			fill(core.formatBigNumber(core.status.hero.money), 304, 58);
 			core.drawImage(ctx, core.statusBar.icons.exp, 6, 70, 25, 25);
 			fill(core.formatBigNumber(core.status.hero.exp), 42, 90);
-		} else if (!core.flags.hideLeftStatusBar) { // 横屏且未隐藏状态栏
+		} else if (!core.flags.hideLeftStatusBar) {
+			// 横屏且未隐藏状态栏
 			core.drawImage(ctx, core.statusBar.icons.floor, 6, 9, 25, 25);
 			fill((core.status.thisMap || {}).name || "Loading", 42, 29);
 			core.drawImage(ctx, core.statusBar.icons.hp, 6, 43, 25, 25);
-			fill(core.formatBigNumber(core.getRealStatus('hp')), 42, 63);
+			fill(core.formatBigNumber(core.getRealStatus("hp")), 42, 63);
 			core.drawImage(ctx, core.statusBar.icons.atk, 6, 77, 25, 25);
-			fill(core.formatBigNumber(core.getRealStatus('atk')), 42, 97);
+			fill(core.formatBigNumber(core.getRealStatus("atk")), 42, 97);
 			core.drawImage(ctx, core.statusBar.icons.def, 6, 111, 25, 25);
-			fill(core.formatBigNumber(core.getRealStatus('def')), 42, 131);
+			fill(core.formatBigNumber(core.getRealStatus("def")), 42, 131);
 			core.drawImage(ctx, core.statusBar.icons.mdef, 6, 145, 25, 25);
-			fill(core.formatBigNumber(core.getRealStatus('mdef')), 42, 165);
+			fill(core.formatBigNumber(core.getRealStatus("mdef")), 42, 165);
 			core.drawImage(ctx, core.statusBar.icons.money, 6, 179, 25, 25);
 			fill(core.formatBigNumber(core.status.hero.money), 42, 199);
 			core.drawImage(ctx, core.statusBar.icons.exp, 6, 213, 25, 25);
 			fill(core.formatBigNumber(core.status.hero.exp), 42, 233);
-			fill(core.setTwoDigits(core.itemCount('yellowKey')), 11, 267, '#FFCCAA');
-			fill(core.setTwoDigits(core.itemCount('blueKey')), 46, 267, '#AAAADD');
-			fill(core.setTwoDigits(core.itemCount('redKey')), 81, 267, '#FF8888');
+			fill(
+				core.setTwoDigits(core.itemCount("yellowKey")),
+				11,
+				267,
+				"#FFCCAA"
+			);
+			fill(
+				core.setTwoDigits(core.itemCount("blueKey")),
+				46,
+				267,
+				"#AAAADD"
+			);
+			fill(core.setTwoDigits(core.itemCount("redKey")), 81, 267, "#FF8888");
 		}
-	} else if (core.flags.hideLeftStatusBar && !core.domStyle.isVertical) { // 横屏且隐藏状态栏
-		if (!core.dymCanvas['status'])
-			core.ui.createCanvas('status', 0, 0, core._PX_, core._PY_, 66); // 刚好盖过显伤层
-		core.ui.clearMap(ctx = core.dymCanvas['status']);
+	} else if (core.flags.hideLeftStatusBar && !core.domStyle.isVertical) {
+		// 横屏且隐藏状态栏
+		if (!core.dymCanvas["status"])
+			core.ui.createCanvas("status", 0, 0, core._PX_, core._PY_, 66); // 刚好盖过显伤层
+		core.ui.clearMap((ctx = core.dymCanvas["status"]));
 		core.ui.setFillStyle(ctx, core.status.globalAttribute.statusBarColor);
-		var offset = core.status.hero.loc.x - core.bigmap.offsetX / 32 >= core._HEIGHT_ ? 0 : core._PY_;
+		var offset =
+			core.status.hero.loc.x - core.bigmap.offsetX / 32 >= core._HEIGHT_ ?
+			0 :
+			core._PY_;
 		core.ui.setAlpha(ctx, 0.75);
-		core.ui.drawWindowSkin('winskin.webp', ctx, offset, 0, core._PX_ - core._PY_, core._PY_);
+		core.ui.drawWindowSkin(
+			"winskin.webp",
+			ctx,
+			offset,
+			0,
+			core._PX_ - core._PY_,
+			core._PY_
+		);
 		core.ui.setAlpha(ctx, 1);
 		core.drawImage(ctx, core.statusBar.icons.floor, 6 + offset, 9, 25, 25);
 		fill((core.status.thisMap || {}).name || "Loading", 42 + offset, 29);
 		core.drawImage(ctx, core.statusBar.icons.hp, 6 + offset, 43, 25, 25);
-		fill(core.formatBigNumber(core.getRealStatus('hp')), 42 + offset, 63);
+		fill(core.formatBigNumber(core.getRealStatus("hp")), 42 + offset, 63);
 		core.drawImage(ctx, core.statusBar.icons.atk, 6 + offset, 77, 25, 25);
-		fill(core.formatBigNumber(core.getRealStatus('atk')), 42 + offset, 97);
+		fill(core.formatBigNumber(core.getRealStatus("atk")), 42 + offset, 97);
 		core.drawImage(ctx, core.statusBar.icons.def, 6 + offset, 111, 25, 25);
-		fill(core.formatBigNumber(core.getRealStatus('def')), 42 + offset, 131);
+		fill(core.formatBigNumber(core.getRealStatus("def")), 42 + offset, 131);
 		core.drawImage(ctx, core.statusBar.icons.mdef, 6 + offset, 145, 25, 25);
-		fill(core.formatBigNumber(core.getRealStatus('mdef')), 42 + offset, 165);
-		core.drawImage(ctx, core.statusBar.icons.money, 6 + offset, 179, 25, 25);
+		fill(
+			core.formatBigNumber(core.getRealStatus("mdef")),
+			42 + offset,
+			165
+		);
+		core.drawImage(
+			ctx,
+			core.statusBar.icons.money,
+			6 + offset,
+			179,
+			25,
+			25
+		);
 		fill(core.formatBigNumber(core.status.hero.money), 42 + offset, 199);
 		core.drawImage(ctx, core.statusBar.icons.exp, 6 + offset, 213, 25, 25);
 		fill(core.formatBigNumber(core.status.hero.exp), 42 + offset, 233);
-		fill(core.setTwoDigits(core.itemCount('yellowKey')), 11 + offset, 267, '#FFCCAA');
-		fill(core.setTwoDigits(core.itemCount('blueKey')), 46 + offset, 267, '#AAAADD');
-		fill(core.setTwoDigits(core.itemCount('redKey')), 81 + offset, 267, '#FF8888');
+		fill(
+			core.setTwoDigits(core.itemCount("yellowKey")),
+			11 + offset,
+			267,
+			"#FFCCAA"
+		);
+		fill(
+			core.setTwoDigits(core.itemCount("blueKey")),
+			46 + offset,
+			267,
+			"#AAAADD"
+		);
+		fill(
+			core.setTwoDigits(core.itemCount("redKey")),
+			81 + offset,
+			267,
+			"#FF8888"
+		);
 	}
 },
         "drawStatistics": function () {
-			// 浏览地图时参与的统计项目
+      // 浏览地图时参与的统计项目
 
-			return [
-				'yellowDoor', 'blueDoor', 'redDoor', 'greenDoor', 'steelDoor',
-				'yellowKey', 'blueKey', 'redKey', 'greenKey', 'steelKey',
-				'redGem', 'blueGem', 'greenGem', 'yellowGem',
-				'redPotion', 'bluePotion', 'greenPotion', 'yellowPotion', 'superPotion',
-				'pickaxe', 'bomb', 'centerFly', 'icePickaxe', 'freezeBadge',
-				'earthquake', 'upFly', 'downFly', 'jumpShoes', 'lifeWand',
-				'poisonWine', 'weakWine', 'curseWine', 'superWine',
-				'sword1', 'sword2', 'sword3', 'sword4', 'sword5',
-				'shield1', 'shield2', 'shield3', 'shield4', 'shield5',
-				// 在这里可以增加新的ID来进行统计个数,只能增加道具ID
-			];
-		},
+      return [
+        "yellowDoor",
+        "blueDoor",
+        "redDoor",
+        "greenDoor",
+        "steelDoor",
+        "yellowKey",
+        "blueKey",
+        "redKey",
+        "greenKey",
+        "steelKey",
+        "redGem",
+        "blueGem",
+        "greenGem",
+        "yellowGem",
+        "redPotion",
+        "bluePotion",
+        "greenPotion",
+        "yellowPotion",
+        "superPotion",
+        "pickaxe",
+        "bomb",
+        "centerFly",
+        "icePickaxe",
+        "freezeBadge",
+        "earthquake",
+        "upFly",
+        "downFly",
+        "jumpShoes",
+        "lifeWand",
+        "poisonWine",
+        "weakWine",
+        "curseWine",
+        "superWine",
+        "sword1",
+        "sword2",
+        "sword3",
+        "sword4",
+        "sword5",
+        "shield1",
+        "shield2",
+        "shield3",
+        "shield4",
+        "shield5",
+        // 在这里可以增加新的ID来进行统计个数,只能增加道具ID
+      ];
+    },
         "drawAbout": function () {
-			// 绘制“关于”界面
-			core.ui.closePanel();
-			core.lockControl();
-			core.status.event.id = 'about';
+      // 绘制“关于”界面
+      core.ui.closePanel();
+      core.lockControl();
+      core.status.event.id = "about";
 
-			var left = 48,
-				top = 36,
-				right = (core._PX_ || core.__PIXELS__) - 2 * left,
-				bottom = (core._PY_ || core.__PIXELS__) - 2 * top;
+      var left = 48,
+        top = 36,
+        right = (core._PX_ || core.__PIXELS__) - 2 * left,
+        bottom = (core._PY_ || core.__PIXELS__) - 2 * top;
 
-			core.setAlpha('ui', 0.85);
-			core.fillRect('ui', left, top, right, bottom, '#000000');
-			core.setAlpha('ui', 1);
-			core.strokeRect('ui', left - 1, top - 1, right + 1, bottom + 1, '#FFFFFF', 2);
+      core.setAlpha("ui", 0.85);
+      core.fillRect("ui", left, top, right, bottom, "#000000");
+      core.setAlpha("ui", 1);
+      core.strokeRect(
+        "ui",
+        left - 1,
+        top - 1,
+        right + 1,
+        bottom + 1,
+        "#FFFFFF",
+        2
+      );
 
-			var text_start = left + 24;
+      var text_start = left + 24;
 
-			// 名称
-			core.setTextAlign('ui', 'left');
-			var globalAttribute = core.status.globalAttribute || core.initStatus.globalAttribute;
-			core.fillText('ui', "HTML5 魔塔样板", text_start, top + 35, globalAttribute.selectColor, "bold 22px " + globalAttribute.font);
-			core.fillText('ui', "版本: " + main.__VERSION__, text_start, top + 80, "#FFFFFF", "bold 17px " + globalAttribute.font);
-			core.fillText('ui', "作者: 艾之葵", text_start, top + 112);
-			core.fillText('ui', 'HTML5魔塔交流群:539113091', text_start, top + 112 + 32);
-			// TODO: 写自己的“关于”页面,每次增加32像素即可
-			core.playSound('打开界面');
-		}
+      // 名称
+      core.setTextAlign("ui", "left");
+      var globalAttribute =
+        core.status.globalAttribute || core.initStatus.globalAttribute;
+      core.fillText(
+        "ui",
+        "HTML5 魔塔样板",
+        text_start,
+        top + 35,
+        globalAttribute.selectColor,
+        "bold 22px " + globalAttribute.font
+      );
+      core.fillText(
+        "ui",
+        "版本: " + main.__VERSION__,
+        text_start,
+        top + 80,
+        "#FFFFFF",
+        "bold 17px " + globalAttribute.font
+      );
+      core.fillText("ui", "作者: 艾之葵", text_start, top + 112);
+      core.fillText(
+        "ui",
+        "HTML5魔塔交流群:539113091",
+        text_start,
+        top + 112 + 32
+      );
+      // TODO: 写自己的“关于”页面,每次增加32像素即可
+      core.playSound("打开界面");
+    }
     }
 }
\ No newline at end of file
diff --git a/project/icons.js b/project/icons.js
index f44bfe9..14e3c91 100644
--- a/project/icons.js
+++ b/project/icons.js
@@ -113,7 +113,15 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
 		"T392": 81,
 		"T393": 82,
 		"T394": 83,
-		"T395": 84
+		"T395": 84,
+		"T361": 85,
+		"T362": 86,
+		"T363": 87,
+		"T364": 88,
+		"T365": 89,
+		"T397": 90,
+		"T399": 91,
+		"T400": 92
 	},
 	"animates": {
 		"star": 0,
@@ -247,7 +255,11 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
 		"blueKing": 45,
 		"keiskeiFairy": 71,
 		"tulipFairy": 72,
-		"purpleBowman": 65
+		"purpleBowman": 65,
+		"E421": 73,
+		"E422": 73,
+		"E425": 74,
+		"E426": 75
 	},
 	"enemy48": {
 		"angel": 0,
@@ -310,7 +322,41 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
 		"jumpShoes": 49,
 		"skill1": 30,
 		"wand": 10,
-		"pack": 46
+		"pack": 46,
+		"I366": 5,
+		"I367": 7,
+		"I368": 26,
+		"I369": 31,
+		"I370": 32,
+		"I371": 34,
+		"I372": 35,
+		"I373": 36,
+		"I374": 37,
+		"I375": 38,
+		"I396": 39,
+		"postman": 62,
+		"I401": 63,
+		"I402": 64,
+		"I403": 65,
+		"I404": 66,
+		"I405": 67,
+		"I406": 68,
+		"I407": 69,
+		"I408": 70,
+		"I412": 71,
+		"I409": 72,
+		"I410": 73,
+		"I411": 74,
+		"I413": 75,
+		"I414": 76,
+		"I415": 77,
+		"I416": 78,
+		"I417": 79,
+		"I418": 80,
+		"I419": 81,
+		"I420": 82,
+		"I423": 83,
+		"I424": 84
 	},
 	"autotile": {
 		"autotile": 0,
diff --git a/project/images/005-Attack03.webp b/project/images/005-Attack03.webp
new file mode 100644
index 0000000..09df0ff
Binary files /dev/null and b/project/images/005-Attack03.webp differ
diff --git a/project/images/012-Heal01.webp b/project/images/012-Heal01.webp
new file mode 100644
index 0000000..23c2c6d
Binary files /dev/null and b/project/images/012-Heal01.webp differ
diff --git a/project/images/015-Fire01.webp b/project/images/015-Fire01.webp
new file mode 100644
index 0000000..acd799f
Binary files /dev/null and b/project/images/015-Fire01.webp differ
diff --git a/project/images/jianji.webp b/project/images/jianji.webp
new file mode 100644
index 0000000..40504a4
Binary files /dev/null and b/project/images/jianji.webp differ
diff --git a/project/images/miwu.webp b/project/images/miwu.webp
new file mode 100644
index 0000000..84e72cc
Binary files /dev/null and b/project/images/miwu.webp differ
diff --git a/project/images/sound.webp b/project/images/sound.webp
new file mode 100644
index 0000000..1fed120
Binary files /dev/null and b/project/images/sound.webp differ
diff --git a/project/images/statusBackground.webp b/project/images/statusBackground.webp
new file mode 100644
index 0000000..498f5d8
Binary files /dev/null and b/project/images/statusBackground.webp differ
diff --git a/project/images/tati_310101.webp b/project/images/tati_310101.webp
new file mode 100644
index 0000000..e5a5dce
Binary files /dev/null and b/project/images/tati_310101.webp differ
diff --git a/project/images/winskin.webp b/project/images/winskin.webp
index fb44533..00580fe 100644
Binary files a/project/images/winskin.webp and b/project/images/winskin.webp differ
diff --git a/project/items.js b/project/items.js
index fddc8ac..53adda0 100644
--- a/project/items.js
+++ b/project/items.js
@@ -37,61 +37,23 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
 		"canUseItemEffect": "true"
 	},
 	"greenGem": {
-		"cls": "tools",
+		"cls": "items",
 		"name": "绿宝石",
-		"text": ",护盾+${core.values.greenGem}",
-		"itemEffect": "core.status.hero.mdef += core.values.greenGem * core.status.thisMap.ratio",
-		"itemEffectTip": ",护盾+${core.values.greenGem * core.status.thisMap.ratio}",
-		"useItemEffect": "core.status.hero.mdef += core.values.greenGem",
+		"text": ",法强+${core.values.greenGem}",
+		"itemEffect": "core.status.hero.spell += core.values.greenGem * core.status.thisMap.ratio",
+		"itemEffectTip": ",法强+${core.values.greenGem * core.status.thisMap.ratio}",
+		"useItemEffect": "core.status.hero.spell += core.values.greenGem",
 		"canUseItemEffect": "true"
 	},
 	"yellowGem": {
 		"cls": "items",
 		"name": "黄宝石",
-		"text": "可以进行加点",
-		"itemEffect": "core.status.hero.hp+=1000;core.status.hero.atk+=6;core.status.hero.def+=6;core.status.hero.mdef+=10;",
-		"itemEffectTip": ",全属性提升",
-		"useItemEvent": [
-			{
-				"type": "choices",
-				"choices": [
-					{
-						"text": "攻击+1",
-						"action": [
-							{
-								"type": "setValue",
-								"name": "status:atk",
-								"operator": "+=",
-								"value": "1"
-							}
-						]
-					},
-					{
-						"text": "防御+2",
-						"action": [
-							{
-								"type": "setValue",
-								"name": "status:def",
-								"operator": "+=",
-								"value": "2"
-							}
-						]
-					},
-					{
-						"text": "生命+200",
-						"action": [
-							{
-								"type": "setValue",
-								"name": "status:hp",
-								"operator": "+=",
-								"value": "200"
-							}
-						]
-					}
-				]
-			}
-		],
-		"canUseItemEffect": "true"
+		"text": ",速度+${core.values.yellowGem}",
+		"itemEffect": "core.status.hero.speed += core.values.yellowGem * core.status.thisMap.ratio",
+		"itemEffectTip": ",速度+${core.values.yellowGem * core.status.thisMap.ratio}",
+		"useItemEvent": null,
+		"canUseItemEffect": "true",
+		"useItemEffect": "core.status.hero.spell += core.values.yellowGem"
 	},
 	"redPotion": {
 		"cls": "items",
@@ -130,18 +92,20 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
 		"canUseItemEffect": "true"
 	},
 	"sword0": {
-		"cls": "items",
-		"name": "破旧的剑",
+		"cls": "equips",
+		"name": "基础匕首",
 		"text": "一把已经生锈的剑",
 		"equip": {
 			"type": 0,
 			"animate": "sword",
 			"value": {
-				"atk": 0
-			}
+				"speed": 20
+			},
+			"percentage": {}
 		},
 		"itemEffect": "core.status.hero.atk += 0",
-		"itemEffectTip": ",攻击+0"
+		"itemEffectTip": ",攻击+0",
+		"equipCls": "匕首"
 	},
 	"sword1": {
 		"cls": "equips",
@@ -150,10 +114,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
 		"equip": {
 			"type": 0,
 			"animate": "sword",
-			"value": {
-				"atk": 10
-			},
-			"percentage": {}
+			"value": {},
+			"percentage": {
+				"mdef": 10
+			}
 		},
 		"itemEffect": "core.status.hero.atk += 10",
 		"itemEffectTip": ",攻击+10",
@@ -166,10 +130,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
 		"equip": {
 			"type": "武器",
 			"animate": "sword",
-			"value": {
-				"atk": 20
-			},
-			"percentage": {}
+			"value": {},
+			"percentage": {
+				"mdef": 20
+			}
 		},
 		"itemEffect": "core.status.hero.atk += 20",
 		"itemEffectTip": ",攻击+20",
@@ -247,10 +211,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
 		"text": "一个很普通的铁盾",
 		"equip": {
 			"type": 1,
-			"value": {
-				"def": 10
-			},
-			"percentage": {}
+			"value": {},
+			"percentage": {
+				"mdef": 10
+			}
 		},
 		"itemEffect": "core.status.hero.def += 10",
 		"itemEffectTip": ",防御+10",
@@ -310,13 +274,15 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
 		"itemEffectTip": ",防御+100,护盾+100"
 	},
 	"superPotion": {
-		"cls": "items",
+		"cls": "tools",
 		"name": "圣水",
 		"itemEffect": "core.status.hero.hp *= 2",
 		"itemEffectTip": ",生命值翻倍",
 		"useItemEffect": "core.status.hero.hp *= 2;core.playSound('回血');",
 		"canUseItemEffect": "true",
-		"text": "生命值翻倍"
+		"text": "生命值翻倍",
+		"canBatchUse": "true",
+		"hideInReplay": true
 	},
 	"book": {
 		"cls": "constants",
@@ -332,7 +298,7 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
 		"text": "可以自由往来去过的楼层",
 		"hideInReplay": true,
 		"hideInToolbox": true,
-		"useItemEffect": "//core.ui.drawFly(core.floorIds.indexOf(core.status.floorId));\ncore.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));",
+		"useItemEffect": "//core.ui.drawFly(core.floorIds.indexOf(core.status.floorId));\nflags.canMoveFloor = core.canMoveFloor()\nif (!main.replayChecking && !core.isReplaying()) core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));",
 		"canUseItemEffect": "(function () {\n\tif (core.flags.flyNearStair && !core.nearStair() && !core.canMoveFloor())\n\t\treturn false;\n\treturn core.status.maps[core.status.floorId].canFlyFrom;\n})();"
 	},
 	"coin": {
@@ -546,5 +512,306 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
 		"name": "钱袋",
 		"itemEffect": "core.status.hero.money += 500",
 		"itemEffectTip": ",金币+500"
+	},
+	"I366": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I367": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I368": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I369": {
+		"cls": "constants",
+		"name": "动画开关",
+		"canUseItemEffect": "true",
+		"hideInToolbox": true,
+		"hideInReplay": true,
+		"useItemEvent": [
+			{
+				"type": "confirm",
+				"text": "是否开启战斗动画",
+				"yes": [
+					{
+						"type": "setValue",
+						"name": "flag:noAnimate",
+						"value": "false"
+					}
+				],
+				"no": [
+					{
+						"type": "setValue",
+						"name": "flag:noAnimate",
+						"value": "true"
+					}
+				]
+			}
+		],
+		"text": "调整战斗动画"
+	},
+	"I370": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I371": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I372": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I373": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I374": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I375": {
+		"cls": "equips",
+		"name": "基础法杖",
+		"canUseItemEffect": "true",
+		"equipCls": "法杖",
+		"equip": {
+			"type": 0,
+			"value": {
+				"matk": 10,
+				"mhp": -100
+			},
+			"percentage": {}
+		}
+	},
+	"I396": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"postman": {
+		"cls": "constants",
+		"name": "言灵",
+		"canUseItemEffect": "true",
+		"text": "可以发送和接收在线留言。",
+		"hideInToolbox": true,
+		"hideInReplay": true,
+		"useItemEvent": [
+			{
+				"type": "while",
+				"condition": "true",
+				"data": [
+					{
+						"type": "choices",
+						"text": "本功能需要您在h5mota.com在线游玩并处于登录状态时使用,可以发送和接受留言。\n发言后需要选择\"获取最新留言\"才能看到自己新发的留言。",
+						"choices": [
+							{
+								"text": "地图上显示在线留言:${flag:comment?'开':'关'}",
+								"icon": "postman",
+								"action": [
+									{
+										"type": "function",
+										"function": "function(){\nif (core.hasFlag('comment')) {\n\tcore.setFlag('comment', false);\n\tcore.plugin.clearCommentSign();\n} else {\n\tcore.setFlag('comment', true);\n\tcore.plugin.drawCommentSign();\n}\n}"
+									}
+								]
+							},
+							{
+								"text": "写留言",
+								"action": [
+									{
+										"type": "input2",
+										"text": "请输入要发送的评论,文明友善发言,拒绝放假、剧透。"
+									},
+									{
+										"type": "function",
+										"function": "function(){\nconst input = core.getFlag('input', '');\nconst tags = [core.status.floorId,\n\tcore.getHeroLoc().x.toString(), core.getHeroLoc().y.toString()\n]\nif (!core.isReplaying()) {\n\tcore.plugin.postComment(input, tags);\n}\n}"
+									},
+									{
+										"type": "function",
+										"function": "function(){\nif (!core.isReplaying()) {\n\tcore.plugin.getComment();\n\tsetTimeout(core.plugin.drawCommentSign, 1000);\n}\n}"
+									}
+								]
+							},
+							{
+								"text": "获取最新留言",
+								"action": [
+									{
+										"type": "function",
+										"function": "function(){\nif (!core.isReplaying()) {\n\tcore.plugin.getComment();\n\tsetTimeout(core.plugin.drawCommentSign, 1000);\n}\n}"
+									}
+								]
+							},
+							{
+								"text": "退出",
+								"action": [
+									{
+										"type": "exit"
+									}
+								]
+							}
+						]
+					}
+				]
+			}
+		]
+	},
+	"I401": {
+		"cls": "items",
+		"name": "初等红宝石",
+		"text": ",攻击+${core.values.redGem}",
+		"itemEffect": "core.status.hero.atk += core.values.redGem * core.status.thisMap.ratio",
+		"itemEffectTip": ",攻击+${core.values.redGem * core.status.thisMap.ratio}",
+		"useItemEffect": "core.status.hero.atk += core.values.redGem",
+		"canUseItemEffect": "true"
+	},
+	"I402": {
+		"cls": "items",
+		"name": "初等蓝宝石",
+		"text": ",防御+${core.values.blueGem}",
+		"itemEffect": "core.status.hero.def += core.values.blueGem * core.status.thisMap.ratio",
+		"itemEffectTip": ",防御+${core.values.blueGem * core.status.thisMap.ratio}",
+		"useItemEffect": "core.status.hero.def += core.values.blueGem",
+		"canUseItemEffect": "true"
+	},
+	"I403": {
+		"cls": "items",
+		"name": "初等绿宝石",
+		"text": ",法强+${core.values.greenGem}",
+		"itemEffect": "core.status.hero.spell += core.values.greenGem * core.status.thisMap.ratio",
+		"itemEffectTip": ",法强+${core.values.greenGem * core.status.thisMap.ratio}",
+		"useItemEffect": "core.status.hero.spell += core.values.greenGem",
+		"canUseItemEffect": "true"
+	},
+	"I404": {
+		"cls": "items",
+		"name": "初等黄宝石",
+		"text": ",速度+${core.values.yellowGem}",
+		"itemEffect": "core.status.hero.speed += core.values.yellowGem * core.status.thisMap.ratio",
+		"itemEffectTip": ",速度+${core.values.yellowGem * core.status.thisMap.ratio}",
+		"useItemEvent": null,
+		"canUseItemEffect": "true",
+		"useItemEffect": "core.status.hero.spell += core.values.yellowGem"
+	},
+	"I405": {
+		"cls": "items",
+		"name": "中等红宝石",
+		"text": ",攻击+${core.values.redGem}",
+		"itemEffect": "core.status.hero.atk += 3 * core.values.redGem * core.status.thisMap.ratio",
+		"itemEffectTip": ",攻击+${core.values.redGem * core.status.thisMap.ratio}",
+		"useItemEffect": "core.status.hero.atk += core.values.redGem",
+		"canUseItemEffect": "true"
+	},
+	"I406": {
+		"cls": "items",
+		"name": "中等蓝宝石",
+		"text": ",防御+${core.values.blueGem}",
+		"itemEffect": "core.status.hero.def += 3 * core.values.blueGem * core.status.thisMap.ratio",
+		"itemEffectTip": ",防御+${core.values.blueGem * core.status.thisMap.ratio}",
+		"useItemEffect": "core.status.hero.def += core.values.blueGem",
+		"canUseItemEffect": "true"
+	},
+	"I407": {
+		"cls": "items",
+		"name": "中等绿宝石",
+		"text": ",法强+${core.values.greenGem}",
+		"itemEffect": "core.status.hero.spell += 3 * core.values.greenGem * core.status.thisMap.ratio",
+		"itemEffectTip": ",法强+${core.values.greenGem * core.status.thisMap.ratio}",
+		"useItemEffect": "core.status.hero.spell += core.values.greenGem",
+		"canUseItemEffect": "true"
+	},
+	"I408": {
+		"cls": "items",
+		"name": "中等黄宝石",
+		"text": ",速度+${core.values.yellowGem}",
+		"itemEffect": "core.status.hero.speed += 3 * core.values.yellowGem * core.status.thisMap.ratio",
+		"itemEffectTip": ",速度+${core.values.yellowGem * core.status.thisMap.ratio}",
+		"useItemEvent": null,
+		"canUseItemEffect": "true",
+		"useItemEffect": "core.status.hero.spell += core.values.yellowGem"
+	},
+	"I412": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I409": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I410": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I411": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I413": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I414": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I415": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I416": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I417": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I418": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I419": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I420": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
+	},
+	"I423": {
+		"cls": "items",
+		"name": "银币",
+		"text": ",生命+${core.values.redPotion}",
+		"itemEffect": "core.status.hero.money += 10",
+		"itemEffectTip": ",金钱+10",
+		"useItemEffect": "core.status.hero.hp += core.values.redPotion",
+		"canUseItemEffect": "true"
+	},
+	"I424": {
+		"cls": "items",
+		"name": "新物品",
+		"canUseItemEffect": "true"
 	}
 }
\ No newline at end of file
diff --git a/project/maps.js b/project/maps.js
index fc722c6..e9b9cf2 100644
--- a/project/maps.js
+++ b/project/maps.js
@@ -1,8 +1,8 @@
 var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = 
 {
-	"1": {"cls":"animates","id":"yellowWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{}}},
-	"2": {"cls":"animates","id":"whiteWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{}}},
-	"3": {"cls":"animates","id":"blueWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{}}},
+	"1": {"cls":"animates","id":"yellowWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{}}},
+	"2": {"cls":"animates","id":"whiteWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{}}},
+	"3": {"cls":"animates","id":"blueWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{}}},
 	"4": {"cls":"animates","id":"star","name":"星空"},
 	"5": {"cls":"animates","id":"lava","name":"岩浆"},
 	"6": {"cls":"animates","id":"ice","doorInfo":{"time":160,"openSound":"破冰镐","closeSound":"door.opus","keys":{"icePickaxe":1}},"animate":1},
@@ -68,12 +68,12 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
 	"71": {"cls":"items","id":"shield0"},
 	"72": {"cls":"items","id":"skill1"},
 	"73": {"cls":"items","id":"wand"},
-	"81": {"cls":"animates","id":"yellowDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{"yellowKey":1}},"name":"黄门"},
-	"82": {"cls":"animates","id":"blueDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{"blueKey":1}},"name":"蓝门"},
-	"83": {"cls":"animates","id":"redDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{"redKey":1}},"name":"红门"},
-	"84": {"cls":"animates","id":"greenDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{"greenKey":1}},"name":"绿门"},
-	"85": {"cls":"animates","id":"specialDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{"specialKey":1}},"name":"机关门"},
-	"86": {"cls":"animates","id":"steelDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{"steelKey":1}},"name":"铁门"},
+	"81": {"cls":"animates","id":"yellowDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{"yellowKey":1}},"name":"黄门"},
+	"82": {"cls":"animates","id":"blueDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{"blueKey":1}},"name":"蓝门"},
+	"83": {"cls":"animates","id":"redDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{"redKey":1}},"name":"红门"},
+	"84": {"cls":"animates","id":"greenDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{"greenKey":1}},"name":"绿门"},
+	"85": {"cls":"animates","id":"specialDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{"specialKey":1}},"name":"机关门"},
+	"86": {"cls":"animates","id":"steelDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{"steelKey":1}},"name":"铁门"},
 	"87": {"cls":"terrains","id":"upFloor","canPass":true},
 	"88": {"cls":"terrains","id":"downFloor","canPass":true},
 	"89": {"cls":"animates","id":"portal","canPass":true},
@@ -86,7 +86,7 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
 	"102": {"cls":"animates","id":"crystalBottom"},
 	"103": {"cls":"animates","id":"fire"},
 	"104": {"cls":"animates","id":"switch"},
-	"109": {"cls":"animates","id":"magentaWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{}}},
+	"109": {"cls":"animates","id":"magentaWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{}}},
 	"121": {"cls":"npcs","id":"man"},
 	"122": {"cls":"npcs","id":"trader"},
 	"123": {"cls":"npcs","id":"thief"},
@@ -217,12 +217,12 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
 	"316": {"cls":"terrains","id":"sWallTLR","name":"薄墙-上左右","cannotOut":["up","left","right"],"cannotIn":["up","left","right"]},
 	"317": {"cls":"terrains","id":"sWallTBR","name":"薄墙-上下右","cannotOut":["up","down","right"],"cannotIn":["up","down","right"]},
 	"318": {"cls":"terrains","id":"sWallTBL","name":"薄墙-上下左","cannotOut":["up","down","left"],"cannotIn":["up","down","left"]},
-	"319": {"cls":"npc48","id":"tallYellowDoor","trigger":"openDoor","name":"高黄门","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{"yellowKey":1}}},
-	"320": {"cls":"npc48","id":"tallBlueDoor","trigger":"openDoor","name":"高蓝门","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{"blueKey":1}}},
-	"321": {"cls":"npc48","id":"tallRedDoor","trigger":"openDoor","name":"高红门","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{"redKey":1}}},
-	"322": {"cls":"npc48","id":"tallGreenDoor","trigger":"openDoor","name":"高绿门","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{"greenKey":1}}},
-	"323": {"cls":"npc48","id":"tallSpecialDoor","trigger":"openDoor","name":"高机关门","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{"specialKey":1}}},
-	"324": {"cls":"npc48","id":"tallSteelDoor","trigger":"openDoor","name":"高铁门","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.opus","keys":{"steelKey":1}}},
+	"319": {"cls":"npc48","id":"tallYellowDoor","trigger":"openDoor","name":"高黄门","animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{"yellowKey":1}}},
+	"320": {"cls":"npc48","id":"tallBlueDoor","trigger":"openDoor","name":"高蓝门","animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{"blueKey":1}}},
+	"321": {"cls":"npc48","id":"tallRedDoor","trigger":"openDoor","name":"高红门","animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{"redKey":1}}},
+	"322": {"cls":"npc48","id":"tallGreenDoor","trigger":"openDoor","name":"高绿门","animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{"greenKey":1}}},
+	"323": {"cls":"npc48","id":"tallSpecialDoor","trigger":"openDoor","name":"高机关门","animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{"specialKey":1}}},
+	"324": {"cls":"npc48","id":"tallSteelDoor","trigger":"openDoor","name":"高铁门","animate":1,"doorInfo":{"time":160,"openSound":"door.opus","closeSound":"door.opus","keys":{"steelKey":1}}},
 	"325": {"cls":"enemys","id":"keiskeiFairy"},
 	"326": {"cls":"enemys","id":"tulipFairy"},
 	"327": {"cls":"enemy48","id":"bearDown"},
@@ -259,6 +259,21 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
 	"358": {"cls":"terrains","id":"T358"},
 	"359": {"cls":"terrains","id":"T359"},
 	"360": {"cls":"terrains","id":"T360"},
+	"361": {"cls":"terrains","id":"T361"},
+	"362": {"cls":"terrains","id":"T362"},
+	"363": {"cls":"terrains","id":"T363"},
+	"364": {"cls":"terrains","id":"T364"},
+	"365": {"cls":"terrains","id":"T365"},
+	"366": {"cls":"items","id":"I366"},
+	"367": {"cls":"items","id":"I367"},
+	"368": {"cls":"items","id":"I368"},
+	"369": {"cls":"items","id":"I369"},
+	"370": {"cls":"items","id":"I370"},
+	"371": {"cls":"items","id":"I371"},
+	"372": {"cls":"items","id":"I372"},
+	"373": {"cls":"items","id":"I373"},
+	"374": {"cls":"items","id":"I374"},
+	"375": {"cls":"items","id":"I375"},
 	"376": {"cls":"terrains","id":"T376"},
 	"377": {"cls":"terrains","id":"T377"},
 	"378": {"cls":"terrains","id":"T378"},
@@ -279,6 +294,37 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
 	"393": {"cls":"terrains","id":"T393"},
 	"394": {"cls":"terrains","id":"T394"},
 	"395": {"cls":"terrains","id":"T395"},
+	"396": {"cls":"items","id":"I396"},
+	"397": {"cls":"items","id":"postman"},
+	"398": {"cls":"terrains","id":"T397"},
+	"399": {"cls":"terrains","id":"T399"},
+	"400": {"cls":"terrains","id":"T400"},
+	"401": {"cls":"items","id":"I401"},
+	"402": {"cls":"items","id":"I402"},
+	"403": {"cls":"items","id":"I403"},
+	"404": {"cls":"items","id":"I404"},
+	"405": {"cls":"items","id":"I405"},
+	"406": {"cls":"items","id":"I406"},
+	"407": {"cls":"items","id":"I407"},
+	"408": {"cls":"items","id":"I408"},
+	"409": {"cls":"items","id":"I409"},
+	"410": {"cls":"items","id":"I410"},
+	"411": {"cls":"items","id":"I411"},
+	"412": {"cls":"items","id":"I412"},
+	"413": {"cls":"items","id":"I413"},
+	"414": {"cls":"items","id":"I414"},
+	"415": {"cls":"items","id":"I415"},
+	"416": {"cls":"items","id":"I416"},
+	"417": {"cls":"items","id":"I417"},
+	"418": {"cls":"items","id":"I418"},
+	"419": {"cls":"items","id":"I419"},
+	"420": {"cls":"items","id":"I420"},
+	"421": {"cls":"enemys","id":"E421"},
+	"422": {"cls":"enemys","id":"E422"},
+	"423": {"cls":"items","id":"I423"},
+	"424": {"cls":"items","id":"I424"},
+	"425": {"cls":"enemys","id":"E425"},
+	"426": {"cls":"enemys","id":"E426"},
 	"20034": {"cls":"tileset","id":"X20034","canPass":true},
 	"20154": {"cls":"tileset","id":"X20154","canPass":true},
 	"20216": {"cls":"tileset","id":"X20216","canPass":true},
diff --git a/project/materials/enemys.png b/project/materials/enemys.png
index 2b3641c..44fb811 100644
Binary files a/project/materials/enemys.png and b/project/materials/enemys.png differ
diff --git a/project/materials/items.png b/project/materials/items.png
index 04dc29b..bf1a755 100644
Binary files a/project/materials/items.png and b/project/materials/items.png differ
diff --git a/project/materials/terrains.png b/project/materials/terrains.png
index 378c4bf..c68f818 100644
Binary files a/project/materials/terrains.png and b/project/materials/terrains.png differ
diff --git a/project/plugins.js b/project/plugins.js
index 009ae14..cc38544 100644
--- a/project/plugins.js
+++ b/project/plugins.js
@@ -1,226 +1,326 @@
 var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = 
 {
     "init": function () {
-    this._afterLoadResources = function () {
-      // 本函数将在所有资源加载完毕后,游戏开启前被执行
-      core.ui.statusBar.init();
-      core.registerEvent("changeMouse", function (data) {
-        if (!main.replayChecking && !core.isReplaying())
-          core.changeMouse(
-            data.icon,
-            data.div,
-            data.translate[0],
-            data.translate[1],
-            data.scale[0],
-            data.scale[1],
-            data.angel,
-            data.px,
-            data.py
-          );
-        core.doAction();
-      });
-      core.registerEvent("removeMouse", function (data) {
-        if (!main.replayChecking && !core.isReplaying())
-          core.removeMouse(data.div);
-        core.doAction();
-      });
-      core.registerEvent("addPop", function (data) {
-        if (!main.replayChecking && !core.isReplaying()) {
-          data.value = core.replaceText(data.value);
-          core.addPop(
-            data.value,
-            data.px,
-            data.py,
-            data.color,
-            data.boldColor,
-            data.left,
-            data.jump,
-            data.time,
-            data.show,
-            data.font,
-            data.speed
-          );
-        }
-        core.doAction();
-      });
-      core.registerEvent("drawWarning", function (data) {
-        if (!main.replayChecking && !core.isReplaying()) {
-          data.text = core.replaceText(data.text);
-          data.text2 = core.replaceText(data.text2);
-          core.drawWarning(
-            data.x,
-            data.y,
-            data.size,
-            data?.text,
-            data?.text2,
-            data?.warning
-          );
-          setTimeout(() => core.doAction(), 3100);
-        } else {
-          core.doAction();
-        }
-      });
-      core.registerEvent("playStereo", function (data) {
-        if (!main.replayChecking && !core.isReplaying())
-          core.playStereo(data.name, data.left, data.right, data.split);
-        core.doAction();
-      });
-      core.registerEvent("moveStereo", function (data) {
-        if (!main.replayChecking && !core.isReplaying()) {
-          const id = core.playStereo(
-            data.name,
-            data.left,
-            data.right,
-            data.split
-          );
-          core.moveStereo(id, data.leftTo, data.rightTo, data.time);
-        }
-        core.doAction();
-      });
-      core.registerEvent("over", function (data) {
-        let image = data.image ?? "";
-        let time = data.time ?? 3000;
-        let sound = data.sound ?? "";
-        let textColor = data.textColor ?? "#FFFFFF";
-        let boldColor = data.boldColor ?? "#000000";
-        let font = data.font ?? "bold 48px Verdana";
-        let text = data.text ?? "";
-        let hidetime = data.hidetime ?? 100;
-        if (!main.replayChecking && !core.isReplaying()) {
-          core.over(
-            image,
-            data.memory,
-            time,
-            hidetime,
-            sound,
-            textColor,
-            boldColor,
-            font,
-            text
-          );
-        } else {
-          core.doAction();
-        }
-      });
-      core.registerEvent("changebg", function (data) {
-        if (!main.replayChecking && !core.isReplaying()) {
-          core.changebg(
-            data.img1,
-            data.memory1,
-            data.img2,
-            data.memory2,
-            data.time,
-            data.style
-          );
-        } else {
-          core.doAction();
-        }
-      });
-      core.registerEvent("overlist", function (data) {
-        if (!main.replayChecking && !core.isReplaying()) {
-          core.overlist(
-            data.image,
-            data.memory,
-            data.hidetime || 30,
-            data.list || [
-              {
-                text: "",
-                sound: "",
-                time: 50,
-                textColor: "#FFFFFF",
-                boldColor: "#000000",
-                font: "bold 48px Verdana",
-                frame: 0,
-              },
-            ]
-          );
-        } else {
-          core.doAction();
-        }
-      });
-      core.registerEvent("op", function (data) {
-        if (!main.replayChecking && !core.isReplaying()) {
-          core.openvideo();
-        } else {
-          core.doAction();
-        }
-      });
-      core.registerEvent("animationDrawable", function (data) {
-        if (!main.replayChecking && !core.isReplaying()) {
-          core.animationDrawable(
-            data.allFarme,
-            data.color,
-            data.globalAlpha,
-            data.imageList,
-            data.soundList
-          );
-        } else {
-          core.doAction();
-        }
-      });
-      core.registerEvent("setanimate", function (data) {
-        data.px = data.px ?? 0;
-        data.py = data.py ?? 0;
-        core.setanimate(
-          data.name,
-          data.px,
-          data.py,
-          data.width,
-          data.height,
-          data.allFarme,
-          data.imageList,
-          data.soundList
-        );
-        core.doAction();
-      });
-      core.registerEvent("clearanimate", function (data) {
-        core.plugin.playing.clear();
+	this._afterLoadResources = function () {
+		// 本函数将在所有资源加载完毕后,游戏开启前被执行
+		core.ui.statusBar.init();
+		core.dom.playGame.style.fontFamily = "pala";
+		core.dom.loadGame.style.fontFamily = "pala";
+		core.dom.CGMode.style.fontFamily = "pala";
+		core.dom.musicMode.style.fontFamily = "pala";
+		core.dom.replayGame.style.fontFamily = "pala";
+		core.registerEvent("changeMouse", function (data) {
+			if (!main.replayChecking && !core.isReplaying())
+				core.changeMouse(
+					data.icon,
+					data.div,
+					data.translate[0],
+					data.translate[1],
+					data.scale[0],
+					data.scale[1],
+					data.angel,
+					data.px,
+					data.py
+				);
+			core.doAction();
+		});
+		core.registerEvent("removeMouse", function (data) {
+			if (!main.replayChecking && !core.isReplaying())
+				core.removeMouse(data.div);
+			core.doAction();
+		});
+		core.registerEvent("animationDrawable", function (data) {
+			if (!main.replayChecking && !core.isReplaying()) {
+				core.animationDrawable(
+					data.allFarme,
+					data.color,
+					data.globalAlpha,
+					data.imageList,
+					data.soundList
+				);
+			} else {
+				core.doAction();
+			}
+		});
+		core.registerEvent("drawbackground", function (data) {
+			if (!main.replayChecking && !core.isReplaying()) {
+				core.drawbackground(data.image, data.memory);
+				core.ui.cgText.image = data.image;
+				core.ui.cgText.memory = data.memory;
 
-        core.doAction();
-      });
-      core.registerEvent("deleteanimate", function (data) {
-        core.deleteanimate(data.name);
-        core.doAction();
-      });
-      core.registerEvent("playanimate", function (data) {
-        if (!main.replayChecking && !core.isReplaying()) {
-          data.x = data.x ?? 0;
-          data.y = data.y ?? 0;
-          data.scalex = data.scalex ?? 1;
-          data.scaley = data.scaley ?? 1;
-          core.playanimate(
-            data.name,
-            data.x,
-            data.y,
-            data.hero,
-            data.scalex,
-            data.scaley
-          );
-          core.doAction();
-        } else {
-          core.doAction();
-        }
-      });
-      core.registerEvent("cgtext", function (data) {
-        if (!main.replayChecking && !core.isReplaying()) {
-          core.ui.cgText.image = data.bg;
-          core.ui.cgText.memory = data.memory;
-          core.ui.cgText.head = core.clone(data.head);
-          core.ui.cgText.name = data.name;
-          core.ui.cgText.text = data.text;
-          core.ui.cgText.time = data.time;
-          core.ui.cgText.wait = data.wait;
-          core.ui.cgText.WindowSkin = data.WindowSkin;
-          core.ui.cgText.sound = data.sound || "";
-          core.ui.cgText.bodyList = core.clone(data.bodyList);
-          main.dom.cgText.style.display = "block";
-          core.ui.cgText.update();
-        } else {
-          core.doAction();
-        }
-      });
-    };
-  },
+			}
+			core.doAction();
+		});
+		core.registerEvent("animateResize", function (data, x, y, prefix) {
+			core.events._action_animateResize(data, x, y, prefix)
+
+		});
+		core.registerEvent("pauseAnimate", function (data, x, y, prefix) {
+			core.maps.pauseAnimate(data.id)
+			core.doAction();
+
+		});
+		core.registerEvent("remuseAnimate", function (data, x, y, prefix) {
+			core.maps.remuseAnimate(data.id)
+			core.doAction();
+		});
+		core.registerEvent("clearbackground", function (data) {
+			if (!main.replayChecking && !core.isReplaying()) {
+				core.clearbackground();
+				core.ui.cgText.image = "";
+			} else {
+
+				core.doAction();
+			}
+		});
+		core.registerEvent("setanimate", function (data) {
+			data.px = data.px ?? 0;
+			data.py = data.py ?? 0;
+			core.setanimate(
+				data.name,
+				data.px,
+				data.py,
+				data.width,
+				data.height,
+				data.allFarme,
+				data.imageList,
+				data.soundList
+			);
+			core.doAction();
+		});
+		core.registerEvent("animatemove", function (data) {
+			core.animatemove(data.id, data.px, data.py, data.relative, data.time, data.style);
+
+			core.doAction();
+		});
+		core.registerEvent("moveAnimate", function (data) {
+			core.maps.moveAnimate(data.id, data.px, data.py, data.relative, data.time, data.style);
+
+			core.doAction();
+		});
+		core.registerEvent("animateloop", function (data) {
+			core.animateloop(data.id, data.loop);
+
+			core.doAction();
+		});
+		core.registerEvent("animatereverse", function (data) {
+			core.animatereverse(data.id, data.reverse);
+
+			core.doAction();
+		});
+		core.registerEvent("animatepause", function (data) {
+			core.animatepause(data.id, data.pause);
+
+			core.doAction();
+		});
+		core.registerEvent("clearanimate", function (data) {
+			core.animateclear(data.id);
+
+			core.doAction();
+		});
+		core.registerEvent("deleteanimate", function (data) {
+			core.deleteanimate(data.name);
+			core.doAction();
+		});
+		core.registerEvent("playanimate", function (data) {
+			if (!main.replayChecking && !core.isReplaying()) {
+				data.x = data.x ?? 0;
+				data.y = data.y ?? 0;
+				data.scalex = data.scalex ?? 1;
+				data.scaley = data.scaley ?? 1;
+				core.playanimate(
+					data.name,
+					data.id,
+					data.x,
+					data.y,
+					data.hero,
+					data.scalex,
+					data.scaley,
+					data.loop,
+					data.reverse
+				);
+				core.doAction();
+			} else {
+				core.doAction();
+			}
+		});
+		core.registerEvent("addPop", function (data) {
+			if (!main.replayChecking && !core.isReplaying()) {
+				data.value = core.replaceText(data.value);
+				core.addPop(
+					data.value,
+					data.px,
+					data.py,
+					data.color,
+					data.boldColor,
+					data.left,
+					data.jump,
+					data.time,
+					data.show,
+					data.font,
+					data.speed
+				);
+			}
+			core.doAction();
+		});
+		core.registerEvent("drawWarning", function (data) {
+			if (!main.replayChecking && !core.isReplaying()) {
+				data.text = core.replaceText(data.text);
+				data.text2 = core.replaceText(data.text2);
+				core.drawWarning(
+					data.x,
+					data.y,
+					data?.text,
+					data?.text2,
+					data?.warning,
+					data.large,
+					data.size
+				);
+
+				setTimeout(() => core.doAction(), 3100);
+			} else {
+				core.doAction();
+			}
+		});
+
+		core.registerEvent("over", function (data) {
+			let image = data.image ?? "";
+			let time = data.time ?? 3000;
+			let sound = data.sound ?? "";
+			let textColor = data.textColor ?? "#FFFFFF";
+			let boldColor = data.boldColor ?? "#000000";
+			let font = data.font ?? "bold 48px Verdana";
+			let text = data.text ?? "";
+			let hidetime = data.hidetime ?? 100;
+			if (!main.replayChecking && !core.isReplaying()) {
+				core.over(
+					image,
+					data.memory,
+					time,
+					hidetime,
+					sound,
+					textColor,
+					boldColor,
+					font,
+					text
+				);
+			} else {
+				core.doAction();
+			}
+		});
+		core.registerEvent("changebg", function (data) {
+			if (!main.replayChecking && !core.isReplaying()) {
+				core.changebg(
+					data.img1,
+					data.memory1,
+					data.img2,
+					data.memory2,
+					data.time,
+					data.style
+				);
+				if (data.style === "引出") { core.ui.cgText.image = ""; } else {} core.ui.cgText.image = data.img2;
+				core.ui.cgText.memory = data.memory2;
+			} else {
+				core.doAction();
+			}
+		});
+		core.registerEvent("overlist", function (data) {
+			if (!main.replayChecking && !core.isReplaying()) {
+				core.overlist(
+					data.image,
+					data.memory,
+					data.hidetime || 30,
+					data.list || [{
+						text: "",
+						sound: "",
+						time: 50,
+						textColor: "#FFFFFF",
+						boldColor: "#000000",
+						font: "bold 48px Verdana",
+						frame: 0,
+					}, ]
+				);
+			} else {
+				core.doAction();
+			}
+		});
+		core.registerEvent("op", function (data) {
+			if (!main.replayChecking && !core.isReplaying()) {
+				core.openvideo();
+			} else {
+				core.doAction();
+			}
+		});
+
+		core.registerEvent("cgtextList", function (data) {
+			core.ui.cgText.textList = data.textList;
+			core.doAction();
+		});
+		core.registerEvent("cgtext", function (data) {
+			if (!main.replayChecking && !core.isReplaying()) {
+
+				core.ui.cgText.head = core.clone(data.head);
+				core.ui.cgText.index = data.index;
+				core.ui.cgText.name = core.plugin[core.ui.cgText.textList][data.index][0];
+				core.ui.cgText.text = data.text ?
+					data.text :
+					core.plugin[core.ui.cgText.textList][data.index][1];
+				core.ui.cgText.time = data.time;
+				core.ui.cgText.wait = data.wait;
+				core.ui.cgText.WindowSkin = data.WindowSkin;
+				core.ui.cgText.sound =
+					data.sound === "" ?
+					data.sound :
+					core.plugin[core.ui.cgText.textList][data.index][2] || "";
+				core.ui.cgText.bodyList = core.clone(data.bodyList);
+				main.dom.cgText.style.display = "block";
+				core.ui.cgText.update();
+			} else {
+				core.doAction();
+			}
+		});
+		core.registerEvent("introAndLoop", function (data) {
+			if (!main.replayChecking && !core.isReplaying()) {
+				core.plugin.introAndLoop(data.intro, data.time, data.loop);
+				core.doAction();
+			} else {
+				core.doAction();
+			}
+		});
+		core.registerEvent("setq", function (data) {
+			core.setFlag("任务地点", data.id);
+
+			core.doAction();
+		});
+
+		core.registerEvent("setmusics", function (data) {
+			if (
+				(core.getLocalStorage("musics") &&
+					core.getLocalStorage("musics").length === 0) ||
+				!core.getLocalStorage("musics")
+			)
+				core.setLocalStorage("musics", ["theme.mp3"]);
+			let a = core.getLocalStorage("musics");
+			if (!data.bgm) {
+				core.setLocalStorage("musics", ["theme.mp3"]);
+			} else {
+				if (!a.includes(data.bgm)) a.push(data.bgm);
+				core.setLocalStorage("musics", a);
+			}
+			core.doAction();
+		});
+		core.registerEvent("setcgs", function (data) {
+			if (!data.img) {
+				core.setLocalStorage("cgs", []);
+			} else {
+				let a = core.getLocalStorage("cgs") ?? [];
+				if (!a.includes(data.img)) a.push(data.img);
+				core.setLocalStorage("cgs", a);
+			}
+			core.doAction();
+		});
+	};
+},
     "drawLight": function () {
     // 绘制灯光/漆黑层效果。调用方式 core.plugin.drawLight(...)
     // 【参数说明】
@@ -264,8 +364,6 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
       ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
 
       lightDec = core.clamp(lightDec, 0, 1);
-
-      // 绘制每个灯光效果
       ctx.globalCompositeOperation = "destination-out";
       lights.forEach(function (light) {
         // 坐标,半径,中心不透明度
@@ -2484,1560 +2582,2013 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
     })();
   },
     "statusBar": function () {
-    main.dom.floorMsgGroup.style.display = "none";
-    main.dom.statusBar.style.display = "none";
-    main.dom.toolBar.style.display = "none";
-    //所有数据*3是为了实现高清画布
-    const GAMEVIEW_WIDTH = 676 * 3; //横屏画面宽度
-    const GAMEVIEW_HEIGHT = 416 * 3; //横屏画面高度
+	main.dom.floorMsgGroup.style.display = "none";
+	main.dom.statusBar.style.display = "none";
+	main.dom.toolBar.style.display = "none";
+	//所有数据*3是为了实现高清画布
+	const GAMEVIEW_WIDTH = 676 * 3; //横屏画面宽度
+	const GAMEVIEW_HEIGHT = 416 * 3; //横屏画面高度
 
-    const GAMEVIEW_WIDTH_VERTICAL = 416 * 3; //竖屏画面宽度
-    const GAMEVIEW_HEIGHT_VERTICAL = 676 * 3; //竖屏画面高度
+	const GAMEVIEW_WIDTH_VERTICAL = 416 * 3; //竖屏画面宽度
+	const GAMEVIEW_HEIGHT_VERTICAL = 676 * 3; //竖屏画面高度
 
-    const BAR_WIDTH = 130 * 3; //横屏左侧额外距离(即边栏宽度)
-    const BAR_HEIGHT_VERTICAL = 130 * 3; //竖屏上侧额外距离(即边栏高度)
-    const BORDER_WIDTH = 0; //游戏画面左侧偏移距离
-    const BORDER_HEIGHT = 0; //游戏画面上侧偏移距离
+	const BAR_WIDTH = 130 * 3; //横屏左侧额外距离(即边栏宽度)
+	const BAR_HEIGHT_VERTICAL = 130 * 3; //竖屏上侧额外距离(即边栏高度)
+	const BORDER_WIDTH = 0; //游戏画面左侧偏移距离
+	const BORDER_HEIGHT = 0; //游戏画面上侧偏移距离
 
-    const ITEM_BOX_LEFT = 549 * 3; //横屏道具栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
-    const ITEM_BOX_TOP = 155 * 3; //横屏道具栏上侧距离
-    const ITEM_BOX_LEFT_VERTICAL = 160 * 3; //竖屏道具栏左侧距离
-    const ITEM_BOX_TOP_VERTICAL = 549 * 3; //竖屏道具栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
+	const ITEM_BOX_LEFT = 549 * 3; //横屏道具栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
+	const ITEM_BOX_TOP = 175 * 3; //横屏道具栏上侧距离
+	const ITEM_BOX_LEFT_VERTICAL = 160 * 3; //竖屏道具栏左侧距离
+	const ITEM_BOX_TOP_VERTICAL = 549 * 3; //竖屏道具栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
 
-    const EQUIP_BLOCK_LEFT = 549 * 3; //横屏装备栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
-    const EQUIP_BLOCK_TOP = 10 * 3; //横屏装备栏上侧距离
-    const EQUIP_BLOCK_LEFT_VERTICAL = 10 * 3; //竖屏装备栏左侧距离
-    const EQUIP_BLOCK_TOP_VERTICAL = 549 * 3; //竖屏装备栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
+	const EQUIP_BLOCK_LEFT = 549 * 3; //横屏装备栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
+	const EQUIP_BLOCK_TOP = 10 * 3; //横屏装备栏上侧距离
+	const EQUIP_BLOCK_LEFT_VERTICAL = 10 * 3; //竖屏装备栏左侧距离
+	const EQUIP_BLOCK_TOP_VERTICAL = 549 * 3; //竖屏装备栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
 
-    const MAP_BLOCK_LEFT = 551 * 3; //横屏小地图左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
-    const MAP_BLOCK_TOP = 0; //横屏小地图上侧距离
-    const MAP_BLOCK_LEFT_VERTICAL = 0; //竖屏小地图左侧距离
-    const MAP_BLOCK_TOP_VERTICAL = 551 * 3; //竖屏小地图上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
+	const MAP_BLOCK_LEFT = 551 * 3; //横屏小地图左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
+	const MAP_BLOCK_TOP = 0; //横屏小地图上侧距离
+	const MAP_BLOCK_LEFT_VERTICAL = 0; //竖屏小地图左侧距离
+	const MAP_BLOCK_TOP_VERTICAL = 551 * 3; //竖屏小地图上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
 
-    const KEY_BLOCK_LEFT = EQUIP_BLOCK_LEFT; //横屏钥匙栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
-    const KEY_BLOCK_TOP = 110 * 3; //横屏钥匙栏上侧距离
-    const KEY_BLOCK_LEFT_VERTICAL = 110 * 3; //竖屏钥匙栏左侧距离
-    const KEY_BLOCK_TOP_VERTICAL = EQUIP_BLOCK_TOP_VERTICAL; //竖屏钥匙栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
+	const KEY_BLOCK_LEFT = EQUIP_BLOCK_LEFT; //横屏钥匙栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
+	const KEY_BLOCK_TOP = 130 * 3; //横屏钥匙栏上侧距离
+	const KEY_BLOCK_LEFT_VERTICAL = 110 * 3; //竖屏钥匙栏左侧距离
+	const KEY_BLOCK_TOP_VERTICAL = EQUIP_BLOCK_TOP_VERTICAL; //竖屏钥匙栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
 
-    const INFO_BLOCK_LEFT = 10 * 3; //横屏道具说明左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
-    const INFO_BLOCK_TOP = 180 * 3; //横屏道具说明上侧距离
-    const INFO_BLOCK_LEFT_VERTICAL = 113 * 3; //竖屏道具说明左侧距离
-    const INFO_BLOCK_TOP_VERTICAL = 8 * 3; //竖屏道具说明上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
+	const INFO_BLOCK_LEFT = 10 * 3; //横屏道具说明左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
+	const INFO_BLOCK_TOP = 290 * 3; //横屏道具说明上侧距离
+	const INFO_BLOCK_LEFT_VERTICAL = 113 * 3; //竖屏道具说明左侧距离
+	const INFO_BLOCK_TOP_VERTICAL = 8 * 3; //竖屏道具说明上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
 
-    const TOOL_BOX_LEFT = EQUIP_BLOCK_LEFT; //横屏工具栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
-    const TOOL_BOX_TOP = 348 * 3; //横屏工具栏上侧距离
-    const TOOL_BOX_LEFT_VERTICAL = 348 * 3; //竖屏工具栏左侧距离
-    const TOOL_BOX_TOP_VERTICAL = 549 * 3; //竖屏工具栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
+	const TOOL_BOX_LEFT = EQUIP_BLOCK_LEFT; //横屏工具栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
+	const TOOL_BOX_TOP = 348 * 3; //横屏工具栏上侧距离
+	const TOOL_BOX_LEFT_VERTICAL = 348 * 3; //竖屏工具栏左侧距离
+	const TOOL_BOX_TOP_VERTICAL = 549 * 3; //竖屏工具栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
 
-    const TOOL_ICON_OUTER_SIZE = 34 * 3;
+	const TOOL_ICON_OUTER_SIZE = 34 * 3;
 
-    const TEXT_COLOR = "#FFFFFF"; //默认文字颜色
-    const globalAlpha = 0.7; //默认底框透明度
-    const FORCE_COUNTABLE_ITEMS = ["centerFly"]; //常态显示数量的非永久道具,如果道具不在此数组中,则只有道具多余1时显示数量
+	const TEXT_COLOR = "#FFFFFF"; //默认文字颜色
+	const globalAlpha = 0.7; //默认底框透明度
+	const FORCE_COUNTABLE_ITEMS = ["centerFly"]; //常态显示数量的非永久道具,如果道具不在此数组中,则只有道具多余1时显示数量
 
-    const outerBackground = document.createElement("canvas"); //背景画布设置
-    let globalAlphafloor = 0,
-      globalAlphafloorStatus = 4;
-    outerBackground.style.position = "absolute";
-    outerBackground.style.zIndex = 5;
-    outerBackground.id = "outerBackground";
-    main.dom.outerBackground = outerBackground;
-    main.dom.startPanel.insertAdjacentElement("afterend", outerBackground);
+	const outerBackground = document.createElement("canvas"); //背景画布设置
+	let globalAlphafloor = 0,
+		globalAlphafloorStatus = 4;
+	outerBackground.style.position = "absolute";
+	outerBackground.style.zIndex = 5;
+	outerBackground.id = "outerBackground";
+	main.dom.outerBackground = outerBackground;
+	main.dom.startPanel.insertAdjacentElement("afterend", outerBackground);
 
-    const outerUI = document.createElement("canvas"); //额外ui画布设置(状态栏所有绘制、点击都在额外ui上)
-    outerUI.style.position = "absolute";
-    outerUI.style.zIndex = 165;
-    outerUI.id = "outerUI";
+	const outerUI = document.createElement("canvas"); //额外ui画布设置(状态栏所有绘制、点击都在额外ui上)
+	outerUI.style.position = "absolute";
+	outerUI.style.zIndex = 165;
+	outerUI.id = "outerUI";
 
-    main.dom.outerUI = outerUI;
-    outerBackground.insertAdjacentElement("afterend", outerUI);
-    setTimeout(function () {
-      // Should be executed immediately after init()
-      main.canvas.outerUI = outerUI.getContext("2d");
-    });
-    outerUI.onclick = function (e) {
-      try {
-        e.preventDefault();
-        if (!core.isPlaying()) return false;
-        const left = core.dom.gameGroup.offsetLeft;
-        const top = core.dom.gameGroup.offsetTop;
-        const px = Math.floor((e.clientX - left) / core.domStyle.scale),
-          py = Math.floor((e.clientY - top) / core.domStyle.scale);
-        core.ui.statusBar.onclick(px * 3, py * 3);
-      } catch (ee) {
-        main.log(ee);
-      }
-    };
+	main.dom.outerUI = outerUI;
+	outerBackground.insertAdjacentElement("afterend", outerUI);
+	setTimeout(function () {
+		// Should be executed immediately after init()
+		main.canvas.outerUI = outerUI.getContext("2d");
+	});
+	outerUI.onclick = function (e) {
+		try {
+			e.preventDefault();
+			if (!core.isPlaying()) return false;
+			const left = core.dom.gameGroup.offsetLeft;
+			const top = core.dom.gameGroup.offsetTop;
+			const px = Math.floor((e.clientX - left) / core.domStyle.scale),
+				py = Math.floor((e.clientY - top) / core.domStyle.scale);
+			core.ui.statusBar.onclick(px * 3, py * 3);
+		} catch (ee) {
+			main.log(ee);
+		}
+	};
 
-    const _resize_gameGroup = function (obj) {
-      //游戏画面自适应调节
-      const gameGroup = core.dom.gameGroup;
-      gameGroup.style.width = obj.totalWidth + "px";
-      gameGroup.style.height = obj.totalHeight + "px";
-      gameGroup.style.left = (obj.clientWidth - obj.totalWidth) / 2 + "px";
-      gameGroup.style.top = (obj.clientHeight - obj.totalHeight) / 2 + "px";
-      //floorMsgGroup为切换楼层中生效,显示时间可通过‘全塔属性’——‘切换楼层时间’或游戏内设置调整
-      //显示内容为游戏名/版本号/楼层名
-      // floorMsgGroup
-      var floorMsgGroup = core.dom.floorMsgGroup;
-      var globalAttribute =
-        core.status.globalAttribute || core.initStatus.globalAttribute;
-      floorMsgGroup.style = globalAttribute.floorChangingStyle;
-      floorMsgGroup.style.height = floorMsgGroup.style.width =
-        (GAMEVIEW_HEIGHT / 3) * core.domStyle.scale + "px";
-      floorMsgGroup.style.fontSize = 16 * core.domStyle.scale + "px";
+	const _resize_gameGroup = function (obj) {
+		//游戏画面自适应调节
+		const gameGroup = core.dom.gameGroup;
+		gameGroup.style.width = obj.totalWidth + "px";
+		gameGroup.style.height = obj.totalHeight + "px";
+		gameGroup.style.left = (obj.clientWidth - obj.totalWidth) / 2 + "px";
+		gameGroup.style.top = (obj.clientHeight - obj.totalHeight) / 2 + "px";
+		//floorMsgGroup为切换楼层中生效,显示时间可通过‘全塔属性’——‘切换楼层时间’或游戏内设置调整
+		//显示内容为游戏名/版本号/楼层名
+		// floorMsgGroup
+		var floorMsgGroup = core.dom.floorMsgGroup;
+		var globalAttribute =
+			core.status.globalAttribute || core.initStatus.globalAttribute;
+		floorMsgGroup.style = globalAttribute.floorChangingStyle;
+		floorMsgGroup.style.height = floorMsgGroup.style.width =
+			(GAMEVIEW_HEIGHT / 3) * core.domStyle.scale + "px";
+		floorMsgGroup.style.fontSize = 16 * core.domStyle.scale + "px";
 
-      if (core.domStyle.isVertical) {
-        floorMsgGroup.style.left = "0px";
-        floorMsgGroup.style.top =
-          ((GAMEVIEW_HEIGHT_VERTICAL / 3 - GAMEVIEW_WIDTH_VERTICAL / 3) *
-            core.domStyle.scale) /
-            2 +
-          "px";
-      } else {
-        floorMsgGroup.style.left =
-          ((GAMEVIEW_WIDTH / 3 - GAMEVIEW_HEIGHT / 3) * core.domStyle.scale) /
-            2 +
-          "px";
-        floorMsgGroup.style.top = "0px";
-      }
-      core.dom.musicBtn.style.right =
-        (obj.clientWidth - obj.totalWidth) / 2 + "px";
-      core.dom.musicBtn.style.bottom =
-        (obj.clientHeight - obj.totalHeight) / 2 - 27 + "px";
-      let startBackground = core.domStyle.isVertical
-        ? main.styles.startVerticalBackground || main.styles.startBackground
-        : main.styles.startBackground;
-      if (main.dom.startBackground.getAttribute("__src__") != startBackground) {
-        main.dom.startBackground.setAttribute("__src__", startBackground);
-        main.dom.startBackground.src = startBackground;
-      }
-      const span = document
-        .getElementById("startButtons")
-        .getElementsByTagName("span");
-      let font = (GAMEVIEW_WIDTH / 100) * core.domStyle.scale;
-      if (core.domStyle.isVertical)
-        font = ((GAMEVIEW_WIDTH_VERTICAL * 2) / 100) * core.domStyle.scale;
+		if (core.domStyle.isVertical) {
+			floorMsgGroup.style.left = "0px";
+			floorMsgGroup.style.top =
+				((GAMEVIEW_HEIGHT_VERTICAL / 3 - GAMEVIEW_WIDTH_VERTICAL / 3) *
+					core.domStyle.scale) /
+				2 +
+				"px";
+		} else {
+			floorMsgGroup.style.left =
+				((GAMEVIEW_WIDTH / 3 - GAMEVIEW_HEIGHT / 3) * core.domStyle.scale) /
+				2 +
+				"px";
+			floorMsgGroup.style.top = "0px";
+		}
+		core.dom.musicBtn.style.right =
+			(obj.clientWidth - obj.totalWidth) / 2 + "px";
+		core.dom.musicBtn.style.bottom =
+			(obj.clientHeight - obj.totalHeight) / 2 - 27 + "px";
+		let startBackground = core.domStyle.isVertical ?
+			main.styles.startVerticalBackground || main.styles.startBackground :
+			main.styles.startBackground;
+		if (main.dom.startBackground.getAttribute("__src__") != startBackground) {
+			main.dom.startBackground.setAttribute("__src__", startBackground);
+			main.dom.startBackground.src = startBackground;
+		}
+		const span = document
+			.getElementById("startButtons")
+			.getElementsByTagName("span");
+		let font = (GAMEVIEW_WIDTH / 100) * core.domStyle.scale;
+		if (core.domStyle.isVertical)
+			font = ((GAMEVIEW_WIDTH_VERTICAL * 2) / 100) * core.domStyle.scale;
 
-      core.dom.playGame.style.fontSize = font + "px";
-      core.dom.loadGame.style.fontSize = font + "px";
-      core.dom.CGMode.style.fontSize = font + "px";
-      core.dom.musicMode.style.fontSize = font + "px";
-      core.dom.replayGame.style.fontSize = font + "px";
-      core.dom.startButtonGroup.style.padding = font * 0.3 + "px 25px";
-    };
-    const _resize_canvas = function (obj) {
-      //自适应画布
-      main.dom.outerBackground.style.width = obj.totalWidth + "px";
-      main.dom.outerBackground.style.height = obj.totalHeight + "px";
-      main.dom.outerUI.style.width = obj.totalWidth + "px";
-      main.dom.outerUI.style.height = obj.totalHeight + "px";
-      if (main.dom.CGUI) {
-        main.dom.CGUI.style.width = obj.totalWidth + 3 + "px";
-        main.dom.CGUI.style.height = obj.totalHeight + 3 + "px";
-      }
-      if (main.dom.music) {
-        main.dom.music.style.width = obj.totalWidth + 3 + "px";
-        main.dom.music.style.height = obj.totalHeight + 3 + "px";
-      }
-      if (main.dom.cgText) {
-        main.dom.cgText.style.width = obj.totalWidth + 3 + "px";
-        main.dom.cgText.style.height = obj.totalHeight + 3 + "px";
-      }
-      if (main.dom.over) {
-        main.dom.over.style.width = obj.totalWidth + 3 + "px";
-        main.dom.over.style.height = obj.totalHeight + 3 + "px";
-      }
-      if (main.dom.video) {
-        main.dom.video.style.width = obj.totalWidth + 3 + "px";
-        main.dom.video.style.height = obj.totalHeight + 3 + "px";
-        if (core.domStyle.isVertical)
-          main.dom.video.style.width = obj.totalHeight + 3 + "px";
-        if (core.domStyle.isVertical)
-          main.dom.video.style.height = obj.totalWidth + 3 + "px";
-        main.dom.video.style.top = "50%";
-        main.dom.video.style.left = "50%";
+		core.dom.playGame.style.fontSize = font + "px";
+		core.dom.loadGame.style.fontSize = font + "px";
+		core.dom.CGMode.style.fontSize = font + "px";
+		core.dom.musicMode.style.fontSize = font + "px";
+		core.dom.replayGame.style.fontSize = font + "px";
+		core.dom.startButtonGroup.style.padding = font * 0.3 + "px 25px";
+	};
+	const _resize_canvas = function (obj) {
+		//自适应画布
+		main.dom.outerBackground.style.width = obj.totalWidth + "px";
+		main.dom.outerBackground.style.height = obj.totalHeight + "px";
+		main.dom.outerUI.style.width = obj.totalWidth + "px";
+		main.dom.outerUI.style.height = obj.totalHeight + "px";
+		if (main.dom.CGUI) {
+			main.dom.CGUI.style.width = obj.totalWidth + 3 + "px";
+			main.dom.CGUI.style.height = obj.totalHeight + 3 + "px";
+		}
+		if (main.dom.music) {
+			main.dom.music.style.width = obj.totalWidth + 3 + "px";
+			main.dom.music.style.height = obj.totalHeight + 3 + "px";
+		}
+		if (main.dom.cgText) {
+			main.dom.cgText.style.width = obj.totalWidth + 3 + "px";
+			main.dom.cgText.style.height = obj.totalHeight + 3 + "px";
+		}
+		if (main.dom.logcanvas) {
+			main.dom.logcanvas.style.width = obj.totalWidth + 3 + "px";
+			main.dom.logcanvas.style.height = obj.totalHeight + 3 + "px";
+		}
+		if (main.dom.over) {
+			main.dom.over.style.width = obj.totalWidth + 3 + "px";
+			main.dom.over.style.height = obj.totalHeight + 3 + "px";
+		}
+		if (main.dom.book) {
+			main.dom.book.style.width = obj.totalWidth + 3 + "px";
+			main.dom.book.style.height = obj.totalHeight + 3 + "px";
+		}
+		if (main.dom.video) {
+			main.dom.video.style.width = obj.totalWidth + 3 + "px";
+			main.dom.video.style.height = obj.totalHeight + 3 + "px";
+			if (core.domStyle.isVertical)
+				main.dom.video.style.width = obj.totalHeight + 3 + "px";
+			if (core.domStyle.isVertical)
+				main.dom.video.style.height = obj.totalWidth + 3 + "px";
+			main.dom.video.style.top = "50%";
+			main.dom.video.style.left = "50%";
 
-        main.dom.video.style.transform = "translate(-50%,-50%)";
+			main.dom.video.style.transform = "translate(-50%,-50%)";
 
-        if (core.domStyle.isVertical)
-          main.dom.video.style.transform = "translate(-50%,-50%) rotate(90deg)";
-      }
-      if (main.dom.video1) {
-        main.dom.video1.style.width = obj.totalWidth + 3 + "px";
-        main.dom.video1.style.height = obj.totalHeight + 3 + "px";
-      }
+			if (core.domStyle.isVertical)
+				main.dom.video.style.transform = "translate(-50%,-50%) rotate(90deg)";
+		}
+		if (main.dom.video1) {
+			main.dom.video1.style.width = obj.totalWidth + 3 + "px";
+			main.dom.video1.style.height = obj.totalHeight + 3 + "px";
+		}
 
-      const innerSize = obj.canvasWidth * core.domStyle.scale + "px";
-      for (let i = 0; i < core.dom.gameCanvas.length; ++i)
-        core.dom.gameCanvas[i].style.width = core.dom.gameCanvas[
-          i
-        ].style.height = innerSize;
-      core.dom.gif.style.width = core.dom.gif.style.height = innerSize;
-      core.dom.gif2.style.width = core.dom.gif2.style.height = innerSize;
+		main.dom.boss1.style.width = obj.totalWidth + 3 + "px";
+		main.dom.boss1.style.height = obj.totalHeight + 3 + "px";
 
-      core.dom.gameDraw.style.width = core.dom.gameDraw.style.height =
-        innerSize;
-      core.dom.gameDraw.style.top =
-        obj.gameDrawBox.top * core.domStyle.scale + "px";
-      core.dom.gameDraw.style.left =
-        obj.gameDrawBox.left * core.domStyle.scale + "px";
-      // resize bigmap
-      core.bigmap.canvas.forEach(function (cn) {
-        const ratio = core.canvas[cn].canvas.hasAttribute("isHD")
-          ? core.domStyle.ratio
-          : 1;
-        core.canvas[cn].canvas.style.width =
-          (innerSize / ratio) * core.domStyle.scale + "px";
-        core.canvas[cn].canvas.style.height =
-          (innerSize / ratio) * core.domStyle.scale + "px";
-      });
-      // resize dynamic canvas
-      for (const name in core.dymCanvas) {
-        const ctx = core.dymCanvas[name],
-          canvas = ctx.canvas;
-        const ratio = canvas.hasAttribute("isHD") ? core.domStyle.ratio : 1;
-        canvas.style.width = (innerSize / ratio) * core.domStyle.scale + "px";
-        canvas.style.height = (innerSize / ratio) * core.domStyle.scale + "px";
-        canvas.style.left =
-          parseFloat(canvas.getAttribute("_left")) * core.domStyle.scale + "px";
-        canvas.style.top =
-          parseFloat(canvas.getAttribute("_top")) * core.domStyle.scale + "px";
-      }
-      // resize next
-      main.dom.next.style.width = main.dom.next.style.height =
-        5 * core.domStyle.scale + "px";
-      main.dom.next.style.borderBottomWidth =
-        main.dom.next.style.borderRightWidth = 4 * core.domStyle.scale + "px";
-    };
-    const bgctx = main.dom.outerBackground.getContext("2d");
-    const uictx = main.dom.outerUI.getContext("2d");
-    let now = 0;
-    core.registerAnimationFrame("lightFloor", true, function (timestamp) {
-      if (timestamp - now > 1000 / 60) {
-        now = timestamp;
-        globalAlphafloor += globalAlphafloorStatus;
-        if (globalAlphafloor === 100) globalAlphafloorStatus = -2;
-        if (globalAlphafloor === 0) globalAlphafloorStatus = 2;
+		main.dom.boss2.style.width = obj.totalWidth + 3 + "px";
+		main.dom.boss2.style.height = obj.totalHeight + 3 + "px";
 
-        if (core.domStyle.isVertical) {
-          core.clearMap(
-            uictx,
-            MAP_BLOCK_LEFT_VERTICAL,
-            MAP_BLOCK_TOP_VERTICAL,
-            340,
-            360
-          );
-          if (core.status.event.id === "viewMaps") {
-            core.ui.statusBar._update_map(core.status.event.data.floorId);
-          } else {
-            core.ui.statusBar._update_map();
-          }
+		main.dom.boss3.style.width = obj.totalWidth + 3 + "px";
+		main.dom.boss3.style.height = obj.totalHeight + 3 + "px";
 
-          uictx.globalAlpha = globalAlphafloor / 100;
-          core.drawImage(
-            uictx,
-            "green.webp",
-            MAP_BLOCK_LEFT_VERTICAL + 135,
-            MAP_BLOCK_TOP_VERTICAL + 170
-          );
-          uictx.globalAlpha = 1;
-        } else {
-          core.clearMap(uictx, MAP_BLOCK_LEFT, MAP_BLOCK_TOP, 340, 360);
-          if (core.status.event.id === "viewMaps") {
-            core.ui.statusBar._update_map(core.status.event.data.floorId);
-          } else {
-            core.ui.statusBar._update_map();
-          }
-          uictx.globalAlpha = globalAlphafloor / 100;
-          core.drawImage(
-            uictx,
-            "green.webp",
-            MAP_BLOCK_LEFT + 150,
-            MAP_BLOCK_TOP + 180
-          );
-          uictx.globalAlpha = 1;
-        }
-      }
-    });
+		main.dom.boss4.style.width = obj.totalWidth + 3 + "px";
+		main.dom.boss4.style.height = obj.totalHeight + 3 + "px";
 
-    core.control.resize = function () {
-      //自适应,可实现横竖屏切换
-      if (main.mode == "editor") return;
+		main.dom.boss5.style.width = obj.totalWidth + 3 + "px";
+		main.dom.boss5.style.height = obj.totalHeight + 3 + "px";
+		main.dom.boss6.style.width = obj.totalWidth + 3 + "px";
+		main.dom.boss6.style.height = obj.totalHeight + 3 + "px";
+		main.dom.boss7.style.width = obj.totalWidth + 3 + "px";
+		main.dom.boss7.style.height = obj.totalHeight + 3 + "px";
+		main.dom.boss8.style.width = obj.totalWidth + 3 + "px";
+		main.dom.boss8.style.height = obj.totalHeight + 3 + "px";
+		main.dom.saveLoad.style.width = obj.totalWidth + 3 + "px";
+		main.dom.saveLoad.style.height = obj.totalHeight + 3 + "px";
+		main.dom.boss.style.width = obj.totalWidth + 3 + "px";
+		main.dom.boss.style.height = obj.totalHeight + 3 + "px";
 
-      const clientWidth = main.dom.body.clientWidth,
-        clientHeight = main.dom.body.clientHeight;
-      const canvasWidth = core.__PIXELS__;
+		const innerSize = obj.canvasWidth * core.domStyle.scale + "px";
+		for (let i = 0; i < core.dom.gameCanvas.length; ++i)
+			core.dom.gameCanvas[i].style.width = core.dom.gameCanvas[
+				i
+			].style.height = innerSize;
+		core.dom.gif.style.width = core.dom.gif.style.height = innerSize;
+		core.dom.gif2.style.width = core.dom.gif2.style.height = innerSize;
 
-      const isVertical = clientHeight > clientWidth;
-      core.domStyle.isVertical = isVertical;
+		core.dom.gameDraw.style.width = core.dom.gameDraw.style.height =
+			innerSize;
+		core.dom.gameDraw.style.top =
+			obj.gameDrawBox.top * core.domStyle.scale + "px";
+		core.dom.gameDraw.style.left =
+			obj.gameDrawBox.left * core.domStyle.scale + "px";
+		// resize bigmap
+		core.bigmap.canvas.forEach(function (cn) {
+			const ratio = core.canvas[cn].canvas.hasAttribute("isHD") ?
+				core.domStyle.ratio :
+				1;
+			core.canvas[cn].canvas.style.width =
+				(innerSize / ratio) * core.domStyle.scale + "px";
+			core.canvas[cn].canvas.style.height =
+				(innerSize / ratio) * core.domStyle.scale + "px";
+		});
+		// resize dynamic canvas
+		for (const name in core.dymCanvas) {
+			const ctx = core.dymCanvas[name],
+				canvas = ctx.canvas;
+			const ratio = canvas.hasAttribute("isHD") ? core.domStyle.ratio : 1;
+			canvas.style.width = (innerSize / ratio) * core.domStyle.scale + "px";
+			canvas.style.height = (innerSize / ratio) * core.domStyle.scale + "px";
+			canvas.style.left =
+				parseFloat(canvas.getAttribute("_left")) * core.domStyle.scale + "px";
+			canvas.style.top =
+				parseFloat(canvas.getAttribute("_top")) * core.domStyle.scale + "px";
+		}
+		// resize next
+		main.dom.next.style.width = main.dom.next.style.height =
+			5 * core.domStyle.scale + "px";
+		main.dom.next.style.borderBottomWidth =
+			main.dom.next.style.borderRightWidth = 4 * core.domStyle.scale + "px";
+	};
+	const bgctx = main.dom.outerBackground.getContext("2d");
+	const uictx = main.dom.outerUI.getContext("2d");
+	let now = 0;
+	core.registerAnimationFrame("lightFloor", true, function (timestamp) {
+		if (!core.status.floorId) return
+		if (timestamp - now > 1000 / 60) {
+			now = timestamp;
+			globalAlphafloor += globalAlphafloorStatus;
+			if (globalAlphafloor === 100) globalAlphafloorStatus = -2;
+			if (globalAlphafloor === 0) globalAlphafloorStatus = 2;
 
-      const totalWidth = isVertical
-          ? GAMEVIEW_WIDTH_VERTICAL / 3
-          : GAMEVIEW_WIDTH / 3,
-        totalHeight = isVertical
-          ? GAMEVIEW_HEIGHT_VERTICAL / 3
-          : GAMEVIEW_HEIGHT / 3;
+			if (core.domStyle.isVertical) {
+				core.clearMap(
+					uictx,
+					MAP_BLOCK_LEFT_VERTICAL,
+					MAP_BLOCK_TOP_VERTICAL,
+					340,
+					360
+				);
+				if (core.status.event.id === "viewMaps") {
+					core.ui.statusBar._update_map(core.status.event.data.floorId);
+				} else {
+					core.ui.statusBar._update_map();
+				}
 
-      const maxRatio = Math.min(
-        clientWidth / totalWidth,
-        clientHeight / totalHeight
-      );
+				uictx.globalAlpha = globalAlphafloor / 100;
+				core.drawImage(
+					uictx,
+					"green.webp",
+					MAP_BLOCK_LEFT_VERTICAL + 135,
+					MAP_BLOCK_TOP_VERTICAL + 170
+				);
+				uictx.globalAlpha = 1;
+			} else {
+				core.clearMap(uictx, MAP_BLOCK_LEFT, MAP_BLOCK_TOP, 340, 360);
+				if (core.status.event.id === "viewMaps") {
+					core.ui.statusBar._update_map(core.status.event.data.floorId);
+				} else {
+					core.ui.statusBar._update_map();
+				}
+				uictx.globalAlpha = globalAlphafloor / 100;
+				core.drawImage(
+					uictx,
+					"green.webp",
+					MAP_BLOCK_LEFT + 150,
+					MAP_BLOCK_TOP + 180
+				);
+				uictx.globalAlpha = 1;
+			}
+		}
+	});
 
-      core.domStyle.availableScale = [];
-      [1, 1.25, 1.5, 1.75, 2].forEach(function (v) {
-        if (maxRatio >= v) {
-          core.domStyle.availableScale.push(v);
-        }
-      });
+	core.control.resize = function () {
+		//自适应,可实现横竖屏切换
+		if (main.mode == "editor") return;
 
-      if (core.domStyle.availableScale.indexOf(core.domStyle.scale) < 0) {
-        core.domStyle.scale = Math.min(1, maxRatio);
-      } else if (
-        core.getLocalStorage("scale") == null &&
-        core.domStyle.availableScale.length >= 2
-      ) {
-        core.domStyle.scale =
-          core.domStyle.availableScale[core.domStyle.availableScale.length - 2];
-        core.setLocalStorage("scale", core.domStyle.scale);
-      }
+		const clientWidth = main.dom.body.clientWidth,
+			clientHeight = main.dom.body.clientHeight;
+		const canvasWidth = core.__PIXELS__;
 
-      const totalWidthScaled = totalWidth * core.domStyle.scale,
-        totalHeightScaled = totalHeight * core.domStyle.scale;
+		const isVertical = clientHeight > clientWidth;
+		core.domStyle.isVertical = isVertical;
 
-      const gameDrawBox = isVertical
-        ? {
-            left: BORDER_WIDTH / 3,
-            top: BAR_HEIGHT_VERTICAL / 3 + BORDER_HEIGHT / 3,
-          }
-        : { left: BAR_WIDTH / 3 + BORDER_WIDTH / 3, top: BORDER_HEIGHT / 3 };
+		const totalWidth = isVertical ?
+			GAMEVIEW_WIDTH_VERTICAL / 3 :
+			GAMEVIEW_WIDTH / 3,
+			totalHeight = isVertical ?
+			GAMEVIEW_HEIGHT_VERTICAL / 3 :
+			GAMEVIEW_HEIGHT / 3;
 
-      const obj = {
-        clientWidth: clientWidth,
-        clientHeight: clientHeight,
-        canvasWidth: canvasWidth,
-        totalWidth: totalWidthScaled,
-        totalHeight: totalHeightScaled,
-        gameDrawBox: gameDrawBox,
-        globalAttribute:
-          core.status.globalAttribute || core.initStatus.globalAttribute,
-      };
+		const maxRatio = Math.min(
+			clientWidth / totalWidth,
+			clientHeight / totalHeight
+		);
 
-      _resize_gameGroup(obj);
-      _resize_canvas(obj);
+		core.domStyle.availableScale = [];
+		[1, 1.25, 1.5, 1.75, 2].forEach(function (v) {
+			if (maxRatio >= v) {
+				core.domStyle.availableScale.push(v);
+			}
+		});
 
-      if (core.status.automaticRoute == null) core.status.automaticRoute = {};
-      core.updateStatusBar();
-      if (main.dom.CGUI && main.dom.CGUI.style.display === "block")
-        core.ui.CG.update();
-      if (main.dom.music && main.dom.music.style.display === "block")
-        core.ui.music.update();
-      if (main.dom.cgText && main.dom.cgText.style.display === "block")
-        core.ui.cgText.update();
-    };
+		if (core.domStyle.availableScale.indexOf(core.domStyle.scale) < 0) {
+			core.domStyle.scale = Math.min(1, maxRatio);
+		} else if (
+			core.getLocalStorage("scale") == null &&
+			core.domStyle.availableScale.length >= 2
+		) {
+			core.domStyle.scale =
+				core.domStyle.availableScale[core.domStyle.availableScale.length - 2];
+			core.setLocalStorage("scale", core.domStyle.scale);
+		}
 
-    class StatusBar {
-      constructor() {
-        //道具栏列表
-        this.itemMx = [
-          //空位用‘none’填充,当前ui至多4列6行
-          ["book", "wand", "none", "fly"],
-          ["cross", "superPotion", "pickaxe"],
-          ["bomb", "centerFly", "upFly"],
-          ["none", "none", "none"],
-          ["downFly", "knife", "snow"],
-          ["bigKey", "earthquake", "coin"],
-        ];
-      }
-      //初始化内容(工具栏/录像操作执行函数)
-      init() {
-        this.toolbarAction = [
-          [
-            main.core.openKeyBoard,
-            main.core.openQuickShop,
-            core.openToolbox,
-            core.doSL,
-          ],
-          [main.core.openSettings, main.core.save, main.core.load, core.doSL],
-        ];
-        this.replayAction = [
-          [core.triggerReplay, core.stopReplay, core.rewindReplay],
-          [core.speedDownReplay, core.speedUpReplay, core.saveReplay],
-        ];
-      }
-      //更新
-      update() {
-        this._update_background(); //更新背景
-        this._update_props(); //更新属性
-        //this._update_items(); //更新道具
-        //this._update_equips(); //更新装备
-        //this._update_keys(); //更新钥匙
-        //this._update_infoWindow(); //更新道具说明
-        this._update_toolBox(); //更新工具栏
-        this._redrawMap();
-      }
-      _redrawMap() {
-        if (core.domStyle.isVertical) {
-          core.clearMap(
-            uictx,
-            MAP_BLOCK_LEFT_VERTICAL,
-            MAP_BLOCK_TOP_VERTICAL,
-            340,
-            360
-          );
-          this._update_map();
-          uictx.globalAlpha = globalAlphafloor / 100;
-          core.drawImage(
-            uictx,
-            "green.webp",
-            MAP_BLOCK_LEFT_VERTICAL + 125,
-            MAP_BLOCK_TOP_VERTICAL + 170
-          );
-          uictx.globalAlpha = 1;
-        } else {
-          core.clearMap(uictx, MAP_BLOCK_LEFT, MAP_BLOCK_TOP, 340, 360);
-          this._update_map();
-          uictx.globalAlpha = globalAlphafloor / 100;
-          core.drawImage(
-            uictx,
-            "green.webp",
-            MAP_BLOCK_LEFT + 150,
-            MAP_BLOCK_TOP + 170
-          );
-          uictx.globalAlpha = 1;
-        }
-      }
-      //更新背景
-      _update_background() {
-        if (core.domStyle.isVertical) {
-          bgctx.canvas.width = GAMEVIEW_WIDTH_VERTICAL;
-          bgctx.canvas.height = GAMEVIEW_HEIGHT_VERTICAL;
-          uictx.canvas.width = GAMEVIEW_WIDTH_VERTICAL;
-          uictx.canvas.height = GAMEVIEW_HEIGHT_VERTICAL;
+		const totalWidthScaled = totalWidth * core.domStyle.scale,
+			totalHeightScaled = totalHeight * core.domStyle.scale;
 
-          const bg = core.material.images.images["status.webp"]; //竖屏背景(上)
-          bgctx.drawImage(
-            bg,
-            0,
-            0,
-            GAMEVIEW_WIDTH_VERTICAL,
-            BAR_HEIGHT_VERTICAL
-          );
-          const bg2 = core.material.images.images["status.webp"]; //竖屏背景(下)
-          bgctx.drawImage(
-            bg2,
-            0,
-            BAR_HEIGHT_VERTICAL + GAMEVIEW_WIDTH_VERTICAL,
-            GAMEVIEW_WIDTH_VERTICAL,
-            BAR_HEIGHT_VERTICAL
-          );
-          bgctx.globalAlpha = globalAlpha;
-          bgctx.globalAlpha = 1;
-          core.setTextAlign("outerUI", "center");
-        } else {
-          bgctx.canvas.width = GAMEVIEW_WIDTH;
-          bgctx.canvas.height = GAMEVIEW_HEIGHT;
-          uictx.canvas.width = GAMEVIEW_WIDTH;
-          uictx.canvas.height = GAMEVIEW_HEIGHT;
+		const gameDrawBox = isVertical ? {
+			left: BORDER_WIDTH / 3,
+			top: BAR_HEIGHT_VERTICAL / 3 + BORDER_HEIGHT / 3,
+		} : { left: BAR_WIDTH / 3 + BORDER_WIDTH / 3, top: BORDER_HEIGHT / 3 };
 
-          const bg = core.material.images.images["status.webp"]; //横屏背景(左)
-          bgctx.drawImage(bg, 0, 0, BAR_WIDTH, GAMEVIEW_HEIGHT);
-          const bg2 = core.material.images.images["status.webp"]; //横屏背景(右)
-          bgctx.drawImage(
-            bg2,
-            BAR_WIDTH + GAMEVIEW_HEIGHT,
-            0,
-            BAR_WIDTH,
-            GAMEVIEW_HEIGHT
-          );
-          bgctx.globalAlpha = globalAlpha;
+		const obj = {
+			clientWidth: clientWidth,
+			clientHeight: clientHeight,
+			canvasWidth: canvasWidth,
+			totalWidth: totalWidthScaled,
+			totalHeight: totalHeightScaled,
+			gameDrawBox: gameDrawBox,
+			globalAttribute: core.status.globalAttribute || core.initStatus.globalAttribute,
+		};
 
-          bgctx.globalAlpha = 1;
-          core.setTextAlign("outerUI", "center");
-        }
-      }
-      // 更新属性
-      _update_props(updatedFloorTitle) {
-        if (!updatedFloorTitle && core.status.floorId) {
-          updatedFloorTitle = core.status.maps[core.status.floorId].title;
-        }
-        const statusList = ["hp", "atk", "def", "money"]; //属性列表,图标在函数复写core.statusBar.icons中声明,数字为project\materials\icons.png中的图标序号(可使用便捷ps追加,第一个序号为0)
-        const drawStatusList = (baseX, baseY) => {
-          let curh = baseY;
-          core.setTextAlign("outerUI", "right");
-          statusList.forEach((item) => {
-            // 绘制图标
-            core.drawIcon(
-              "outerUI",
-              item,
-              baseX - 95 * 3,
-              curh - 18 * 3,
-              22 * 3,
-              22 * 3
-            );
+		_resize_gameGroup(obj);
+		_resize_canvas(obj);
 
-            // 四舍五入
-            core.status.hero[item] = Math.round(core.status.hero[item]);
-            // 大数据格式化
-            core.fillBoldText1(
-              "outerUI",
-              core.getRealStatus(item),
-              baseX,
-              curh,
-              TEXT_COLOR,
-              "#000000",
-              6
-            );
-            curh += 24 * 3;
-            if (curh > 130 * 3 && core.domStyle.isVertical) {
-              curh = 24 * 3;
-              baseX += 105 * 3;
-            }
-          });
-          core.setTextAlign("outerUI", "center");
-        };
-        if (core.domStyle.isVertical) {
-          core.clearMap("outerUI", 10 * 3, 0, 210 * 3, 120 * 3);
-          core.setFont("outerUI", "bold 42px Verdana");
-          if (updatedFloorTitle) {
-            core.fillBoldText1(
-              "outerUI",
-              updatedFloorTitle,
-              60 * 3,
-              22 * 3,
-              TEXT_COLOR,
-              "#000000",
-              6
-            );
-          }
-          //drawStatusList(96 * 3, 46 * 3);
-          //core.drawImage("outerUI", "lane1.png", 0, 0)
-          core.drawImage("outerUI", "cao.webp", 0, 0);
-        } else {
-          core.clearMap("outerUI", 10 * 3, 40 * 3, 105 * 3, 250 * 3);
-          core.setFont("outerUI", "bold 48px Verdana");
-          if (updatedFloorTitle) {
-            core.fillBoldText1(
-              "outerUI",
-              updatedFloorTitle,
-              62 * 3,
-              41 * 3,
-              TEXT_COLOR,
-              "#000000",
-              6
-            );
-          }
-          //drawStatusList(110 * 3, 93 * 3);
-          //core.drawImage("outerUI", "lane1.png", 0, 30)
-          core.drawImage(
-            "outerUI",
-            "cao.webp",
-            0,
-            0,
-            400,
-            350,
-            0,
-            30,
-            360,
-            315
-          );
-        }
-      }
-      _update_items() {
-        //更新道具栏
-        const drawItemMx = (drawFn) => {
-          for (let i = 0; i < this.itemMx.length; i++) {
-            for (let j = 0; j < this.itemMx[i].length; j++) {
-              var item = this.itemMx[i][j];
-              drawFn(i, j, item);
-            }
-          }
-        };
-        const drawItem = (item, posx, posy) => {
-          const icon = core.material.icons.items[item],
-            image = core.material.images.items;
-          core.drawImage(
-            "outerUI",
-            image,
-            0,
-            32 * icon,
-            32,
-            32,
-            posx,
-            posy,
-            30 * 3,
-            30 * 3
-          );
-          const cnt = core.itemCount(item);
-          if (
-            (core.items.items[item].cls === "tools" && cnt > 1) ||
-            FORCE_COUNTABLE_ITEMS.includes(item)
-          ) {
-            core.fillText(
-              "outerUI",
-              cnt,
-              posx + 25 * 3,
-              posy + 28 * 3,
-              "#FFFFFF",
-              "bold 36px Verdana"
-            );
-          }
-        };
-        if (core.domStyle.isVertical) {
-          core.clearMap(
-            "outerUI",
-            ITEM_BOX_LEFT_VERTICAL,
-            ITEM_BOX_TOP_VERTICAL,
-            185 * 3,
-            125 * 3
-          );
+		if (core.status.automaticRoute == null) core.status.automaticRoute = {};
+		core.updateStatusBar();
+		if (main.dom.CGUI && main.dom.CGUI.style.display === "block")
+			core.ui.CG.update();
+		if (main.dom.music && main.dom.music.style.display === "block")
+			core.ui.music.update();
+		if (main.dom.cgText && main.dom.cgText.style.display === "block")
+			core.ui.cgText.update();
+		if (main.dom.logcanvas && main.dom.logcanvas.style.display === "block")
+			core.ui.cgText.update();
+		if (main.dom.boss1 && main.dom.boss1.style.display === "block")
+			core.ui.boss.update();
+		if (main.dom.over && main.dom.over.style.display === "block")
+			core.overupdate()
+		if (main.dom.saveLoad && main.dom.saveLoad.style.display === "block")
+			core.saveLoad.update();
+	};
 
-          drawItemMx((i, j, item) => {
-            if (core.hasItem(item)) {
-              const posx = ITEM_BOX_LEFT_VERTICAL + i * 30 * 3,
-                posy = ITEM_BOX_TOP_VERTICAL + j * 31 * 3;
-              drawItem(item, posx, posy);
-            }
-          });
-        } else {
-          core.clearMap(
-            "outerUI",
-            ITEM_BOX_LEFT,
-            ITEM_BOX_TOP,
-            125 * 3,
-            185 * 3
-          );
+	class StatusBar {
+		constructor() {
+			//道具栏列表
+			this.itemMx = [
+				//空位用‘none’填充,当前ui至多4列6行
+				["book", "postman", "I369", "fly"],
+				["cross", "superPotion", "pickaxe"],
+				["bomb", "centerFly", "upFly"],
+				["none", "none", "none"],
+				["downFly", "knife", "snow"],
+				["bigKey", "earthquake", "coin"],
+			];
+		}
+		//初始化内容(工具栏/录像操作执行函数)
+		init() {
+			this.toolbarAction = [
+				[
+					main.core.openKeyBoard,
+					main.core.openQuickShop,
+					core.openToolbox,
+					core.doSL,
+				],
+				[main.core.save, main.core.load, main.core.openSettings, core.doSL],
+			];
+			this.replayAction = [
+				[core.triggerReplay, core.stopReplay, core.rewindReplay],
+				[
+					core.speedDownReplay,
+					core.speedUpReplay,
+					function () {
+						core.control._replay_SL();
+					},
+				],
+			];
+		}
+		//更新
+		update() {
+			this._update_background(); //更新背景
+			this._update_props(); //更新属性
+			this._update_items(); //更新道具
+			//this._update_equips(); //更新装备
+			this._update_keys(); //更新钥匙
+			//this._update_infoWindow(); //更新道具说明
+			this._update_toolBox(); //更新工具栏
+			this._redrawMap();
+		}
+		_redrawMap() {
+			if (core.domStyle.isVertical) {
+				core.clearMap(
+					uictx,
+					MAP_BLOCK_LEFT_VERTICAL,
+					MAP_BLOCK_TOP_VERTICAL,
+					340,
+					360
+				);
+				this._update_map();
+				uictx.globalAlpha = globalAlphafloor / 100;
+				core.drawImage(
+					uictx,
+					"green.webp",
+					MAP_BLOCK_LEFT_VERTICAL + 125,
+					MAP_BLOCK_TOP_VERTICAL + 170
+				);
+				uictx.globalAlpha = 1;
+			} else {
+				core.clearMap(uictx, MAP_BLOCK_LEFT, MAP_BLOCK_TOP, 340, 360);
+				this._update_map();
+				uictx.globalAlpha = globalAlphafloor / 100;
+				core.drawImage(
+					uictx,
+					"green.webp",
+					MAP_BLOCK_LEFT + 150,
+					MAP_BLOCK_TOP + 170
+				);
+				uictx.globalAlpha = 1;
+			}
+		}
+		//更新背景
+		_update_background() {
+			if (core.domStyle.isVertical) {
+				bgctx.canvas.width = GAMEVIEW_WIDTH_VERTICAL;
+				bgctx.canvas.height = GAMEVIEW_HEIGHT_VERTICAL;
+				uictx.canvas.width = GAMEVIEW_WIDTH_VERTICAL;
+				uictx.canvas.height = GAMEVIEW_HEIGHT_VERTICAL;
 
-          drawItemMx((i, j, item) => {
-            if (core.hasItem(item)) {
-              const posx = ITEM_BOX_LEFT + j * 30 * 3,
-                posy = ITEM_BOX_TOP + i * 31 * 3;
-              drawItem(item, posx, posy);
-            }
-          });
-        }
-      }
+				const bg = core.material.images.images["status.webp"]; //竖屏背景(上)
+				bgctx.drawImage(
+					bg,
+					0,
+					0,
+					GAMEVIEW_WIDTH_VERTICAL,
+					BAR_HEIGHT_VERTICAL
+				);
+				const bg2 = core.material.images.images["status.webp"]; //竖屏背景(下)
+				bgctx.drawImage(
+					bg2,
+					0,
+					BAR_HEIGHT_VERTICAL + GAMEVIEW_WIDTH_VERTICAL,
+					GAMEVIEW_WIDTH_VERTICAL,
+					BAR_HEIGHT_VERTICAL
+				);
+				bgctx.globalAlpha = globalAlpha;
+				bgctx.globalAlpha = 1;
+				core.setTextAlign("outerUI", "center");
+			} else {
+				bgctx.canvas.width = GAMEVIEW_WIDTH;
+				bgctx.canvas.height = GAMEVIEW_HEIGHT;
+				uictx.canvas.width = GAMEVIEW_WIDTH;
+				uictx.canvas.height = GAMEVIEW_HEIGHT;
 
-      _update_map(floorId = core.status.floorId) {
-        const x = core.domStyle.isVertical
-          ? MAP_BLOCK_LEFT_VERTICAL
-          : MAP_BLOCK_LEFT;
-        const y = core.domStyle.isVertical
-          ? MAP_BLOCK_TOP_VERTICAL
-          : MAP_BLOCK_TOP;
+				const bg = core.material.images.images["status.webp"]; //横屏背景(左)
+				bgctx.drawImage(bg, 0, 0, BAR_WIDTH, GAMEVIEW_HEIGHT);
+				const bg2 = core.material.images.images["status.webp"]; //横屏背景(右)
+				bgctx.drawImage(
+					bg2,
+					BAR_WIDTH + GAMEVIEW_HEIGHT,
+					0,
+					BAR_WIDTH,
+					GAMEVIEW_HEIGHT
+				);
+				bgctx.globalAlpha = globalAlpha;
 
-        if (!floorId) return;
-        const info = core.plugin.getMapDrawInfo(floorId, Infinity, true);
-        core.setTextAlign("outerUI", "center");
+				bgctx.globalAlpha = 1;
+				core.setTextAlign("outerUI", "center");
+			}
+		}
+		// 更新属性
+		_update_props(updatedFloorTitle) {
+			if (!updatedFloorTitle && core.status.floorId) {
+				updatedFloorTitle = core.status.maps[core.status.floorId].title;
+			}
+			const statusList = [
+				"hp",
+				"atk",
+				"def",
+				"spell",
+				"mdef",
+				"matk",
+				"mhp",
+				"speed",
+				"money",
+				"exp"
+			]; //属性列表,图标在函数复写core.statusBar.icons中声明,数字为project\materials\icons.png中的图标序号(可使用便捷ps追加,第一个序号为0)
+			const drawStatusList = (baseX, baseY) => {
+				let curh = baseY;
+				core.setTextAlign("outerUI", "right");
+				statusList.forEach((item) => {
+					// 绘制图标
+					/*core.drawIcon(
+					  "outerUI",
+					  item,
+					  baseX - 95 * 3,
+					  curh - 18 * 3,
+					  22 * 3,
+					  22 * 3
+					);*/
+					core.strokeRect("outerUI", baseX - 96 * 3,
+						curh - 16 * 3, 100 * 3, 22 * 3, "#FFFFFF", 3)
+					core.setFont("outerUI", "bold 24px Verdana");
+					core.fillBoldText1(
+						"outerUI",
+						core.getStatusLabel(item),
+						baseX - 65 * 3,
+						curh - 4 * 3,
+						TEXT_COLOR,
+						"#000000",
+						3
+					);
+					core.setFont("outerUI", "bold 36px Verdana");
+					// 四舍五入
+					core.status.hero[item] = Math.round(core.status.hero[item]);
+					let text = core.getRealStatus(item);
+					// 大数据格式化
+					switch (item) {
+					case "mdef":
+						text += "%";
+						break;
+					case "matk":
+					case "mhp":
+						text = `${Math.floor(core.getRealStatus("spell")* core.getRealStatus(item)/100)}(${text}%)`;
+						break;
+					}
+					core.fillBoldText1(
+						"outerUI",
+						text,
+						baseX,
+						curh,
+						TEXT_COLOR,
+						"#000000",
+						3
+					)
 
-        core.plugin.drawSmallMap(uictx, info, floorId, x, y, 300, 300);
-      }
+					curh += 24 * 3;
+					if (curh > 130 * 3 && core.domStyle.isVertical) {
+						curh = 24 * 3;
+						baseX += 105 * 3;
+					}
+				});
+				core.setTextAlign("outerUI", "center");
+			};
+			if (core.domStyle.isVertical) {
+				core.clearMap("outerUI", 10 * 3, 0, 210 * 3, 120 * 3);
+				core.setFont("outerUI", "bold 42px Verdana");
+				if (updatedFloorTitle) {
+					core.fillBoldText1(
+						"outerUI",
+						updatedFloorTitle,
+						60 * 3,
+						22 * 3,
+						TEXT_COLOR,
+						"#000000",
+						3
+					);
+				}
+				drawStatusList(96 * 3, 46 * 3);
+				//core.drawImage("outerUI", "lane1.png", 0, 0)
+				//core.drawImage("outerUI", "cao.webp", 0, 0);
+			} else {
+				core.clearMap("outerUI", 10 * 3, 40 * 3, 105 * 3, 250 * 3);
+				core.setFont("outerUI", "bold 48px Verdana");
+				if (updatedFloorTitle) {
+					core.fillBoldText1(
+						"outerUI",
+						updatedFloorTitle,
+						62 * 3,
+						41 * 3,
+						TEXT_COLOR,
+						"#000000",
+						3
+					);
+				}
+				drawStatusList(110 * 3, 93 * 3);
+				//core.drawImage("outerUI", "lane1.png", 0, 30);
+				core.drawImage(
+					"outerUI",
+					"cao.webp",
+					0,
+					0,
+					400,
+					350,
+					0,
+					30,
+					360,
+					315
+				);
+			}
+		}
+		_update_items() {
+			//更新道具栏
+			const drawItemMx = (drawFn) => {
+				for (let i = 0; i < this.itemMx.length; i++) {
+					for (let j = 0; j < this.itemMx[i].length; j++) {
+						var item = this.itemMx[i][j];
+						drawFn(i, j, item);
+					}
+				}
+			};
+			const drawItem = (item, posx, posy) => {
+				const icon = core.material.icons.items[item],
+					image = core.material.images.items;
+				core.drawImage(
+					"outerUI",
+					image,
+					0,
+					32 * icon,
+					32,
+					32,
+					posx,
+					posy,
+					30 * 3,
+					30 * 3
+				);
+				const cnt = core.itemCount(item);
+				if (
+					(core.items.items[item].cls === "tools" && cnt > 1) ||
+					FORCE_COUNTABLE_ITEMS.includes(item)
+				) {
+					core.fillText(
+						"outerUI",
+						cnt,
+						posx + 25 * 3,
+						posy + 28 * 3,
+						"#FFFFFF",
+						"bold 36px Verdana"
+					);
+				}
+			};
+			if (core.domStyle.isVertical) {
+				core.clearMap(
+					"outerUI",
+					ITEM_BOX_LEFT_VERTICAL,
+					ITEM_BOX_TOP_VERTICAL,
+					185 * 3,
+					125 * 3
+				);
 
-      _update_equips() {
-        return;
-        core.setFont("outerUI", "bold 48px Verdana");
-        const drawEquip = (baseX, baseY, id, color, back) => {
-          if (!id)
-            core.fillText(
-              "outerUI",
-              back,
-              baseX + 20 * 3,
-              baseY + 22 * 3,
-              color
-            );
-          else {
-            var icon = core.material.icons.items[id];
-            core.drawImage(
-              "outerUI",
-              core.material.images.items,
-              0,
-              32 * icon,
-              32,
-              32,
-              baseX + 5 * 3,
-              baseY,
-              32 * 3,
-              32 * 3
-            );
-          }
-        };
-        if (core.domStyle.isVertical) {
-          core.clearMap(
-            "outerUI",
-            EQUIP_BLOCK_LEFT_VERTICAL,
-            EQUIP_BLOCK_TOP_VERTICAL,
-            90 * 3,
-            130 * 3
-          );
-          drawEquip(
-            EQUIP_BLOCK_LEFT_VERTICAL,
-            EQUIP_BLOCK_TOP_VERTICAL,
-            core.getEquip(0),
-            "#D1CEFF",
-            "无"
-          );
-          drawEquip(
-            EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3,
-            EQUIP_BLOCK_TOP_VERTICAL,
-            core.getEquip(1),
-            "#D1CEFF",
-            "无"
-          );
-          drawEquip(
-            EQUIP_BLOCK_LEFT_VERTICAL,
-            EQUIP_BLOCK_TOP_VERTICAL + 45 * 3,
-            core.getEquip(2),
-            "#D1CEFF",
-            "无"
-          );
-          drawEquip(
-            EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3,
-            EQUIP_BLOCK_TOP_VERTICAL + 45 * 3,
-            core.getEquip(3),
-            "#D1CEFF",
-            "无"
-          );
-          drawEquip(
-            EQUIP_BLOCK_LEFT_VERTICAL,
-            EQUIP_BLOCK_TOP_VERTICAL + 90 * 3,
-            core.getEquip(4),
-            "#D1CEFF",
-            "无"
-          );
-          drawEquip(
-            EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3,
-            EQUIP_BLOCK_TOP_VERTICAL + 90 * 3,
-            core.getEquip(5),
-            "#D1CEFF",
-            "无"
-          );
-        } else {
-          core.clearMap(
-            "outerUI",
-            EQUIP_BLOCK_LEFT,
-            EQUIP_BLOCK_TOP,
-            130 * 3,
-            95 * 3
-          );
-          drawEquip(
-            EQUIP_BLOCK_LEFT,
-            EQUIP_BLOCK_TOP,
-            core.getEquip(0),
-            "#D1CEFF",
-            "无"
-          );
-          drawEquip(
-            EQUIP_BLOCK_LEFT + 42 * 3,
-            EQUIP_BLOCK_TOP,
-            core.getEquip(1),
-            "#D1CEFF",
-            "无"
-          );
-          drawEquip(
-            EQUIP_BLOCK_LEFT + 85 * 3,
-            EQUIP_BLOCK_TOP,
-            core.getEquip(2),
-            "#D1CEFF",
-            "无"
-          );
-          drawEquip(
-            EQUIP_BLOCK_LEFT,
-            EQUIP_BLOCK_TOP + 45 * 3,
-            core.getEquip(3),
-            "#D1CEFF",
-            "无"
-          );
-          drawEquip(
-            EQUIP_BLOCK_LEFT + 42 * 3,
-            EQUIP_BLOCK_TOP + 45 * 3,
-            core.getEquip(4),
-            "#D1CEFF",
-            "无"
-          );
-          drawEquip(
-            EQUIP_BLOCK_LEFT + 85 * 3,
-            EQUIP_BLOCK_TOP + 45 * 3,
-            core.getEquip(5),
-            "#D1CEFF",
-            "无"
-          );
-        }
-      }
-      _update_keys() {
-        const drawKeyList = (baseX, baseY) => {
-          const todraw = [],
-            keyList = ["yellowKey", "blueKey", "redKey", "greenKey"];
-          let total = 0;
-          keyList.forEach(function (key, i) {
-            todraw[i] = core.itemCount(key);
-            total += todraw[i];
-          });
+				drawItemMx((i, j, item) => {
+					if (core.hasItem(item)) {
+						const posx = ITEM_BOX_LEFT_VERTICAL + i * 30 * 3,
+							posy = ITEM_BOX_TOP_VERTICAL + j * 31 * 3;
+						drawItem(item, posx, posy);
+					}
+				});
+			} else {
+				core.clearMap(
+					"outerUI",
+					ITEM_BOX_LEFT,
+					ITEM_BOX_TOP,
+					125 * 3,
+					185 * 3
+				);
 
-          let dn = 3;
-          for (let i = 0; i <= dn; i++) {
-            let delta = i * 32 * 3;
+				drawItemMx((i, j, item) => {
+					if (core.hasItem(item)) {
+						const posx = ITEM_BOX_LEFT + j * 30 * 3,
+							posy = ITEM_BOX_TOP + i * 31 * 3;
+						drawItem(item, posx, posy);
+					}
+				});
+			}
+		}
 
-            if (core.domStyle.isVertical) {
-              this.drawKey(keyList[i], baseX, baseY + delta);
-            } else {
-              this.drawKey(keyList[i], baseX + delta, baseY);
-            }
+		_update_map(floorId = core.status.floorId) {
+			const x = core.domStyle.isVertical ?
+				MAP_BLOCK_LEFT_VERTICAL :
+				MAP_BLOCK_LEFT;
+			const y = core.domStyle.isVertical ?
+				MAP_BLOCK_TOP_VERTICAL :
+				MAP_BLOCK_TOP;
 
-            core.setFont("outerUI", "bold 48px Verdana");
-            core.setTextAlign("outerUI", "left");
-            if (core.domStyle.isVertical) {
-              core.fillText(
-                "outerUI",
-                todraw[i],
-                baseX + 20 * 3,
-                baseY + 14 * 3 + delta,
-                TEXT_COLOR
-              );
-            } else {
-              core.fillText(
-                "outerUI",
-                todraw[i],
-                baseX + delta,
-                baseY + 32 * 3,
-                TEXT_COLOR
-              );
-            }
-          }
-        };
-        if (core.domStyle.isVertical) {
-          core.clearMap(
-            "outerUI",
-            KEY_BLOCK_LEFT_VERTICAL,
-            KEY_BLOCK_TOP_VERTICAL,
-            45 * 3,
-            130 * 3
-          );
-          drawKeyList(
-            KEY_BLOCK_LEFT_VERTICAL + 3 * 3,
-            KEY_BLOCK_TOP_VERTICAL + 5 * 3
-          );
-        } else {
-          core.clearMap(
-            "outerUI",
-            KEY_BLOCK_LEFT,
-            KEY_BLOCK_TOP,
-            130 * 3,
-            45 * 3
-          );
-          drawKeyList(KEY_BLOCK_LEFT + 10 * 3, KEY_BLOCK_TOP);
-        }
-      }
-      drawKey(key, x, y) {
-        let sx = 0,
-          sy = 0;
+			if (!floorId) return;
+			const info = core.plugin.getMapDrawInfo(floorId, Infinity, true);
+			core.setTextAlign("outerUI", "center");
 
-        if (key == "yellowKey") sx += 13;
-        else if (key == "blueKey") sx += 26;
-        else if (key == "greenKey") sx += 39;
+			core.plugin.drawSmallMap(uictx, info, floorId, x, y, 300, 300);
+		}
 
-        core.drawImage(
-          "outerUI",
-          "maba.webp",
-          sx,
-          sy,
-          13,
-          26,
-          x,
-          y,
-          13 * 3,
-          26 * 3
-        );
-      }
-      _update_infoWindow() {
-        const itemId = this.selectedItem;
-        let text = "";
-        if (this.selectedItem) {
-          text = core.replaceText(core.material.items[itemId]?.text);
-          if (text[0] == "," || text[0] == ",") text = text.substring(1);
-        }
-        if (core.domStyle.isVertical) {
-          core.clearMap(
-            "outerUI",
-            INFO_BLOCK_LEFT_VERTICAL,
-            INFO_BLOCK_TOP_VERTICAL,
-            300 * 3,
-            120 * 3
-          );
+		_update_equips() {
+			return;
+			core.setFont("outerUI", "bold 48px Verdana");
+			const drawEquip = (baseX, baseY, id, color, back) => {
+				if (!id)
+					core.fillText(
+						"outerUI",
+						back,
+						baseX + 20 * 3,
+						baseY + 22 * 3,
+						color
+					);
+				else {
+					var icon = core.material.icons.items[id];
+					core.drawImage(
+						"outerUI",
+						core.material.images.items,
+						0,
+						32 * icon,
+						32,
+						32,
+						baseX + 5 * 3,
+						baseY,
+						32 * 3,
+						32 * 3
+					);
+				}
+			};
+			if (core.domStyle.isVertical) {
+				core.clearMap(
+					"outerUI",
+					EQUIP_BLOCK_LEFT_VERTICAL,
+					EQUIP_BLOCK_TOP_VERTICAL,
+					90 * 3,
+					130 * 3
+				);
+				drawEquip(
+					EQUIP_BLOCK_LEFT_VERTICAL,
+					EQUIP_BLOCK_TOP_VERTICAL,
+					core.getEquip(0),
+					"#D1CEFF",
+					"无"
+				);
+				drawEquip(
+					EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3,
+					EQUIP_BLOCK_TOP_VERTICAL,
+					core.getEquip(1),
+					"#D1CEFF",
+					"无"
+				);
+				drawEquip(
+					EQUIP_BLOCK_LEFT_VERTICAL,
+					EQUIP_BLOCK_TOP_VERTICAL + 45 * 3,
+					core.getEquip(2),
+					"#D1CEFF",
+					"无"
+				);
+				drawEquip(
+					EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3,
+					EQUIP_BLOCK_TOP_VERTICAL + 45 * 3,
+					core.getEquip(3),
+					"#D1CEFF",
+					"无"
+				);
+				drawEquip(
+					EQUIP_BLOCK_LEFT_VERTICAL,
+					EQUIP_BLOCK_TOP_VERTICAL + 90 * 3,
+					core.getEquip(4),
+					"#D1CEFF",
+					"无"
+				);
+				drawEquip(
+					EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3,
+					EQUIP_BLOCK_TOP_VERTICAL + 90 * 3,
+					core.getEquip(5),
+					"#D1CEFF",
+					"无"
+				);
+			} else {
+				core.clearMap(
+					"outerUI",
+					EQUIP_BLOCK_LEFT,
+					EQUIP_BLOCK_TOP,
+					130 * 3,
+					95 * 3
+				);
+				drawEquip(
+					EQUIP_BLOCK_LEFT,
+					EQUIP_BLOCK_TOP,
+					core.getEquip(0),
+					"#D1CEFF",
+					"无"
+				);
+				drawEquip(
+					EQUIP_BLOCK_LEFT + 42 * 3,
+					EQUIP_BLOCK_TOP,
+					core.getEquip(1),
+					"#D1CEFF",
+					"无"
+				);
+				drawEquip(
+					EQUIP_BLOCK_LEFT + 85 * 3,
+					EQUIP_BLOCK_TOP,
+					core.getEquip(2),
+					"#D1CEFF",
+					"无"
+				);
+				drawEquip(
+					EQUIP_BLOCK_LEFT,
+					EQUIP_BLOCK_TOP + 45 * 3,
+					core.getEquip(3),
+					"#D1CEFF",
+					"无"
+				);
+				drawEquip(
+					EQUIP_BLOCK_LEFT + 42 * 3,
+					EQUIP_BLOCK_TOP + 45 * 3,
+					core.getEquip(4),
+					"#D1CEFF",
+					"无"
+				);
+				drawEquip(
+					EQUIP_BLOCK_LEFT + 85 * 3,
+					EQUIP_BLOCK_TOP + 45 * 3,
+					core.getEquip(5),
+					"#D1CEFF",
+					"无"
+				);
+			}
+		}
+		_update_keys() {
+			const drawKeyList = (baseX, baseY) => {
+				const todraw = [],
+					keyList = ["yellowKey", "blueKey", "redKey", "greenKey"];
+				let total = 0;
+				keyList.forEach(function (key, i) {
+					todraw[i] = core.itemCount(key);
+					total += todraw[i];
+				});
 
-          if (this.selectedItem) {
-            const icon = core.material.icons.items[itemId];
-            core.setTextAlign("outerUI", "left");
-            core.fillText(
-              "outerUI",
-              core.material.items[itemId].name,
-              INFO_BLOCK_LEFT_VERTICAL + 50 * 3,
-              INFO_BLOCK_TOP_VERTICAL + 27 * 3,
-              "#D1CEFF"
-            );
-            core.drawImage(
-              "outerUI",
-              core.material.images.items,
-              0,
-              32 * icon,
-              32,
-              32,
-              INFO_BLOCK_LEFT_VERTICAL + 10 * 3,
-              INFO_BLOCK_TOP_VERTICAL + 8 * 3,
-              32 * 3,
-              32 * 3
-            );
-            core.ui.drawTextContent("outerUI", text, {
-              left: INFO_BLOCK_LEFT_VERTICAL + 10 * 3,
-              top: INFO_BLOCK_TOP_VERTICAL + 40 * 3,
-              maxWidth: 275 * 3,
-              color: "#D1CEFF",
-              fontSize: 36,
-            });
-          }
-        } else {
-          core.clearMap(
-            "outerUI",
-            INFO_BLOCK_LEFT,
-            INFO_BLOCK_TOP,
-            115 * 3,
-            230 * 3
-          );
+				let dn = 3;
+				for (let i = 0; i <= dn; i++) {
+					let delta = i * 32 * 3;
 
-          if (this.selectedItem) {
-            const icon = core.material.icons.items[itemId];
-            core.setTextAlign("outerUI", "center");
-            core.fillText(
-              "outerUI",
-              core.material.items[itemId].name,
-              INFO_BLOCK_LEFT + 60 * 3,
-              INFO_BLOCK_TOP + 25 * 3,
-              "#D1CEFF"
-            );
-            core.drawImage(
-              "outerUI",
-              core.material.images.items,
-              0,
-              32 * icon,
-              32,
-              32,
-              INFO_BLOCK_LEFT + 45 * 3,
-              INFO_BLOCK_TOP + 30 * 3,
-              32 * 3,
-              32 * 3
-            );
-            core.ui.drawTextContent("outerUI", text, {
-              left: INFO_BLOCK_LEFT + 10 * 3,
-              top: INFO_BLOCK_TOP + 60 * 3,
-              maxWidth: 105 * 3,
-              color: "#D1CEFF",
-              fontSize: 36,
-            });
-          }
-        }
-      }
-      showItemInfo(itemId) {
-        //展示道具说明
-        this.selectedItem = itemId;
-        this._update_infoWindow();
-      }
-      clearItemInfo() {
-        //清除道具说明
-        this.selectedItem = null;
-        this._update_infoWindow();
-      }
-      _update_toolBox() {
-        const tools = core.isReplaying()
-          ? [
-              [core.status.replay.pausing ? "play" : "pause", "stop", "rewind"],
-              ["speedDown", "speedUp", "save"],
-            ]
-          : [
-              ["keyboard", "shop", "pack", "T332"],
-              ["settings", "save", "load", "T331"],
-            ];
-        if (core.domStyle.isVertical) {
-          core.clearMap(
-            "outerUI",
-            TOOL_BOX_LEFT_VERTICAL,
-            TOOL_BOX_TOP_VERTICAL,
-            115,
-            130
-          );
+					if (core.domStyle.isVertical) {
+						this.drawKey(keyList[i], baseX, baseY + delta);
+					} else {
+						this.drawKey(keyList[i], baseX + delta, baseY);
+					}
 
-          for (let i = 0; i < tools.length; i++) {
-            for (let j = 0; j < tools[i].length; j++) {
-              core.drawIcon(
-                "outerUI",
-                tools[i][j],
-                TOOL_BOX_LEFT_VERTICAL + i * 31 * 3,
-                TOOL_BOX_TOP_VERTICAL + j * 31 * 3,
-                30 * 3,
-                30 * 3
-              );
-            }
-          }
-        } else {
-          core.clearMap(
-            "outerUI",
-            TOOL_BOX_LEFT,
-            TOOL_BOX_TOP,
-            130 * 3,
-            80 * 3
-          );
+					core.setFont("outerUI", "bold 48px Verdana");
+					core.setTextAlign("outerUI", "left");
+					if (core.domStyle.isVertical) {
+						core.fillText(
+							"outerUI",
+							todraw[i],
+							baseX + 20 * 3,
+							baseY + 14 * 3 + delta,
+							TEXT_COLOR
+						);
+					} else {
+						core.fillText(
+							"outerUI",
+							todraw[i],
+							baseX + delta,
+							baseY + 32 * 3,
+							TEXT_COLOR
+						);
+					}
+				}
+			};
+			if (core.domStyle.isVertical) {
+				core.clearMap(
+					"outerUI",
+					KEY_BLOCK_LEFT_VERTICAL,
+					KEY_BLOCK_TOP_VERTICAL,
+					45 * 3,
+					130 * 3
+				);
+				drawKeyList(
+					KEY_BLOCK_LEFT_VERTICAL + 3 * 3,
+					KEY_BLOCK_TOP_VERTICAL + 5 * 3
+				);
+			} else {
+				core.clearMap(
+					"outerUI",
+					KEY_BLOCK_LEFT,
+					KEY_BLOCK_TOP,
+					130 * 3,
+					45 * 3
+				);
+				drawKeyList(KEY_BLOCK_LEFT + 10 * 3, KEY_BLOCK_TOP);
+			}
+		}
+		drawKey(key, x, y) {
+			let sx = 0,
+				sy = 0;
 
-          for (let i = 0; i < tools.length; i++) {
-            for (let j = 0; j < tools[i].length; j++) {
-              core.drawIcon(
-                "outerUI",
-                tools[i][j],
-                TOOL_BOX_LEFT + j * 31 * 3,
-                TOOL_BOX_TOP + i * 31 * 3,
-                30 * 3,
-                30 * 3
-              );
-            }
-          }
-        }
-      }
-      onclick(x, y) {
-        const makeBox = ([x, y], [w, h]) => {
-          return [
-            [x, y],
-            [x + w, y + h],
-          ];
-        };
-        const gridify = ([x, y], [gw, gh]) => {
-          return [Math.floor(x / gw), Math.floor(y / gh)];
-        };
-        const useItem = (itemId) => {
-          if (!core.hasItem(itemId)) return;
+			if (key == "yellowKey") sx += 13;
+			else if (key == "blueKey") sx += 26;
+			else if (key == "greenKey") sx += 39;
 
-          if (itemId != this.selectedItem) {
-            this.showItemInfo(itemId);
-          } else {
-            switch (itemId) {
-              case "centerFly":
-                core.ui._drawCenterFly();
-                break;
-              case "book":
-                core.openBook(true);
-                break;
-              case "wand":
-                core.insertAction({
-                  type: "useItem",
-                  id: itemId,
-                });
-                break;
-              case "fly":
-                core.useItem(itemId, true);
-                break;
-              default:
-                core.useItem(itemId);
-            }
-          }
-        };
-        const inRect = ([x, y], [[sx, sy], [dx, dy]]) => {
-          return sx <= x && x <= dx && sy <= y && y <= dy;
-        };
-        const relativeTo = ([x, y], [ax, ay]) => {
-          return [x - ax, y - ay];
-        };
-        const pos = [x, y];
-        if (core.domStyle.isVertical) {
-          const itemBox = makeBox(
-            [ITEM_BOX_LEFT_VERTICAL, ITEM_BOX_TOP_VERTICAL],
-            [30 * 6 * 3, 31 * 4 * 3]
-          );
-          if (inRect(pos, itemBox)) {
-            const [gx, gy] = gridify(relativeTo(pos, itemBox[0]), [
-              30 * 3,
-              31 * 3,
-            ]);
-            const itemId = this.itemMx[gx][gy];
-            if (
-              (core.status.event.id == "viewMaps" ||
-                core.status.event.id == "fly") &&
-              itemId === "book"
-            )
-              core.openBook(true);
-            if (
-              core.isReplaying() ||
-              core.status.lockControl ||
-              core.isMoving()
-            )
-              return;
-            useItem(itemId);
-            return;
-          }
-          const toolBox = makeBox(
-            [TOOL_BOX_LEFT_VERTICAL, TOOL_BOX_TOP_VERTICAL],
-            [31 * 2 * 3, 31 * 4 * 3]
-          );
-          if (inRect(pos, toolBox)) {
-            const [col, row] = gridify(relativeTo(pos, toolBox[0]), [
-              31 * 3,
-              31 * 3,
-            ]);
-            if (core.isReplaying()) {
-              this.replayAction[col][row].call(core);
-            } else if (core.isPlaying()) {
-              if (col === 0 && row === 3) {
-                core.doSL("autoSave", "load");
-              } else if (col === 1 && row === 3) {
-                core.doSL("autoSave", "reload");
-              } else {
-                this.toolbarAction[col][row].call(core, true);
-              }
-            }
-            return;
-          }
-          const mapBox = makeBox(
-            [MAP_BLOCK_LEFT_VERTICAL, MAP_BLOCK_TOP_VERTICAL],
-            [350, 350]
-          );
-          if (inRect(pos, mapBox)) {
-            if (
-              core.isReplaying() ||
-              core.status.lockControl ||
-              core.isMoving()
-            )
-              return;
-            core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));
-            return;
-          }
-          /*const equipBox = makeBox([EQUIP_BLOCK_LEFT_VERTICAL, EQUIP_BLOCK_TOP_VERTICAL], [90 * 3, 130 * 3])
+			core.drawImage(
+				"outerUI",
+				"maba.webp",
+				sx,
+				sy,
+				13,
+				26,
+				x,
+				y,
+				13 * 3,
+				26 * 3
+			);
+		}
+		_update_infoWindow() {
+			const itemId = this.selectedItem;
+			let text = "";
+			if (this.selectedItem) {
+				text = core.replaceText(core.material.items[itemId]?.text);
+				if (text[0] == "," || text[0] == ",") text = text.substring(1);
+			}
+			if (core.domStyle.isVertical) {
+				core.clearMap(
+					"outerUI",
+					INFO_BLOCK_LEFT_VERTICAL,
+					INFO_BLOCK_TOP_VERTICAL,
+					300 * 3,
+					120 * 3
+				);
+
+				if (this.selectedItem) {
+					const icon = core.material.icons.items[itemId];
+					core.setTextAlign("outerUI", "left");
+					core.fillText(
+						"outerUI",
+						core.material.items[itemId].name,
+						INFO_BLOCK_LEFT_VERTICAL + 50 * 3,
+						INFO_BLOCK_TOP_VERTICAL + 27 * 3,
+						"#D1CEFF"
+					);
+					core.drawImage(
+						"outerUI",
+						core.material.images.items,
+						0,
+						32 * icon,
+						32,
+						32,
+						INFO_BLOCK_LEFT_VERTICAL + 10 * 3,
+						INFO_BLOCK_TOP_VERTICAL + 8 * 3,
+						32 * 3,
+						32 * 3
+					);
+					core.ui.drawTextContent("outerUI", text, {
+						left: INFO_BLOCK_LEFT_VERTICAL + 10 * 3,
+						top: INFO_BLOCK_TOP_VERTICAL + 40 * 3,
+						maxWidth: 275 * 3,
+						color: "#D1CEFF",
+						fontSize: 24,
+					});
+				}
+			} else {
+				core.clearMap(
+					"outerUI",
+					INFO_BLOCK_LEFT,
+					INFO_BLOCK_TOP,
+					115 * 3,
+					230 * 3
+				);
+				core.setFont("outerUI", "bold 36px Verdana")
+				if (this.selectedItem) {
+					const icon = core.material.icons.items[itemId];
+					core.setTextAlign("outerUI", "center");
+					core.fillText(
+						"outerUI",
+						core.material.items[itemId].name,
+						INFO_BLOCK_LEFT + 60 * 3,
+						INFO_BLOCK_TOP + 25 * 3,
+						"#D1CEFF"
+					);
+					core.drawImage(
+						"outerUI",
+						core.material.images.items,
+						0,
+						32 * icon,
+						32,
+						32,
+						INFO_BLOCK_LEFT + 45 * 3,
+						INFO_BLOCK_TOP + 30 * 3,
+						32 * 3,
+						32 * 3
+					);
+					core.ui.drawTextContent("outerUI", text, {
+						left: INFO_BLOCK_LEFT + 10 * 3,
+						top: INFO_BLOCK_TOP + 60 * 3,
+						maxWidth: 105 * 3,
+						color: "#D1CEFF",
+						fontSize: 24,
+					});
+				}
+			}
+		}
+		showItemInfo(itemId) {
+			//展示道具说明
+			this.selectedItem = itemId;
+			this._update_infoWindow();
+		}
+		clearItemInfo() {
+			//清除道具说明
+			this.selectedItem = null;
+			this._update_infoWindow();
+		}
+		_update_toolBox() {
+			const tools = core.isReplaying() ? [
+				[core.status.replay.pausing ? "play" : "pause", "stop", "rewind"],
+				["speedDown", "speedUp", "save"],
+			] : [
+				["keyboard", "shop", "pack", "T332"],
+				["save", "load", "settings", "T331"],
+			];
+			if (core.domStyle.isVertical) {
+				core.clearMap(
+					"outerUI",
+					TOOL_BOX_LEFT_VERTICAL,
+					TOOL_BOX_TOP_VERTICAL,
+					115,
+					130
+				);
+
+				for (let i = 0; i < tools.length; i++) {
+					for (let j = 0; j < tools[i].length; j++) {
+						core.drawIcon(
+							"outerUI",
+							tools[i][j],
+							TOOL_BOX_LEFT_VERTICAL + i * 31 * 3,
+							TOOL_BOX_TOP_VERTICAL + j * 31 * 3,
+							30 * 3,
+							30 * 3
+						);
+					}
+				}
+			} else {
+				core.clearMap(
+					"outerUI",
+					TOOL_BOX_LEFT,
+					TOOL_BOX_TOP,
+					130 * 3,
+					80 * 3
+				);
+
+				for (let i = 0; i < tools.length; i++) {
+					for (let j = 0; j < tools[i].length; j++) {
+						core.drawIcon(
+							"outerUI",
+							tools[i][j],
+							TOOL_BOX_LEFT + j * 31 * 3,
+							TOOL_BOX_TOP + i * 31 * 3,
+							30 * 3,
+							30 * 3
+						);
+					}
+				}
+			}
+		}
+		onclick(x, y) {
+			const makeBox = ([x, y], [w, h]) => {
+				return [
+					[x, y],
+					[x + w, y + h],
+				];
+			};
+			const gridify = ([x, y], [gw, gh]) => {
+				return [Math.floor(x / gw), Math.floor(y / gh)];
+			};
+			const useItem = (itemId) => {
+				if (!core.hasItem(itemId)) return;
+
+				if (itemId != this.selectedItem) {
+					this.showItemInfo(itemId);
+				} else {
+					switch (itemId) {
+					case "centerFly":
+						core.ui._drawCenterFly();
+						break;
+					case "book":
+						core.openBook(true);
+						break;
+					default:
+						core.useItem(itemId);
+					}
+				}
+			};
+			const inRect = ([x, y], [
+				[sx, sy],
+				[dx, dy]
+			]) => {
+				return sx <= x && x <= dx && sy <= y && y <= dy;
+			};
+			const relativeTo = ([x, y], [ax, ay]) => {
+				return [x - ax, y - ay];
+			};
+			const pos = [x, y];
+			if (core.domStyle.isVertical) {
+				const itemBox = makeBox(
+					[ITEM_BOX_LEFT_VERTICAL, ITEM_BOX_TOP_VERTICAL],
+					[30 * 6 * 3, 31 * 4 * 3]
+				);
+				if (inRect(pos, itemBox)) {
+					const [gx, gy] = gridify(relativeTo(pos, itemBox[0]), [
+						30 * 3,
+						31 * 3,
+					]);
+					const itemId = this.itemMx[gx][gy];
+					if (
+						(core.status.event.id == "viewMaps" ||
+							core.status.event.id == "fly") &&
+						itemId === "book"
+					)
+						core.openBook(true);
+					if (
+						core.isReplaying() ||
+						core.status.lockControl ||
+						core.isMoving()
+					)
+						return;
+					useItem(itemId);
+					return;
+				}
+				const toolBox = makeBox(
+					[TOOL_BOX_LEFT_VERTICAL, TOOL_BOX_TOP_VERTICAL],
+					[31 * 2 * 3, 31 * 4 * 3]
+				);
+				if (inRect(pos, toolBox)) {
+					const [col, row] = gridify(relativeTo(pos, toolBox[0]), [
+						31 * 3,
+						31 * 3,
+					]);
+					if (core.status.lockControl || core.isMoving()) return;
+					if (core.isReplaying()) {
+						this.replayAction[col][row].call(core);
+					} else if (core.isPlaying()) {
+						if (col === 0 && row === 3) {
+							core.doSL("autoSave", "load");
+						} else if (col === 1 && row === 3) {
+							core.doSL("autoSave", "reload");
+						} else {
+							this.toolbarAction[col][row].call(core, true);
+						}
+					}
+					return;
+				}
+				const mapBox = makeBox(
+					[MAP_BLOCK_LEFT_VERTICAL, MAP_BLOCK_TOP_VERTICAL],
+					[350, 350]
+				);
+				if (inRect(pos, mapBox)) {
+					if (
+						core.isReplaying() ||
+						core.status.lockControl ||
+						core.isMoving()
+					)
+						return;
+					core.useItem("fly");
+					return;
+				}
+				/*const equipBox = makeBox([EQUIP_BLOCK_LEFT_VERTICAL, EQUIP_BLOCK_TOP_VERTICAL], [90 * 3, 130 * 3])
 				if (inRect(pos, equipBox)) {
 					if (core.isReplaying() || core.status.lockControl || core.isMoving()) return;
 					core.openEquipbox(true)
 					return;
 				}*/
-        } else {
-          const mapBox = makeBox([MAP_BLOCK_LEFT, MAP_BLOCK_TOP], [350, 350]);
-          if (inRect(pos, mapBox)) {
-            if (
-              core.isReplaying() ||
-              core.status.lockControl ||
-              core.isMoving()
-            )
-              return;
-            core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));
-            return;
-          }
-          /*
+			} else {
+				const mapBox = makeBox([MAP_BLOCK_LEFT, MAP_BLOCK_TOP], [350, 350]);
+				if (inRect(pos, mapBox)) {
+					if (
+						core.isReplaying() ||
+						core.status.lockControl ||
+						core.isMoving()
+					)
+						return;
+					core.useItem("fly");
+					return;
+				}
+				/*
 								const equipBox = makeBox([EQUIP_BLOCK_LEFT, EQUIP_BLOCK_TOP], [130, 95])
 								if (inRect(pos, equipBox)) {
 									if (core.isReplaying() || core.status.lockControl || core.isMoving()) return;
 									core.openEquipbox(true)
 									return;
 								}*/
-          const itemBox = makeBox(
-            [ITEM_BOX_LEFT, ITEM_BOX_TOP],
-            [31 * 4 * 3, 30 * 6 * 3]
-          );
-          if (inRect(pos, itemBox)) {
-            const [gx, gy] = gridify(relativeTo(pos, itemBox[0]), [
-              31 * 3,
-              30 * 3,
-            ]);
-            const itemId = this.itemMx[gy][gx];
-            if (
-              (core.status.event.id == "viewMaps" ||
-                core.status.event.id == "fly") &&
-              itemId === "book"
-            )
-              core.openBook(true);
-            if (
-              core.isReplaying() ||
-              core.status.lockControl ||
-              core.isMoving()
-            )
-              return;
-            useItem(itemId);
-            return;
-          }
-          const toolBox = makeBox(
-            [TOOL_BOX_LEFT, TOOL_BOX_TOP],
-            [31 * 4 * 3, 31 * 2 * 3]
-          );
-          if (inRect(pos, toolBox)) {
-            const [row, col] = gridify(relativeTo(pos, toolBox[0]), [
-              31 * 3,
-              31 * 3,
-            ]);
-            if (core.isReplaying()) {
-              this.replayAction[col][row].call(core);
-            } else if (core.isPlaying()) {
-              if (col === 0 && row === 3) {
-                core.doSL("autoSave", "load");
-              } else if (col === 1 && row === 3) {
-                core.doSL("autoSave", "reload");
-              } else {
-                this.toolbarAction[col][row].call(core, true);
-              }
-            }
-            return;
-          }
-        }
-      }
-    }
+				const itemBox = makeBox(
+					[ITEM_BOX_LEFT, ITEM_BOX_TOP],
+					[31 * 4 * 3, 30 * 6 * 3]
+				);
+				if (inRect(pos, itemBox)) {
+					const [gx, gy] = gridify(relativeTo(pos, itemBox[0]), [
+						31 * 3,
+						30 * 3,
+					]);
+					const itemId = this.itemMx[gy][gx];
+					if (
+						(core.status.event.id == "viewMaps" ||
+							core.status.event.id == "fly") &&
+						itemId === "book"
+					)
+						core.openBook(true);
+					if (
+						core.isReplaying() ||
+						core.status.lockControl ||
+						core.isMoving()
+					)
+						return;
+					useItem(itemId);
+					return;
+				}
+				const toolBox = makeBox(
+					[TOOL_BOX_LEFT, TOOL_BOX_TOP],
+					[31 * 4 * 3, 31 * 2 * 3]
+				);
+				if (inRect(pos, toolBox)) {
+					const [row, col] = gridify(relativeTo(pos, toolBox[0]), [
+						31 * 3,
+						31 * 3,
+					]);
+					if (core.status.lockControl || core.isMoving()) return;
+					if (core.isReplaying()) {
+						this.replayAction[col][row].call(core);
+					} else if (core.isPlaying()) {
+						if (col === 0 && row === 3) {
+							core.doSL("autoSave", "load");
+						} else if (col === 1 && row === 3) {
+							core.doSL("autoSave", "reload");
+						} else {
+							this.toolbarAction[col][row].call(core, true);
+						}
+					}
+					return;
+				}
+			}
+		}
+	}
 
-    core.ui.statusBar = new StatusBar();
+	core.ui.statusBar = new StatusBar();
 
-    core.control.clearStatusBar = function () {
-      core.clearMap("outerUI");
-    };
-    // init() called in `afterLoadResources`.
-  },
+	core.control.clearStatusBar = function () {
+		core.clearMap("outerUI");
+	};
+	// init() called in `afterLoadResources`.
+},
     "override": function () {
-    core.statusBar.icons = {
-      floor: 0,
-      name: null,
-      lv: 1,
-      hpmax: 2,
-      hp: 3,
-      atk: 4,
-      def: 5,
-      mdef: 6,
-      money: 7,
-      exp: 8,
-      up: 9,
-      book: 10,
-      fly: 11,
-      toolbox: 12,
-      keyboard: 13,
-      shop: 14,
-      save: 15,
-      load: 16,
-      settings: 17,
-      play: 18,
-      pause: 19,
-      stop: 20,
-      speedDown: 21,
-      speedUp: 22,
-      rewind: 23,
-      equipbox: 24,
-      mana: 25,
-      skill: 26,
-      exit: 27,
-      btn1: 28,
-      btn2: 29,
-      btn3: 30,
-      btn4: 31,
-      btn5: 32,
-      btn6: 33,
-      btn7: 34,
-      alt: 35,
-      keys: 36,
-      help: 37,
-      battle: 38,
-    };
-    core.actions._getClickLoc = function (x, y) {
-      var size = 32 * core.domStyle.scale;
-      var left = main.dom.gameDraw.offsetLeft + main.dom.gameGroup.offsetLeft;
-      var top = main.dom.gameDraw.offsetTop + main.dom.gameGroup.offsetTop;
-      var loc = {
-        x: Math.max(x - left, 0),
-        y: Math.max(y - top, 0),
-        size: size,
-      };
-      return loc;
-    };
-    core.ui._drawWindowSelector = function (background, x, y, w, h) {
-      w = Math.round(w) + 48;
-      h = Math.round(h);
-      var ctx = core.ui.createCanvas("_selector", x - 24, y, w, h, 165);
-      ctx.canvas.id = "";
-      this._drawSelector(ctx, background, w, h);
-    };
+	core.statusBar.icons = {
+		floor: 0,
+		name: null,
+		lv: 1,
+		hpmax: 2,
+		hp: 3,
+		atk: 4,
+		def: 5,
+		mdef: 6,
+		money: 7,
+		exp: 8,
+		up: 9,
+		book: 10,
+		fly: 11,
+		toolbox: 12,
+		keyboard: 13,
+		shop: 14,
+		save: 15,
+		load: 16,
+		settings: 17,
+		play: 18,
+		pause: 19,
+		stop: 20,
+		speedDown: 21,
+		speedUp: 22,
+		rewind: 23,
+		equipbox: 24,
+		mana: 25,
+		skill: 26,
+		exit: 27,
+		btn1: 28,
+		btn2: 29,
+		btn3: 30,
+		btn4: 31,
+		btn5: 32,
+		btn6: 33,
+		btn7: 34,
+		alt: 35,
+		keys: 36,
+		help: 37,
+		battle: 38,
+	};
+	core.actions._getClickLoc = function (x, y) {
+		var size = 32 * core.domStyle.scale;
+		var left = main.dom.gameDraw.offsetLeft + main.dom.gameGroup.offsetLeft;
+		var top = main.dom.gameDraw.offsetTop + main.dom.gameGroup.offsetTop;
+		var loc = {
+			x: Math.max(x - left, 0),
+			y: Math.max(y - top, 0),
+			size: size,
+		};
+		return loc;
+	};
+	/* core.ui._drawWindowSelector = function (background, x, y, w, h) {
+	   w = Math.round(w) + 48;
+	   h = Math.round(h);
+	   var ctx = core.ui.createCanvas("_selector", x - 24, y, w, h, 165);
+	   ctx.canvas.id = "";
+	   this._drawSelector(ctx, background, w, h);
+	 };
 
-    core.ui._drawSelector = function (ctx, background, w, h, left, top) {
-      left = left || 0;
-      top = top || 0;
-      ctx = this.getContextByName(ctx);
-      if (!ctx) return;
-      if (typeof background == "string")
-        background = core.material.images.images[background];
-      if (!(background instanceof Image)) return;
-      // badge
-      ctx.drawImage(background, 132, 68, 24, 24, left + 4, top + 4, 24, 24);
-      ctx.drawImage(
-        background,
-        132,
-        68,
-        24,
-        24,
-        w - left - 28,
-        top + 4,
-        24,
-        24
-      );
-    };
+	 core.ui._drawSelector = function (ctx, background, w, h, left, top) {
+	   left = left || 0;
+	   top = top || 0;
+	   ctx = this.getContextByName(ctx);
+	   if (!ctx) return;
+	   if (typeof background == "string")
+	     background = core.material.images.images[background];
+	   if (!(background instanceof Image)) return;
+	   // badge
+	   ctx.drawImage(background, 132, 68, 24, 24, left + 4, top + 4, 24, 24);
+	   ctx.drawImage(
+	     background,
+	     132,
+	     68,
+	     24,
+	     24,
+	     w - left - 28,
+	     top + 4,
+	     24,
+	     24
+	   );
+	 };*/
 
-    enemys.prototype._nextCriticals_useBinarySearch = function (
-      enemy,
-      info,
-      number,
-      x,
-      y,
-      floorId
-    ) {
-      var mon_hp = info.mon_hp,
-        hero_atk = core.status.hero.atk,
-        mon_def = info.mon_def,
-        pre = info.damage;
-      var list = [];
-      var start_atk = hero_atk;
-      if (info.__over__) {
-        start_atk += info.__overAtk__;
-        list.push([info.__overAtk__, -info.damage]);
-      }
-      var calNext = function (currAtk, maxAtk) {
-        var start = Math.floor(currAtk),
-          end = Math.floor(maxAtk);
-        if (start > end) return null;
+	enemys.prototype._nextCriticals_useBinarySearch = function (
+		enemy,
+		info,
+		number,
+		x,
+		y,
+		floorId
+	) {
+		var mon_hp = info.mon_hp,
+			hero_atk = core.status.hero.atk,
+			mon_def = info.mon_def,
+			pre = info.damage;
+		var list = [];
+		var start_atk = hero_atk;
+		if (info.__over__) {
+			start_atk += info.__overAtk__;
+			list.push([info.__overAtk__, -info.damage]);
+		}
+		var calNext = function (currAtk, maxAtk) {
+			var start = Math.floor(currAtk),
+				end = Math.floor(maxAtk);
+			if (start > end) return null;
 
-        while (start < end) {
-          var mid = Math.floor((start + end) / 2);
-          if (mid - start > end - mid) mid--;
-          var nextInfo = core.enemys.getDamageInfo(
-            enemy,
-            { atk: mid },
-            x,
-            y,
-            floorId
-          );
-          if (nextInfo == null || typeof nextInfo == "number") return null;
-          if (pre > nextInfo.damage) end = mid;
-          else start = mid + 1;
-        }
-        var nextInfo = core.enemys.getDamageInfo(
-          enemy,
-          { atk: start },
-          x,
-          y,
-          floorId
-        );
-        return nextInfo == null ||
-          typeof nextInfo == "number" ||
-          nextInfo.damage >= pre
-          ? null
-          : [start, nextInfo.damage];
-      };
-      var currAtk = start_atk;
-      while (true) {
-        var next = calNext(currAtk + 1, Number.MAX_SAFE_INTEGER, pre);
-        if (next == null) break;
-        currAtk = next[0];
-        pre = next[1];
-        list.push([currAtk - hero_atk, info.damage - pre]);
-        if (pre <= 0 && !core.flags.enableNegativeDamage) break;
-        if (list.length >= number) break;
-      }
-      if (list.length == 0) list.push([0, 0]);
-      return list;
-    };
-    core.ui.clearMap = function (name, x, y, width, height) {
-      if (name == "all") {
-        for (var m in core.canvas) {
-          core.canvas[m].clearRect(
-            -32,
-            -32,
-            core.canvas[m].canvas.width + 32,
-            core.canvas[m].canvas.height + 32
-          );
-        }
-        core.clearMap("outerUI");
-        core.dom.gif.innerHTML = "";
-        core.removeGlobalAnimate();
-        core.deleteCanvas(function (one) {
-          return one.startsWith("_bigImage_");
-        });
-        core.setWeather(null);
-      } else {
-        var ctx = this.getContextByName(name);
-        if (ctx)
-          ctx.clearRect(
-            x || 0,
-            y || 0,
-            width || ctx.canvas.width,
-            height || ctx.canvas.height
-          );
-      }
-    };
-    events.prototype.openBook = function (fromUserAction) {
-      if (core.isReplaying()) return;
-      // 如果能恢复事件(从callBook事件触发)
-      if (
-        core.status.event.id == "book" &&
-        core.events.recoverEvents(core.status.event.interval)
-      )
-        return;
-      // 当前是book,且从“浏览地图”打开
-      if (core.status.event.id == "book" && core.status.event.ui) {
-        core.status.boxAnimateObjs = [];
-        core.ui._drawViewMaps(core.status.event.ui);
-        return;
-      }
-      // 从“浏览地图”页面打开
-      if (core.status.event.id == "viewMaps" || core.status.event.id == "fly") {
-        fromUserAction = false;
-        core.status.event.ui = core.status.event.data;
-      }
-      if (!this._checkStatus("book", fromUserAction, true)) return;
-      core.playSound("打开界面");
-      core.useItem("book", true);
-    };
-    ////// 怪物手册界面时,放开某个键的操作 //////
-    core.actions._keyUpBook = function (keycode) {
-      if (keycode == 27 || keycode == 88) {
-        core.playSound("取消");
-        if (core.events.recoverEvents(core.status.event.interval)) {
-          return;
-        } else if (core.status.event.ui != null) {
-          core.status.boxAnimateObjs = [];
-          if (typeof core.status.event.ui === "number") {
-            core.status.event.id = "fly";
-            core.ui.drawFly(core.status.event.ui);
-          } else {
-            core.ui._drawViewMaps(core.status.event.ui);
-          }
-        } else core.ui.closePanel();
-        return;
-      }
-      if (keycode == 13 || keycode == 32 || keycode == 67) {
-        var data = core.status.event.data;
-        if (data != null) {
-          core.ui._drawBookDetail(data);
-        }
-        return;
-      }
-    };
-    ////// 怪物手册界面的点击操作 //////
-    actions.prototype._clickBook = function (x, y) {
-      var pageinfo = core.ui._drawBook_pageinfo();
-      // 上一页
-      if (
-        (x == this._HX_ - 2 || x == this._HX_ - 3) &&
-        y === core._HEIGHT_ - 1
-      ) {
-        core.playSound("光标移动");
-        core.ui.drawBook(core.status.event.data - pageinfo.per_page);
-        return;
-      }
-      // 下一页
-      if (
-        (x == this._HX_ + 2 || x == this._HX_ + 3) &&
-        y === core._HEIGHT_ - 1
-      ) {
-        core.playSound("光标移动");
-        core.ui.drawBook(core.status.event.data + pageinfo.per_page);
-        return;
-      }
-      // 返回
-      if (x >= this.LAST - 2 && y === core._HEIGHT_ - 1) {
-        core.playSound("取消");
-        if (core.events.recoverEvents(core.status.event.interval)) {
-          return;
-        } else if (core.status.event.ui != null) {
-          core.status.boxAnimateObjs = [];
-          if (typeof core.status.event.ui === "number") {
-            core.status.event.id = "fly";
-            core.ui.drawFly(core.status.event.ui);
-          } else {
-            core.ui._drawViewMaps(core.status.event.ui);
-          }
-        } else core.ui.closePanel();
-        return;
-      }
-      // 怪物信息
-      var data = core.status.event.data;
-      if (data != null && y < core._HEIGHT_ - 1) {
-        var per_page = pageinfo.per_page,
-          page = parseInt(data / per_page);
-        var u = (core._HEIGHT_ - 1) / per_page;
-        for (var i = 0; i < per_page; ++i) {
-          if (y >= u * i && y < u * (i + 1)) {
-            var index = per_page * page + i;
-            core.ui.drawBook(index);
-            core.ui._drawBookDetail(index);
-            break;
-          }
-        }
-        return;
-      }
-      return;
-    };
+			while (start < end) {
+				var mid = Math.floor((start + end) / 2);
+				if (mid - start > end - mid) mid--;
+				var nextInfo = core.enemys.getDamageInfo(
+					enemy, { atk: mid },
+					x,
+					y,
+					floorId
+				);
+				if (nextInfo == null || typeof nextInfo == "number") return null;
+				if (pre > nextInfo.damage) end = mid;
+				else start = mid + 1;
+			}
+			var nextInfo = core.enemys.getDamageInfo(
+				enemy, { atk: start },
+				x,
+				y,
+				floorId
+			);
+			return nextInfo == null ||
+				typeof nextInfo == "number" ||
+				nextInfo.damage >= pre ?
+				null : [start, nextInfo.damage];
+		};
+		var currAtk = start_atk;
+		while (true) {
+			var next = calNext(currAtk + 1, Number.MAX_SAFE_INTEGER, pre);
+			if (next == null) break;
+			currAtk = next[0];
+			pre = next[1];
+			list.push([currAtk - hero_atk, info.damage - pre]);
+			if (pre <= 0 && !core.flags.enableNegativeDamage) break;
+			if (list.length >= number) break;
+		}
+		if (list.length == 0) list.push([0, 0]);
+		return list;
+	};
+	core.ui.clearMap = function (name, x, y, width, height) {
+		if (name == "all") {
+			for (var m in core.canvas) {
+				core.canvas[m].clearRect(
+					-32,
+					-32,
+					core.canvas[m].canvas.width + 32,
+					core.canvas[m].canvas.height + 32
+				);
+			}
+			core.clearMap("outerUI");
+			core.dom.gif.innerHTML = "";
+			core.removeGlobalAnimate();
+			core.deleteCanvas(function (one) {
+				return one.startsWith("_bigImage_");
+			});
+			core.setWeather(null);
+		} else {
+			var ctx = this.getContextByName(name);
+			if (ctx)
+				ctx.clearRect(
+					x || 0,
+					y || 0,
+					width || ctx.canvas.width,
+					height || ctx.canvas.height
+				);
+		}
+	};
+	events.prototype.openBook = function (fromUserAction) {
+		if (core.isReplaying()) return;
+		// 如果能恢复事件(从callBook事件触发)
+		if (
+			core.status.event.id == "book" &&
+			core.events.recoverEvents(core.status.event.interval)
+		)
+			return;
+		// 当前是book,且从“浏览地图”打开
+		if (core.status.event.id == "book" && core.status.event.ui) {
+			core.status.boxAnimateObjs = [];
+			core.ui._drawViewMaps(core.status.event.ui);
+			return;
+		}
+		// 从“浏览地图”页面打开
+		if (core.status.event.id == "viewMaps" || core.status.event.id == "fly") {
+			fromUserAction = false;
+			core.status.event.ui = core.status.event.data;
+		}
+		if (!this._checkStatus("book", fromUserAction, true)) return;
+		core.playSound("打开界面");
+		core.useItem("book", true);
+	};
+	////// 怪物手册界面时,放开某个键的操作 //////
+	core.actions._keyUpBook = function (keycode) {
+		if (keycode == 27 || keycode == 88) {
+			core.playSound("取消");
+			if (core.events.recoverEvents(core.status.event.interval)) {
+				return;
+			} else if (core.status.event.ui != null) {
+				core.status.boxAnimateObjs = [];
+				if (typeof core.status.event.ui === "number") {
+					core.status.event.id = "fly";
+					core.ui.drawFly(core.status.event.ui);
+				} else {
+					core.ui._drawViewMaps(core.status.event.ui);
+				}
+			} else core.ui.closePanel();
+			return;
+		}
+		if (keycode == 13 || keycode == 32 || keycode == 67) {
+			var data = core.status.event.data;
+			if (data != null) {
+				core.ui._drawBookDetail(data);
+			}
+			return;
+		}
+	};
+	////// 怪物手册界面的点击操作 //////
+	actions.prototype._clickBook = function (x, y) {
+		var pageinfo = core.ui._drawBook_pageinfo();
+		// 上一页
+		if (
+			(x == this._HX_ - 2 || x == this._HX_ - 3) &&
+			y === core._HEIGHT_ - 1
+		) {
+			core.playSound("光标移动");
+			core.ui.drawBook(core.status.event.data - pageinfo.per_page);
+			return;
+		}
+		// 下一页
+		if (
+			(x == this._HX_ + 2 || x == this._HX_ + 3) &&
+			y === core._HEIGHT_ - 1
+		) {
+			core.playSound("光标移动");
+			core.ui.drawBook(core.status.event.data + pageinfo.per_page);
+			return;
+		}
+		// 返回
+		if (x >= this.LAST - 2 && y === core._HEIGHT_ - 1) {
+			core.playSound("取消");
+			if (core.events.recoverEvents(core.status.event.interval)) {
+				return;
+			} else if (core.status.event.ui != null) {
+				core.status.boxAnimateObjs = [];
+				if (typeof core.status.event.ui === "number") {
+					core.status.event.id = "fly";
+					core.ui.drawFly(core.status.event.ui);
+				} else {
+					core.ui._drawViewMaps(core.status.event.ui);
+				}
+			} else core.ui.closePanel();
+			return;
+		}
+		// 怪物信息
+		var data = core.status.event.data;
+		if (data != null && y < core._HEIGHT_ - 1) {
+			var per_page = pageinfo.per_page,
+				page = parseInt(data / per_page);
+			var u = (core._HEIGHT_ - 1) / per_page;
+			for (var i = 0; i < per_page; ++i) {
+				if (y >= u * i && y < u * (i + 1)) {
+					var index = per_page * page + i;
+					core.ui.drawBook(index);
+					core.ui._drawBookDetail(index);
+					break;
+				}
+			}
+			return;
+		}
+		return;
+	};
 
-    ////// 执行当前自定义事件列表中的下一个事件 //////
-    events.prototype.doAction = function () {
-      // 清空boxAnimate和UI层
-      clearInterval(core.status.event.interval);
-      clearTimeout(core.status.event.interval);
-      clearInterval(core.status.event.animateUI);
-      core.status.event.interval = null;
-      delete core.status.event.aniamteUI;
-      if (core.status.gameOver || core.status.replay.failed) return;
-      // 判定是否执行完毕
-      if (this._doAction_finishEvents()) return;
-      core.clearUI();
-      var floorId = core.status.event.data.floorId || core.status.floorId;
-      // 当前点坐标和前缀
-      var x = core.status.event.data.x,
-        y = core.status.event.data.y;
-      var prefix = [
-        floorId || ":f",
-        x != null ? x : "x",
-        y != null ? y : "y",
-      ].join("@");
-      var current = core.status.event.data.list[0];
-      if (this._popEvents(current, prefix)) return;
-      // 当前要执行的事件
-      var data = current.todo.shift();
-      core.status.event.data.current = data;
-      if (typeof data == "string") data = { type: "text", text: data };
-      // 该事件块已经被禁用
-      if (data._disabled) return core.doAction();
-      if (data.type !== "cgtext") {
-        core.unregisterAnimationFrame("skip");
-        core.setFlag("skip", false);
-      }
-      data.floorId = data.floorId || floorId;
-      core.status.event.data.type = data.type;
-      this.doEvent(data, x, y, prefix);
-      return;
-    };
+	////// 执行当前自定义事件列表中的下一个事件 //////
+	events.prototype.doAction = function () {
+		// 清空boxAnimate和UI层
+		clearInterval(core.status.event.interval);
+		clearTimeout(core.status.event.interval);
+		clearInterval(core.status.event.animateUI);
+		core.status.event.interval = null;
+		delete core.status.event.aniamteUI;
+		if (core.status.gameOver || core.status.replay.failed) return;
+		// 判定是否执行完毕
+		if (this._doAction_finishEvents()) return;
+		core.clearUI();
+		var floorId = core.status.event.data.floorId || core.status.floorId;
+		// 当前点坐标和前缀
+		var x = core.status.event.data.x,
+			y = core.status.event.data.y;
+		var prefix = [
+			floorId || ":f",
+			x != null ? x : "x",
+			y != null ? y : "y",
+		].join("@");
+		var current = core.status.event.data.list[0];
+		if (this._popEvents(current, prefix)) return;
+		// 当前要执行的事件
+		var data = current.todo.shift();
+		core.status.event.data.current = data;
+		if (typeof data == "string") data = { type: "text", text: data };
+		// 该事件块已经被禁用
+		if (data._disabled) return core.doAction();
+		if (data.type !== "cgtext") {
+			core.unregisterAnimationFrame("skip");
+			core.setFlag("skip", false);
+		}
+		data.floorId = data.floorId || floorId;
+		core.status.event.data.type = data.type;
+		this.doEvent(data, x, y, prefix);
+		return;
+	};
 
-    ////// 在某个canvas上绘制粗体 //////
-    core.fillBoldText1 = function (
-      name,
-      text,
-      x,
-      y,
-      style,
-      strokeStyle,
-      lineWidth,
-      font,
-      maxWidth
-    ) {
-      var ctx = this.getContextByName(name);
-      if (!ctx) return;
-      if (font) ctx.font = font;
-      if (!style) style = ctx.fillStyle;
-      style = core.arrayToRGBA(style);
-      if (!strokeStyle) strokeStyle = "#000000";
-      strokeStyle = core.arrayToRGBA(strokeStyle);
-      if (maxWidth != null) {
-        this.setFontForMaxWidth(ctx, text, maxWidth);
-      }
-      ctx.strokeStyle = strokeStyle;
+	////// 在某个canvas上绘制粗体 //////
+	core.fillBoldText1 = function (
+		name,
+		text,
+		x,
+		y,
+		style,
+		strokeStyle,
+		lineWidth,
+		font,
+		maxWidth
+	) {
+		var ctx = this.getContextByName(name);
+		if (!ctx) return;
+		if (font) ctx.font = font;
+		if (!style) style = ctx.fillStyle;
+		style = core.arrayToRGBA(style);
+		if (!strokeStyle) strokeStyle = "#000000";
+		strokeStyle = core.arrayToRGBA(strokeStyle);
+		if (maxWidth != null) {
+			this.setFontForMaxWidth(ctx, text, maxWidth);
+		}
+		ctx.strokeStyle = strokeStyle;
 
-      if (!lineWidth) lineWidth = 2;
-      ctx.lineWidth = lineWidth;
-      ctx.strokeText(text, x, y);
-      ctx.fillStyle = style;
-      ctx.fillText(text, x, y);
-    };
-  },
+		if (!lineWidth) lineWidth = 2;
+		ctx.lineWidth = lineWidth;
+		ctx.strokeText(text, x, y);
+		ctx.fillStyle = style;
+		ctx.fillText(text, x, y);
+	};
+	////// 绘制 WindowSkin
+	ui.prototype.drawWindowSkin = function (
+		background,
+		ctx,
+		x,
+		y,
+		w,
+		h,
+		direction,
+		px,
+		py,
+		size = 1
+	) {
+		background = background || core.status.textAttribute.background;
+
+		// 仿RM窗口皮肤 ↓
+		// 绘制背景
+		core.drawImage(
+			ctx,
+			background,
+			0,
+			0,
+			128,
+			128,
+			x + 2 * size,
+			y + 2 * size,
+			w - 4 * size,
+			h - 4 * size
+		);
+		// 绘制边框
+		// 上方
+		core.drawImage(
+			ctx,
+			background,
+			128,
+			0,
+			16,
+			16,
+			x,
+			y,
+			16 * size,
+			16 * size
+		);
+		for (var dx = 0; dx < w - 64 * size; dx += 32 * size) {
+			core.drawImage(
+				ctx,
+				background,
+				144,
+				0,
+				32,
+				16,
+				x + dx + 16 * size,
+				y,
+				32 * size,
+				16 * size
+			);
+			core.drawImage(
+				ctx,
+				background,
+				144,
+				48,
+				32,
+				16,
+				x + dx + 16 * size,
+				y + h - 16 * size,
+				32 * size,
+				16 * size
+			);
+		}
+		core.drawImage(
+			ctx,
+			background,
+			144,
+			0,
+			(w - dx - 32 * size) / size,
+			16,
+			x + dx + 16 * size,
+			y,
+			w - dx - 32 * size,
+			16 * size
+		);
+		core.drawImage(
+			ctx,
+			background,
+			144,
+			48,
+			(w - dx - 32 * size) / size,
+			16,
+			x + dx + 16 * size,
+			y + h - 16 * size,
+			w - dx - 32 * size,
+			16 * size
+		);
+		core.drawImage(
+			ctx,
+			background,
+			176,
+			0,
+			16,
+			16,
+			x + w - 16 * size,
+			y,
+			16 * size,
+			16 * size
+		);
+		// 左右
+		for (var dy = 0; dy < h - 64 * size; dy += 32 * size) {
+			core.drawImage(
+				ctx,
+				background,
+				128,
+				16,
+				16,
+				32,
+				x,
+				y + dy + 16 * size,
+				16 * size,
+				32 * size
+			);
+			core.drawImage(
+				ctx,
+				background,
+				176,
+				16,
+				16,
+				32,
+				x + w - 16 * size,
+				y + dy + 16 * size,
+				16 * size,
+				32 * size
+			);
+		}
+		core.drawImage(
+			ctx,
+			background,
+			128,
+			16,
+			16,
+			(h - dy - 32 * size) / size,
+			x,
+			y + dy + 16 * size,
+			16 * size,
+			h - dy - 32 * size
+		);
+		core.drawImage(
+			ctx,
+			background,
+			176,
+			16,
+			16,
+			(h - dy - 32 * size) / size,
+			x + w - 16 * size,
+			y + dy + 16 * size,
+			16 * size,
+			h - dy - 32 * size
+		);
+		//下方
+		core.drawImage(
+			ctx,
+			background,
+			128,
+			48,
+			16,
+			16,
+			x,
+			y + h - 16 * size,
+			16 * size,
+			16 * size
+		);
+		core.drawImage(
+			ctx,
+			background,
+			176,
+			48,
+			16,
+			16,
+			x + w - 16 * size,
+			y + h - 16 * size,
+			16 * size,
+			16 * size
+		);
+
+		// arrow
+		if (px != null && py != null) {
+			if (direction == "up") {
+				core.drawImage(
+					ctx,
+					background,
+					128,
+					96,
+					32,
+					32,
+					px,
+					y + h - 3 * size,
+					32 * size,
+					32 * size
+				);
+			} else if (direction == "down") {
+				core.drawImage(
+					ctx,
+					background,
+					160,
+					96,
+					32,
+					32,
+					px,
+					y - 29 * size,
+					32 * size,
+					32 * size
+				);
+			}
+		}
+		// 仿RM窗口皮肤 ↑
+	};
+	events.prototype.battle = function (id, x, y, force, callback) {
+		core.saveAndStopAutomaticRoute();
+		id = id || core.getBlockId(x, y);
+		const cls = core.getClsFromId(id);
+		if (!id || !cls || !(cls === "enemys" || cls === "enemy48"))
+			return core.clearContinueAutomaticRoute(callback);
+		// 非强制战斗
+		if (core.enemys.getDamage(id, x, y) === null && !force && !core.status.event.id) {
+			core.stopSound();
+			core.playSound("操作失败");
+			core.drawTip("你打不过此怪物!", id);
+			return core.clearContinueAutomaticRoute(callback);
+		}
+		// 自动存档
+		if (!core.status.event.id) core.autosave(true);
+		// 战前事件
+		if (!this.beforeBattle(id, x, y))
+			return core.clearContinueAutomaticRoute(callback);
+		// 战后事件
+		this.afterBattle(id, x, y);
+		if (callback) callback();
+	};
+	actions.prototype._sys_ondown_lockControl = function (x, y, px, py) {
+		if (core.status.played && !core.status.lockControl) return false;
+
+		switch (core.status.event.id) {
+		case "battle":
+			core.plugin.battle_onclick(x, y, px, py);
+			break;
+		case "centerFly":
+			this._clickCenterFly(x, y, px, py);
+			break;
+		case "book":
+			this._clickBook(x, y, px, py);
+			break;
+		case "book-detail":
+			this._clickBookDetail(x, y, px, py);
+			break;
+		case "fly":
+			this._clickFly(x, y, px, py);
+			break;
+		case "viewMaps":
+			this._clickViewMaps(x, y, px, py);
+			break;
+		case "switchs":
+			this._clickSwitchs(x, y, px, py);
+			break;
+		case "switchs-sounds":
+			this._clickSwitchs_sounds(x, y, px, py);
+			break;
+		case "switchs-display":
+			this._clickSwitchs_display(x, y, px, py);
+			break;
+		case "switchs-action":
+			this._clickSwitchs_action(x, y, px, py);
+			break;
+		case "settings":
+			this._clickSettings(x, y, px, py);
+			break;
+		case "selectShop":
+			this._clickQuickShop(x, y, px, py);
+			break;
+		case "equipbox":
+			this._clickEquipbox(x, y, px, py);
+			break;
+		case "toolbox":
+			this._clickToolbox(x, y, px, py);
+			break;
+		case "save":
+		case "load":
+		case "replayLoad":
+		case "replayRemain":
+		case "replaySince":
+			this._clickSL(x, y, px, py);
+			break;
+		case "confirmBox":
+			this._clickConfirmBox(x, y, px, py);
+			break;
+		case "keyBoard":
+			this._clickKeyBoard(x, y, px, py);
+			break;
+		case "action":
+			this._clickAction(x, y, px, py);
+			break;
+		case "text":
+			core.drawText();
+			break;
+		case "notes":
+			this._clickNotes(x, y, px, py);
+			break;
+		case "syncSave":
+			this._clickSyncSave(x, y, px, py);
+			break;
+		case "syncSelect":
+			this._clickSyncSelect(x, y, px, py);
+			break;
+		case "localSaveSelect":
+			this._clickLocalSaveSelect(x, y, px, py);
+			break;
+		case "storageRemove":
+			this._clickStorageRemove(x, y, px, py);
+			break;
+		case "cursor":
+			this._clickCursor(x, y, px, py);
+			break;
+		case "replay":
+			this._clickReplay(x, y, px, py);
+			break;
+		case "gameInfo":
+			this._clickGameInfo(x, y, px, py);
+			break;
+		case "about":
+		case "help":
+			core.ui.closePanel();
+			break;
+		}
+
+		// --- 长按判定
+		if (core.timeout.onDownTimeout == null) {
+			core.timeout.onDownTimeout = setTimeout(function () {
+				if (core.interval.onDownInterval == null) {
+					core.interval.onDownInterval = setInterval(function () {
+						if (!core.actions.longClick(x, y, px, py)) {
+							clearInterval(core.interval.onDownInterval);
+							core.interval.onDownInterval = null;
+						}
+					}, 40);
+				}
+			}, 500);
+		}
+		return true;
+	};
+	core.registerAction(
+		"ondown",
+		"_sys_ondown_lockControl",
+		core.actions._sys_ondown_lockControl,
+		30
+	);
+	////// 结束一切事件和绘制,关闭UI窗口,返回游戏进程 //////
+	ui.prototype.closePanel = function () {
+		core.dom.saveLoad.style.display = "none"
+		if (core.status.hero && core.status.hero.flags) {
+			// 清除全部临时变量
+			Object.keys(core.status.hero.flags).forEach(function (name) {
+				if (name.startsWith("@temp@") || /^arg\d+$/.test(name)) {
+					delete core.status.hero.flags[name];
+				}
+			});
+		}
+		this.clearUI();
+		core.maps.generateGroundPattern();
+		core.updateStatusBar(true);
+		core.unlockControl();
+		core.status.event.data = null;
+		core.status.event.id = null;
+		core.status.event.selection = null;
+		core.status.event.ui = null;
+		core.status.event.interval = null;
+		// 清除onDownInterval
+		clearInterval(core.interval.onDownInterval);
+		core.interval.onDownInterval = 'tmp';
+	}
+	////// 绘制提示同时播放错误音效 //////
+	this.drawFailTip = function (text, id, frame) {
+		core.drawTip(text, id, frame);
+		core.playSound('error.opus');
+	}
+	const floor = Math.floor
+	Math.floor = (a) => floor(a + 1e-8)
+},
     "额外信息": function () {
     /* 宝石血瓶左下角显示数值
      * 注意!!!不要在道具属性中直接操作flags,使用core.status.hero.flags或core.setFlag系列函数代替!
@@ -4195,2143 +4746,2626 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
       }
     }
   },
+    "跳伤": function () {
+	// 在此增加新插件
+	/** 
+	函数使用说明
+	Dove.MorePerform.ShowDamagePop.PopDamage(
+    'ui', // 画布名称或画布2d上下文对象
+    100, 200, // 位置 (x, y)
+    -50, // 伤害值
+    24, // 字体大小
+	"宋体",//字体
+    '#FF0000', // 字体颜色
+    '#000000', // 描边颜色
+    0.5, // 水平速度 (speedX)
+    -10, // 垂直速度 (speedY)
+    0.5, // 重力 (gravity)
+    120 // 显示时长(帧数)
+	*/
+	if (!core.registerAnimationFrame) {
+		throw new Error("require 2.6.1 or higher version");
+	}
+
+	window.Dove = window.Dove || {};
+	Dove.MorePerform = Dove.MorePerform || {};
+
+	Dove.MorePerform.ShowDamagePop = {};
+	Dove.MorePerform.ShowDamagePop.version = 1.0;
+
+	Dove.MorePerform.ShowDamagePop.AllPopingCanvas = [];
+
+	// 每帧的处理
+	Dove.MorePerform.ShowDamagePop.Update = function () {
+		this.AllPopingCanvas = this.AllPopingCanvas.filter(function (spr) {
+			spr.update();
+			return spr.isAlive();
+		});
+		if (!this.AllPopingCanvas.length) PopSprite._count = 0;
+	};
+
+	// 弹出伤害气泡
+	Dove.MorePerform.ShowDamagePop.PopDamage = function (
+		canvasName,
+		x,
+		y,
+		damageValue,
+		fontSize,
+		font,
+		fontColor,
+		outlineColor,
+		speedX,
+		speedY,
+		gravity,
+		duration
+	) {
+		if (damageValue) {
+			var poper = new PopSprite(
+				canvasName,
+				x,
+				y,
+				damageValue,
+				fontSize,
+				font,
+				fontColor,
+				outlineColor,
+				speedX,
+				speedY,
+				gravity,
+				duration
+			);
+			Dove.MorePerform.ShowDamagePop.AllPopingCanvas.push(poper);
+		}
+	};
+
+	// 战斗发生前后记录生命值并处理
+	Dove.MorePerform.ShowDamagePop.OnBattle = core.events.battle;
+	core.events.battle = function () {
+		var hpBeforeBattle = core.status.hero.hp;
+		Dove.MorePerform.ShowDamagePop.OnBattle.apply(core.events, arguments);
+		if (core.getFlag("noAnimate"))
+			Dove.MorePerform.ShowDamagePop.PopDamage(
+				"ui", // 默认画布名称
+				core.getHeroLoc("x") * 32, // 英雄位置 x
+				core.getHeroLoc("y") * 32, // 英雄位置 y
+				Math.floor(core.status.hero.hp - hpBeforeBattle), // 伤害值
+				16, // 默认字体大小
+				"Arial", //默认字体
+				null, // 默认颜色
+				null, // 默认描边颜色
+				null, // 默认水平速度
+				null, // 默认垂直速度
+				null, // 默认重力
+				90 // 默认显示时长(帧数)
+			);
+	};
+	// 注册每帧事件
+	core.registerAnimationFrame("ShowDamagePop", true, (temptime) => {
+
+		Dove.MorePerform.ShowDamagePop.Update.bind(
+			Dove.MorePerform.ShowDamagePop
+		)();
+
+	});
+
+	// 弹出精灵类
+	function PopSprite(
+		canvasName,
+		x,
+		y,
+		damage,
+		fontSize,
+		font,
+		fontColor,
+		outlineColor,
+		speedX,
+		speedY,
+		gravity,
+		duration
+	) {
+		this.initialize.apply(this, arguments);
+	}
+
+	PopSprite.prototype = Object.create(Object.prototype);
+	PopSprite.prototype.constructor = PopSprite;
+
+	// 常量
+	PopSprite._count = 0;
+	PopSprite._baseZOrder = 50;
+	PopSprite._floorDis = 20;
+
+	// 初始化
+	PopSprite.prototype.initialize = function (
+		canvasName,
+		x,
+		y,
+		damage,
+		fontSize,
+		font,
+		fontColor,
+		outlineColor,
+		speedX,
+		speedY,
+		gravity,
+		duration
+	) {
+		this._canvasName = canvasName ?? "ui"; // 默认画布名称
+		this._x = x;
+		this._y = y;
+		this._damage = damage;
+		this._fontSize = fontSize ?? 16; // 默认字体大小
+		this._font = font ?? "Arial";
+		this._fontColor = fontColor ?? (damage > 0 ? "#22FF44" : "lightcoral"); // 默认颜色
+		this._outlineColor = outlineColor ?? "#FFFFFF"; // 默认描边颜色
+		this._speedX = speedX ?? -1 + Math.random() * 2; // 水平速度,默认随机
+		this._speedY = speedY ?? -3 - Math.random() * 4; // 垂直速度,默认随机
+		this._gravity = gravity ?? 0.3; // 重力加速度,默认 0.3
+		this._duration = duration ?? 180; // 显示时长(帧数),默认 180 帧
+		this.initAllMembers();
+		this.requestCanvas();
+	};
+
+	// 自更新
+	PopSprite.prototype.update = function () {
+		if (this._timer < this._duration) {
+			// 使用传入的显示时长
+			this._x += this._vx;
+			this._y += this._vy;
+			this._vy += this._gravity;
+			if (this._y >= this._floorY) {
+				this._y = this._floorY;
+				this._vy *= -0.75; // 反弹衰减
+			}
+			core.relocateCanvas(this._symbol, this._x, this._y);
+			core.setOpacity(this._symbol, 1 - this._timer / this._duration); // 根据显示时长设置透明度
+		} else {
+			this.dispose();
+		}
+		this._timer++;
+	};
+
+	// 申请并描绘canvas
+	PopSprite.prototype.requestCanvas = function () {
+		core.createCanvas(
+			this._symbol,
+			this._x,
+			this._y,
+			this._width + 4,
+			this._height + 4,
+			this._z
+		);
+
+		var canvas = core.getContextByName(this._symbol);
+		canvas.font = this._fontSize + "px " + this._font; // 动态设置字体大小
+		canvas.fillStyle = this._fontColor; // 动态设置字体颜色
+		canvas.strokeStyle = this._outlineColor; // 动态设置描边颜色
+		canvas.strokeText(this._text, 2, this._height);
+		canvas.fillText(this._text, 2, this._height);
+	};
+
+	// 初始化所有成员变量
+	PopSprite.prototype.initAllMembers = function () {
+		this._text = String(this._damage);
+		var uiContext = core.ui.getContextByName(this._canvasName); // 使用指定画布
+		uiContext.font = this._fontSize + "px  " + this._font; // 动态设置字体大小
+		var textRect = uiContext.measureText(this._text);
+		this._width = textRect.width + 4;
+		this._height = this._fontSize + 4; // 动态设置高度
+		this._z = uiContext.canvas.style.zIndex ?
+			Number(uiContext.canvas.style.zIndex) + PopSprite._count :
+			PopSprite._baseZOrder + PopSprite._count;
+		this._symbol = "popSprite" + PopSprite._count++;
+		this._alive = true;
+		this._vx = this._speedX; // 使用传入的水平速度
+		this._vy = this._speedY; // 使用传入的垂直速度
+		this._floorY = this._y + PopSprite._floorDis;
+		this._timer = 0;
+	};
+
+	// 判断是否存活
+	PopSprite.prototype.isAlive = function () {
+		return this._alive;
+	};
+
+	// 释放
+	PopSprite.prototype.dispose = function () {
+		this._alive = false;
+		core.deleteCanvas(this._symbol);
+	};
+},
     "编辑器显伤": function () {
-    // 在此增加新插件
-    /////// 用户设置 ///////
-    // 将__enable置为false将关闭插件
-    var __enable = true;
-    // 魔防攻速之类的属性可以在这里加 ['atk', 'def', 'mdef']
-    var heroStatus = ["atk", "def", "mdef", "hp"];
-    // saveHero为true 将会把每次造塔测试时的角色数据存下来 否则会读取初始属性
-    // 用不着可以关了 节约缓存空间 (虽然根本没多少 还没一个存档大
-    // 也可以手动清理 控制台输入core.removeLocalStorage('editorHero')即可
-    var saveHero = true;
+	// 在此增加新插件
+	/////// 用户设置 ///////
+	// 将__enable置为false将关闭插件
+	var __enable = true;
+	// 魔防攻速之类的属性可以在这里加 ['atk', 'def', 'mdef']
+	var heroStatus = [
+		"atk",
+		"def",
+		"spell",
+		"mdef",
+		"matk",
+		"mhp",
+		"speed",
+		"hp",
+	];
+	// saveHero为true 将会把每次造塔测试时的角色数据存下来 否则会读取初始属性
+	// 用不着可以关了 节约缓存空间 (虽然根本没多少 还没一个存档大
+	// 也可以手动清理 控制台输入core.removeLocalStorage('editorHero')即可
+	var saveHero = true;
 
-    // 下为具体实现 懒得写注释了 大概就是写HTML然后注册交互
-    if (!__enable || main.mode != "editor") return;
-    core.plugin.initEditorDamage = false;
-    if (heroStatus.length >= 4 && !editor.isMobile)
-      editor.dom.mid2.style.top = 650 + 30 * (heroStatus.length - 3) + "px";
-    editor.statusRatio = core.getLocalStorage("statusRatio", 1);
-    editor.saveHero = saveHero;
-    editor._heroStatus = heroStatus;
-    editor.dom.mapEdit.appendChild(core.canvas.damage.canvas);
-    var HTML =
-      "<input type='button' value='←'/><input type='button' value='↑'/><input type='button' value='↓'/><input type='button' value='→'/><input type='button' id='bigmapBtn' value='大地图'' style='margin-left: '5px'/>";
+	// 下为具体实现 懒得写注释了 大概就是写HTML然后注册交互
+	if (!__enable || main.mode != "editor") return;
+	core.plugin.initEditorDamage = false;
+	if (heroStatus.length >= 4 && !editor.isMobile) {
+		editor.dom.mid2.style.top = 650 + 30 * (heroStatus.length - 3) + "px";
+		editor.dom.mid.style.height = 730 + "px";
+		document.querySelector("#mid .tools").style.height = 280 + "px";
+	}
+	editor.statusRatio = core.getLocalStorage("statusRatio", 1);
+	editor.saveHero = saveHero;
+	editor._heroStatus = heroStatus;
+	editor.dom.mapEdit.appendChild(core.canvas.damage.canvas);
+	const viewportButtons = document.getElementById("viewportButtons");
 
-    //if (heroStatus.length >= 4 && !editor.isMobile) editor.dom.mid2.style.top = 650 + 30 * (heroStatus.length - 3) + 'px';
-    heroStatus.forEach(function (status) {
-      var id = status + "set",
-        id2 = status + "add",
-        id3 = status + "rec",
-        id4 = status + "help";
-      HTML +=
-        "<br/><input type='text' size='15' id='" +
-        id +
-        "'><input type='button' id='" +
-        id2 +
-        "' value = '+'><input type='button' id='" +
-        id3 +
-        "' value = '-'><input type='button' value='?' id = '" +
-        id4 +
-        "'>";
-    });
-    document.getElementById("viewportButtons").innerHTML = HTML;
-    ["set", "add", "rec", "help"].forEach(function (e) {
-      heroStatus.forEach(function (status) {
-        editor.dom[status + e] = document.getElementById(status + e);
-      });
-    });
-    var _hasItem = core.items.hasItem;
-    core.items.hasItem = function (itemId) {
-      if (itemId == "book" && main.mode == "editor") return true;
-      return _hasItem.call(core.items, itemId);
-    };
-    if (main.mode == "editor") {
-      var applyList = [
-        "getDamageString",
-        "nextCriticals",
-        "getEnemyInfo",
-        "getEnemyValue",
-      ];
-      applyList.forEach(function (name) {
-        var func = core.enemys[name];
-        core.enemys[name] = function () {
-          var args =
-            arguments.length === 1
-              ? [arguments[0]]
-              : Array.apply(null, arguments);
-          if (typeof args[0] == "string") args[0] = core.enemys.enemys[args[0]];
-          return func.apply(core.enemys, args);
-        };
-      });
-    }
+	var HTML =
+		"<input type='button' value='←'/><input type='button' value='↑'/><input type='button' value='↓'/><input type='button' value='→'/><input type='button' id='bigmapBtn' value='大地图'' style='margin-left: '5px'/>";
 
-    ////// 获得勇士属性 //////
-    core.control.getStatus = function (name) {
-      if (!core.status.hero) return null;
-      if (name == "x" || name == "y" || name == "direction")
-        return this.getHeroLoc(name);
-      /*if ( main.mode == 'editor' && !core.hasFlag('__statistics__')) {
+	//if (heroStatus.length >= 4 && !editor.isMobile) editor.dom.mid2.style.top = 650 + 30 * (heroStatus.length - 3) + 'px';
+	heroStatus.forEach(function (status) {
+		var id = status + "set",
+			id2 = status + "add",
+			id3 = status + "rec",
+			id4 = status + "help";
+		HTML +=
+			"<br/>" +
+			core.getStatusLabel(status) +
+			"<text ><input type='text' size='" +
+			(15 - core.getStatusLabel(status).length * 2.5) +
+			"' id='" +
+			id +
+			"'><input type='button' id='" +
+			id2 +
+			"' value = '+'><input type='button' id='" +
+			id3 +
+			"' value = '-'><input type='button' value='?' id = '" +
+			id4 +
+			"'>";
+	});
+	document.getElementById("viewportButtons").innerHTML = HTML;
+	["set", "add", "rec", "help"].forEach(function (e) {
+		heroStatus.forEach(function (status) {
+			editor.dom[status + e] = document.getElementById(status + e);
+		});
+	});
+	var _hasItem = core.items.hasItem;
+	core.items.hasItem = function (itemId) {
+		if (itemId == "book" && main.mode == "editor") return true;
+		return _hasItem.call(core.items, itemId);
+	};
+	if (main.mode == "editor") {
+		var applyList = [
+			"getDamageString",
+			"nextCriticals",
+			"getEnemyInfo",
+			"getEnemyValue",
+		];
+		applyList.forEach(function (name) {
+			var func = core.enemys[name];
+			core.enemys[name] = function () {
+				var args =
+					arguments.length === 1 ?
+					[arguments[0]] :
+					Array.apply(null, arguments);
+				if (typeof args[0] == "string") args[0] = core.enemys.enemys[args[0]];
+				return func.apply(core.enemys, args);
+			};
+		});
+	}
+
+	////// 获得勇士属性 //////
+	core.control.getStatus = function (name) {
+		if (!core.status.hero) return null;
+		if (name == "x" || name == "y" || name == "direction")
+			return this.getHeroLoc(name);
+		/*if ( main.mode == 'editor' && !core.hasFlag('__statistics__')) {
 			return data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.hero[name];
 		}*/
-      return core.status.hero[name];
-    };
+		return core.status.hero[name];
+	};
 
-    core.control.updateDamage = function (floorId, ctx) {
-      floorId = floorId || core.status.floorId;
-      if (!floorId || core.status.gameOver) return;
-      var onMap = ctx == null;
-      if (main.mode == "editor") {
-        ctx = core.canvas.damage;
-        core.updateCheckBlock();
-        core.clearMap(ctx);
-        if (editor.uivalues.bigmap) return;
-      }
+	core.control.updateDamage = function (floorId, ctx) {
+		floorId = floorId || core.status.floorId;
+		if (!floorId || core.status.gameOver) return;
+		var onMap = ctx == null;
+		if (main.mode == "editor") {
+			ctx = core.canvas.damage;
+			core.updateCheckBlock();
+			core.clearMap(ctx);
+			if (editor.uivalues.bigmap) return;
+		}
 
-      // 没有怪物手册
-      if (!core.hasItem("book")) return;
-      core.status.damage.posX = core.bigmap.posX;
-      core.status.damage.posY = core.bigmap.posY;
-      if (!onMap) {
-        var width = core.floors[floorId].width,
-          height = core.floors[floorId].height;
-        // 地图过大的缩略图不绘制显伤
-        if (width * height > core.bigmap.threshold) return;
-      }
-      this._updateDamage_damage(floorId, onMap);
-      this._updateDamage_extraDamage(floorId, onMap);
-      this.drawDamage(ctx);
-    };
+		// 没有怪物手册
+		if (!core.hasItem("book")) return;
+		core.status.damage.posX = core.bigmap.posX;
+		core.status.damage.posY = core.bigmap.posY;
+		if (!onMap) {
+			var width = core.floors[floorId].width,
+				height = core.floors[floorId].height;
+			// 地图过大的缩略图不绘制显伤
+			if (width * height > core.bigmap.threshold) return;
+		}
+		this._updateDamage_damage(floorId, onMap);
+		this._updateDamage_extraDamage(floorId, onMap);
+		this.drawDamage(ctx);
+	};
 
-    core.control.drawDamage = function (ctx) {
-      if (
-        core.status.gameOver ||
-        !core.status.damage /* || main.mode != 'play'*/
-      )
-        return;
-      var onMap = false;
-      if (ctx == null) {
-        ctx = core.canvas.damage;
-        core.clearMap("damage");
-        onMap = true;
-      }
+	core.control.drawDamage = function (ctx) {
+		if (
+			core.status.gameOver ||
+			!core.status.damage /* || main.mode != 'play'*/
+		)
+			return;
+		var onMap = false;
+		if (ctx == null) {
+			ctx = core.canvas.damage;
+			core.clearMap("damage");
+			onMap = true;
+		}
 
-      if (onMap && core.bigmap.v2) {
-        // 检查是否需要重算...
-        if (
-          Math.abs(core.bigmap.posX - core.status.damage.posX) >=
-            core.bigmap.extend - 1 ||
-          Math.abs(core.bigmap.posY - core.status.damage.posY) >=
-            core.bigmap.extend - 1
-        ) {
-          return this.updateDamage();
-        }
-      }
-      return this._drawDamage_draw(ctx, onMap);
-    };
+		if (onMap && core.bigmap.v2) {
+			// 检查是否需要重算...
+			if (
+				Math.abs(core.bigmap.posX - core.status.damage.posX) >=
+				core.bigmap.extend - 1 ||
+				Math.abs(core.bigmap.posY - core.status.damage.posY) >=
+				core.bigmap.extend - 1
+			) {
+				return this.updateDamage();
+			}
+		}
+		return this._drawDamage_draw(ctx, onMap);
+	};
 
-    ////// 以x,y的形式返回每个点的事件 //////
-    core.maps.getMapBlocksObj = function (floorId, noCache) {
-      floorId = floorId || core.status.floorId;
-      if (
-        core.status.mapBlockObjs[floorId] &&
-        !noCache &&
-        main.mode != "editor"
-      )
-        return core.status.mapBlockObjs[floorId];
+	////// 以x,y的形式返回每个点的事件 //////
+	core.maps.getMapBlocksObj = function (floorId, noCache) {
+		floorId = floorId || core.status.floorId;
+		if (
+			core.status.mapBlockObjs[floorId] &&
+			!noCache &&
+			main.mode != "editor"
+		)
+			return core.status.mapBlockObjs[floorId];
 
-      var obj = {};
-      core.extractBlocks(floorId);
-      core.status.maps[floorId].blocks.forEach(function (block) {
-        obj[block.x + "," + block.y] = block;
-      });
-      core.status.mapBlockObjs[floorId] = obj;
-      return obj;
-    };
+		var obj = {};
+		core.extractBlocks(floorId);
+		core.status.maps[floorId].blocks.forEach(function (block) {
+			obj[block.x + "," + block.y] = block;
+		});
+		core.status.mapBlockObjs[floorId] = obj;
+		return obj;
+	};
 
-    this.bignum = function (num, defaultValue) {
-      if (num == null || num == "") return defaultValue;
-      num = num + "";
-      var list = {
-        w: 1e4,
-        e: 1e8,
-        z: 1e12,
-        j: 1e16,
-        g: 1e20,
-      };
-      // 浮点数问题
-      function checkFloat(num) {
-        if (!core.isset(num)) return 0;
-        num = num + "";
-        var index = num.indexOf(".");
-        if (index < 0) return 0;
-        else return num.slice(index + 1).length;
-      }
-      var index = num.search(/w|e|z|j|g/);
-      if (index <= 0) {
-        num = parseInt(num);
-        if (core.isset(num)) return num;
-        else {
-          alert("不正确的输入");
-          return defaultValue;
-        }
-      }
-      for (; index > 0; index = num.search(/w|e|z|j|g/)) {
-        var p = num[index],
-          q = list[p],
-          n = num.slice(0, index),
-          m = Math.pow(10, checkFloat(n));
-        num = (n * m * q) / m + num.slice(index + 1);
-      }
-      return parseInt(num);
-    };
+	this.bignum = function (num, defaultValue) {
+		if (num == null || num == "") return defaultValue;
+		num = num + "";
+		var list = {
+			w: 1e4,
+			e: 1e8,
+			z: 1e12,
+			j: 1e16,
+			g: 1e20,
+		};
+		// 浮点数问题
+		function checkFloat(num) {
+			if (!core.isset(num)) return 0;
+			num = num + "";
+			var index = num.indexOf(".");
+			if (index < 0) return 0;
+			else return num.slice(index + 1).length;
+		}
+		var index = num.search(/w|e|z|j|g/);
+		if (index <= 0) {
+			num = parseInt(num);
+			if (core.isset(num)) return num;
+			else {
+				alert("不正确的输入");
+				return defaultValue;
+			}
+		}
+		for (; index > 0; index = num.search(/w|e|z|j|g/)) {
+			var p = num[index],
+				q = list[p],
+				n = num.slice(0, index),
+				m = Math.pow(10, checkFloat(n));
+			num = (n * m * q) / m + num.slice(index + 1);
+		}
+		return parseInt(num);
+	};
 
-    this.updateEditorDamage = function (noSave) {
-      core.updateDamage();
-      heroStatus.forEach(function (status) {
-        editor.dom[status + "set"].value = core.status.hero[status];
-      });
-      if (!noSave && editor.saveHero)
-        core.setLocalStorage("editorHero", core.status.hero);
-    };
+	this.updateEditorDamage = function (noSave) {
+		core.updateDamage();
+		heroStatus.forEach(function (status) {
+			editor.dom[status + "set"].value = core.status.hero[status];
+		});
+		if (!noSave && editor.saveHero)
+			core.setLocalStorage("editorHero", core.status.hero);
+	};
 
-    var _resizeMap = core.maps.resizeMap;
-    core.maps.resizeMap = function (floorId) {
-      _resizeMap.call(core.maps, floorId);
-      if (!core.plugin.initEditorDamage && main.mode == "editor") {
-        core.plugin.initEditorDamage = true;
-        var editorHero = core.getLocalStorage("editorHero");
-        if (editorHero && saveHero) core.status.hero = editorHero;
-        else core.removeLocalStorage("editorHero");
-        editor._heroStatus.forEach(function (e) {
-          editor.dom[e + "set"].onchange = function () {
-            var status = this.id.slice(0, -3);
-            core.status.hero[status] = core.bignum(
-              this.value,
-              core.status.hero[status]
-            );
-            core.updateEditorDamage();
-          };
-          editor.dom[e + "add"].onclick = function () {
-            var status = this.id.slice(0, -3);
-            core.status.hero[status] += editor.statusRatio;
-            core.updateEditorDamage();
-          };
-          editor.dom[e + "rec"].onclick = function () {
-            var status = this.id.slice(0, -3);
-            core.status.hero[status] -= editor.statusRatio;
-            core.updateEditorDamage();
-          };
-          editor.dom[e + "help"].onclick = function () {
-            var status = this.id.slice(0, -4),
-              name = core.getStatusLabel(status);
-            var ratio = parseInt(
-              prompt(
-                "当前属性:" +
-                  name +
-                  "\n现在的点击按钮变化值:" +
-                  editor.statusRatio +
-                  ",请输入按下一次+/-按钮的属性变化量,可以写4w 10.2e这种字母缩写"
-              )
-            );
-            if (!core.isset(ratio)) {
-              printe("不合法的输入");
-              return;
-            }
-            editor.statusRatio = ratio;
-            core.setLocalStorage("statusRatio", ratio);
-          };
-        });
-        var _updateMap = editor.updateMap;
-        editor.updateMap = function () {
-          _updateMap.call(editor);
-          core.updateEditorDamage(true);
-        };
-        editor.mode.onmode = function (mode, callback) {
-          if (editor_mode.mode != mode) {
-            if (mode === "save") {
-              editor_mode.doActionList(
-                editor_mode.mode,
-                editor_mode.actionList,
-                function () {
-                  if (callback) callback();
-                  core.updateEditorDamage();
-                }
-              );
-            }
-            if (editor_mode.mode === "nextChange" && mode)
-              editor_mode.showMode(mode);
-            if (mode !== "save") editor_mode.mode = mode;
-            editor_mode.actionList = [];
-          }
-        };
-      }
-    };
-  },
+	var _resizeMap = core.maps.resizeMap;
+	core.maps.resizeMap = function (floorId) {
+		_resizeMap.call(core.maps, floorId);
+		if (!core.plugin.initEditorDamage && main.mode == "editor") {
+			core.plugin.initEditorDamage = true;
+			var editorHero = core.getLocalStorage("editorHero");
+			if (editorHero && saveHero) core.status.hero = editorHero;
+			else core.removeLocalStorage("editorHero");
+			editor._heroStatus.forEach(function (e) {
+				editor.dom[e + "set"].onchange = function () {
+					var status = this.id.slice(0, -3);
+					core.status.hero[status] = core.bignum(
+						this.value,
+						core.status.hero[status]
+					);
+					if (status === "mdef" && core.status.hero[status] > 100)
+						core.status.hero[status] = 100;
+					core.updateEditorDamage();
+				};
+				editor.dom[e + "add"].onclick = function () {
+					var status = this.id.slice(0, -3);
+					core.status.hero[status] += editor.statusRatio;
+					if (status === "mdef" && core.status.hero[status] > 100)
+						core.status.hero[status] = 100;
+					core.updateEditorDamage();
+				};
+				editor.dom[e + "rec"].onclick = function () {
+					var status = this.id.slice(0, -3);
+					core.status.hero[status] -= editor.statusRatio;
+					core.updateEditorDamage();
+				};
+				editor.dom[e + "help"].onclick = function () {
+					var status = this.id.slice(0, -4),
+						name = core.getStatusLabel(status);
+					var ratio = parseInt(
+						prompt(
+							"当前属性:" +
+							name +
+							"\n现在的点击按钮变化值:" +
+							editor.statusRatio +
+							",请输入按下一次+/-按钮的属性变化量,可以写4w 10.2e这种字母缩写"
+						)
+					);
+					if (!core.isset(ratio)) {
+						printe("不合法的输入");
+						return;
+					}
+					editor.statusRatio = ratio;
+					core.setLocalStorage("statusRatio", ratio);
+				};
+			});
+			var _updateMap = editor.updateMap;
+			editor.updateMap = function () {
+				_updateMap.call(editor);
+				core.updateEditorDamage(true);
+			};
+			editor.mode.onmode = function (mode, callback) {
+				if (editor_mode.mode != mode) {
+					if (mode === "save") {
+						editor_mode.doActionList(
+							editor_mode.mode,
+							editor_mode.actionList,
+							function () {
+								if (callback) callback();
+								core.updateEditorDamage();
+							}
+						);
+					}
+					if (editor_mode.mode === "nextChange" && mode)
+						editor_mode.showMode(mode);
+					if (mode !== "save") editor_mode.mode = mode;
+					editor_mode.actionList = [];
+				}
+			};
+		}
+	};
+},
     "手册区分特殊属性": function () {
-    // 在此增加新插件
-    this.arrsame = function (Arraya, Arrayb) {
-      let a = Arraya || [];
-      let b = Arrayb || [];
-      if (typeof a === "number") a = [a];
-      if (typeof b === "number") b = [b];
-      let c = [...a, ...b];
-      for (const i of c)
-        if (!a.includes(i) || !b.includes(i)) {
-          return false;
-        }
-      return true;
-    };
-    enemys.prototype.getCurrentEnemys = function (floorId) {
-      floorId = floorId || core.status.floorId;
-      var enemys = [],
-        used = {};
-      core.extractBlocks(floorId);
-      core.status.maps[floorId].blocks.forEach(function (block) {
-        if (!block.disable && block.event.cls.indexOf("enemy") == 0) {
-          this._getCurrentEnemys_addEnemy(
-            block.event.id,
-            enemys,
-            used,
-            block.x,
-            block.y,
-            floorId
-          );
-        }
-      }, this);
-      return this._getCurrentEnemys_sort(enemys);
-    };
+	// 在此增加新插件
+	this.arrsame = function (Arraya, Arrayb) {
+		let a = Arraya || [];
+		let b = Arrayb || [];
+		if (typeof a === "number") a = [a];
+		if (typeof b === "number") b = [b];
+		let c = [...a, ...b];
+		for (const i of c)
+			if (!a.includes(i) || !b.includes(i)) {
+				return false;
+			}
+		return true;
+	};
+	enemys.prototype.getCurrentEnemys = function (floorId) {
+		floorId = floorId || core.status.floorId;
+		var enemys = [],
+			used = {};
+		core.extractBlocks(floorId);
+		core.status.maps[floorId].blocks.forEach(function (block) {
+			if (!block.disable && block.event.cls.indexOf("enemy") == 0) {
+				this._getCurrentEnemys_addEnemy(
+					block.event.id,
+					enemys,
+					used,
+					block.x,
+					block.y,
+					floorId
+				);
+			}
+		}, this);
+		return this._getCurrentEnemys_sort(enemys);
+	};
 
-    enemys.prototype._getCurrentEnemys_getEnemy = function (enemyId) {
-      var enemy = core.material.enemys[enemyId];
-      if (!enemy) return null;
+	enemys.prototype._getCurrentEnemys_getEnemy = function (enemyId) {
+		var enemy = core.material.enemys[enemyId];
+		if (!enemy) return null;
 
-      // 检查朝向;displayIdInBook
-      return (
-        core.material.enemys[enemy.displayIdInBook] ||
-        core.material.enemys[(enemy.faceIds || {}).down] ||
-        enemy
-      );
-    };
+		// 检查朝向;displayIdInBook
+		return (
+			core.material.enemys[enemy.displayIdInBook] ||
+			core.material.enemys[(enemy.faceIds || {}).down] ||
+			enemy
+		);
+	};
 
-    enemys.prototype._getCurrentEnemys_addEnemy = function (
-      enemyId,
-      enemys,
-      used,
-      x,
-      y,
-      floorId
-    ) {
-      var enemy = this._getCurrentEnemys_getEnemy(enemyId);
-      if (enemy == null) return;
+	enemys.prototype._getCurrentEnemys_addEnemy = function (
+		enemyId,
+		enemys,
+		used,
+		x,
+		y,
+		floorId
+	) {
+		var enemy = this._getCurrentEnemys_getEnemy(enemyId);
+		if (enemy == null) return;
 
-      var id = enemy.id;
+		var id = enemy.id;
 
-      var enemyInfo = this.getEnemyInfo(enemy, null, null, null, floorId);
-      var locEnemyInfo = this.getEnemyInfo(enemy, null, x, y, floorId);
-      if (
-        !core.flags.enableEnemyPoint ||
-        (locEnemyInfo.atk == enemyInfo.atk &&
-          locEnemyInfo.def == enemyInfo.def &&
-          locEnemyInfo.hp == enemyInfo.hp &&
-          core.plugin.arrsame(locEnemyInfo.special, enemyInfo.special))
-      ) {
-        x = null;
-        y = null;
-      } else {
-        // 检查enemys里面是否使用了存在的内容
-        for (var i = 0; i < enemys.length; ++i) {
-          var one = enemys[i];
-          if (
-            id == one.id &&
-            one.locs != null &&
-            locEnemyInfo.atk == one.atk &&
-            locEnemyInfo.def == one.def &&
-            locEnemyInfo.hp == one.hp &&
-            core.plugin.arrsame(locEnemyInfo.special, one.special)
-          ) {
-            one.locs.push([x, y]);
-            return;
-          }
-        }
-        enemyInfo = locEnemyInfo;
-      }
+		var enemyInfo = this.getEnemyInfo(enemy, null, null, null, floorId);
+		var locEnemyInfo = this.getEnemyInfo(enemy, null, x, y, floorId);
+		if (
+			!core.flags.enableEnemyPoint ||
+			(locEnemyInfo.atk == enemyInfo.atk &&
+				locEnemyInfo.def == enemyInfo.def &&
+				locEnemyInfo.hp == enemyInfo.hp &&
+				core.plugin.arrsame(locEnemyInfo.special, enemyInfo.special))
+		) {
+			x = null;
+			y = null;
+		} else {
+			// 检查enemys里面是否使用了存在的内容
+			for (var i = 0; i < enemys.length; ++i) {
+				var one = enemys[i];
+				if (
+					id == one.id &&
+					one.locs != null &&
+					locEnemyInfo.atk == one.atk &&
+					locEnemyInfo.def == one.def &&
+					locEnemyInfo.hp == one.hp &&
+					core.plugin.arrsame(locEnemyInfo.special, one.special)
+				) {
+					one.locs.push([x, y]);
+					return;
+				}
+			}
+			enemyInfo = locEnemyInfo;
+		}
 
-      var id = enemy.id + ":" + x + ":" + y;
-      if (used[id]) return;
-      used[id] = true;
+		var id = enemy.id + ":" + x + ":" + y;
+		if (used[id]) return;
+		used[id] = true;
 
-      var specialText = core.enemys.getSpecialText(enemy, x, y, floorId);
-      var specialColor = core.enemys.getSpecialColor(enemy, x, y, floorId);
+		var specialText = core.enemys.getSpecialText(enemy, x, y, floorId);
+		var specialColor = core.enemys.getSpecialColor(enemy, x, y, floorId);
 
-      var critical = this.nextCriticals(enemy, 1, x, y, floorId);
-      if (critical.length > 0) critical = critical[0];
+		var critical = this.nextCriticals(enemy, 1, x, y, floorId);
+		if (critical.length > 0) critical = critical[0];
+		var criticalSpeed = core.nextCriticals_speed(enemy, 1, x, y, floorId);
+		if (criticalSpeed.length > 0) criticalSpeed = criticalSpeed[0];
+		var criticalSpell = core.nextCriticals_spell(enemy, 1, x, y, floorId);
+		if (criticalSpell.length > 0) criticalSpell = criticalSpell[0];
+		var e = core.clone(enemy);
+		for (var v in enemyInfo) {
+			e[v] = enemyInfo[v];
+		}
+		if (x != null && y != null) {
+			e.locs = [
+				[x, y]
+			];
+		}
+		e.name = core.getEnemyValue(enemy, "name", x, y, floorId);
+		e.specialText = specialText;
+		e.specialColor = specialColor;
+		e.damage = this.getDamage(enemy, x, y, floorId);
+		e.critical = critical[0];
+		e.criticalDamage = critical[1];
+		e.criticalAtk = [critical[0], critical[1]];
+		e.criticalSpeed = criticalSpeed;
+		e.criticalSpell = criticalSpell;
+		e.defDamage = this._getCurrentEnemys_addEnemy_defDamage(
+			enemy,
+			x,
+			y,
+			floorId
+		);
+		enemys.push(e);
+	};
 
-      var e = core.clone(enemy);
-      for (var v in enemyInfo) {
-        e[v] = enemyInfo[v];
-      }
-      if (x != null && y != null) {
-        e.locs = [[x, y]];
-      }
-      e.name = core.getEnemyValue(enemy, "name", x, y, floorId);
-      e.specialText = specialText;
-      e.specialColor = specialColor;
-      e.damage = this.getDamage(enemy, x, y, floorId);
-      e.critical = critical[0];
-      e.criticalDamage = critical[1];
-      e.defDamage = this._getCurrentEnemys_addEnemy_defDamage(
-        enemy,
-        x,
-        y,
-        floorId
-      );
-      enemys.push(e);
-    };
+	enemys.prototype._getCurrentEnemys_addEnemy_defDamage = function (
+		enemy,
+		x,
+		y,
+		floorId
+	) {
+		var ratio = core.status.maps[floorId || core.status.floorId].ratio || 1;
+		return this.getDefDamage(enemy, ratio, x, y, floorId);
+	};
 
-    enemys.prototype._getCurrentEnemys_addEnemy_defDamage = function (
-      enemy,
-      x,
-      y,
-      floorId
-    ) {
-      var ratio = core.status.maps[floorId || core.status.floorId].ratio || 1;
-      return this.getDefDamage(enemy, ratio, x, y, floorId);
-    };
+	enemys.prototype._getCurrentEnemys_sort = function (enemys) {
+		return enemys.sort(function (a, b) {
+			if (a.damage == b.damage) {
+				return a.money - b.money;
+			}
+			if (a.damage == null) {
+				return 1;
+			}
+			if (b.damage == null) {
+				return -1;
+			}
+			return a.damage - b.damage;
+		});
+	};
 
-    enemys.prototype._getCurrentEnemys_sort = function (enemys) {
-      return enemys.sort(function (a, b) {
-        if (a.damage == b.damage) {
-          return a.money - b.money;
-        }
-        if (a.damage == null) {
-          return 1;
-        }
-        if (b.damage == null) {
-          return -1;
-        }
-        return a.damage - b.damage;
-      });
-    };
+	////// 获得所有特殊属性的名称 //////
+	enemys.prototype.getSpecialText = function (enemy, x, y, floorId) {
+		if (typeof enemy == "string")
+			enemy = this.getEnemyInfo(enemy, null, x, y, floorId);
+		if (!enemy) return [];
+		var special = enemy.special;
+		var text = [];
 
-    ////// 获得所有特殊属性的名称 //////
-    enemys.prototype.getSpecialText = function (enemy, x, y, floorId) {
-      if (typeof enemy == "string")
-        enemy = this.getEnemyInfo(enemy, null, x, y, floorId);
-      if (!enemy) return [];
-      var special = enemy.special;
-      var text = [];
+		var specials = this.getSpecials();
+		if (specials) {
+			for (var i = 0; i < specials.length; i++) {
+				if (this.hasSpecial(special, specials[i][0]))
+					text.push(this._calSpecialContent(enemy, specials[i][1]));
+			}
+		}
+		return text;
+	};
 
-      var specials = this.getSpecials();
-      if (specials) {
-        for (var i = 0; i < specials.length; i++) {
-          if (this.hasSpecial(special, specials[i][0]))
-            text.push(this._calSpecialContent(enemy, specials[i][1]));
-        }
-      }
-      return text;
-    };
+	////// 获得所有特殊属性的颜色 //////
+	enemys.prototype.getSpecialColor = function (enemy, x, y, floorId) {
+		if (typeof enemy == "string")
+			enemy = this.getEnemyInfo(enemy, null, x, y, floorId);
+		if (!enemy) return [];
+		var special = enemy.special;
+		var colors = [];
 
-    ////// 获得所有特殊属性的颜色 //////
-    enemys.prototype.getSpecialColor = function (enemy, x, y, floorId) {
-      if (typeof enemy == "string")
-        enemy = this.getEnemyInfo(enemy, null, x, y, floorId);
-      if (!enemy) return [];
-      var special = enemy.special;
-      var colors = [];
+		var specials = this.getSpecials();
+		if (specials) {
+			for (var i = 0; i < specials.length; i++) {
+				if (this.hasSpecial(special, specials[i][0]))
+					colors.push(specials[i][3] || null);
+			}
+		}
+		return colors;
+	};
 
-      var specials = this.getSpecials();
-      if (specials) {
-        for (var i = 0; i < specials.length; i++) {
-          if (this.hasSpecial(special, specials[i][0]))
-            colors.push(specials[i][3] || null);
-        }
-      }
-      return colors;
-    };
+	////// 获得所有特殊属性的额外标记 //////
+	enemys.prototype.getSpecialFlag = function (enemy, x, y, floorId) {
+		if (typeof enemy == "string")
+			enemy = getEnemyInfo(enemy, null, x, y, floorId);
+		if (!enemy) return [];
+		var special = enemy.special;
+		var flag = 0;
 
-    ////// 获得所有特殊属性的额外标记 //////
-    enemys.prototype.getSpecialFlag = function (enemy, x, y, floorId) {
-      if (typeof enemy == "string")
-        enemy = getEnemyInfo(enemy, null, x, y, floorId);
-      if (!enemy) return [];
-      var special = enemy.special;
-      var flag = 0;
+		var specials = this.getSpecials();
+		if (specials) {
+			for (var i = 0; i < specials.length; i++) {
+				if (this.hasSpecial(special, specials[i][0]))
+					flag |= specials[i][4] || 0;
+			}
+		}
+		return flag;
+	};
 
-      var specials = this.getSpecials();
-      if (specials) {
-        for (var i = 0; i < specials.length; i++) {
-          if (this.hasSpecial(special, specials[i][0]))
-            flag |= specials[i][4] || 0;
-        }
-      }
-      return flag;
-    };
+	////// 获得每个特殊属性的说明 //////
+	enemys.prototype.getSpecialHint = function (enemy, special) {
+		var specials = this.getSpecials();
+		if (special == null) {
+			if (specials == null) return [];
+			var hints = [];
+			for (var i = 0; i < specials.length; i++) {
+				if (this.hasSpecial(enemy, specials[i][0]))
+					hints.push(
+						"\r[" +
+						core.arrayToRGBA(specials[i][3] || "#FF6A6A") +
+						"]\\d" +
+						this._calSpecialContent(enemy, specials[i][1]) +
+						":\\d\r[]" +
+						this._calSpecialContent(enemy, specials[i][2])
+					);
+			}
+			return hints;
+		}
 
-    ////// 获得每个特殊属性的说明 //////
-    enemys.prototype.getSpecialHint = function (enemy, special) {
-      var specials = this.getSpecials();
-      if (special == null) {
-        if (specials == null) return [];
-        var hints = [];
-        for (var i = 0; i < specials.length; i++) {
-          if (this.hasSpecial(enemy, specials[i][0]))
-            hints.push(
-              "\r[" +
-                core.arrayToRGBA(specials[i][3] || "#FF6A6A") +
-                "]\\d" +
-                this._calSpecialContent(enemy, specials[i][1]) +
-                ":\\d\r[]" +
-                this._calSpecialContent(enemy, specials[i][2])
-            );
-        }
-        return hints;
-      }
-
-      if (specials == null) return "";
-      for (var i = 0; i < specials.length; i++) {
-        if (special == specials[i][0])
-          return (
-            "\r[#FF6A6A]\\d" +
-            this._calSpecialContent(enemy, specials[i][1]) +
-            ":\\d\r[]" +
-            this._calSpecialContent(enemy, specials[i][2])
-          );
-      }
-      return "";
-    };
-    ui.prototype._drawBook_drawName = function (
-      index,
-      enemy,
-      top,
-      left,
-      width
-    ) {
-      // 绘制第零列(名称和特殊属性)
-      // 如果需要添加自己的比如怪物的称号等,也可以在这里绘制
-      core.setTextAlign("ui", "center");
-      if (core.enemys.getSpecialText(enemy).length == 0) {
-        core.fillText(
-          "ui",
-          enemy.name,
-          left + width / 2,
-          top + 35,
-          "#DDDDDD",
-          this._buildFont(17, true),
-          width
-        );
-      } else {
-        core.fillText(
-          "ui",
-          enemy.name,
-          left + width / 2,
-          top + 28,
-          "#DDDDDD",
-          this._buildFont(17, true),
-          width
-        );
-        switch (core.enemys.getSpecialText(enemy).length) {
-          case 1:
-            core.fillText(
-              "ui",
-              core.enemys.getSpecialText(enemy)[0],
-              left + width / 2,
-              top + 50,
-              core.arrayToRGBA(
-                (core.enemys.getSpecialColor(enemy) || [])[0] || "#FF6A6A"
-              ),
-              this._buildFont(15, true),
-              width
-            );
-            break;
-          case 2:
-            // Step 1: 计算字体
-            var text =
-              core.enemys.getSpecialText(enemy)[0] +
-              "  " +
-              core.enemys.getSpecialText(enemy)[1];
-            core.setFontForMaxWidth(
-              "ui",
-              text,
-              width,
-              this._buildFont(15, true)
-            );
-            // Step 2: 计算总宽度
-            var totalWidth = core.calWidth("ui", text);
-            var leftWidth = core.calWidth(
-              "ui",
-              core.enemys.getSpecialText(enemy)[0]
-            );
-            var rightWidth = core.calWidth(
-              "ui",
-              core.enemys.getSpecialText(enemy)[1]
-            );
-            // Step 3: 绘制
-            core.fillText(
-              "ui",
-              core.enemys.getSpecialText(enemy)[0],
-              left + (width + leftWidth - totalWidth) / 2,
-              top + 50,
-              core.arrayToRGBA(
-                (core.enemys.getSpecialColor(enemy) || [])[0] || "#FF6A6A"
-              )
-            );
-            core.fillText(
-              "ui",
-              core.enemys.getSpecialText(enemy)[1],
-              left + (width + totalWidth - rightWidth) / 2,
-              top + 50,
-              core.arrayToRGBA(
-                (core.enemys.getSpecialColor(enemy) || [])[1] || "#FF6A6A"
-              )
-            );
-            break;
-          default:
-            core.fillText(
-              "ui",
-              "多属性...",
-              left + width / 2,
-              top + 50,
-              "#FF6A6A",
-              this._buildFont(15, true),
-              width
-            );
-        }
-      }
-    };
-    ui.prototype._drawBookDetail_getInfo = function (index) {
-      var floorId =
-        core.floorIds[(core.status.event.ui || {}).index] ||
-        core.status.floorId;
-      // 清除浏览地图时的光环缓存
-      if (floorId != core.status.floorId && core.status.checkBlock) {
-        core.status.checkBlock.cache = {};
-      }
-      var enemys = core.enemys.getCurrentEnemys(floorId);
-      console.log(123);
-      if (enemys.length == 0) return [];
-      index = core.clamp(index, 0, enemys.length - 1);
-      var enemy = enemys[index];
-      var texts = core.enemys.getSpecialHint(enemy);
-      if (texts.length == 0) texts.push("该怪物无特殊属性。");
-      if (enemy.description) texts.push(enemy.description + "\r");
-      this._drawBookDetail_getTexts(enemy, floorId, texts);
-      texts.push("");
-      return [enemy, texts];
-    };
-  },
+		if (specials == null) return "";
+		for (var i = 0; i < specials.length; i++) {
+			if (special == specials[i][0])
+				return (
+					"\r[#FF6A6A]\\d" +
+					this._calSpecialContent(enemy, specials[i][1]) +
+					":\\d\r[]" +
+					this._calSpecialContent(enemy, specials[i][2])
+				);
+		}
+		return "";
+	};
+	ui.prototype._drawBook_drawName = function (
+		index,
+		enemy,
+		top,
+		left,
+		width
+	) {
+		// 绘制第零列(名称和特殊属性)
+		// 如果需要添加自己的比如怪物的称号等,也可以在这里绘制
+		core.setTextAlign("ui", "center");
+		if (core.enemys.getSpecialText(enemy).length == 0) {
+			core.fillText(
+				"ui",
+				enemy.name,
+				left + width / 2,
+				top + 35,
+				"#DDDDDD",
+				this._buildFont(17, true),
+				width
+			);
+		} else {
+			core.fillText(
+				"ui",
+				enemy.name,
+				left + width / 2,
+				top + 28,
+				"#DDDDDD",
+				this._buildFont(17, true),
+				width
+			);
+			switch (core.enemys.getSpecialText(enemy).length) {
+			case 1:
+				core.fillText(
+					"ui",
+					core.enemys.getSpecialText(enemy)[0],
+					left + width / 2,
+					top + 50,
+					core.arrayToRGBA(
+						(core.enemys.getSpecialColor(enemy) || [])[0] || "#FF6A6A"
+					),
+					this._buildFont(15, true),
+					width
+				);
+				break;
+			case 2:
+				// Step 1: 计算字体
+				var text =
+					core.enemys.getSpecialText(enemy)[0] +
+					"  " +
+					core.enemys.getSpecialText(enemy)[1];
+				core.setFontForMaxWidth(
+					"ui",
+					text,
+					width,
+					this._buildFont(15, true)
+				);
+				// Step 2: 计算总宽度
+				var totalWidth = core.calWidth("ui", text);
+				var leftWidth = core.calWidth(
+					"ui",
+					core.enemys.getSpecialText(enemy)[0]
+				);
+				var rightWidth = core.calWidth(
+					"ui",
+					core.enemys.getSpecialText(enemy)[1]
+				);
+				// Step 3: 绘制
+				core.fillText(
+					"ui",
+					core.enemys.getSpecialText(enemy)[0],
+					left + (width + leftWidth - totalWidth) / 2,
+					top + 50,
+					core.arrayToRGBA(
+						(core.enemys.getSpecialColor(enemy) || [])[0] || "#FF6A6A"
+					)
+				);
+				core.fillText(
+					"ui",
+					core.enemys.getSpecialText(enemy)[1],
+					left + (width + totalWidth - rightWidth) / 2,
+					top + 50,
+					core.arrayToRGBA(
+						(core.enemys.getSpecialColor(enemy) || [])[1] || "#FF6A6A"
+					)
+				);
+				break;
+			default:
+				core.fillText(
+					"ui",
+					"多属性...",
+					left + width / 2,
+					top + 50,
+					"#FF6A6A",
+					this._buildFont(15, true),
+					width
+				);
+			}
+		}
+	};
+	ui.prototype._drawBookDetail_getInfo = function (index) {
+		var floorId =
+			core.floorIds[(core.status.event.ui || {}).index] ||
+			core.status.floorId;
+		// 清除浏览地图时的光环缓存
+		if (floorId != core.status.floorId && core.status.checkBlock) {
+			core.status.checkBlock.cache = {};
+		}
+		var enemys = core.enemys.getCurrentEnemys(floorId);
+		console.log(123);
+		if (enemys.length == 0) return [];
+		index = core.clamp(index, 0, enemys.length - 1);
+		var enemy = enemys[index],
+			enemyId = enemy.id;
+		var texts = core.enemys.getSpecialHint(enemyId);
+		if (texts.length == 0) texts.push("该怪物无特殊属性。");
+		if (enemy.description) texts.push(enemy.description + "\r");
+		this._drawBookDetail_getTexts(enemy, floorId, texts);
+		texts.push("");
+		return [enemy, texts];
+	};
+},
     "一防减伤": function () {
-    // 在此增加新插件
-    ui.prototype._drawBook_drawRow3 = function (
-      index,
-      enemy,
-      top,
-      left,
-      width,
-      position
-    ) {
-      // 绘制第三行
-      core.setTextAlign("ui", "left");
-      var b13 = this._buildFont(13, true),
-        f13 = this._buildFont(13, false);
-      var col1 = left,
-        col2 = left + (width * 9) / 25,
-        col3 = left + (width * 17) / 25;
-      core.fillText("ui", "临界", col1, position, "#DDDDDD", f13);
-      core.fillText(
-        "ui",
-        core.formatBigNumber(enemy.critical || 0),
-        col1 + 30,
-        position,
-        null,
-        b13
-      );
-      core.fillText("ui", "减伤", col2, position, null, f13);
-      core.fillText(
-        "ui",
-        core.formatBigNumber(enemy.criticalDamage || 0),
-        col2 + 30,
-        position,
-        null,
-        b13
-      );
-      //core.fillText('ui', '加防', col3, position, null, f13);
-      core.fillText("ui", "1防", col3, position, null, f13);
-      core.fillText(
-        "ui",
-        core.formatBigNumber(enemy.defDamage || 0),
-        col3 + 30,
-        position,
-        null,
-        b13
-      );
-    };
-    ////// 1防减伤计算 //////
-    enemys.prototype.getDefDamage = function (enemy, k, x, y, floorId) {
-      if (typeof enemy == "string") enemy = core.material.enemys[enemy];
-      k = k || 1;
-      var nowDamage = this._getDamage(enemy, null, x, y, floorId);
-      var nextDamage = this._getDamage(
-        enemy,
-        { def: core.status.hero.def + k },
-        x,
-        y,
-        floorId
-      );
-      if (nowDamage == null || nextDamage == null) return "???";
-      return nowDamage - nextDamage;
-    };
-    //防御倍数
-    enemys.prototype._getCurrentEnemys_addEnemy_defDamage = function (
-      enemy,
-      x,
-      y,
-      floorId
-    ) {
-      var ratio = core.status.maps[floorId || core.status.floorId].ratio || 1;
-      //第一行为按照ratio值计算减防,第二行为1防减伤
-      //return this.getDefDamage(enemy, ratio, x, y, floorId);
-      return this.getDefDamage(enemy, null, x, y, floorId);
-    };
-  },
+	// 在此增加新插件
+	// 
+
+	ui.prototype._drawBook_drawRow3 = function (
+		index,
+		enemy,
+		top,
+		left,
+		width,
+		position
+	) {
+		// 绘制第三行
+		core.setTextAlign("ui", "left");
+		var b13 = this._buildFont(13, true),
+			f13 = this._buildFont(13, false);
+		var col1 = left,
+			col2 = left + (width * 9) / 25,
+			col3 = left + (width * 17) / 25;
+		core.fillText('ui', '攻击临界', col1 - 50, position, '#DDDDDD', f13);
+		core.fillText('ui', `[${core.formatBigNumber(enemy.criticalAtk?.[0] || 0)},${core.formatBigNumber(enemy.criticalAtk?.[1] || 0)}]`, col1 + 10, position, null, b13);
+		core.fillText('ui', '法强临界', col2 - 33, position, null, f13);
+		core.fillText('ui', `[${core.formatBigNumber(enemy.criticalSpell[0] || 0)},${core.formatBigNumber(enemy.criticalSpell?.[1] || 0)}]`, col2 + 27, position, null, b13);
+		//core.fillText('ui', '加防', col3, position, null, f13);
+		core.fillText("ui", "1防", col3, position, null, f13);
+		core.fillText(
+			"ui",
+			core.formatBigNumber(enemy.defDamage || 0),
+			col3 + 30,
+			position,
+			null,
+			b13
+		);
+	};
+	////// 1防减伤计算 //////
+	enemys.prototype.getDefDamage = function (enemy, k, x, y, floorId) {
+		if (typeof enemy == "string") enemy = core.material.enemys[enemy];
+		k = k || 1;
+		var nowDamage = this._getDamage(enemy, null, x, y, floorId);
+		var nextDamage = this._getDamage(
+			enemy, { def: core.status.hero.def + k },
+			x,
+			y,
+			floorId
+		);
+		if (nowDamage == null || nextDamage == null) return "???";
+		return nowDamage - nextDamage;
+	};
+	//防御倍数
+	enemys.prototype._getCurrentEnemys_addEnemy_defDamage = function (
+		enemy,
+		x,
+		y,
+		floorId
+	) {
+		var ratio = core.status.maps[floorId || core.status.floorId].ratio || 1;
+		//第一行为按照ratio值计算减防,第二行为1防减伤
+		//return this.getDefDamage(enemy, ratio, x, y, floorId);
+		return this.getDefDamage(enemy, null, x, y, floorId);
+	};
+},
     "新道具栏/装备栏": function () {
-    // 在此增加新插件
-    // 注:///// *** 裹起来的区域: 该区域内参数可以随意更改调整ui绘制 不会影响总体布局
-    // 请尽量修改该区域而不是其他区域 修改的时候最好可以对照现有ui修改
+	// 这个插件有点离谱 个人觉得参数过多只会降低可读性,还不如硬编码
 
-    ///// *** 道具类型
-    // cls对应name
-    var itemClsName = {
-      constants: "永久道具",
-      tools: "消耗道具",
-    };
-    // 一页最大放的道具数量 将把整个道具左栏分成num份 每份是一个道具项
-    var itemNum = 12;
-    ///// ***
+	// 注:///// *** 裹起来的区域: 该区域内参数可以随意更改调整ui绘制 不会影响总体布局
+	// 请尽量修改该区域而不是其他区域 修改的时候最好可以对照现有ui修改
 
-    // 背景设置
-    this.drawBoxBackground = function (ctx) {
-      core.setTextAlign(ctx, "left");
-      core.clearMap(ctx);
-      core.deleteCanvas("_selector");
-      var info = core.status.thisUIEventInfo || {};
+	///// *** 道具类型
+	// cls对应name
+	var itemClsName = {
+		constants: "永久道具",
+		tools: "消耗道具",
+	};
+	// 一页最大放的道具数量 将把整个道具左栏分成num份 每份是一个道具项
+	var itemNum = 12;
+	///// ***
 
-      ///// *** 背景设置
-      var max = core.__PIXELS__;
-      var x = 2,
-        y = x,
-        w = max - x * 2,
-        h = w;
-      var borderWidth = 2,
-        borderRadius = 5, // radius:圆角矩形的圆角半径
-        borderStyle = "#fff";
-      var backgroundColor = "gray";
-      // 设置背景不透明度(0.85)
-      var backgroundAlpha = 0.85;
-      ///// ***
+	// 背景设置
+	function drawBoxBackground(ctx) {
+		core.setTextAlign(ctx, "left");
+		core.clearMap(ctx);
+		core.deleteCanvas("_selector");
+		var info = core.status.thisUIEventInfo || {};
 
-      var start_x = x + borderWidth / 2,
-        start_y = y + borderWidth / 2,
-        width = max - start_x * 2,
-        height = max - start_y * 2;
+		///// *** 背景设置
+		var max = core.__PIXELS__;
+		var x = 2,
+			y = x,
+			w = max - x * 2,
+			h = w;
+		var borderWidth = 2,
+			borderRadius = 5, // radius:圆角矩形的圆角半径
+			borderStyle = "#fff";
+		var backgroundColor = "gray";
+		// 设置背景不透明度(0.85)
+		var backgroundAlpha = 0.85;
+		///// ***
 
-      // 渐变色背景的一个例子(黑色渐变白色):
-      // 有关渐变色的具体知识请网上搜索canvas createGradient了解
-      /*
+		var start_x = x + borderWidth / 2,
+			start_y = y + borderWidth / 2,
+			width = max - start_x * 2,
+			height = max - start_y * 2;
+
+		// 渐变色背景的一个例子(黑色渐变白色):
+		// 有关渐变色的具体知识请网上搜索canvas createGradient了解
+		/*
 		   var grd = ctx.createLinearGradient(x, y, x + w, y);
 		   grd.addColorStop(0, "black");
 		   grd.addColorStop(1, "white");
 		   backgroundColor = grd;
 		*/
-      // 使用图片背景要注释掉下面的strokeRect和fillRoundRect
-      // 图片背景的一个例子:
-      /*
+		// 使用图片背景要注释掉下面的strokeRect和fillRoundRect
+		// 图片背景的一个例子:
+		/*
 		   core.drawImage(ctx, "xxx.png", x, y, w, h);
 		   core.strokeRect(ctx, x, y, w, h, borderStyle, borderWidth);
 		*/
-      core.setAlpha(ctx, backgroundAlpha);
-      core.strokeRoundRect(
-        ctx,
-        x,
-        y,
-        w,
-        h,
-        borderRadius,
-        borderStyle,
-        borderWidth
-      );
-      core.fillRoundRect(
-        ctx,
-        start_x,
-        start_y,
-        width,
-        height,
-        borderRadius,
-        backgroundColor
-      );
-      core.setAlpha(ctx, 1);
-
-      ///// *** 左栏配置
-      var leftbar_height = height;
-      // 左边栏宽度(width*0.6) 本身仅为坐标使用 需要与底下的rightbar_width(width*0.4)同时更改
-      var leftbar_width = width * 0.6;
-      ///// ***
-
-      // xxx_right参数 代表最右侧坐标
-      var leftbar_right = start_x + leftbar_width - borderWidth / 2;
-      var leftbar_bottom = start_y + leftbar_height;
-      var leftbar_x = start_x;
-      var leftbar_y = start_y;
-
-      ///// *** 道具栏配置
-      var boxName_color = "#fff";
-      var boxName_fontSize = 15;
-      var boxName_font = core.ui._buildFont(boxName_fontSize, true);
-      var arrow_x = 10 + start_x;
-      var arrow_y = 10 + start_y;
-      var arrow_width = 20;
-      var arrow_style = "white";
-      // 暂时只能是1 否则不太行 等待新样板(2.7.3)之后对drawArrow做优化
-      var arrow_lineWidth = 1;
-      // 右箭头
-      var rightArrow_right = leftbar_right - 10;
-      // 道具内栏顶部坐标 本质是通过该项 控制(道具栏顶部文字和箭头)与道具内栏顶部的间隔
-      var itembar_top = arrow_y + 15;
-      ///// ***
-
-      var itembar_right = rightArrow_right;
-      var boxName =
-        core.status.event.id == "toolbox"
-          ? "\r[yellow]道具栏\r | 装备栏"
-          : "道具栏 | \r[yellow]装备栏\r";
-      core.drawArrow(
-        ctx,
-        arrow_x + arrow_width,
-        arrow_y,
-        arrow_x,
-        arrow_y,
-        arrow_style,
-        arrow_lineWidth
-      );
-      core.drawArrow(
-        ctx,
-        rightArrow_right - arrow_width,
-        arrow_y,
-        rightArrow_right,
-        arrow_y,
-        arrow_style,
-        arrow_lineWidth
-      );
-      core.setTextAlign(ctx, "center");
-      core.setTextBaseline(ctx, "middle");
-      var changeBox = function () {
-        var id = core.status.event.id;
-        core.closePanel();
-        if (id == "toolbox") core.openEquipbox();
-        else core.openToolbox();
-      };
-      core.fillText(
-        ctx,
-        boxName,
-        (leftbar_right + leftbar_x) / 2,
-        arrow_y + 2,
-        boxName_color,
-        boxName_font
-      );
-
-      ///// *** 底栏按钮
-      var pageBtn_radius = 8;
-      // xxx_left 最左侧坐标
-      var pageBtn_left = leftbar_x + 3;
-      var pageBtn_right = leftbar_right - 3;
-      // xxx_bottom 最底部坐标
-      var pageBtn_bottom = leftbar_bottom - 2;
-      var pageBtn_borderStyle = "#fff";
-      var pageBtn_borderWidth = 2;
-      var pageText_color = "#fff";
-      // 底部按钮与上面的道具内栏的间隔大小
-      var bottomSpace = 8;
-      ///// ***
-
-      core.drawItemListbox_setPageBtn(
-        ctx,
-        pageBtn_left,
-        pageBtn_right,
-        pageBtn_bottom,
-        pageBtn_radius,
-        pageBtn_borderStyle,
-        pageBtn_borderWidth
-      );
-      var page = info.page || 1;
-      var pageFontSize = pageBtn_radius * 2 - 4;
-      var pageFont = core.ui._buildFont(pageFontSize);
-      core.setPageItems(page);
-      var num = itemNum;
-      if (core.status.event.id == "equipbox") num -= 5;
-      var maxPage = info.maxPage;
-      var pageText = page + " / " + maxPage;
-      core.setTextAlign(ctx, "center");
-      core.setTextBaseline(ctx, "bottom");
-      core.fillText(
-        ctx,
-        pageText,
-        (leftbar_x + leftbar_right) / 2,
-        pageBtn_bottom,
-        pageText_color,
-        pageFont
-      );
-      core.addUIEventListener(
-        start_x,
-        start_y,
-        leftbar_right - start_x,
-        arrow_y - start_y + 13,
-        changeBox
-      );
-      var itembar_height = Math.ceil(
-        pageBtn_bottom -
-          pageBtn_radius * 2 -
-          pageBtn_borderWidth / 2 -
-          bottomSpace -
-          itembar_top
-      );
-      var oneItemHeight = (itembar_height - 4) / itemNum;
-      return {
-        x: start_x,
-        y: start_y,
-        width: width,
-        height: height,
-        leftbar_right: leftbar_right,
-        obj: {
-          x: arrow_x,
-          y: itembar_top,
-          width: itembar_right - arrow_x,
-          height: itembar_height,
-          oneItemHeight: oneItemHeight,
-        },
-      };
-    };
-
-    this.drawItemListbox = function (ctx, obj) {
-      ctx = ctx || core.canvas.ui;
-      var itembar_x = obj.x,
-        itembar_y = obj.y,
-        itembar_width = obj.width,
-        itembar_height = obj.height,
-        itemNum = obj.itemNum,
-        oneItemHeight = obj.oneItemHeight;
-      var itembar_right = itembar_x + itembar_width;
-      var info = core.status.thisUIEventInfo || {};
-      var obj = {};
-      var page = info.page || 1,
-        index = info.index,
-        select = info.select || {};
-
-      ///// *** 道具栏内栏配置
-      var itembar_style = "black";
-      var itembar_alpha = 0.7;
-      // 一个竖屏下减少道具显示的例子:
-      // if (core.domStyle.isVertical) itemNum = 10;
-      // 每个道具项的上下空隙占总高度的比例
-      var itembar_marginHeightRatio = 0.2;
-      // 左右间隔空隙
-      var item_marginLeft = 2;
-      var item_x = itembar_x + 2,
-        item_y = itembar_y + 2,
-        item_right = itembar_right - 2,
-        itemName_color = "#fff";
-      // 修改此项以更换闪烁光标
-      var item_selector = "winskin.webp";
-      ///// ***
-
-      core.setAlpha(ctx, itembar_alpha);
-      core.fillRect(
-        ctx,
-        itembar_x,
-        itembar_y,
-        itembar_width,
-        itembar_height,
-        itembar_style
-      );
-      core.setAlpha(ctx, 1);
-      var pageItems = core.setPageItems(page);
-      var marginHeight = itembar_marginHeightRatio * oneItemHeight;
-      core.setTextBaseline(ctx, "middle");
-      var originColor = itemName_color;
-      for (var i = 0; i < pageItems.length; i++) {
-        itemName_color = originColor;
-        var item = pageItems[i];
-        // 设置某个的字体颜色的一个例子
-        // if (item.id == "xxx") itemName_color = "green";
-        core.drawItemListbox_drawItem(
-          ctx,
-          item_x,
-          item_right,
-          item_y,
-          oneItemHeight,
-          item_marginLeft,
-          marginHeight,
-          itemName_color,
-          pageItems[i]
-        );
-        if (index == i + 1)
-          core.ui._drawWindowSelector(
-            item_selector,
-            item_x + 1,
-            item_y - 1,
-            item_right - item_x - 2,
-            oneItemHeight - 2
-          );
-        item_y += oneItemHeight;
-      }
-    };
-
-    this.drawToolboxRightbar = function (ctx, obj) {
-      ctx = ctx || core.canvas.ui;
-      var info = core.status.thisUIEventInfo || {};
-      var page = info.page || 1,
-        index = info.index || 1,
-        select = info.select || {};
-      var start_x = obj.x,
-        start_y = obj.y,
-        width = obj.width,
-        height = obj.height;
-      var toolboxRight = start_x + width,
-        toolboxBottom = start_y + height;
-
-      ///// *** 侧边栏(rightbar)背景设置(物品介绍)
-      var rightbar_width = width * 0.4;
-      var rightbar_height = height;
-      var rightbar_lineWidth = 2;
-      var rightbar_lineStyle = "#fff";
-      ///// ***
-
-      var rightbar_x = toolboxRight - rightbar_width - rightbar_lineWidth / 2;
-      var rightbar_y = start_y;
-      core.drawLine(
-        ctx,
-        rightbar_x,
-        rightbar_y,
-        rightbar_x,
-        rightbar_y + rightbar_height,
-        rightbar_lineStyle,
-        rightbar_lineWidth
-      );
-
-      // 获取道具id(有可能为null)
-      var itemId = select.id;
-      var item = core.material.items[itemId];
-
-      ///// *** 侧边栏物品Icon信息
-      var iconRect_y = rightbar_y + 10;
-      // space:间距
-      // 这里布局设定iconRect与侧边栏左边框 itemName与工具栏右边框 itemRect与itemName的间距均为space
-      var space = 15;
-      var iconRect_x = rightbar_x + space;
-      var iconRect_radius = 2,
-        iconRect_width = 32,
-        iconRect_height = 32,
-        iconRect_style = "#fff",
-        iconRect_lineWidth = 2;
-      ///// ***
-
-      var iconRect_bottom = iconRect_y + iconRect_height,
-        iconRect_right = iconRect_x + iconRect_width;
-
-      ///// *** 侧边栏各项信息
-      var itemTextFontSize = 15,
-        itemText_x = iconRect_x - 4,
-        itemText_y = Math.floor(start_y + rightbar_height * 0.25), // 坐标取整防止模糊
-        itemClsFontSize = 15,
-        itemClsFont = core.ui._buildFont(itemClsFontSize),
-        itemClsColor = "#fff",
-        itemCls_x = itemText_x - itemClsFontSize / 2,
-        itemCls_middle = (iconRect_bottom + itemText_y) / 2, //_middle代表文字的中心y坐标
-        itemNameFontSize = 18,
-        itemNameColor = "#fff",
-        itemNameFont = core.ui._buildFont(itemNameFontSize, true);
-      var itemName_x = iconRect_right + space;
-      var itemName_middle =
-        iconRect_y + iconRect_height / 2 + iconRect_lineWidth;
-      // 修改这里可以编辑未选中道具时的默认值
-      var defaultItem = {
-        cls: "constants",
-        name: "未知道具",
-        text: "没有道具最永久",
-      };
-      var defaultEquip = {
-        cls: "equips",
-        name: "未知装备",
-        text: "一无所有,又何尝不是一种装备",
-        equipCls: "无",
-        equip: {
-          type: "装备",
-        },
-      };
-      ///// ***
-
-      var originItem = item;
-      if (core.status.event.id == "equipbox") item = item || defaultEquip;
-      item = item || defaultItem;
-      var itemCls = item.cls,
-        itemName = item.name,
-        itemText = item.text;
-      itemText = core.replaceText(itemText);
-      if (itemText[0] == "," || itemText[0] == ",")
-        itemText = itemText.substring(1);
-
-      /* 一个根据道具id修改道具名字(右栏)的例子
-       * if (item.id == "xxx") itemNameColor = "red";
-       */
-      var itemClsName = core.getItemClsName(item);
-      var itemNameMaxWidth =
-        rightbar_width - iconRect_width - iconRect_lineWidth * 2 - space * 2;
-      core.strokeRoundRect(
-        ctx,
-        iconRect_x,
-        iconRect_y,
-        iconRect_width,
-        iconRect_height,
-        iconRect_radius,
-        iconRect_style,
-        iconRect_lineWidth
-      );
-      if (item.id)
-        core.drawIcon(
-          ctx,
-          item.id,
-          iconRect_x + iconRect_lineWidth / 2,
-          iconRect_y + iconRect_lineWidth / 2,
-          iconRect_width - iconRect_lineWidth,
-          iconRect_height - iconRect_lineWidth
-        );
-      core.setTextAlign(ctx, "left");
-      core.setTextBaseline(ctx, "middle");
-      if (itemCls === "equips" && item.id) {
-        itemName = "【" + item.equipCls + "】" + itemName;
-      }
-      core.fillText(
-        ctx,
-        itemName,
-        itemName_x,
-        itemName_middle,
-        itemNameColor,
-        itemNameFont,
-        itemNameMaxWidth
-      );
-      if (!item.equip)
-        core.fillText(
-          ctx,
-          "【" + itemClsName + "】",
-          itemCls_x,
-          itemCls_middle,
-          itemClsColor,
-          itemClsFont
-        );
-
-      var statusText = "";
-      if (core.status.event.id == "equipbox") {
-        var type = item.equip.type;
-        if (typeof type == "string") type = core.getEquipTypeByName(type);
-        var compare = core.compareEquipment(item.id, core.getEquip(type));
-        var compare2;
-        if (item.equipCls === "双手剑")
-          compare2 = core.compareEquipment(null, core.getEquip(1));
-        if (info.select.action == "unload")
-          compare = core.compareEquipment(null, item.id);
-        // --- 变化值...
-        for (var name in core.status.hero) {
-          if (typeof core.status.hero[name] != "number") continue;
-          var nowValue = core.getRealStatus(name);
-          // 查询新值
-          var newValue = Math.floor(
-            ((core.getStatus(name) +
-              (compare.value[name] || 0) +
-              (compare2?.value[name] || 0)) *
-              (core.getBuff(name) * 100 +
-                (compare.percentage[name] || 0) +
-                (compare2?.percentage[name] || 0))) /
-              100
-          );
-          if (nowValue == newValue) continue;
-          var color = newValue > nowValue ? "#00FF00" : "#FF0000";
-          nowValue = core.formatBigNumber(nowValue);
-          newValue = core.formatBigNumber(newValue);
-          statusText +=
-            core.getStatusLabel(name) +
-            " " +
-            nowValue +
-            "->\r[" +
-            color +
-            "]" +
-            newValue +
-            "\r\n";
-        }
-      }
-      itemText = statusText + itemText;
-      if (item.equip) {
-        core.drawTextContent(ctx, itemText, {
-          left: itemText_x,
-          top: itemCls_middle,
-          bold: false,
-          color: "white",
-          align: "left",
-          fontSize: itemTextFontSize,
-          maxWidth:
-            rightbar_width -
-            (itemText_x - rightbar_x) * 2 +
-            itemTextFontSize / 2,
-        });
-      } else {
-        core.drawTextContent(ctx, itemText, {
-          left: itemText_x,
-          top: itemText_y,
-          bold: false,
-          color: "white",
-          align: "left",
-          fontSize: itemTextFontSize,
-          maxWidth:
-            rightbar_width -
-            (itemText_x - rightbar_x) * 2 +
-            itemTextFontSize / 2,
-        });
-      }
-
-      ///// *** 退出按钮设置
-      var btnRadius = 10;
-      var btnBorderWidth = 2;
-      var btnRight = toolboxRight - 2;
-      var btnBottom = toolboxBottom - 2;
-      var btnBorderStyle = "#fff";
-      ///// ***
-
-      // 获取圆心位置
-      var btn_x = btnRight - btnRadius - btnBorderWidth / 2,
-        btn_y = btnBottom - btnRadius - btnBorderWidth / 2;
-      core.drawToolbox_setExitBtn(
-        ctx,
-        btn_x,
-        btn_y,
-        btnRadius,
-        btnBorderStyle,
-        btnBorderWidth
-      );
-
-      ///// *** 使用按钮设置
-      var useBtnHeight = btnRadius * 2;
-      // 这里不设置useBtnWidth而是根据各项数据自动得出width
-      var useBtnRadius = useBtnHeight / 2;
-      var useBtn_x = rightbar_x + 4,
-        useBtn_y = btnBottom - useBtnHeight;
-      var useBtnBorderStyle = "#fff";
-      var useBtnBorderWidth = btnBorderWidth;
-      ///// ***
-
-      core.drawToolbox_setUseBtn(
-        ctx,
-        useBtn_x,
-        useBtn_y,
-        useBtnRadius,
-        useBtnHeight,
-        useBtnBorderStyle,
-        useBtnBorderWidth
-      );
-    };
-
-    this.drawEquipbox_drawOthers = function (ctx, obj) {
-      var info = core.status.thisUIEventInfo;
-
-      ///// *** 装备格设置
-      var equipList_lineWidth = 2;
-      var equipList_boxSize = 32;
-      var equipList_borderWidth = 2;
-      var equipList_borderStyle = "#fff";
-      var equipList_nameColor = "#fff";
-      ///// ***
-
-      var equipList_x = obj.x + 4,
-        equipList_bottom = obj.obj.y - equipList_lineWidth,
-        equipList_y = equipList_bottom - obj.obj.oneItemHeight * reduceItem - 2,
-        equipList_height = equipList_bottom - equipList_y;
-      var equipList_right = obj.leftbar_right,
-        equipList_width = equipList_right - equipList_x;
-      core.drawLine(
-        ctx,
-        obj.x,
-        equipList_bottom + equipList_lineWidth / 2,
-        equipList_right,
-        equipList_bottom + equipList_lineWidth / 2,
-        equipList_borderStyle,
-        equipList_lineWidth
-      );
-      var toDrawList = core.status.globalAttribute.equipName,
-        len = toDrawList.length;
-
-      ///// *** 装备格设置
-      var maxItem = 2;
-      var box_width = 32,
-        box_height = 32,
-        box_borderStyle = "#fff",
-        box_selectBorderStyle = "gold", // 选中的装备格的颜色
-        box_borderWidth = 2;
-      var boxName_fontSize = 14,
-        boxName_space = 2,
-        boxName_color = "#fff"; // 装备格名称与上面的装备格框的距离
-      var maxLine = Math.ceil(len / maxItem);
-      ///// ***
-      var l = Math.sqrt(len);
-      if (Math.pow(l) == len && len != 4) {
-        if (l <= maxItem) maxItem = l;
-      }
-      maxItem = Math.min(toDrawList.length, maxItem);
-      info.equips = maxItem;
-
-      var boxName_font = core.ui._buildFont(boxName_fontSize);
-      // 总宽高减去所有装备格宽高得到空隙大小
-      var oneBoxWidth = box_width + box_borderWidth * 2;
-      var oneBoxHeight =
-        box_height + boxName_fontSize + boxName_space + 2 * box_borderWidth;
-      var space_y = (equipList_height - maxLine * oneBoxHeight) / (1 + maxLine),
-        space_x = (equipList_width - maxItem * oneBoxWidth) / (1 + maxItem);
-      var box_x = equipList_x + space_x,
-        box_y = equipList_y + space_y + 12;
-      for (var i = 0; i < 2; i++) {
-        var id = core.getEquip(i),
-          name = toDrawList[i];
-        if (i === 0) name = "主手";
-        if (i === 1) name = "副手";
-        var selectBorder = false;
-        if (core.status.thisUIEventInfo.select.type == i) selectBorder = true;
-        var borderStyle = selectBorder
-          ? box_selectBorderStyle
-          : box_borderStyle;
-        core.drawEquipbox_drawOne(
-          ctx,
-          name,
-          id,
-          box_x,
-          box_y,
-          box_width,
-          box_height,
-          boxName_space,
-          boxName_font,
-          boxName_color,
-          borderStyle,
-          box_borderWidth
-        );
-        var todo = new Function(
-          "core.clickOneEquipbox('" + id + "'," + i + ")"
-        );
-        core.addUIEventListener(
-          box_x - box_borderWidth / 2,
-          box_y - box_borderWidth / 2,
-          oneBoxWidth,
-          oneBoxHeight,
-          todo
-        );
-        box_x += space_x + oneBoxWidth;
-        if ((i + 1) % maxItem == 0) {
-          box_x = equipList_x + space_x;
-          box_y += space_y + oneBoxHeight;
-        }
-      }
-      if (core.material.items[core.getEquip(0)]?.equipCls === "双手剑") {
-        core.drawLine(
-          ctx,
-          equipList_x + space_x + space_x + oneBoxWidth,
-          equipList_y + space_y + 12,
-          equipList_x +
-            space_x +
-            space_x +
-            oneBoxWidth +
-            box_width +
-            box_borderWidth,
-          equipList_y + space_y + box_height + 12
-        );
-        core.drawLine(
-          ctx,
-          equipList_x + space_x + space_x + oneBoxWidth,
-          equipList_y + space_y + box_height + 12,
-          equipList_x +
-            space_x +
-            space_x +
-            oneBoxWidth +
-            box_width +
-            box_borderWidth,
-          equipList_y + space_y + 12
-        );
-      }
-      ///// *** 装备格设置
-      var maxItem = 3;
-      var box_width = 32,
-        box_height = 32,
-        box_borderStyle = "#fff",
-        box_selectBorderStyle = "gold", // 选中的装备格的颜色
-        box_borderWidth = 2;
-      var boxName_fontSize = 14,
-        boxName_space = 2,
-        boxName_color = "#fff"; // 装备格名称与上面的装备格框的距离
-      var maxLine = Math.ceil(len / maxItem);
-      ///// ***
-      var l = Math.sqrt(len);
-      if (Math.pow(l) == len && len != 4) {
-        if (l <= maxItem) maxItem = l;
-      }
-      maxItem = Math.min(toDrawList.length, maxItem);
-      info.equips = maxItem;
-
-      var boxName_font = core.ui._buildFont(boxName_fontSize);
-      // 总宽高减去所有装备格宽高得到空隙大小
-      var oneBoxWidth = box_width + box_borderWidth * 2;
-      var oneBoxHeight =
-        box_height + boxName_fontSize + boxName_space + 2 * box_borderWidth;
-      var space_y = (equipList_height - maxLine * oneBoxHeight) / (1 + maxLine),
-        space_x = (equipList_width - maxItem * oneBoxWidth) / (1 + maxItem);
-      var box_x = equipList_x + space_x,
-        box_y = equipList_y + space_y + space_y + oneBoxHeight;
-      for (var i = 2; i < len; i++) {
-        var id = core.getEquip(i),
-          name = toDrawList[i];
-        var selectBorder = false;
-        if (core.status.thisUIEventInfo.select.type == i) selectBorder = true;
-        var borderStyle = selectBorder
-          ? box_selectBorderStyle
-          : box_borderStyle;
-        core.drawEquipbox_drawOne(
-          ctx,
-          name,
-          id,
-          box_x,
-          box_y,
-          box_width,
-          box_height,
-          boxName_space,
-          boxName_font,
-          boxName_color,
-          borderStyle,
-          box_borderWidth
-        );
-        var todo = new Function(
-          "core.clickOneEquipbox('" + id + "'," + i + ")"
-        );
-        core.addUIEventListener(
-          box_x - box_borderWidth / 2,
-          box_y - box_borderWidth / 2,
-          oneBoxWidth,
-          oneBoxHeight,
-          todo
-        );
-        box_x += space_x + oneBoxWidth;
-      }
-    };
-
-    this.drawToolbox = function (ctx) {
-      ctx = ctx || core.canvas.ui;
-      core.status.thisEventClickArea = [];
-
-      var info = core.drawBoxBackground(ctx);
-      info.itemNum = itemNum;
-      core.drawItemListbox(ctx, info.obj);
-      core.drawToolboxRightbar(ctx, info);
-      core.setTextBaseline(ctx, "alphabetic");
-      core.setTextAlign("left");
-    };
-
-    var reduceItem = 4;
-    this.drawEquipbox = function (ctx) {
-      ctx = ctx || core.canvas.ui;
-      core.status.thisEventClickArea = [];
-      var info = core.drawBoxBackground(ctx);
-      info.itemNum = itemNum - reduceItem;
-      info.obj.y += info.obj.oneItemHeight * reduceItem;
-      info.obj.height -= info.obj.oneItemHeight * reduceItem;
-      core.drawItemListbox(ctx, info.obj);
-      core.drawEquipbox_drawOthers(ctx, info);
-      core.drawToolboxRightbar(ctx, info);
-      core.setTextBaseline(ctx, "alphabetic");
-      core.setTextAlign("left");
-    };
-
-    this.drawEquipbox_drawOne = function (
-      ctx,
-      name,
-      id,
-      x,
-      y,
-      width,
-      height,
-      space,
-      font,
-      color,
-      style,
-      lineWidth
-    ) {
-      if (id)
-        core.drawIcon(
-          ctx,
-          id,
-          x + lineWidth / 2,
-          y + lineWidth / 2,
-          width,
-          height
-        );
-      core.strokeRect(
-        ctx,
-        x,
-        y,
-        width + lineWidth,
-        height + lineWidth,
-        style,
-        lineWidth
-      );
-      core.setTextAlign(ctx, "center");
-      core.setTextBaseline(ctx, "top");
-      var tx = (x + x + lineWidth / 2 + width) / 2,
-        ty = y + height + (lineWidth / 2) * 3 + space;
-      core.fillText(ctx, name, tx, ty, color, font);
-      core.setTextBaseline(ctx, "alphabetic");
-      core.setTextAlign("left");
-    };
-
-    this.drawItemListbox_drawItem = function (
-      ctx,
-      left,
-      right,
-      top,
-      height,
-      marginLeft,
-      marginHeight,
-      style,
-      id
-    ) {
-      var info = core.status.thisUIEventInfo;
-      var nowClick = info.index;
-      var item = core.material.items[id] || {};
-      var name = item.name || "???";
-      var num = core.itemCount(id) || 0;
-      var fontSize = Math.floor(height - marginHeight * 2);
-      core.setTextAlign(ctx, "right");
-      var numText = "x" + num;
-      core.fillText(
-        ctx,
-        numText,
-        right - marginLeft,
-        top + height / 2,
-        style,
-        core.ui._buildFont(fontSize)
-      );
-      if (name != "???")
-        core.drawIcon(
-          ctx,
-          id,
-          left + marginLeft,
-          top + marginHeight,
-          fontSize,
-          fontSize
-        );
-      var text_x = left + marginLeft + fontSize + 2;
-      var maxWidth = right - core.calWidth(ctx, numText) - text_x;
-      core.setTextAlign(ctx, "left");
-      core.fillText(
-        ctx,
-        name,
-        text_x,
-        top + height / 2,
-        style,
-        core.ui._buildFont(fontSize),
-        maxWidth
-      );
-      var todo = new Function("core.clickItemFunc('" + id + "');");
-      core.addUIEventListener(left, top, right - left, height, todo);
-    };
-
-    this.setPageItems = function (page) {
-      var num = itemNum;
-      if (core.status.event.id == "equipbox") num -= reduceItem;
-      var info = core.status.thisUIEventInfo;
-      if (!info) return;
-      page = page || info.page;
-      var items = core.getToolboxItems(
-        core.status.event.id == "toolbox" ? "all" : "equips"
-      );
-      info.allItems = items;
-      var maxPage = Math.ceil(items.length / num);
-      info.maxPage = maxPage;
-      var pageItems = items.slice((page - 1) * num, page * num);
-      info.pageItems = pageItems;
-      info.maxItem = pageItems.length;
-      if (items.length == 0 && pageItems.length == 0) info.index = null;
-      if (pageItems.length == 0 && info.page > 1) {
-        info.page = Math.max(1, info.page - 1);
-        return core.setPageItems(info.page);
-      }
-      return pageItems;
-    };
-
-    this.drawToolbox_setExitBtn = function (ctx, x, y, r, style, lineWidth) {
-      core.strokeCircle(ctx, x, y, r, style, lineWidth);
-      ctx.textAlign = "center";
-      ctx.textBaseline = "middle";
-      var textSize = Math.sqrt(2) * r;
-      core.fillText(
-        ctx,
-        "x",
-        x,
-        y,
-        style,
-        core.ui._buildFont(textSize),
-        textSize
-      );
-      core.setTextAlign(ctx, "start");
-      core.setTextBaseline(ctx, "top");
-
-      var todo = function () {
-        core.closePanel();
-      };
-      core.addUIEventListener(x - r, y - r, r * 2, r * 2, todo);
-    };
-
-    this.drawToolbox_setUseBtn = function (ctx, x, y, r, h, style, lineWidth) {
-      core.setTextAlign(ctx, "left");
-      core.setTextBaseline(ctx, "top");
-      var fontSize = h - 4;
-      var font = core.ui._buildFont(fontSize);
-      var text = core.status.event.id == "toolbox" ? "使用" : "装备";
-      if (core.status.thisUIEventInfo.select.action == "unload") text = "卸下";
-      var w = core.calWidth(ctx, text, font) + 2 * r + lineWidth / 2;
-
-      core.strokeRoundRect(ctx, x, y, w, h, r, style, lineWidth);
-      core.fillText(ctx, text, x + r, y + lineWidth / 2 + 2, style, font);
-
-      var todo = function () {
-        core.useSelectItemInBox();
-      };
-      core.addUIEventListener(x, y, w, h, todo);
-    };
-
-    this.drawItemListbox_setPageBtn = function (
-      ctx,
-      left,
-      right,
-      bottom,
-      r,
-      style,
-      lineWidth
-    ) {
-      var offset = lineWidth / 2 + r;
-
-      var x = left + offset;
-      var y = bottom - offset;
-      var pos = (Math.sqrt(2) / 2) * (r - lineWidth / 2);
-      core.fillPolygon(
-        ctx,
-        [
-          [x - pos, y],
-          [x + pos - 2, y - pos],
-          [x + pos - 2, y + pos],
-        ],
-        style
-      );
-      core.strokeCircle(ctx, x, y, r, style, lineWidth);
-      var todo = function () {
-        core.addItemListboxPage(-1);
-      };
-      core.addUIEventListener(x - r - 2, y - r - 2, r * 2 + 4, r * 2 + 4, todo);
-
-      x = right - offset;
-      core.fillPolygon(
-        ctx,
-        [
-          [x + pos, y],
-          [x - pos + 2, y - pos],
-          [x - pos + 2, y + pos],
-        ],
-        style
-      );
-      core.strokeCircle(ctx, x, y, r, style, lineWidth);
-      var todo = function () {
-        core.addItemListboxPage(1);
-      };
-      core.addUIEventListener(x - r - 2, y - r - 2, r * 2 + 4, r * 2 + 4, todo);
-    };
-
-    this.clickItemFunc = function (id) {
-      var info = core.status.thisUIEventInfo;
-      if (!info) return;
-      if (info.select.id == id) return core.useSelectItemInBox();
-      info.select = {};
-      info.select.id = id;
-      core.setIndexAndSelect("index");
-      core.refreshBox();
-    };
-
-    this.clickOneEquipbox = function (id, type) {
-      var info = core.status.thisUIEventInfo;
-      if (!info) return;
-      if (info.select.id == id && info.select.type == type)
-        core.useSelectItemInBox();
-      else
-        core.status.thisUIEventInfo.select = {
-          id: id,
-          type: type,
-          action: "unload",
-        };
-      return core.refreshBox();
-    };
-
-    core.ui.getToolboxItems = function (cls) {
-      var list = Object.keys(core.status.hero.items[cls] || {});
-      if (cls == "all") {
-        for (var name in core.status.hero.items) {
-          if (name == "equips") continue;
-          list = list.concat(Object.keys(core.status.hero.items[name]));
-        }
-        return list
-          .filter(function (id) {
-            return !core.material.items[id].hideInToolbox;
-          })
-          .sort();
-      }
-
-      if (this.uidata.getToolboxItems) {
-        return this.uidata.getToolboxItems(cls);
-      }
-      return list
-        .filter(function (id) {
-          return !core.material.items[id].hideInToolbox;
-        })
-        .sort();
-    };
-
-    this.useSelectItemInBox = function () {
-      var info = core.status.thisUIEventInfo;
-      if (!info) return;
-      if (!info.select.id) return;
-      var id = info.select.id;
-      if (core.status.event.id == "toolbox") {
-        core.events.tryUseItem(id);
-        // core.closePanel();
-      } else if (core.status.event.id == "equipbox") {
-        var action = info.select.action || "load";
-        info.index = 1;
-        if (action == "load") {
-          var type = core.getEquipTypeById(id);
-          let equipClsid = core.material.items[id]?.equipCls;
-          let equipCls0 = core.material.items[core.getEquip(0)]?.equipCls;
-          let equipCls1 = core.material.items[core.getEquip(1)]?.equipCls;
-          if (equipClsid === "双手剑") {
-            core.unloadEquip(0, function () {
-              core.status.route.push("unEquip:" + 0);
-            });
-            core.unloadEquip(1, function () {
-              core.status.route.push("unEquip:" + 1);
-            });
-          }
-          core.loadEquip(id, function () {
-            core.status.route.push("equip:" + id);
-            info.select.type = type;
-            core.setIndexAndSelect("select");
-            core.drawEquipbox();
-          });
-        } else {
-          var type = info.select.type;
-          core.unloadEquip(type, function () {
-            core.status.route.push("unEquip:" + type);
-            info.select.type = type;
-            //info.select.action = 'load'
-            core.setIndexAndSelect("select");
-            core.drawEquipbox();
-          });
-        }
-      }
-      core.updateStatusBar();
-    };
-    this.setIndexAndSelect = function (toChange) {
-      var info = core.status.thisUIEventInfo;
-      if (!info) return;
-      core.setPageItems(info.page);
-      var index = info.index || 1;
-      var items = info.pageItems;
-      if (info.select.type != null) {
-        var type = info.select.type;
-        id = core.getEquip(type);
-        info.index = null;
-        info.select = {
-          id: id,
-          action: "unload",
-          type: type,
-        };
-        return;
-      } else {
-        info.select.action = null;
-        info.select.type = null;
-        if (toChange == "index") info.index = items.indexOf(info.select.id) + 1;
-        info.select.id = items[info.index - 1];
-      }
-    };
-
-    this.addItemListboxPage = function (num) {
-      var info = core.status.thisUIEventInfo;
-      if (!info) return;
-      var maxPage = info.maxPage || 1;
-      info.page = info.page || 1;
-      info.page += num;
-      if (info.page <= 0) info.page = maxPage;
-      if (info.page > maxPage) info.page = 1;
-      info.index = 1;
-      core.setPageItems(info.page);
-      core.setIndexAndSelect("select");
-      core.refreshBox();
-    };
-
-    this.addItemListboxIndex = function (num) {
-      var info = core.status.thisUIEventInfo;
-      if (!info) return;
-      var maxItem = info.maxItem || 0;
-      info.index = info.index || 0;
-      info.index += num;
-      if (info.index <= 0) info.index = 1;
-      if (info.index > maxItem) info.index = maxItem;
-      core.setIndexAndSelect("select");
-      core.refreshBox();
-    };
-
-    this.addEquipboxType = function (num) {
-      var info = core.status.thisUIEventInfo;
-      var type = info.select.type;
-      if (type == null && num > 0) info.select.type = 0;
-      else info.select.type = type + num;
-      var max = core.status.globalAttribute.equipName.length;
-      if (info.select.type >= max) {
-        info.select = {};
-        core.setIndexAndSelect("select");
-        return core.addItemListboxPage(0);
-      } else {
-        var m = Math.abs(info.select.type);
-        if (info.select.type < 0) info.select.type = max - m;
-        core.setIndexAndSelect("select");
-        core.refreshBox();
-        return;
-      }
-    };
-
-    core.actions._keyDownToolbox = function (keycode) {
-      if (!core.status.thisEventClickArea) return;
-      if (keycode == 37) {
-        // left
-        core.addItemListboxPage(-1);
-        return;
-      }
-      if (keycode == 38) {
-        // up
-        core.addItemListboxIndex(-1);
-        return;
-      }
-      if (keycode == 39) {
-        // right
-        core.addItemListboxPage(1);
-        return;
-      }
-      if (keycode == 40) {
-        // down
-        core.addItemListboxIndex(1);
-        return;
-      }
-    };
-
-    ////// 工具栏界面时,放开某个键的操作 //////
-    core.actions._keyUpToolbox = function (keycode) {
-      if (keycode == 81) {
-        core.ui.closePanel();
-        if (core.isReplaying()) core.control._replay_equipbox();
-        else core.openEquipbox();
-        return;
-      }
-      if (keycode == 84 || keycode == 27 || keycode == 88) {
-        core.closePanel();
-        return;
-      }
-      if (keycode == 13 || keycode == 32 || keycode == 67) {
-        var info = core.status.thisUIEventInfo;
-        if (info.select) {
-          core.useSelectItemInBox();
-        }
-        return;
-      }
-    };
-
-    core.actions._keyDownEquipbox = function (keycode) {
-      if (!core.status.thisEventClickArea) return;
-      if (keycode == 37) {
-        // left
-        var info = core.status.thisUIEventInfo;
-        if (info.index != null) return core.addItemListboxPage(-1);
-        return core.addEquipboxType(-1);
-      }
-      if (keycode == 38) {
-        // up
-        var info = core.status.thisUIEventInfo;
-        if (info.index == 1) {
-          info.select.type = core.status.globalAttribute.equipName.length - 1;
-          core.setIndexAndSelect();
-          return core.refreshBox();
-        }
-        if (info.index) return core.addItemListboxIndex(-1);
-        return core.addEquipboxType(-1 * info.equips);
-      }
-      if (keycode == 39) {
-        // right
-        var info = core.status.thisUIEventInfo;
-        if (info.index != null) return core.addItemListboxPage(1);
-        return core.addEquipboxType(1);
-      }
-      if (keycode == 40) {
-        // down
-        var info = core.status.thisUIEventInfo;
-        if (info.index) return core.addItemListboxIndex(1);
-        return core.addEquipboxType(info.equips);
-      }
-    };
-
-    core.actions._keyUpEquipbox = function (keycode, altKey) {
-      if (altKey && keycode >= 48 && keycode <= 57) {
-        core.items.quickSaveEquip(keycode - 48);
-        return;
-      }
-      if (keycode == 84) {
-        core.ui.closePanel();
-        if (core.isReplaying()) core.control._replay_toolbox();
-        else core.openToolbox();
-        return;
-      }
-      if (keycode == 81 || keycode == 27 || keycode == 88) {
-        core.closePanel();
-        return;
-      }
-      if (keycode == 13 || keycode == 32 || keycode == 67) {
-        var info = core.status.thisUIEventInfo;
-        if (info.select) core.useSelectItemInBox();
-        return;
-      }
-    };
-
-    core.registerAction(
-      "ondown",
-      "inEventClickAction",
-      function (x, y, px, py) {
-        if (!core.status.thisEventClickArea) return false;
-        // console.log(px + "," + py);
-        var info = core.status.thisEventClickArea;
-        for (var i = 0; i < info.length; i++) {
-          var obj = info[i];
-          if (
-            px >= obj.x &&
-            px <= obj.x + obj.width &&
-            py > obj.y &&
-            py < obj.y + obj.height
-          ) {
-            if (obj.todo) obj.todo();
-            break;
-          }
-        }
-        return true;
-      },
-      51
-    );
-    core.registerAction(
-      "onclick",
-      "stopClick",
-      function () {
-        if (core.status.thisEventClickArea) return true;
-      },
-      51
-    );
-
-    this.addUIEventListener = function (x, y, width, height, todo) {
-      if (!core.status.thisEventClickArea) return;
-      var obj = {
-        x: x,
-        y: y,
-        width: width,
-        height: height,
-        todo: todo,
-      };
-      core.status.thisEventClickArea.push(obj);
-    };
-
-    this.initThisEventInfo = function () {
-      core.status.thisUIEventInfo = {
-        page: 1,
-        select: {},
-      };
-      core.status.thisEventClickArea = [];
-    };
-
-    this.refreshBox = function () {
-      if (!core.status.event.id) return;
-      if (core.status.event.id == "toolbox") core.drawToolbox();
-      else core.drawEquipbox();
-    };
-
-    core.ui.closePanel = function () {
-      if (core.status.hero && core.status.hero.flags) {
-        // 清除全部临时变量
-        Object.keys(core.status.hero.flags).forEach(function (name) {
-          if (name.startsWith("@temp@") || /^arg\d+$/.test(name)) {
-            delete core.status.hero.flags[name];
-          }
-        });
-      }
-      this.clearUI();
-      core.maps.generateGroundPattern();
-      core.updateStatusBar(true);
-      core.unlockControl();
-      core.status.event.data = null;
-      core.status.event.id = null;
-      core.status.event.selection = null;
-      core.status.event.ui = null;
-      core.status.event.interval = null;
-      core.status.thisUIEventInfo = null;
-      core.status.thisEventClickArea = null;
-    };
-
-    this.getItemClsName = function (item) {
-      if (item == null) return itemClsName;
-      if (item.cls == "equips") {
-        if (typeof item.equip.type == "string") return item.equip.type;
-        var type = core.getEquipTypeById(item.id);
-        return core.status.globalAttribute.equipName[type];
-      } else return itemClsName[item.cls] || item.cls;
-    };
-
-    core.events.openToolbox = function (fromUserAction) {
-      if (core.isReplaying()) return;
-      if (!this._checkStatus("toolbox", fromUserAction)) return;
-      core.initThisEventInfo();
-      let info = core.status.thisUIEventInfo;
-      info.index = 1;
-      core.setIndexAndSelect("select");
-      core.drawToolbox();
-    };
-
-    core.events.openEquipbox = function (fromUserAction) {
-      if (core.isReplaying()) return;
-      if (!this._checkStatus("equipbox", fromUserAction)) return;
-      core.initThisEventInfo();
-      let info = core.status.thisUIEventInfo;
-      info.select.type = 0;
-      core.setIndexAndSelect("select");
-      core.drawEquipbox();
-    };
-
-    core.control._replay_toolbox = function () {
-      if (!core.isPlaying() || !core.isReplaying()) return;
-      if (!core.status.replay.pausing) return core.drawTip("请先暂停录像");
-      if (core.isMoving() || core.status.replay.animate || core.status.event.id)
-        return core.drawTip("请等待当前事件的处理结束");
-
-      core.lockControl();
-      core.status.event.id = "toolbox";
-      core.drawToolbox();
-    };
-
-    core.control._replay_equipbox = function () {
-      if (!core.isPlaying() || !core.isReplaying()) return;
-      if (!core.status.replay.pausing) return core.drawTip("请先暂停录像");
-      if (core.isMoving() || core.status.replay.animate || core.status.event.id)
-        return core.drawTip("请等待当前事件的处理结束");
-
-      core.lockControl();
-      core.status.event.id = "equipbox";
-      core.drawEquipbox();
-    };
-
-    core.control._replayAction_item = function (action) {
-      if (action.indexOf("item:") != 0) return false;
-      var itemId = action.substring(5);
-      if (!core.canUseItem(itemId)) return false;
-      if (
-        core.material.items[itemId].hideInReplay ||
-        core.status.replay.speed == 24
-      ) {
-        core.useItem(itemId, false, core.replay);
-        return true;
-      }
-      core.status.event.id = "toolbox";
-      core.initThisEventInfo();
-      var info = core.status.thisUIEventInfo;
-      var items = core.getToolboxItems("all");
-      core.setPageItems(1);
-      var index = items.indexOf(itemId) + 1;
-      info.page = Math.ceil(index / info.maxItem);
-      info.index = index % info.maxItem || info.maxItem;
-      core.setIndexAndSelect("select");
-      core.setPageItems(info.page);
-      core.drawToolbox();
-      setTimeout(function () {
-        core.ui.closePanel();
-        core.useItem(itemId, false, core.replay);
-      }, core.control.__replay_getTimeout());
-      return true;
-    };
-
-    core.control._replayAction_equip = function (action) {
-      if (action.indexOf("equip:") != 0) return false;
-      var itemId = action.substring(6);
-      var items = core.getToolboxItems("equips");
-      var index = items.indexOf(itemId) + 1;
-      if (index < 1) return false;
-      core.status.route.push(action);
-      if (
-        core.material.items[itemId].hideInReplay ||
-        core.status.replay.speed == 24
-      ) {
-        core.loadEquip(itemId, core.replay);
-        return true;
-      }
-      core.status.event.id = "equipbox";
-      core.initThisEventInfo();
-      var info = core.status.thisUIEventInfo;
-      core.setPageItems(1);
-      info.page = Math.ceil(index / info.maxItem);
-      info.index = index % info.maxItem || info.maxItem;
-      core.setIndexAndSelect("select");
-      core.setPageItems(info.page);
-      core.drawEquipbox();
-      setTimeout(function () {
-        core.ui.closePanel();
-        core.loadEquip(itemId, core.replay);
-      }, core.control.__replay_getTimeout());
-      return true;
-    };
-
-    core.control._replayAction_unEquip = function (action) {
-      if (action.indexOf("unEquip:") != 0) return false;
-      var equipType = parseInt(action.substring(8));
-      if (!core.isset(equipType)) return false;
-      core.status.route.push(action);
-      if (core.status.replay.speed == 24) {
-        core.unloadEquip(equipType, core.replay);
-        return true;
-      }
-      core.status.event.id = "equipbox";
-      core.initThisEventInfo();
-      var info = core.status.thisUIEventInfo;
-      core.setPageItems(1);
-      info.select.type = equipType;
-      core.setIndexAndSelect();
-      core.drawEquipbox();
-      setTimeout(function () {
-        core.ui.closePanel();
-        core.unloadEquip(equipType, core.replay);
-      }, core.control.__replay_getTimeout());
-      return true;
-    };
-
-    core.registerReplayAction("item", core.control._replayAction_item);
-    core.registerReplayAction("equip", core.control._replayAction_equip);
-    core.registerReplayAction("unEquip", core.control._replayAction_unEquip);
-  },
+		core.setAlpha(ctx, backgroundAlpha);
+		core.strokeRoundRect(
+			ctx,
+			x,
+			y,
+			w,
+			h,
+			borderRadius,
+			borderStyle,
+			borderWidth
+		);
+		core.fillRoundRect(
+			ctx,
+			start_x,
+			start_y,
+			width,
+			height,
+			borderRadius,
+			backgroundColor
+		);
+		core.setAlpha(ctx, 1);
+
+		///// *** 左栏配置
+		var leftbar_height = height;
+		// 左边栏宽度(width*0.6) 本身仅为坐标使用 需要与底下的rightbar_width(width*0.4)同时更改
+		var leftbar_width = width * 0.6;
+		///// ***
+
+		// xxx_right参数 代表最右侧坐标
+		var leftbar_right = start_x + leftbar_width - borderWidth / 2;
+		var leftbar_bottom = start_y + leftbar_height;
+		var leftbar_x = start_x;
+		var leftbar_y = start_y;
+
+		///// *** 道具栏配置
+		var boxName_color = "#fff";
+		var boxName_fontSize = 15;
+		var boxName_font = core.ui._buildFont(boxName_fontSize, true);
+		var arrow_x = 10 + start_x;
+		var arrow_y = 10 + start_y;
+		var arrow_width = 20;
+		var arrow_style = "white";
+		// 暂时只能是1 否则不太行 等待新样板(2.7.3)之后对drawArrow做优化
+		var arrow_lineWidth = 2;
+		// 右箭头
+		var rightArrow_right = leftbar_right - 10;
+		// 道具内栏顶部坐标 本质是通过该项 控制(道具栏顶部文字和箭头)与道具内栏顶部的间隔
+		var itembar_top = arrow_y + 15;
+		///// ***
+
+		var itembar_right = rightArrow_right;
+		var boxName =
+			core.status.event.id == "toolbox" ?
+			"\r[yellow]道具栏\r | 装备栏" :
+			"道具栏 | \r[yellow]装备栏\r";
+		core.drawArrow(
+			ctx,
+			arrow_x + arrow_width,
+			arrow_y,
+			arrow_x,
+			arrow_y,
+			arrow_style,
+			arrow_lineWidth
+		);
+		core.drawArrow(
+			ctx,
+			rightArrow_right - arrow_width,
+			arrow_y,
+			rightArrow_right,
+			arrow_y,
+			arrow_style,
+			arrow_lineWidth
+		);
+		core.setTextAlign(ctx, "center");
+		core.setTextBaseline(ctx, "middle");
+		var changeBox = function () {
+			var id = core.status.event.id;
+			core.closePanel();
+			if (id == "toolbox") core.openEquipbox();
+			else core.openToolbox();
+		};
+		core.fillText(
+			ctx,
+			boxName,
+			(leftbar_right + leftbar_x) / 2,
+			arrow_y + 2,
+			boxName_color,
+			boxName_font
+		);
+
+		///// *** 底栏按钮
+		var pageBtn_radius = 8;
+		// xxx_left 最左侧坐标
+		var pageBtn_left = leftbar_x + 3;
+		var pageBtn_right = leftbar_right - 3;
+		// xxx_bottom 最底部坐标
+		var pageBtn_bottom = leftbar_bottom - 2;
+		var pageBtn_borderStyle = "#fff";
+		var pageBtn_borderWidth = 2;
+		var pageText_color = "#fff";
+		// 底部按钮与上面的道具内栏的间隔大小
+		var bottomSpace = 8;
+		///// ***
+
+		drawItemListbox_setPageBtn(
+			ctx,
+			pageBtn_left,
+			pageBtn_right,
+			pageBtn_bottom,
+			pageBtn_radius,
+			pageBtn_borderStyle,
+			pageBtn_borderWidth
+		);
+		var page = info.page || 1;
+		var pageFontSize = pageBtn_radius * 2 - 4;
+		var pageFont = core.ui._buildFont(pageFontSize);
+		setPageItems(page);
+		var num = itemNum;
+		if (core.status.event.id == "equipbox") num -= 5;
+		var maxPage = info.maxPage;
+		var pageText = page + " / " + maxPage;
+		core.setTextAlign(ctx, "center");
+		core.setTextBaseline(ctx, "bottom");
+		core.fillText(
+			ctx,
+			pageText,
+			(leftbar_x + leftbar_right) / 2,
+			pageBtn_bottom,
+			pageText_color,
+			pageFont
+		);
+		addUIEventListener(
+			start_x,
+			start_y,
+			leftbar_right - start_x,
+			arrow_y - start_y + 13,
+			changeBox
+		);
+		var itembar_height = Math.ceil(
+			pageBtn_bottom -
+			pageBtn_radius * 2 -
+			pageBtn_borderWidth / 2 -
+			bottomSpace -
+			itembar_top
+		);
+		var oneItemHeight = (itembar_height - 4) / itemNum;
+		return {
+			x: start_x,
+			y: start_y,
+			width: width,
+			height: height,
+			leftbar_right: leftbar_right,
+			obj: {
+				x: arrow_x,
+				y: itembar_top,
+				width: itembar_right - arrow_x,
+				height: itembar_height,
+				oneItemHeight: oneItemHeight,
+			},
+		};
+	}
+
+	function drawItemListbox(ctx, obj) {
+		ctx = ctx || core.canvas.ui;
+		var itembar_x = obj.x,
+			itembar_y = obj.y,
+			itembar_width = obj.width,
+			itembar_height = obj.height,
+			itemNum = obj.itemNum,
+			oneItemHeight = obj.oneItemHeight;
+		var itembar_right = itembar_x + itembar_width;
+		var info = core.status.thisUIEventInfo || {};
+		var obj = {};
+		var page = info.page || 1,
+			index = info.index,
+			select = info.select || {};
+
+		///// *** 道具栏内栏配置
+		var itembar_style = "black";
+		var itembar_alpha = 0.7;
+		// 一个竖屏下减少道具显示的例子:
+		// if (core.domStyle.isVertical) itemNum = 10;
+		// 每个道具项的上下空隙占总高度的比例
+		var itembar_marginHeightRatio = 0.2;
+		// 左右间隔空隙
+		var item_marginLeft = 2;
+		var item_x = itembar_x + 2,
+			item_y = itembar_y + 2,
+			item_right = itembar_right - 2,
+			itemName_color = "#fff";
+		// 修改此项以更换闪烁光标
+		var item_selector = "winskin.webp";
+		///// ***
+
+		core.setAlpha(ctx, itembar_alpha);
+		core.fillRect(
+			ctx,
+			itembar_x,
+			itembar_y,
+			itembar_width,
+			itembar_height,
+			itembar_style
+		);
+		core.setAlpha(ctx, 1);
+		var pageItems = setPageItems(page);
+		var marginHeight = itembar_marginHeightRatio * oneItemHeight;
+		core.setTextBaseline(ctx, "middle");
+		var originColor = itemName_color;
+		for (var i = 0; i < pageItems.length; i++) {
+			itemName_color = originColor;
+			var item = pageItems[i];
+			// 设置某个的字体颜色的一个例子
+			// if (item.id == "xxx") itemName_color = "green";
+			drawItemListbox_drawItem(
+				ctx,
+				item_x,
+				item_right,
+				item_y,
+				oneItemHeight,
+				item_marginLeft,
+				marginHeight,
+				itemName_color,
+				pageItems[i]
+			);
+			if (index == i + 1)
+				core.ui._drawWindowSelector(
+					item_selector,
+					item_x + 1,
+					item_y - 1,
+					item_right - item_x - 2,
+					oneItemHeight - 2
+				);
+			item_y += oneItemHeight;
+		}
+	}
+
+	function drawToolboxRightbar(ctx, obj) {
+		ctx = ctx || core.canvas.ui;
+		var info = core.status.thisUIEventInfo || {};
+		var page = info.page || 1,
+			index = info.index || 1,
+			select = info.select || {};
+		var start_x = obj.x,
+			start_y = obj.y,
+			width = obj.width,
+			height = obj.height;
+		var toolboxRight = start_x + width,
+			toolboxBottom = start_y + height;
+
+		///// *** 侧边栏(rightbar)背景设置(物品介绍)
+		var rightbar_width = width * 0.4;
+		var rightbar_height = height;
+		var rightbar_lineWidth = 2;
+		var rightbar_lineStyle = "#fff";
+		///// ***
+
+		var rightbar_x = toolboxRight - rightbar_width - rightbar_lineWidth / 2;
+		var rightbar_y = start_y;
+		core.drawLine(
+			ctx,
+			rightbar_x,
+			rightbar_y,
+			rightbar_x,
+			rightbar_y + rightbar_height,
+			rightbar_lineStyle,
+			rightbar_lineWidth
+		);
+
+		// 获取道具id(有可能为null)
+		var itemId = select.id;
+		var item = core.material.items[itemId];
+
+		///// *** 侧边栏物品Icon信息
+		var iconRect_y = rightbar_y + 10;
+		// space:间距
+		// 这里布局设定iconRect与侧边栏左边框 itemName与工具栏右边框 itemRect与itemName的间距均为space
+		var space = 15;
+		var iconRect_x = rightbar_x + space;
+		var iconRect_radius = 2,
+			iconRect_width = 32,
+			iconRect_height = 32,
+			iconRect_style = "#fff",
+			iconRect_lineWidth = 2;
+		///// ***
+
+		var iconRect_bottom = iconRect_y + iconRect_height,
+			iconRect_right = iconRect_x + iconRect_width;
+
+		///// *** 侧边栏各项信息
+		var itemTextFontSize = 15,
+			itemText_x = iconRect_x - 4,
+			itemText_y = Math.floor(start_y + rightbar_height * 0.25), // 坐标取整防止模糊
+			itemClsFontSize = 15,
+			itemClsFont = core.ui._buildFont(itemClsFontSize),
+			itemClsColor = "#fff",
+			itemCls_x = itemText_x - itemClsFontSize / 2,
+			itemCls_middle = (iconRect_bottom + itemText_y) / 2, //_middle代表文字的中心y坐标
+			itemNameFontSize = 18,
+			itemNameColor = "#fff",
+			itemNameFont = core.ui._buildFont(itemNameFontSize, true);
+		var itemName_x = iconRect_right + space;
+		var itemName_middle =
+			iconRect_y + iconRect_height / 2 + iconRect_lineWidth;
+		// 修改这里可以编辑未选中道具时的默认值
+		var defaultItem = {
+			cls: "constants",
+			name: "未知道具",
+			text: "没有道具最永久",
+		};
+		var defaultEquip = {
+			cls: "equips",
+			name: "未知装备",
+			text: "一无所有,又何尝不是一种装备",
+			equip: {
+				type: "装备",
+			},
+		};
+		///// ***
+
+		var originItem = item;
+		if (core.status.event.id == "equipbox") item = item || defaultEquip;
+		item = item || defaultItem;
+		var itemCls = item.cls,
+			itemName = item.name,
+			itemText = item.text;
+		itemText = core.replaceText(itemText);
+		if (!itemText) itemText = "该道具无描述。";
+		/* 一个根据道具id修改道具名字(右栏)的例子
+		 * if (item.id == "xxx") itemNameColor = "red";
+		 */
+		var itemClsName = core.getItemClsName(item);
+		var itemNameMaxWidth =
+			rightbar_width - iconRect_width - iconRect_lineWidth * 2 - space * 2;
+		core.strokeRoundRect(
+			ctx,
+			iconRect_x,
+			iconRect_y,
+			iconRect_width,
+			iconRect_height,
+			iconRect_radius,
+			iconRect_style,
+			iconRect_lineWidth
+		);
+		if (item.id)
+			core.drawIcon(
+				ctx,
+				item.id,
+				iconRect_x + iconRect_lineWidth / 2,
+				iconRect_y + iconRect_lineWidth / 2,
+				iconRect_width - iconRect_lineWidth,
+				iconRect_height - iconRect_lineWidth
+			);
+		core.setTextAlign(ctx, "left");
+		core.setTextBaseline(ctx, "middle");
+		if (itemCls === "equips" && item.id) {
+			itemName = "【" + item.equipCls + "】" + itemName;
+		}
+		core.fillText(
+			ctx,
+			itemName,
+			itemName_x,
+			itemName_middle,
+			itemNameColor,
+			itemNameFont,
+			itemNameMaxWidth
+		);
+		if (!item.equip)
+			core.fillText(
+				ctx,
+				"【" + itemClsName + "】",
+				itemCls_x,
+				itemCls_middle,
+				itemClsColor,
+				itemClsFont
+			);
+
+		var statusText = "";
+		if (core.status.event.id == "equipbox") {
+			var type = item.equip.type;
+			if (typeof type == "string") type = core.getEquipTypeByName(type);
+			var compare = core.compareEquipment(item.id, core.getEquip(type));
+			var compare2;
+			if (item.equipCls === "双手剑")
+				compare2 = core.compareEquipment(null, core.getEquip(1));
+			if (
+				item.equipCls === "盾牌" &&
+				core.material.items[core.getEquip(0)]?.equipCls === "双手剑"
+			)
+				compare2 = core.compareEquipment(null, core.getEquip(0));
+			if (info.select.action == "unload")
+				compare = core.compareEquipment(null, item.id);
+			// --- 变化值...
+			for (var name in core.status.hero) {
+				if (typeof core.status.hero[name] != "number") continue;
+				var nowValue = core.getRealStatus(name);
+				// 查询新值
+				var newValue = Math.floor(
+					((core.getStatus(name) +
+							(compare.value[name] || 0) +
+							(compare2?.value[name] || 0)) *
+						(core.getBuff(name) * 100 +
+							(compare.percentage[name] || 0) +
+							(compare2?.percentage[name] || 0))) /
+					100
+				);
+				if (name === "mdef") {
+					var nowValue = core.getRealStatus(name);
+					var newValue = Math.round(
+						(core.getStatus(name) -
+							(compare.value[name] || 0) -
+							(compare2?.value[name] || 0)) *
+						(1 -
+							(1 - core.getBuff(name)) *
+							(compare.percentage[name] || 1) *
+							(compare2?.percentage[name] || 1))
+					);
+				}
+				if (nowValue == newValue) continue;
+				var color = newValue > nowValue ? "#00FF00" : "#FF0000";
+				nowValue = core.formatBigNumber(nowValue);
+				newValue = core.formatBigNumber(newValue);
+
+				if (name === "mdef") {
+					nowValue += "%";
+					newValue += "%";
+				}
+				statusText +=
+					core.getStatusLabel(name) +
+					" " +
+					nowValue +
+					"->\r[" +
+					color +
+					"]" +
+					newValue +
+					"\r\n";
+			}
+		}
+		itemText = statusText + itemText;
+		if (item.equip) {
+			core.drawTextContent(ctx, itemText, {
+				left: itemText_x,
+				top: itemCls_middle,
+				bold: false,
+				color: "white",
+				align: "left",
+				fontSize: itemTextFontSize,
+				maxWidth: rightbar_width -
+					(itemText_x - rightbar_x) * 2 +
+					itemTextFontSize / 2,
+			});
+		} else {
+			core.drawTextContent(ctx, itemText, {
+				left: itemText_x,
+				top: itemText_y,
+				bold: false,
+				color: "white",
+				align: "left",
+				fontSize: itemTextFontSize,
+				maxWidth: rightbar_width -
+					(itemText_x - rightbar_x) * 2 +
+					itemTextFontSize / 2,
+			});
+		}
+
+		///// *** 退出按钮设置
+		var btnRadius = 10;
+		var btnBorderWidth = 2;
+		var btnRight = toolboxRight - 2;
+		var btnBottom = toolboxBottom - 2;
+		var btnBorderStyle = "#fff";
+		///// ***
+
+		// 获取圆心位置
+		var btn_x = btnRight - btnRadius - btnBorderWidth / 2;
+		btn_y = btnBottom - btnRadius - btnBorderWidth / 2;
+		drawToolbox_setExitBtn(
+			ctx,
+			btn_x,
+			btn_y,
+			btnRadius,
+			btnBorderStyle,
+			btnBorderWidth
+		);
+
+		///// *** 使用按钮设置
+		var useBtnHeight = btnRadius * 2;
+		// 这里不设置useBtnWidth而是根据各项数据自动得出width
+		var useBtnRadius = useBtnHeight / 4;
+		var useBtn_x = rightbar_x + 4,
+			useBtn_y = btnBottom - useBtnHeight;
+		var useBtnBorderStyle = "#fff";
+		var useBtnBorderWidth = btnBorderWidth;
+		const batchUseBtn_x = useBtn_x + 50; // 个人觉得,搞这么多参数还不如硬编码
+		const hideBtn_y = useBtn_y - useBtnHeight - 8;
+		///// ***
+
+		drawToolbox_setUseBtn(
+			ctx,
+			useBtn_x,
+			useBtn_y,
+			useBtnRadius,
+			useBtnHeight,
+			useBtnBorderStyle,
+			useBtnBorderWidth
+		);
+		if (core.status.event.id === "toolbox") {
+			drawToolbox_setBatchUseBtn(
+				ctx,
+				batchUseBtn_x,
+				useBtn_y,
+				useBtnRadius,
+				useBtnHeight,
+				useBtnBorderStyle,
+				useBtnBorderWidth
+			);
+		}
+		drawToolbox_setHideBtn(
+			ctx,
+			useBtn_x,
+			hideBtn_y,
+			useBtnRadius,
+			useBtnHeight,
+			useBtnBorderStyle,
+			useBtnBorderWidth
+		);
+		drawToolbox_setShowHideBtn(
+			ctx,
+			rightbar_x,
+			useBtn_y,
+			useBtnHeight,
+			useBtnBorderStyle
+		);
+	}
+
+	function drawEquipbox_drawOthers(ctx, obj) {
+		var info = core.status.thisUIEventInfo;
+
+		///// *** 装备格设置
+		var equipList_lineWidth = 2;
+		var equipList_boxSize = 32;
+		var equipList_borderWidth = 2;
+		var equipList_borderStyle = "#fff";
+		var equipList_nameColor = "#fff";
+		///// ***
+
+		var equipList_x = obj.x + 4,
+			equipList_bottom = obj.obj.y - equipList_lineWidth,
+			equipList_y = equipList_bottom - obj.obj.oneItemHeight * reduceItem - 2,
+			equipList_height = equipList_bottom - equipList_y;
+		var equipList_right = obj.leftbar_right,
+			equipList_width = equipList_right - equipList_x;
+		core.drawLine(
+			ctx,
+			obj.x,
+			equipList_bottom + equipList_lineWidth / 2,
+			equipList_right,
+			equipList_bottom + equipList_lineWidth / 2,
+			equipList_borderStyle,
+			equipList_lineWidth
+		);
+		var toDrawList = core.status.globalAttribute.equipName,
+			len = toDrawList.length;
+
+		///// *** 装备格设置
+		var maxItem = 2;
+		var box_width = 32,
+			box_height = 32,
+			box_borderStyle = "#fff",
+			box_selectBorderStyle = "gold", // 选中的装备格的颜色
+			box_borderWidth = 2;
+		var boxName_fontSize = 14,
+			boxName_space = 2,
+			boxName_color = "#fff"; // 装备格名称与上面的装备格框的距离
+		var maxLine = Math.ceil(len / maxItem);
+		///// ***
+		var l = Math.sqrt(len);
+		if (Math.pow(l) == len && len != 4) {
+			if (l <= maxItem) maxItem = l;
+		}
+		maxItem = Math.min(toDrawList.length, maxItem);
+		info.equips = maxItem;
+
+		var boxName_font = core.ui._buildFont(boxName_fontSize);
+		// 总宽高减去所有装备格宽高得到空隙大小
+		var oneBoxWidth = box_width + box_borderWidth * 2;
+		var oneBoxHeight =
+			box_height + boxName_fontSize + boxName_space + 2 * box_borderWidth;
+		var space_y = (equipList_height - maxLine * oneBoxHeight) / (1 + maxLine),
+			space_x = (equipList_width - maxItem * oneBoxWidth) / (1 + maxItem);
+		var box_x = equipList_x + space_x,
+			box_y = equipList_y + space_y + 12;
+		for (var i = 0; i < 2; i++) {
+			var id = core.getEquip(i),
+				name = toDrawList[i];
+			if (i === 0) name = "主手";
+			if (i === 1) name = "副手";
+			var selectBorder = false;
+			if (core.status.thisUIEventInfo.select.type == i) selectBorder = true;
+			var borderStyle = selectBorder ?
+				box_selectBorderStyle :
+				box_borderStyle;
+			drawEquipbox_drawOne(
+				ctx,
+				name,
+				id,
+				box_x,
+				box_y,
+				box_width,
+				box_height,
+				boxName_space,
+				boxName_font,
+				boxName_color,
+				borderStyle,
+				box_borderWidth
+			);
+			var todo = new Function(
+				"core.clickOneEquipbox('" + id + "'," + i + ")"
+			);
+			addUIEventListener(
+				box_x - box_borderWidth / 2,
+				box_y - box_borderWidth / 2,
+				oneBoxWidth,
+				oneBoxHeight,
+				todo
+			);
+			box_x += space_x + oneBoxWidth;
+			if ((i + 1) % maxItem == 0) {
+				box_x = equipList_x + space_x;
+				box_y += space_y + oneBoxHeight;
+			}
+		}
+		if (core.material.items[core.getEquip(0)]?.equipCls === "双手剑") {
+			core.drawLine(
+				ctx,
+				equipList_x + space_x + space_x + oneBoxWidth,
+				equipList_y + space_y + 12,
+				equipList_x +
+				space_x +
+				space_x +
+				oneBoxWidth +
+				box_width +
+				box_borderWidth,
+				equipList_y + space_y + box_height + 12
+			);
+			core.drawLine(
+				ctx,
+				equipList_x + space_x + space_x + oneBoxWidth,
+				equipList_y + space_y + box_height + 12,
+				equipList_x +
+				space_x +
+				space_x +
+				oneBoxWidth +
+				box_width +
+				box_borderWidth,
+				equipList_y + space_y + 12
+			);
+		}
+		///// *** 装备格设置
+		var maxItem = 3;
+		var box_width = 32,
+			box_height = 32,
+			box_borderStyle = "#fff",
+			box_selectBorderStyle = "gold", // 选中的装备格的颜色
+			box_borderWidth = 2;
+		var boxName_fontSize = 14,
+			boxName_space = 2,
+			boxName_color = "#fff"; // 装备格名称与上面的装备格框的距离
+		var maxLine = Math.ceil(len / maxItem);
+		///// ***
+		var l = Math.sqrt(len);
+		if (Math.pow(l) == len && len != 4) {
+			if (l <= maxItem) maxItem = l;
+		}
+		maxItem = Math.min(toDrawList.length, maxItem);
+		info.equips = maxItem;
+
+		var boxName_font = core.ui._buildFont(boxName_fontSize);
+		// 总宽高减去所有装备格宽高得到空隙大小
+		var oneBoxWidth = box_width + box_borderWidth * 2;
+		var oneBoxHeight =
+			box_height + boxName_fontSize + boxName_space + 2 * box_borderWidth;
+		var space_y = (equipList_height - maxLine * oneBoxHeight) / (1 + maxLine),
+			space_x = (equipList_width - maxItem * oneBoxWidth) / (1 + maxItem);
+		var box_x = equipList_x + space_x,
+			box_y = equipList_y + space_y + space_y + oneBoxHeight;
+		for (var i = 2; i < len; i++) {
+			var id = core.getEquip(i),
+				name = toDrawList[i];
+			var selectBorder = false;
+			if (core.status.thisUIEventInfo.select.type == i) selectBorder = true;
+			var borderStyle = selectBorder ?
+				box_selectBorderStyle :
+				box_borderStyle;
+			drawEquipbox_drawOne(
+				ctx,
+				name,
+				id,
+				box_x,
+				box_y,
+				box_width,
+				box_height,
+				boxName_space,
+				boxName_font,
+				boxName_color,
+				borderStyle,
+				box_borderWidth
+			);
+			var todo = new Function(
+				"core.clickOneEquipbox('" + id + "'," + i + ")"
+			);
+			addUIEventListener(
+				box_x - box_borderWidth / 2,
+				box_y - box_borderWidth / 2,
+				oneBoxWidth,
+				oneBoxHeight,
+				todo
+			);
+			box_x += space_x + oneBoxWidth;
+		}
+	}
+
+	this.drawToolbox = function (ctx) {
+		ctx = ctx || core.canvas.ui;
+		core.status.thisEventClickArea = [];
+
+		var info = drawBoxBackground(ctx);
+		info.itemNum = itemNum;
+		drawItemListbox(ctx, info.obj);
+		drawToolboxRightbar(ctx, info);
+		core.setTextBaseline(ctx, "alphabetic");
+		core.setTextAlign("left");
+	};
+
+	var reduceItem = 4;
+	this.drawEquipbox = function (ctx) {
+		ctx = ctx || core.canvas.ui;
+		core.status.thisEventClickArea = [];
+		var info = drawBoxBackground(ctx);
+		info.itemNum = itemNum - reduceItem;
+		info.obj.y += info.obj.oneItemHeight * reduceItem;
+		info.obj.height -= info.obj.oneItemHeight * reduceItem;
+		drawItemListbox(ctx, info.obj);
+		drawEquipbox_drawOthers(ctx, info);
+		drawToolboxRightbar(ctx, info);
+		core.setTextBaseline(ctx, "alphabetic");
+		core.setTextAlign("left");
+	};
+
+	function drawEquipbox_drawOne(
+		ctx,
+		name,
+		id,
+		x,
+		y,
+		width,
+		height,
+		space,
+		font,
+		color,
+		style,
+		lineWidth
+	) {
+		if (id)
+			core.drawIcon(
+				ctx,
+				id,
+				x + lineWidth / 2,
+				y + lineWidth / 2,
+				width,
+				height
+			);
+		core.strokeRect(
+			ctx,
+			x,
+			y,
+			width + lineWidth,
+			height + lineWidth,
+			style,
+			lineWidth
+		);
+		core.setTextAlign(ctx, "center");
+		core.setTextBaseline(ctx, "top");
+		var tx = (x + x + lineWidth / 2 + width) / 2,
+			ty = y + height + (lineWidth / 2) * 3 + space;
+		core.fillText(ctx, name, tx, ty, color, font);
+
+		core.setAlpha(ctx, 1);
+
+		core.setTextBaseline(ctx, "alphabetic");
+		core.setTextAlign("left");
+	}
+
+	function drawItemListbox_drawItem(
+		ctx,
+		left,
+		right,
+		top,
+		height,
+		marginLeft,
+		marginHeight,
+		style,
+		id
+	) {
+		var info = core.status.thisUIEventInfo;
+		var nowClick = info.index;
+		var item = core.material.items[id] || {};
+		var name = item.name || "???";
+		var num = core.itemCount(id) || 0;
+		var fontSize = Math.floor(height - marginHeight * 2);
+		core.setTextAlign(ctx, "right");
+		var numText = "x" + num;
+		core.fillText(
+			ctx,
+			numText,
+			right - marginLeft,
+			top + height / 2,
+			style,
+			core.ui._buildFont(fontSize)
+		);
+
+		const hideInfo = core.getFlag("hideInfo", {});
+		if (
+			item &&
+			(hideInfo.hasOwnProperty(id) ? hideInfo[id] : item.hideInToolbox)
+		)
+			core.setAlpha(ctx, 0.5);
+
+		if (name != "???")
+			core.drawIcon(
+				ctx,
+				id,
+				left + marginLeft,
+				top + marginHeight,
+				fontSize,
+				fontSize
+			);
+		var text_x = left + marginLeft + fontSize + 2;
+		var maxWidth = right - core.calWidth(ctx, numText) - text_x;
+		core.setTextAlign(ctx, "left");
+		core.fillText(
+			ctx,
+			name,
+			text_x,
+			top + height / 2,
+			style,
+			core.ui._buildFont(fontSize),
+			maxWidth
+		);
+		core.setAlpha(ctx, 1);
+
+		var todo = new Function("core.clickItemFunc('" + id + "');");
+		addUIEventListener(left, top, right - left, height, todo);
+	}
+
+	function setPageItems(page) {
+		var num = itemNum;
+		if (core.status.event.id == "equipbox") num -= reduceItem;
+		var info = core.status.thisUIEventInfo;
+		if (!info) return;
+		page = page || info.page;
+		var items = core.getToolboxItems(
+			core.status.event.id == "toolbox" ? "all" : "equips",
+			core.getFlag("showHideItem", false)
+		);
+		info.allItems = items;
+		var maxPage = Math.ceil(items.length / num);
+		info.maxPage = maxPage;
+		var pageItems = items.slice((page - 1) * num, page * num);
+		info.pageItems = pageItems;
+		info.maxItem = pageItems.length;
+		if (items.length == 0 && pageItems.length == 0) info.index = null;
+		if (pageItems.length == 0 && info.page > 1) {
+			info.page = Math.max(1, info.page - 1);
+			return setPageItems(info.page);
+		}
+		return pageItems;
+	}
+
+	function drawToolbox_setExitBtn(ctx, x, y, r, style, lineWidth) {
+		core.strokeCircle(ctx, x, y, r, style, lineWidth);
+		ctx.textAlign = "center";
+		ctx.textBaseline = "middle";
+		var textSize = Math.sqrt(2) * r;
+		core.fillText(
+			ctx,
+			"x",
+			x,
+			y,
+			style,
+			core.ui._buildFont(textSize),
+			textSize
+		);
+		core.setTextAlign(ctx, "start");
+		core.setTextBaseline(ctx, "top");
+
+		var todo = function () {
+			core.closePanel();
+		};
+		addUIEventListener(x - r, y - r, r * 2, r * 2, todo);
+	}
+
+	function drawToolbox_setUseBtn(ctx, x, y, r, h, style, lineWidth) {
+		core.setTextAlign(ctx, "left");
+		core.setTextBaseline(ctx, "top");
+		var fontSize = h - 4;
+		var font = core.ui._buildFont(fontSize);
+		var text = core.status.event.id == "toolbox" ? "使用" : "装备";
+		if (core.status.thisUIEventInfo.select.action == "unload") text = "卸下";
+		var w = core.calWidth(ctx, text, font) + 2 * r + lineWidth / 2;
+
+		core.strokeRoundRect(ctx, x, y, w, h, r, style, lineWidth);
+		core.fillText(ctx, text, x + r, y + lineWidth / 2 + 2, style, font);
+
+		var todo = function () {
+			core.useSelectItemInBox();
+		};
+		addUIEventListener(x, y, w, h, todo);
+	}
+
+	function getSelectedItem() {
+		var info = core.status.thisUIEventInfo;
+		if (
+			!(
+				info && ["toolbox", "equipbox"].includes(core.status.event.id)
+			)
+		) {
+			core.drawFailTip("发生了未知错误!");
+			return;
+		}
+		return info.select.id;
+	}
+
+	function batchUse(item, count) {
+		try {
+			const itemCount = core.itemCount(item);
+			if (count > itemCount) count = itemCount;
+			core.closePanel();
+			for (let i = 0; i < count; i++) {
+				if (core.canUseItem(item)) core.useItem(item);
+				else return;
+			}
+		} catch (e) {
+			console.error(e);
+			core.drawFailTip("批量使用时出现未知错误!");
+		}
+	}
+
+	function drawToolbox_setBatchUseBtn(ctx, x, y, r, h, style, lineWidth) {
+		try {
+			const selectedItem = getSelectedItem();
+			let canBatchUse = eval(core.material.items[selectedItem]?.canBatchUse);
+			if (!canBatchUse) return;
+		} catch (error) {
+			console.error(error);
+			return;
+		}
+		core.setTextAlign(ctx, "left");
+		core.setTextBaseline(ctx, "top");
+		var fontSize = h - 4;
+		var font = core.ui._buildFont(fontSize);
+		var text = "批量使用";
+		var w = core.calWidth(ctx, text, font) + 2 * r + lineWidth / 2;
+
+		core.strokeRoundRect(ctx, x, y, w, h, r, style, lineWidth);
+		core.fillText(ctx, text, x + r, y + lineWidth / 2 + 2, style, font);
+
+		var todo = function () {
+			core.utils.myprompt("输入要使用该物品的次数(0~99)。", null, (value) => {
+				value = parseInt(value);
+				const id = getSelectedItem();
+
+				if (Number.isNaN(value) || value < 0 || value > 99) {
+					core.drawFailTip("输入不合法!");
+					return;
+				}
+				if (!core.canUseItem(id)) {
+					core.drawFailTip("当前无法使用该道具!");
+					return;
+				}
+				core.closePanel();
+				batchUse(id, value);
+			});
+		};
+		addUIEventListener(x, y, w, h, todo);
+	}
+
+	function drawToolbox_setHideBtn(ctx, x, y, r, h, style, lineWidth) {
+		core.setTextAlign(ctx, "left");
+		core.setTextBaseline(ctx, "top");
+		var fontSize = h - 4;
+		var font = core.ui._buildFont(fontSize);
+		var text = "显示/隐藏";
+		var w = core.calWidth(ctx, text, font) + 2 * r + lineWidth / 2;
+
+		core.strokeRoundRect(ctx, x, y, w, h, r, style, lineWidth);
+		core.fillText(ctx, text, x + r, y + lineWidth / 2 + 2, style, font);
+
+		var todo = function () {
+			//debugger;
+			var id = getSelectedItem();
+			let hideInfo = core.getFlag("hideInfo", {});
+			console.log(id);
+			if (hideInfo.hasOwnProperty(id)) {
+				hideInfo[id] = !hideInfo[id];
+				core.setFlag("hideInfo", hideInfo);
+			} else {
+				hideInfo[id] = !core.material.items[id].hideInToolbox;
+				core.setFlag("hideInfo", hideInfo);
+			}
+			if (core.status.event.id === "toolbox") core.plugin.drawToolbox();
+			else if (core.status.event.id === "equipbox")
+				core.plugin.drawEquipbox();
+		};
+		addUIEventListener(x, y, w, h, todo);
+	}
+
+	ui.prototype.getToolboxItems = function (cls, showHide) {
+		let list = Object.keys(core.status.hero.items[cls] || {});
+		if (cls === "all") {
+			for (let name in core.status.hero.items) {
+				if (name == "equips") continue;
+				list = list.concat(Object.keys(core.status.hero.items[name]));
+			}
+			if (!showHide)
+				list = list.filter(function (id2) {
+					const hideInfo = core.getFlag("hideInfo", {});
+					if (hideInfo.hasOwnProperty(id2)) return !hideInfo[id2];
+					else return !core.material.items[id2].hideInToolbox;
+				});
+			list = list.sort();
+			return list;
+		}
+		if (cls === "equips") {
+			if (!showHide)
+				list = list.filter(function (id2) {
+					const hideInfo = core.getFlag("hideInfo", {});
+					if (hideInfo.hasOwnProperty(id2)) return !hideInfo[id2];
+					else return !core.material.items[id2].hideInToolbox;
+				});
+
+			list = list.sort();
+			return list;
+		}
+		if (this.uidata.getToolboxItems) {
+			return this.uidata.getToolboxItems(cls, showHide);
+		}
+		if (!showHide)
+			list = list.filter(function (id2) {
+				return !core.material.items[id2].hideInToolbox;
+			});
+		list = list.sort();
+		return list;
+	};
+
+	function drawToolbox_setShowHideBtn(ctx, x, y, h, style) {
+		core.setTextAlign(ctx, "left");
+		core.setTextBaseline(ctx, "top");
+		var fontSize = h - 6;
+		var font = core.ui._buildFont(fontSize);
+		var text = "显示隐藏";
+		var w = core.calWidth(ctx, text, font);
+		h += 4;
+		const squareSize = h - 6;
+
+		x -= w + squareSize + 26;
+
+		const border = 2;
+		core.fillRect(ctx, x, y, squareSize, squareSize, " #F5F5F5");
+		if (core.hasFlag("showHideItem")) {
+			core.fillRect(
+				ctx,
+				x + border,
+				y + border,
+				squareSize - 2 * border,
+				squareSize - 2 * border,
+				"lime"
+			);
+		}
+		core.fillText(ctx, text, x + squareSize + 2, y + 4, style, font);
+
+		var todo = function () {
+			core.setFlag("showHideItem", !core.getFlag("showHideItem", false));
+			if (core.status.event.id === "toolbox") core.plugin.drawToolbox();
+			else if (core.status.event.id === "equipbox")
+				core.plugin.drawEquipbox();
+		};
+		addUIEventListener(x, y, w, h, todo);
+	}
+
+	function drawItemListbox_setPageBtn(
+		ctx,
+		left,
+		right,
+		bottom,
+		r,
+		style,
+		lineWidth
+	) {
+		var offset = lineWidth / 2 + r;
+
+		var x = left + offset;
+		var y = bottom - offset;
+		var pos = (Math.sqrt(2) / 2) * (r - lineWidth / 2);
+		core.fillPolygon(
+			ctx,
+			[
+				[x - pos, y],
+				[x + pos - 2, y - pos],
+				[x + pos - 2, y + pos],
+			],
+			style
+		);
+		core.strokeCircle(ctx, x, y, r, style, lineWidth);
+		var todo = function () {
+			core.addItemListboxPage(-1);
+		};
+		addUIEventListener(x - r - 2, y - r - 2, r * 2 + 4, r * 2 + 4, todo);
+
+		x = right - offset;
+		core.fillPolygon(
+			ctx,
+			[
+				[x + pos, y],
+				[x - pos + 2, y - pos],
+				[x - pos + 2, y + pos],
+			],
+			style
+		);
+		core.strokeCircle(ctx, x, y, r, style, lineWidth);
+		var todo = function () {
+			core.addItemListboxPage(1);
+		};
+		addUIEventListener(x - r - 2, y - r - 2, r * 2 + 4, r * 2 + 4, todo);
+	}
+
+	this.clickItemFunc = function (id) {
+		var info = core.status.thisUIEventInfo;
+		if (!info) return;
+		if (info.select.id == id) return core.useSelectItemInBox();
+		info.select = {};
+		info.select.id = id;
+		core.setIndexAndSelect("index");
+		refreshBox();
+	};
+
+	this.clickOneEquipbox = function (id, type) {
+		var info = core.status.thisUIEventInfo;
+		if (!info) return;
+		if (info.select.id == id && info.select.type == type)
+			core.useSelectItemInBox();
+		else
+			core.status.thisUIEventInfo.select = {
+				id: id,
+				type: type,
+				action: "unload",
+			};
+		return refreshBox();
+	};
+
+	this.useSelectItemInBox = function () {
+		var info = core.status.thisUIEventInfo;
+		if (!info) return;
+		if (!info.select.id) return;
+		var id = info.select.id;
+		if (core.status.event.id == "toolbox") {
+			core.events.tryUseItem(id);
+			// core.closePanel();
+		} else if (core.status.event.id == "equipbox") {
+			var action = info.select.action || "load";
+			info.index = 1;
+			if (action == "load") {
+				var type = core.getEquipTypeById(id);
+				let equipClsid = core.material.items[id]?.equipCls;
+				let equipCls0 = core.material.items[core.getEquip(0)]?.equipCls;
+				let equipCls1 = core.material.items[core.getEquip(1)]?.equipCls;
+				if (equipClsid === "双手剑") {
+					core.unloadEquip(0, function () {
+						core.status.route.push("unEquip:" + 0);
+					});
+					core.unloadEquip(1, function () {
+						core.status.route.push("unEquip:" + 1);
+					});
+				}
+				if (
+					equipCls0 === "双手剑" &&
+					!(equipClsid === "饰品" || equipClsid === "护具")
+				) {
+					core.unloadEquip(0, function () {
+						core.status.route.push("unEquip:" + 0);
+					});
+				}
+				core.loadEquip(id, function () {
+					core.status.route.push("equip:" + id);
+					info.select.type = type;
+					core.setIndexAndSelect("select");
+					core.drawEquipbox();
+				});
+			} else {
+				var type = info.select.type;
+				core.unloadEquip(type, function () {
+					core.status.route.push("unEquip:" + type);
+					info.select.type = type;
+					info.select.action = "load";
+					core.setIndexAndSelect("select");
+					core.drawEquipbox();
+				});
+			}
+		}
+		core.updateStatusBar();
+	};
+
+	this.setIndexAndSelect = function (toChange) {
+		var info = core.status.thisUIEventInfo;
+		if (!info) return;
+		setPageItems(info.page);
+		var index = info.index || 1;
+		var items = info.pageItems;
+
+		info.select.action = null;
+		info.select.type = null;
+		if (toChange == "index") info.index = items.indexOf(info.select.id) + 1;
+		info.select.id = items[info.index - 1];
+	};
+
+	this.addItemListboxPage = function (num) {
+		var info = core.status.thisUIEventInfo;
+		if (!info) return;
+		var maxPage = info.maxPage || 1;
+		info.page = info.page || 1;
+		info.page += num;
+		if (info.page <= 0) info.page = maxPage;
+		if (info.page > maxPage) info.page = 1;
+		info.index = 1;
+		setPageItems(info.page);
+		core.setIndexAndSelect("select");
+		refreshBox();
+	};
+
+	this.addItemListboxIndex = function (num) {
+		var info = core.status.thisUIEventInfo;
+		if (!info) return;
+		var maxItem = info.maxItem || 0;
+		info.index = info.index || 0;
+		info.index += num;
+		if (info.index <= 0) info.index = 1;
+		if (info.index > maxItem) info.index = maxItem;
+		core.setIndexAndSelect("select");
+		refreshBox();
+	};
+
+	this.addEquipboxType = function (num) {
+		var info = core.status.thisUIEventInfo;
+		var type = info.select.type;
+		if (type == null && num > 0) info.select.type = 0;
+		else info.select.type = type + num;
+		var max = core.status.globalAttribute.equipName.length;
+		if (info.select.type >= max) {
+			info.select = {};
+			core.setIndexAndSelect("select");
+			return core.addItemListboxPage(0);
+		} else {
+			var m = Math.abs(info.select.type);
+			if (info.select.type < 0) info.select.type = max - m;
+			core.setIndexAndSelect("select");
+			refreshBox();
+			return;
+		}
+	};
+
+	core.actions._keyDownToolbox = function (keycode) {
+		if (!core.status.thisEventClickArea) return;
+		if (keycode == 37) {
+			// left
+			core.addItemListboxPage(-1);
+			return;
+		}
+		if (keycode == 38) {
+			// up
+			core.addItemListboxIndex(-1);
+			return;
+		}
+		if (keycode == 39) {
+			// right
+			core.addItemListboxPage(1);
+			return;
+		}
+		if (keycode == 40) {
+			// down
+			core.addItemListboxIndex(1);
+			return;
+		}
+	};
+
+	////// 工具栏界面时,放开某个键的操作 //////
+	core.actions._keyUpToolbox = function (keycode) {
+		if (keycode == 81) {
+			core.ui.closePanel();
+			if (core.isReplaying()) core.control._replay_equipbox();
+			else core.openEquipbox();
+			return;
+		}
+		if (keycode == 84 || keycode == 27 || keycode == 88) {
+			core.closePanel();
+			return;
+		}
+		if (keycode == 13 || keycode == 32 || keycode == 67) {
+			var info = core.status.thisUIEventInfo;
+			if (info.select) {
+				core.useSelectItemInBox();
+			}
+			return;
+		}
+	};
+
+	core.actions._keyDownEquipbox = function (keycode) {
+		if (!core.status.thisEventClickArea) return;
+		if (keycode == 37) {
+			// left
+			var info = core.status.thisUIEventInfo;
+			if (info.index != null) return core.addItemListboxPage(-1);
+			return core.addEquipboxType(-1);
+		}
+		if (keycode == 38) {
+			// up
+			var info = core.status.thisUIEventInfo;
+			if (info.index == 1) {
+				info.select.type = core.status.globalAttribute.equipName.length - 1;
+				core.setIndexAndSelect();
+				return refreshBox();
+			}
+			if (info.index) return core.addItemListboxIndex(-1);
+			return core.addEquipboxType(-1 * info.equips);
+		}
+		if (keycode == 39) {
+			// right
+			var info = core.status.thisUIEventInfo;
+			if (info.index != null) return core.addItemListboxPage(1);
+			return core.addEquipboxType(1);
+		}
+		if (keycode == 40) {
+			// down
+			var info = core.status.thisUIEventInfo;
+			if (info.index) return core.addItemListboxIndex(1);
+			return core.addEquipboxType(info.equips);
+		}
+	};
+
+	core.actions._keyUpEquipbox = function (keycode, altKey) {
+		if (altKey && keycode >= 48 && keycode <= 57) {
+			core.items.quickSaveEquip(keycode - 48);
+			return;
+		}
+		if (keycode == 84) {
+			core.ui.closePanel();
+			if (core.isReplaying()) core.control._replay_toolbox();
+			else core.openToolbox();
+			return;
+		}
+		if (keycode == 81 || keycode == 27 || keycode == 88) {
+			core.closePanel();
+			return;
+		}
+		if (keycode == 13 || keycode == 32 || keycode == 67) {
+			var info = core.status.thisUIEventInfo;
+			if (info.select) core.useSelectItemInBox();
+			return;
+		}
+	};
+
+	core.registerAction(
+		"ondown",
+		"inEventClickAction",
+		function (x, y, px, py) {
+			if (!core.status.thisEventClickArea) return false;
+			var info = core.status.thisEventClickArea;
+			for (var i = 0; i < info.length; i++) {
+				var obj = info[i];
+				if (
+					px >= obj.x &&
+					px <= obj.x + obj.width &&
+					py > obj.y &&
+					py < obj.y + obj.height
+				) {
+					if (obj.todo) obj.todo();
+					break;
+				}
+			}
+			return true;
+		},
+		51
+	);
+	core.registerAction(
+		"onclick",
+		"stopClick",
+		function () {
+			if (core.status.thisEventClickArea) return true;
+		},
+		51
+	);
+
+	function addUIEventListener(x, y, width, height, todo) {
+		if (!core.status.thisEventClickArea) return;
+		var obj = {
+			x: x,
+			y: y,
+			width: width,
+			height: height,
+			todo: todo,
+		};
+		core.status.thisEventClickArea.push(obj);
+	}
+
+	this.initThisEventInfo = function () {
+		core.status.thisUIEventInfo = {
+			page: 1,
+			select: {},
+		};
+		core.status.thisEventClickArea = [];
+	};
+
+	function refreshBox() {
+		if (!core.status.event.id) return;
+		if (core.status.event.id == "toolbox") core.drawToolbox();
+		else core.drawEquipbox();
+	}
+
+	core.ui.closePanel = function () {
+		core.dom.saveLoad.style.display = "none"
+		if (core.status.hero && core.status.hero.flags) {
+			// 清除全部临时变量
+			Object.keys(core.status.hero.flags).forEach(function (name) {
+				if (name.startsWith("@temp@") || /^arg\d+$/.test(name)) {
+					delete core.status.hero.flags[name];
+				}
+			});
+		}
+		this.clearUI();
+		core.maps.generateGroundPattern();
+		core.updateStatusBar(true);
+		core.unlockControl();
+		core.status.event.data = null;
+		core.status.event.id = null;
+		core.status.event.selection = null;
+		core.status.event.ui = null;
+		core.status.event.interval = null;
+		core.status.thisUIEventInfo = null;
+		core.status.thisEventClickArea = null;
+	};
+
+	this.getItemClsName = function (item) {
+		if (item == null) return itemClsName;
+		if (item.cls == "equips") {
+			if (typeof item.equip.type == "string") return item.equip.type;
+			var type = core.getEquipTypeById(item.id);
+			return core.status.globalAttribute.equipName[type];
+		} else return itemClsName[item.cls] || item.cls;
+	};
+
+	core.events.openToolbox = function (fromUserAction) {
+		if (core.isReplaying()) return;
+		if (!this._checkStatus("toolbox", fromUserAction)) return;
+		core.initThisEventInfo();
+		let info = core.status.thisUIEventInfo;
+		info.index = 1;
+		core.setIndexAndSelect("select");
+		core.drawToolbox();
+	};
+
+	core.events.openEquipbox = function (fromUserAction) {
+		if (core.isReplaying()) return;
+		if (!this._checkStatus("equipbox", fromUserAction)) return;
+		core.initThisEventInfo();
+		let info = core.status.thisUIEventInfo;
+		info.select.type = 0;
+		core.setIndexAndSelect("select");
+		core.drawEquipbox();
+	};
+
+	core.control._replay_toolbox = function () {
+		if (!core.isPlaying() || !core.isReplaying()) return;
+		if (!core.status.replay.pausing) return core.drawTip("请先暂停录像");
+		if (core.isMoving() || core.status.replay.animate || core.status.event.id)
+			return core.drawTip("请等待当前事件的处理结束");
+
+		core.lockControl();
+		core.status.event.id = "toolbox";
+		core.drawToolbox();
+	};
+
+	core.control._replay_equipbox = function () {
+		if (!core.isPlaying() || !core.isReplaying()) return;
+		if (!core.status.replay.pausing) return core.drawTip("请先暂停录像");
+		if (core.isMoving() || core.status.replay.animate || core.status.event.id)
+			return core.drawTip("请等待当前事件的处理结束");
+
+		core.lockControl();
+		core.status.event.id = "equipbox";
+		core.drawEquipbox();
+	};
+
+	core.control._replayAction_item = function (action) {
+		if (action.indexOf("item:") != 0) return false;
+		var itemId = action.substring(5);
+		if (!core.canUseItem(itemId)) return false;
+		if (
+			core.material.items[itemId].hideInReplay ||
+			core.status.replay.speed == 24
+		) {
+			core.useItem(itemId, false, core.replay);
+			return true;
+		}
+		core.status.event.id = "toolbox";
+		core.initThisEventInfo();
+		var info = core.status.thisUIEventInfo;
+		var items = core.getToolboxItems(
+			"all",
+			core.getFlag("showHideItem", false)
+		);
+		setPageItems(1);
+		var index = items.indexOf(itemId) + 1;
+		info.page = Math.ceil(index / info.maxItem);
+		info.index = index % info.maxItem || info.maxItem;
+		core.setIndexAndSelect("select");
+		setPageItems(info.page);
+		core.drawToolbox();
+		setTimeout(function () {
+			core.ui.closePanel();
+			core.useItem(itemId, false, core.replay);
+		}, core.control.__replay_getTimeout());
+		return true;
+	};
+
+	core.control._replayAction_equip = function (action) {
+		if (action.indexOf("equip:") != 0) return false;
+		var itemId = action.substring(6);
+		var items = core.getToolboxItems(
+			"equips",
+			core.getFlag("showHideItem", false)
+		);
+		var index = items.indexOf(itemId) + 1;
+		if (index < 1) {
+			core.removeFlag("__doNotCheckAutoEvents__");
+			return false;
+		}
+
+		var cb = function () {
+			var next = core.status.replay.toReplay[0] || "";
+			if (!next.startsWith("equip:") && !next.startsWith("unEquip:")) {
+				core.removeFlag("__doNotCheckAutoEvents__");
+				core.checkAutoEvents();
+			}
+			core.replay();
+		};
+		core.setFlag("__doNotCheckAutoEvents__", true);
+
+		core.status.route.push(action);
+		if (
+			core.material.items[itemId].hideInReplay ||
+			core.status.replay.speed == 24
+		) {
+			core.loadEquip(itemId, cb);
+			return true;
+		}
+		core.status.event.id = "equipbox";
+		core.initThisEventInfo();
+		var info = core.status.thisUIEventInfo;
+		setPageItems(1);
+		info.page = Math.ceil(index / info.maxItem);
+		info.index = index % info.maxItem || info.maxItem;
+		core.setIndexAndSelect("select");
+		setPageItems(info.page);
+		core.drawEquipbox();
+		setTimeout(function () {
+			core.ui.closePanel();
+			core.loadEquip(itemId, cb);
+		}, core.control.__replay_getTimeout());
+		return true;
+	};
+
+	core.control._replayAction_unEquip = function (action) {
+		if (action.indexOf("unEquip:") != 0) return false;
+		var equipType = parseInt(action.substring(8));
+		if (!core.isset(equipType)) {
+			core.removeFlag("__doNotCheckAutoEvents__");
+			return false;
+		}
+
+		var cb = function () {
+			var next = core.status.replay.toReplay[0] || "";
+			if (!next.startsWith("equip:") && !next.startsWith("unEquip:")) {
+				core.removeFlag("__doNotCheckAutoEvents__");
+				core.checkAutoEvents();
+			}
+			core.replay();
+		};
+		core.setFlag("__doNotCheckAutoEvents__", true);
+
+		core.status.route.push(action);
+		if (core.status.replay.speed == 24) {
+			core.unloadEquip(equipType, cb);
+			return true;
+		}
+		core.status.event.id = "equipbox";
+		core.initThisEventInfo();
+		var info = core.status.thisUIEventInfo;
+		setPageItems(1);
+		info.select.type = equipType;
+		core.setIndexAndSelect();
+		core.drawEquipbox();
+		setTimeout(function () {
+			core.ui.closePanel();
+			core.unloadEquip(equipType, cb);
+		}, core.control.__replay_getTimeout());
+		return true;
+	};
+	core.registerReplayAction("item", core.control._replayAction_item);
+	core.registerReplayAction("equip", core.control._replayAction_equip);
+	core.registerReplayAction("unEquip", core.control._replayAction_unEquip);
+},
     "技能树": function () {
     // 在此增加新插件
     //
@@ -8034,7 +9068,42 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
         return arr;
       }
     }
+    /**
+     * 图片叠加滤镜
+     * @param {img} image 需要叠加的图片,
+     * @param {color} style 需要叠加的颜色
+     */
+    function imagelighter(image, style) {
+      // 创建一个canvas元素
+      const canvas = document.createElement("canvas");
+      const ctx = canvas.getContext("2d");
 
+      // 设置canvas的尺寸与图片相同
+      canvas.width = image.width;
+      canvas.height = image.height;
+      ctx.drawImage(image, 0, 0);
+      // 创建一个临时canvas用于红色滤镜
+      const tempCanvas = document.createElement("canvas");
+      const tempCtx = tempCanvas.getContext("2d");
+      tempCanvas.width = image.width;
+      tempCanvas.height = image.height;
+
+      // 在临时canvas上绘制红色滤镜
+      tempCtx.fillStyle = style ?? "rgba(255, 0, 0, 0.5)"; // 半透明红色
+      tempCtx.fillRect(0, 0, tempCanvas.width, tempCanvas.height);
+      // 使用lighter混合模式叠加红色滤镜
+      ctx.globalCompositeOperation = "lighter";
+      ctx.drawImage(tempCanvas, 0, 0);
+      // 使用destination-in混合模式保留原始图片的透明度
+      ctx.globalCompositeOperation = "destination-in";
+      ctx.drawImage(image, 0, 0);
+
+      // 恢复默认混合模式
+      ctx.globalCompositeOperation = "source-over";
+
+      // 返回处理后的canvas
+      return canvas;
+    }
     /**
      * 获取一个方向的反方向
      * @example backDir('up'); // 'down'
@@ -8388,6 +9457,35 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
       yellowgreen: "#9acd32",
       transparent: "#0000",
     };
+    // 计算两个数的最大公约数
+    function gcdOfTwo(a, b) {
+      while (b !== 0) {
+        let temp = b;
+        b = a % b;
+        a = temp;
+      }
+      return a;
+    }
+
+    // 计算任意项整数的最大公约数
+    function gcd(...numbers) {
+      if (numbers.length < 2) {
+        throw new Error("至少需要两个数");
+      }
+      return numbers.reduce((a, b) => gcdOfTwo(a, b));
+    }
+    // 计算两个数的最小公倍数
+    function lcmOfTwo(a, b) {
+      return (a * b) / gcdOfTwo(a, b);
+    }
+
+    // 计算任意项整数的最小公倍数
+    function lcm(...numbers) {
+      if (numbers.length < 2) {
+        throw new Error("至少需要两个数");
+      }
+      return numbers.reduce((a, b) => lcmOfTwo(a, b));
+    }
 
     if (has(core.plugin.utils)) {
       throw new ReferenceError(
@@ -8395,6 +9493,11 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
       );
     }
     core.plugin.utils = {
+      imagelighter,
+      gcdOfTwo,
+      lcmOfTwo,
+      gcd,
+      lcm,
       has,
       slide,
       backDir,
@@ -8449,8 +9552,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
     };
   },
     "音频系统": function () {
-	// 在此增加新插件
-	/*首先,在造塔群下载所需的库文件,然后放置在塔目录下的 libs/thirdparty 或其他目录下,之后在 index.html 的最后加上下面这几行:
+    // 在此增加新插件
+    /*首先,在造塔群下载所需的库文件,然后放置在塔目录下的 libs/thirdparty 或其他目录下,之后在 index.html 的最后加上下面这几行:
 	
 	<script src="libs/thirdparty/ogg-vorbis-decoder.min.js"></script>
 
@@ -8458,2357 +9561,2099 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
 
 	<script src="libs/thirdparty/codec-parser.min.js"></script>
 	*/
-	// 将__enable置为false将关闭插件
-	let __enable = true;
-	if (!__enable || main.mode === "editor") return;
-	const { OggOpusDecoderWebWorker } = window["ogg-opus-decoder"];
-	const { OggVorbisDecoderWebWorker } = window["ogg-vorbis-decoder"];
-	const { CodecParser } = window.CodecParser;
-	const { Transition, linear } = core.plugin.animate;
-
-	const audio = new Audio();
-	const AudioStatus = {
-		Playing: 0,
-		Pausing: 1,
-		Paused: 2,
-		Stoping: 3,
-		Stoped: 4,
-	};
-	const supportMap = new Map();
-	const AudioType = {
-		Mp3: "audio/mpeg",
-		Wav: 'audio/wav; codecs="1"',
-		Flac: "audio/flac",
-		Opus: 'audio/ogg; codecs="opus"',
-		Ogg: 'audio/ogg; codecs="vorbis"',
-		Aac: "audio/aac",
-	};
-	/**
-	 * 检查一种音频类型是否能被播放
-	 * @param type 音频类型 AudioType
-	 */
-	function isAudioSupport(type) {
-		if (supportMap.has(type)) return supportMap.get(type);
-		else {
-			const support = audio.canPlayType(type);
-			const canPlay = support === "maybe" || support === "probably";
-			supportMap.set(type, canPlay);
-			return canPlay;
-		}
-	}
-
-	const typeMap = new Map([
-		["ogg", AudioType.Ogg],
-		["mp3", AudioType.Mp3],
-		["wav", AudioType.Wav],
-		["flac", AudioType.Flac],
-		["opus", AudioType.Opus],
-		["aac", AudioType.Aac],
-	]);
-
-	/**
-	 * 根据文件名拓展猜测其类型
-	 * @param file 文件名 string
-	 */
-	function guessTypeByExt(file) {
-		const ext = /\.[a-zA-Z\d]+$/.exec(file);
-		if (!ext?.[0]) return "";
-		const type = ext[0].slice(1);
-		return typeMap.get(type.toLocaleLowerCase()) ?? "";
-	}
-
-	isAudioSupport(AudioType.Ogg);
-	isAudioSupport(AudioType.Mp3);
-	isAudioSupport(AudioType.Wav);
-	isAudioSupport(AudioType.Flac);
-	isAudioSupport(AudioType.Opus);
-	isAudioSupport(AudioType.Aac);
-
-	function isNil(value) {
-		return value === void 0 || value === null;
-	}
-
-	function sleep(time) {
-		return new Promise((res) => setTimeout(res, time));
-	}
-	class AudioEffect {
-		constructor(ac) {}
-		/**
-		 * 连接至其他效果器
-		 * @param target 目标输入 IAudioInput
-		 * @param output 当前效果器输出通道 Number
-		 * @param input 目标效果器的输入通道 Number
-		 */
-		connect(target, output, input) {
-			this.output.connect(target.input, output, input);
-		}
-
-		/**
-		 * 与其他效果器取消连接
-		 * @param target 目标输入 IAudioInput
-		 * @param output 当前效果器输出通道 Number
-		 * @param input 目标效果器的输入通道 Number
-		 */
-		disconnect(target, output, input) {
-			if (!target) {
-				if (!isNil(output)) {
-					this.output.disconnect(output);
-				} else {
-					this.output.disconnect();
-				}
-			} else {
-				if (!isNil(output)) {
-					if (!isNil(input)) {
-						this.output.disconnect(target.input, output, input);
-					} else {
-						this.output.disconnect(target.input, output);
-					}
-				} else {
-					this.output.disconnect(target.input);
-				}
-			}
-		}
-	}
-
-	class StereoEffect extends AudioEffect {
-		constructor(ac) {
-			super(ac);
-			const panner = ac.createPanner();
-			this.input = panner;
-			this.output = panner;
-		}
-
-		/**
-		 * 设置音频朝向,x正方形水平向右,y正方形垂直于地面向上,z正方向垂直屏幕远离用户
-		 * @param x 朝向x坐标 Number
-		 * @param y 朝向y坐标 Number
-		 * @param z 朝向z坐标 Number
-		 */
-		setOrientation(x, y, z) {
-			this.output.orientationX.value = x;
-			this.output.orientationY.value = y;
-			this.output.orientationZ.value = z;
-		}
-		/**
-		 * 设置音频位置,x正方形水平向右,y正方形垂直于地面向上,z正方向垂直屏幕远离用户
-		 * @param x 位置x坐标 Number
-		 * @param y 位置y坐标 Number
-		 * @param z 位置z坐标 Number
-		 */
-		setPosition(x, y, z) {
-			this.output.positionX.value = x;
-			this.output.positionY.value = y;
-			this.output.positionZ.value = z;
-		}
-		end() {}
-
-		start() {}
-	}
-	class VolumeEffect extends AudioEffect {
-		constructor(ac) {
-			super(ac);
-			const gain = ac.createGain();
-			this.input = gain;
-			this.output = gain;
-		}
-
-		/**
-		 * 设置音量大小
-		 * @param volume 音量大小 Number
-		 */
-		setVolume(volume) {
-			this.output.gain.value = volume;
-		}
-
-		/**
-		 * 获取音量大小 Number
-		 */
-		getVolume() {
-			return this.output.gain.value;
-		}
-
-		end() {}
-
-		start() {}
-	}
-	class ChannelVolumeEffect extends AudioEffect {
-		/** 所有的音量控制节点 */
-
-		constructor(ac) {
-			super(ac);
-			/** 所有的音量控制节点 */
-			this.gain = [];
-			const splitter = ac.createChannelSplitter();
-			const merger = ac.createChannelMerger();
-			this.output = merger;
-			this.input = splitter;
-			for (let i = 0; i < 6; i++) {
-				const gain = ac.createGain();
-				splitter.connect(gain, i);
-				gain.connect(merger, 0, i);
-				this.gain.push(gain);
-			}
-		}
-
-		/**
-		 * 设置某个声道的音量大小
-		 * @param channel 要设置的声道,可填0-5 Number
-		 * @param volume 这个声道的音量大小 Number
-		 */
-		setVolume(channel, volume) {
-			if (!this.gain[channel]) return;
-			this.gain[channel].gain.value = volume;
-		}
-
-		/**
-		 * 获取某个声道的音量大小,可填0-5
-		 * @param channel 要获取的声道 Number
-		 */
-		getVolume(channel) {
-			if (!this.gain[channel]) return 0;
-			return this.gain[channel].gain.value;
-		}
-
-		end() {}
-
-		start() {}
-	}
-	class DelayEffect extends AudioEffect {
-		constructor(ac) {
-			super(ac);
-
-			const delay = ac.createDelay();
-			this.input = delay;
-			this.output = delay;
-		}
-
-		/**
-		 * 设置延迟时长
-		 * @param delay 延迟时长,单位秒 Number
-		 */
-		setDelay(delay) {
-			this.output.delayTime.value = delay;
-		}
-
-		/**
-		 * 获取延迟时长
-		 */
-		getDelay() {
-			return this.output.delayTime.value;
-		}
-
-		end() {}
-
-		start() {}
-	}
-	class EchoEffect extends AudioEffect {
-		constructor(ac) {
-			super(ac);
-			/** 当前增益 */
-			this.gain = 0.5;
-			/** 是否正在播放 */
-			this.playing = false;
-			const delay = ac.createDelay();
-			const gain = ac.createGain();
-			gain.gain.value = 0.5;
-			delay.delayTime.value = 0.05;
-			delay.connect(gain);
-			gain.connect(delay);
-			/** 延迟节点 */
-			this.delay = delay;
-			/** 反馈增益节点 */
-			this.gainNode = gain;
-
-			this.input = gain;
-			this.output = gain;
-		}
-
-		/**
-		 * 设置回声反馈增益大小
-		 * @param gain 增益大小,范围 0-1,大于等于1的视为0.5,小于0的视为0 Number
-		 */
-		setFeedbackGain(gain) {
-			const resolved = gain >= 1 ? 0.5 : gain < 0 ? 0 : gain;
-			this.gain = resolved;
-			if (this.playing) this.gainNode.gain.value = resolved;
-		}
-
-		/**
-		 * 设置回声间隔时长
-		 * @param delay 回声时长,范围 0.01-Infinity,小于0.01的视为0.01 Number
-		 */
-		setEchoDelay(delay) {
-			const resolved = delay < 0.01 ? 0.01 : delay;
-			this.delay.delayTime.value = resolved;
-		}
-
-		/**
-		 * 获取反馈节点增益
-		 */
-		getFeedbackGain() {
-			return this.gain;
-		}
-
-		/**
-		 * 获取回声间隔时长
-		 */
-		getEchoDelay() {
-			return this.delay.delayTime.value;
-		}
-
-		end() {
-			this.playing = false;
-			const echoTime = Math.ceil(Math.log(0.001) / Math.log(this.gain)) + 10;
-			sleep(this.delay.delayTime.value * echoTime).then(() => {
-				if (!this.playing) this.gainNode.gain.value = 0;
-			});
-		}
-
-		start() {
-			this.playing = true;
-			this.gainNode.gain.value = this.gain;
-		}
-	}
-
-	class StreamLoader {
-		constructor(url) {
-			/** 传输目标  Set<IStreamReader>*/
-			this.target = new Set();
-			this.loading = false;
-		}
-
-		/**
-		 * 将加载流传递给字节流读取对象
-		 * @param reader 字节流读取对象 IStreamReader
-		 */
-		pipe(reader) {
-			if (this.loading) {
-				console.warn(
-					"Cannot pipe new StreamReader object when stream is loading."
-				);
-				return;
-			}
-			this.target.add(reader);
-			reader.piped(this);
-			return this;
-		}
-
-		async start() {
-			if (this.loading) return;
-			this.loading = true;
-			const response = await window.fetch(this.url);
-			const stream = response.body;
-			if (!stream) {
-				console.error("Cannot get reader when fetching '" + this.url + "'.");
-				return;
-			}
-			// 获取读取器
-			/** 读取流对象 */
-			this.stream = stream;
-			const reader = response.body?.getReader();
-			const targets = [...this.target];
-
-			await Promise.all(targets.map((v) => v.start(stream, this, response)));
-			if (reader && reader.read) {
-				// 开始流传输
-				while (true) {
-					const { value, done } = await reader.read();
-					await Promise.all(
-						targets.map((v) => v.pump(value, done, response))
-					);
-					if (done) break;
-				}
-			} else {
-				// 如果不支持流传输
-				const buffer = await response.arrayBuffer();
-				const data = new Uint8Array(buffer);
-				await Promise.all(targets.map((v) => v.pump(data, true, response)));
-			}
-			// 开始流传输
-			while (true) {
-				const { value, done } = await reader.read();
-				await Promise.all(targets.map((v) => v.pump(value, done, response)));
-				if (done) break;
-			}
-
-			this.loading = false;
-			targets.forEach((v) => v.end(true));
-
-			//
-		}
-
-		cancel(reason) {
-			if (!this.stream) return;
-			this.stream.cancel(reason);
-			this.loading = false;
-			this.target.forEach((v) => v.end(false, reason));
-		}
-	}
-	const fileSignatures = [
-		[AudioType.Mp3, [0x49, 0x44, 0x33]],
-		[AudioType.Ogg, [0x4f, 0x67, 0x67, 0x53]],
-		[AudioType.Wav, [0x52, 0x49, 0x46, 0x46]],
-		[AudioType.Flac, [0x66, 0x4c, 0x61, 0x43]],
-		[AudioType.Aac, [0xff, 0xf1]],
-		[AudioType.Aac, [0xff, 0xf9]],
-	];
-	const oggHeaders = [
-		[AudioType.Opus, [0x4f, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64]],
-	];
-
-	function checkAudioType(data) {
-		let audioType = "";
-		// 检查头文件获取音频类型,仅检查前256个字节
-		const toCheck = data.slice(0, 256);
-		for (const [type, value] of fileSignatures) {
-			if (value.every((v, i) => toCheck[i] === v)) {
-				audioType = type;
-				break;
-			}
-		}
-		if (audioType === AudioType.Ogg) {
-			// 如果是ogg的话,进一步判断是不是opus
-			for (const [key, value] of oggHeaders) {
-				const has = toCheck.some((_, i) => {
-					return value.every((v, ii) => toCheck[i + ii] === v);
-				});
-				if (has) {
-					audioType = key;
-					break;
-				}
-			}
-		}
-
-		return audioType;
-	}
-	class AudioDecoder {
-		/**
-		 * 注册一个解码器
-		 * @param type 要注册的解码器允许解码的类型
-		 * @param decoder 解码器对象
-		 */
-		static registerDecoder(type, decoder) {
-			if (!this.decoderMap) this.decoderMap = new Map();
-			if (this.decoderMap.has(type)) {
-				console.warn(
-					"Audio stream decoder for audio type '" +
-					type +
-					"' has already existed."
-				);
-				return;
-			}
-
-			this.decoderMap.set(type, decoder);
-		}
-
-		/**
-		 * 解码音频数据
-		 * @param data 音频文件数据
-		 * @param player AudioPlayer实例
-		 */
-		static async decodeAudioData(data, player) {
-			// 检查头文件获取音频类型,仅检查前256个字节
-			const toCheck = data.slice(0, 256);
-			const type = checkAudioType(data);
-			if (type === "") {
-				console.error(
-					"Unknown audio type. Header: '" + [...toCheck]
-					.map((v) => v.toString().padStart(2, "0"))
-					.join(" ")
-					.toUpperCase() +
-					"'"
-				);
-				return null;
-			}
-			if (isAudioSupport(type)) {
-				if (data.buffer instanceof ArrayBuffer) {
-					return player.ac.decodeAudioData(data.buffer);
-				} else {
-					return null;
-				}
-			} else {
-				const Decoder = this.decoderMap.get(type);
-				if (!Decoder) {
-					return null;
-				} else {
-					const decoder = new Decoder();
-					await decoder.create();
-					const decodedData = await decoder.decode(data);
-					if (!decodedData) return null;
-					const buffer = player.ac.createBuffer(
-						decodedData.channelData.length,
-						decodedData.channelData[0].length,
-						decodedData.sampleRate
-					);
-					decodedData.channelData.forEach((v, i) => {
-						buffer.copyToChannel(v, i);
-					});
-					decoder.destroy();
-					return buffer;
-				}
-			}
-		}
-	}
-
-	class VorbisDecoder {
-		/**
-		 * 创建音频解码器
-		 */
-		async create() {
-			this.decoder = new OggVorbisDecoderWebWorker();
-			await this.decoder.ready;
-		}
-		/**
-		 * 摧毁这个解码器
-		 */
-		destroy() {
-			this.decoder?.free();
-		}
-		/**
-		 * 解码流数据
-		 * @param data 流数据
-		 */
-
-		async decode(data) {
-			return this.decoder?.decode(data);
-		}
-		/**
-		 * 解码整个文件
-		 * @param data 文件数据
-		 */
-		async decodeAll(data) {
-			return this.decoder?.decodeFile(data);
-		}
-		/**
-		 * 当音频解码完成后,会调用此函数,需要返回之前还未解析或未返回的音频数据。调用后,该解码器将不会被再次使用
-		 */
-		async flush() {
-			return this.decoder?.flush();
-		}
-	}
-
-	class OpusDecoder {
-		/**
-		 * 创建音频解码器
-		 */
-		async create() {
-			this.decoder = new OggOpusDecoderWebWorker();
-			await this.decoder.ready;
-		}
-		/**
-		 * 摧毁这个解码器
-		 */
-		destroy() {
-			this.decoder?.free();
-		}
-		/**
-		 * 解码流数据
-		 * @param data 流数据
-		 */
-		async decode(data) {
-			return this.decoder?.decode(data);
-		}
-		/**
-		 * 解码整个文件
-		 * @param data 文件数据
-		 */
-		async decodeAll(data) {
-			return this.decoder?.decodeFile(data);
-		}
-		/**
-		 * 当音频解码完成后,会调用此函数,需要返回之前还未解析或未返回的音频数据。调用后,该解码器将不会被再次使用
-		 */
-		async flush() {
-			return await this.decoder?.flush();
-		}
-	}
-	const mimeTypeMap = {
-		[AudioType.Aac]: "audio/aac",
-		[AudioType.Flac]: "audio/flac",
-		[AudioType.Mp3]: "audio/mpeg",
-		[AudioType.Ogg]: "application/ogg",
-		[AudioType.Opus]: "application/ogg",
-		[AudioType.Wav]: "application/ogg",
-	};
-
-	function isOggPage(data) {
-		return !isNil(data.isFirstPage);
-	}
-	class AudioStreamSource {
-		constructor(context) {
-			this.output = context.createBufferSource();
-			/** 是否已经完全加载完毕 */
-			this.loaded = false;
-			/** 是否正在播放 */
-			this.playing = false;
-			/** 已经缓冲了多长时间,如果缓冲完那么跟歌曲时长一致 */
-			this.buffered = 0;
-			/** 已经缓冲的采样点数量 */
-			this.bufferedSamples = 0;
-			/** 歌曲时长,加载完毕之前保持为 0 */
-			this.duration = 0;
-			/** 在流传输阶段,至少缓冲多长时间的音频之后才开始播放,单位秒 */
-			this.bufferPlayDuration = 1;
-			/** 音频的采样率,未成功解析出之前保持为 0 */
-			this.sampleRate = 0;
-			//是否循环播放
-			this.loop = false;
-			/** 上一次播放是从何时开始的 */
-			this.lastStartWhen = 0;
-			/** 开始播放时刻 */
-			this.lastStartTime = 0;
-			/** 上一次播放的缓存长度 */
-			this.lastBufferSamples = 0;
-
-			/** 是否已经获取到头文件 */
-			this.headerRecieved = false;
-			/** 音频类型 */
-			this.audioType = "";
-			/** 每多长时间组成一个缓存 Float32Array */
-			this.bufferChunkSize = 10;
-			/** 缓存音频数据,每 bufferChunkSize 秒钟组成一个 Float32Array,用于流式解码 */
-			this.audioData = [];
-
-			this.errored = false;
-			this.ac = context;
-		}
-		/** 当前已经播放了多长时间 */
-		get currentTime() {
-			return this.ac.currentTime - this.lastStartTime + this.lastStartWhen;
-		}
-		/**
-		 * 设置每个缓存数据的大小,默认为10秒钟一个缓存数据
-		 * @param size 每个缓存数据的时长,单位秒
-		 */
-		setChunkSize(size) {
-			if (this.controller?.loading || this.loaded) return;
-			this.bufferChunkSize = size;
-		}
-		on(event, fn, context) {}
-		piped(controller) {
-			this.controller = controller;
-		}
-
-		async pump(data, done) {
-			if (!data || this.errored) return;
-			if (!this.headerRecieved) {
-				// 检查头文件获取音频类型,仅检查前256个字节
-				const toCheck = data.slice(0, 256);
-				this.audioType = checkAudioType(data);
-				if (!this.audioType) {
-					console.error(
-						"Unknown audio type. Header: '" + [...toCheck]
-						.map((v) => v.toString(16).padStart(2, "0"))
-						.join(" ")
-						.toUpperCase() +
-						"'"
-					);
-					return;
-				}
-				// 创建解码器
-				const Decoder = AudioDecoder.decoderMap.get(this.audioType);
-				if (!Decoder) {
-					this.errored = true;
-					console.error(
-						"Cannot decode stream source type of '" +
-						this.audioType +
-						"', since there is no registered decoder for that type."
-					);
-					return Promise.reject(
-						`Cannot decode stream source type of '${this.audioType}', since there is no registered decoder for that type.`
-					);
-				}
-				this.decoder = new Decoder();
-				// 创建数据解析器
-				const mime = mimeTypeMap[this.audioType];
-				const parser = new CodecParser(mime);
-				this.parser = parser;
-				await this.decoder.create();
-				this.headerRecieved = true;
-			}
-
-			const decoder = this.decoder;
-			const parser = this.parser;
-			if (!decoder || !parser) {
-				this.errored = true;
-				return Promise.reject(
-					"No parser or decoder attached in this AudioStreamSource"
-				);
-			}
-
-			await this.decodeData(data, decoder, parser);
-			if (done) await this.decodeFlushData(decoder, parser);
-			this.checkBufferedPlay();
-		}
-
-		/**
-		 * 检查采样率,如果还未解析出采样率,那么将设置采样率,如果当前采样率与之前不同,那么发出警告
-		 */
-		checkSampleRate(info) {
-			for (const one of info) {
-				const frame = isOggPage(one) ? one.codecFrames[0] : one;
-				if (frame) {
-					const rate = frame.header.sampleRate;
-					if (this.sampleRate === 0) {
-						this.sampleRate = rate;
-						break;
-					} else {
-						if (rate !== this.sampleRate) {
-							console.warn("Sample rate in stream audio must be constant.");
-						}
-					}
-				}
-			}
-		}
-
-		/**
-		 * 解析音频数据
-		 */
-		async decodeData(data, decoder, parser) {
-			// 解析音频数据
-			const audioData = await decoder.decode(data);
-			if (!audioData) return;
-			// @ts-expect-error 库类型声明错误
-			const audioInfo = [...parser.parseChunk(data)];
-
-			// 检查采样率
-			this.checkSampleRate(audioInfo);
-			// 追加音频数据
-			this.appendDecodedData(audioData, audioInfo);
-		}
-
-		/**
-		 * 解码剩余数据
-		 */
-		async decodeFlushData(decoder, parser) {
-			const audioData = await decoder.flush();
-			if (!audioData) return;
-			// @ts-expect-error 库类型声明错误
-			const audioInfo = [...parser.flush()];
-
-			this.checkSampleRate(audioInfo);
-			this.appendDecodedData(audioData, audioInfo);
-		}
-
-		/**
-		 * 追加音频数据
-		 */
-		appendDecodedData(data, info) {
-			const channels = data.channelData.length;
-			if (channels === 0) return;
-			if (this.audioData.length !== channels) {
-				this.audioData = [];
-				for (let i = 0; i < channels; i++) {
-					this.audioData.push([]);
-				}
-			}
-			// 计算出应该放在哪
-			const chunk = this.sampleRate * this.bufferChunkSize;
-			const sampled = this.bufferedSamples;
-			const pushIndex = Math.floor(sampled / chunk);
-			const bufferIndex = sampled % chunk;
-			const dataLength = data.channelData[0].length;
-			let buffered = 0;
-			let nowIndex = pushIndex;
-			let toBuffer = bufferIndex;
-			while (buffered < dataLength) {
-				const rest = toBuffer !== 0 ? chunk - bufferIndex : chunk;
-
-				for (let i = 0; i < channels; i++) {
-					const audioData = this.audioData[i];
-					if (!audioData[nowIndex]) {
-						audioData.push(new Float32Array(chunk));
-					}
-					const toPush = data.channelData[i].slice(buffered, buffered + rest);
-
-					audioData[nowIndex].set(toPush, toBuffer);
-				}
-				buffered += rest;
-				nowIndex++;
-				toBuffer = 0;
-			}
-
-			this.buffered +=
-				info.reduce((prev, curr) => prev + curr.duration, 0) / 1000;
-			this.bufferedSamples += info.reduce(
-				(prev, curr) => prev + curr.samples,
-				0
-			);
-		}
-
-		/**
-		 * 检查已缓冲内容,并在未开始播放时播放
-		 */
-		checkBufferedPlay() {
-			if (this.playing || this.sampleRate === 0) return;
-			const played = this.lastBufferSamples / this.sampleRate;
-			const dt = this.buffered - played;
-			if (this.loaded) {
-				this.playAudio(played);
-				return;
-			}
-			if (dt < this.bufferPlayDuration) return;
-
-			this.lastBufferSamples = this.bufferedSamples;
-			// 需要播放
-			this.mergeBuffers();
-			if (!this.buffer) return;
-			if (this.playing) this.output.stop();
-			this.createSourceNode(this.buffer);
-			this.output.loop = false;
-			this.output.start(0, played);
-			this.lastStartTime = this.ac.currentTime;
-			this.playing = true;
-			this.output.addEventListener("ended", () => {
-				this.playing = false;
-				this.checkBufferedPlay();
-			});
-		}
-
-		mergeBuffers() {
-			const buffer = this.ac.createBuffer(
-				this.audioData.length,
-				this.bufferedSamples,
-				this.sampleRate
-			);
-			const chunk = this.sampleRate * this.bufferChunkSize;
-			const bufferedChunks = Math.floor(this.bufferedSamples / chunk);
-			const restLength = this.bufferedSamples % chunk;
-			for (let i = 0; i < this.audioData.length; i++) {
-				const audio = this.audioData[i];
-				const data = new Float32Array(this.bufferedSamples);
-				for (let j = 0; j < bufferedChunks; j++) {
-					data.set(audio[j], chunk * j);
-				}
-				if (restLength !== 0) {
-					data.set(
-						audio[bufferedChunks].slice(0, restLength),
-						chunk * bufferedChunks
-					);
-				}
-
-				buffer.copyToChannel(data, i, 0);
-			}
-			this.buffer = buffer;
-		}
-
-		async start() {
-			delete this.buffer;
-			this.headerRecieved = false;
-			this.audioType = "";
-			this.errored = false;
-			this.buffered = 0;
-			this.sampleRate = 0;
-			this.bufferedSamples = 0;
-			this.duration = 0;
-			this.loaded = false;
-			if (this.playing) this.output.stop();
-			this.playing = false;
-			this.lastStartTime = this.ac.currentTime;
-		}
-
-		end(done, reason) {
-			if (done && this.buffer) {
-				this.loaded = true;
-				delete this.controller;
-				this.mergeBuffers();
-
-				this.duration = this.buffered;
-				this.audioData = [];
-				this.decoder?.destroy();
-				delete this.decoder;
-				delete this.parser;
-			} else {
-				console.warn(
-					"Unexpected end when loading stream audio, reason: '" +
-					(reason ?? "") +
-					"'"
-				);
-			}
-		}
-
-		playAudio(when) {
-			if (!this.buffer) return;
-			this.lastStartTime = this.ac.currentTime;
-			if (this.playing) this.output.stop();
-			if (this.player.status !== AudioStatus.Playing) {
-				this.player.status = AudioStatus.Playing;
-			}
-			this.createSourceNode(this.buffer);
-			this.output.start(0, when);
-			this.playing = true;
-
-			this.output.addEventListener("ended", () => {
-				this.playing = false;
-				if (this.player.status === AudioStatus.Playing) {
-					this.player.status = AudioStatus.Stoped;
-				}
-				if (this.loop && !this.output.loop) this.play(0);
-			});
-		}
-		/**
-		 * 开始播放这个音频源
-		 */
-		play(when) {
-			if (this.playing || this.errored) return;
-			if (this.loaded && this.buffer) {
-				this.playing = true;
-				this.playAudio(when);
-			} else {
-				this.controller?.start();
-			}
-		}
-
-		createSourceNode(buffer) {
-			if (!this.target) return;
-			const node = this.ac.createBufferSource();
-			node.buffer = buffer;
-			if (this.playing) this.output.stop();
-			this.playing = false;
-			this.output = node;
-			node.connect(this.target.input);
-			node.loop = this.loop;
-		}
-		/**
-		 * 停止播放这个音频源
-		 * @returns 音频暂停的时刻 number
-		 */
-		stop() {
-			if (this.playing) this.output.stop();
-			this.playing = false;
-			return this.ac.currentTime - this.lastStartTime;
-		}
-		/**
-		 * 连接到音频路由图上,每次调用播放的时候都会执行一次
-		 * @param target 连接至的目标 IAudioInput
-		 */
-		connect(target) {
-			this.target = target;
-		}
-		/**
-		 * 设置是否循环播放
-		 * @param loop 是否循环 boolean)
-		 */
-		setLoop(loop) {
-			this.loop = loop;
-		}
-	}
-	class AudioElementSource {
-		constructor(context) {
-			const audio = new Audio();
-			audio.preload = "none";
-			this.output = context.createMediaElementSource(audio);
-			this.audio = audio;
-			this.ac = context;
-			audio.addEventListener("play", () => {
-				this.playing = true;
-				if (this.player.status !== AudioStatus.Playing) {
-					this.player.status = AudioStatus.Playing;
-				}
-			});
-			audio.addEventListener("ended", () => {
-				this.playing = false;
-				if (this.player.status === AudioStatus.Playing) {
-					this.player.status = AudioStatus.Stoped;
-				}
-			});
-		}
-		get duration() {
-			return this.audio.duration;
-		}
-		get currentTime() {
-			return this.audio.currentTime;
-		}
-		/**
-		 * 设置音频源的路径
-		 * @param url 音频路径
-		 */
-		setSource(url) {
-			this.audio.src = url;
-		}
-
-		play(when = 0) {
-			if (this.playing) return;
-			this.audio.currentTime = when;
-			this.audio.play();
-		}
-
-		stop() {
-			this.audio.pause();
-			this.playing = false;
-			if (this.player.status === AudioStatus.Playing) {
-				this.player.status = AudioStatus.Stoped;
-			}
-			return this.audio.currentTime;
-		}
-
-		connect(target) {
-			this.output.connect(target.input);
-		}
-
-		setLoop(loop) {
-			this.audio.loop = loop;
-		}
-	}
-	class AudioBufferSource {
-		constructor(context) {
-			this.output = context.createBufferSource();
-			/** 是否循环 */
-			this.loop = false;
-			/** 上一次播放是从何时开始的 */
-			this.lastStartWhen = 0;
-			/** 播放开始时刻 */
-			this.lastStartTime = 0;
-			this.duration = 0;
-			this.ac = context;
-		}
-		get currentTime() {
-			return this.ac.currentTime - this.lastStartTime + this.lastStartWhen;
-		}
-
-		/**
-		 * 设置音频源数据
-		 * @param buffer 音频源,可以是未解析的 ArrayBuffer,也可以是已解析的 AudioBuffer
-		 */
-		async setBuffer(buffer) {
-			if (buffer instanceof ArrayBuffer) {
-				this.buffer = await this.ac.decodeAudioData(buffer);
-			} else {
-				this.buffer = buffer;
-			}
-			this.duration = this.buffer.duration;
-		}
-
-		play(when) {
-			if (this.playing || !this.buffer) return;
-			this.playing = true;
-			this.lastStartTime = this.ac.currentTime;
-			if (this.player.status !== AudioStatus.Playing) {
-				this.player.status = AudioStatus.Playing;
-			}
-			this.createSourceNode(this.buffer);
-			this.output.start(0, when);
-			this.output.addEventListener("ended", () => {
-				this.playing = false;
-				if (this.player.status === AudioStatus.Playing) {
-					this.player.status = AudioStatus.Stoped;
-				}
-				if (this.loop && !this.output.loop) this.play(0);
-			});
-		}
-
-		createSourceNode(buffer) {
-			if (!this.target) return;
-			const node = this.ac.createBufferSource();
-			node.buffer = buffer;
-			this.output = node;
-			node.connect(this.target.input);
-			node.loop = this.loop;
-		}
-
-		stop() {
-			this.output.stop();
-			return this.ac.currentTime - this.lastStartTime;
-		}
-
-		connect(target) {
-			this.target = target;
-		}
-
-		setLoop(loop) {
-			this.loop = loop;
-		}
-	}
-	class AudioPlayer {
-		constructor() {
-			/** 音频播放上下文 */
-			this.ac = new AudioContext();
-			/** 音量节点 */
-			this.gain = this.ac.createGain();
-			this.gain.connect(this.ac.destination);
-			this.audioRoutes = new Map();
-		}
-		/**
-		 * 解码音频数据
-		 * @param data 音频数据
-		 */
-		decodeAudioData(data) {
-			return AudioDecoder.decodeAudioData(data, this);
-		}
-		/**
-		 * 设置音量
-		 * @param volume 音量
-		 */
-		setVolume(volume) {
-			this.gain.gain.value = volume;
-		}
-
-		/**
-		 * 获取音量
-		 */
-		getVolume() {
-			return this.gain.gain.value;
-		}
-
-		/**
-		 * 创建一个音频源
-		 * @param Source 音频源类
-		 */
-		createSource(Source) {
-			return new Source(this.ac);
-		}
-
-		/**
-		 * 创建一个兼容流式音频源,可以与流式加载相结合,主要用于处理 opus ogg 不兼容的情况
-		 */
-		createStreamSource() {
-			return new AudioStreamSource(this.ac);
-		}
-
-		/**
-		 * 创建一个通过 audio 元素播放的音频源
-		 */
-		createElementSource() {
-			return new AudioElementSource(this.ac);
-		}
-
-		/**
-		 * 创建一个通过 AudioBuffer 播放的音频源
-		 */
-		createBufferSource() {
-			return new AudioBufferSource(this.ac);
-		}
-
-		/**
-		 * 获取音频目的地
-		 */
-		getDestination() {
-			return this.gain;
-		}
-
-		/**
-		 * 创建一个音频效果器
-		 * @param Effect 效果器类
-		 */
-		createEffect(Effect) {
-			return new Effect(this.ac);
-		}
-
-		/**
-		 * 创建一个修改音量的效果器
-		 * ```txt
-		 *             |----------|
-		 * Input ----> | GainNode | ----> Output
-		 *             |----------|
-		 * ```
-		 */
-		createVolumeEffect() {
-			return new VolumeEffect(this.ac);
-		}
-
-		/**
-		 * 创建一个立体声效果器
-		 * ```txt
-		 *             |------------|
-		 * Input ----> | PannerNode | ----> Output
-		 *             |------------|
-		 * ```
-		 */
-		createStereoEffect() {
-			return new StereoEffect(this.ac);
-		}
-
-		/**
-		 * 创建一个修改单个声道音量的效果器
-		 * ```txt
-		 *                                  |----------|
-		 *                               -> | GainNode | \
-		 *             |--------------| /   |----------|  -> |------------|
-		 * Input ----> | SplitterNode |        ......        | MergerNode | ----> Output
-		 *             |--------------| \   |----------|  -> |------------|
-		 *                               -> | GainNode | /
-		 *                                  |----------|
-		 * ```
-		 */
-		createChannelVolumeEffect() {
-			return new ChannelVolumeEffect(this.ac);
-		}
-
-		/**
-		 * 创建一个延迟效果器
-		 *             |-----------|
-		 * Input ----> | DelayNode | ----> Output
-		 *             |-----------|
-		 */
-		createDelay() {
-			return new DelayEffect(this.ac);
-		}
-
-		/**
-		 * 创建一个回声效果器
-		 * ```txt
-		 *             |----------|
-		 * Input ----> | GainNode | ----> Output
-		 *        ^    |----------|   |
-		 *        |                   |
-		 *        |   |------------|  ↓
-		 *        |-- | Delay Node | <--
-		 *            |------------|
-		 * ```
-		 */
-		createEchoEffect() {
-			return new EchoEffect(this.ac);
-		}
-
-		/**
-		 * 创建一个音频播放路由
-		 * @param source 音频源
-		 */
-		createRoute(source) {
-			return new AudioRoute(source, this);
-		}
-
-		/**
-		 * 添加一个音频播放路由,可以直接被播放
-		 * @param id 这个音频播放路由的名称
-		 * @param route 音频播放路由对象
-		 */
-		addRoute(id, route) {
-			if (!this.audioRoutes) this.audioRoutes = new Map();
-			if (this.audioRoutes.has(id)) {
-				console.warn(
-					"Audio route with id of '" +
-					id +
-					"' has already existed. New route will override old route."
-				);
-			}
-			this.audioRoutes.set(id, route);
-		}
-
-		/**
-		 * 根据名称获取音频播放路由对象
-		 * @param id 音频播放路由的名称
-		 */
-		getRoute(id) {
-			return this.audioRoutes.get(id);
-		}
-		/**
-		 * 移除一个音频播放路由
-		 * @param id 要移除的播放路由的名称
-		 */
-		removeRoute(id) {
-			this.audioRoutes.delete(id);
-		}
-		/**
-		 * 播放音频
-		 * @param id 音频名称
-		 * @param when 从音频的哪个位置开始播放,单位秒
-		 */
-		play(id, when) {
-			const route = this.getRoute(id);
-			if (!route) {
-				console.warn(
-					"Cannot play audio route '" +
-					id +
-					"', since there is not added route named it."
-				);
-				return;
-			}
-
-			route.play(when);
-		}
-
-		/**
-		 * 暂停音频播放
-		 * @param id 音频名称
-		 * @returns 当音乐真正停止时兑现
-		 */
-		pause(id) {
-			const route = this.getRoute(id);
-			if (!route) {
-				console.warn(
-					"Cannot pause audio route '" +
-					id +
-					"', since there is not added route named it."
-				);
-				return;
-			}
-			return route.pause();
-		}
-
-		/**
-		 * 停止音频播放
-		 * @param id 音频名称
-		 * @returns 当音乐真正停止时兑现
-		 */
-		stop(id) {
-			const route = this.getRoute(id);
-			if (!route) {
-				console.warn(
-					"Cannot stop audio route '" +
-					id +
-					"', since there is not added route named it."
-				);
-				return;
-			}
-			return route.stop();
-		}
-
-		/**
-		 * 继续音频播放
-		 * @param id 音频名称
-		 */
-		resume(id) {
-			const route = this.getRoute(id);
-			if (!route) {
-				console.warn(
-					"Cannot pause audio route '" +
-					id +
-					"', since there is not added route named it."
-				);
-				return;
-			}
-			route.resume();
-		}
-
-		/**
-		 * 设置听者位置,x正方向水平向右,y正方向垂直于地面向上,z正方向垂直屏幕远离用户
-		 * @param x 位置x坐标
-		 * @param y 位置y坐标
-		 * @param z 位置z坐标
-		 */
-		setListenerPosition(x, y, z) {
-			const listener = this.ac.listener;
-			listener.positionX.value = x;
-			listener.positionY.value = y;
-			listener.positionZ.value = z;
-		}
-
-		/**
-		 * 设置听者朝向,x正方向水平向右,y正方向垂直于地面向上,z正方向垂直屏幕远离用户
-		 * @param x 朝向x坐标
-		 * @param y 朝向y坐标
-		 * @param z 朝向z坐标
-		 */
-		setListenerOrientation(x, y, z) {
-			const listener = this.ac.listener;
-			listener.forwardX.value = x;
-			listener.forwardY.value = y;
-			listener.forwardZ.value = z;
-		}
-
-		/**
-		 * 设置听者头顶朝向,x正方向水平向右,y正方向垂直于地面向上,z正方向垂直屏幕远离用户
-		 * @param x 头顶朝向x坐标
-		 * @param y 头顶朝向y坐标
-		 * @param z 头顶朝向z坐标
-		 */
-		setListenerUp(x, y, z) {
-			const listener = this.ac.listener;
-			listener.upX.value = x;
-			listener.upY.value = y;
-			listener.upZ.value = z;
-		}
-	}
-	class AudioRoute {
-		constructor(source, player) {
-			this.output = source.output;
-
-			/** 效果器路由图 */
-			this.effectRoute = [];
-
-			/** 结束时长,当音频暂停或停止时,会经过这么长时间之后才真正终止播放,期间可以做音频淡入淡出等效果 */
-			this.endTime = 0;
-			/** 暂停时播放了多长时间 */
-			this.pauseCurrentTime = 0;
-			/** 当前播放状态 */
-			this.player = player;
-			this.player.status = AudioStatus.Stoped;
-			this.shouldStop = false;
-			/**
-			 * 每次暂停或停止时自增,用于判断当前正在处理的情况。
-			 * 假如暂停后很快播放,然后很快暂停,那么需要根据这个来判断实际是否应该执行暂停后操作
-			 */
-			this.stopIdentifier = 0;
-			/** 暂停时刻 */
-			this.pauseTime = 0;
-			this.source = source;
-			this.source.player = player;
-		}
-		/** 音频时长,单位秒 */
-		get duration() {
-			return this.source.duration;
-		}
-		/** 当前播放了多长时间,单位秒 */
-		get currentTime() {
-			if (this.player.status === AudioStatus.Paused) {
-				return this.pauseCurrentTime;
-			} else {
-				return this.source.currentTime;
-			}
-		}
-		set currentTime(time) {
-			this.source.stop();
-			this.source.play(time);
-		}
-		/**
-		 * 设置结束时间,暂停或停止时,会经过这么长时间才终止音频的播放,这期间可以做一下音频淡出的效果。
-		 * @param time 暂停或停止时,经过多长时间之后才会结束音频的播放
-		 */
-		setEndTime(time) {
-			this.endTime = time;
-		}
-
-		/**
-		 * 当音频播放时执行的函数,可以用于音频淡入效果
-		 * @param fn 音频开始播放时执行的函数
-		 */
-		onStart(fn) {
-			this.audioStartHook = fn;
-		}
-
-		/**
-		 * 当音频暂停或停止时执行的函数,可以用于音频淡出效果
-		 * @param fn 音频在暂停或停止时执行的函数,不填时表示取消这个钩子。
-		 *           包含两个参数,第一个参数是结束时长,第二个参数是当前音频播放路由对象
-		 */
-		onEnd(fn) {
-			this.audioEndHook = fn;
-		}
-
-		/**
-		 * 开始播放这个音频
-		 * @param when 从音频的什么时候开始播放,单位秒
-		 */
-		play(when = 0) {
-			if (this.player.status === AudioStatus.Playing) return;
-			this.link();
-			if (this.effectRoute.length > 0) {
-				const first = this.effectRoute[0];
-				this.source.connect(first);
-				const last = this.effectRoute.at(-1);
-				last.connect({ input: this.player.getDestination() });
-			} else {
-				this.source.connect({ input: this.player.getDestination() });
-			}
-			this.source.play(when);
-			this.player.status = AudioStatus.Playing;
-			this.pauseTime = 0;
-			this.audioStartHook?.(this);
-			this.startAllEffect();
-			if (this.source.player.status !== AudioStatus.Playing) {
-				this.source.player.status = AudioStatus.Playing;
-			}
-		}
-
-		/**
-		 * 暂停音频播放
-		 */
-		async pause() {
-			if (this.player.status !== AudioStatus.Playing) return;
-			this.player.status = AudioStatus.Pausing;
-			this.stopIdentifier++;
-			const identifier = this.stopIdentifier;
-			if (this.audioEndHook) {
-				this.audioEndHook(this.endTime, this);
-				await sleep(this.endTime);
-			}
-			if (
-				this.player.status !== AudioStatus.Pausing ||
-				this.stopIdentifier !== identifier
-			) {
-				return;
-			}
-			this.pauseCurrentTime = this.source.currentTime;
-			const time = this.source.stop();
-			this.pauseTime = time;
-			if (this.shouldStop) {
-				this.player.status = AudioStatus.Stoped;
-				this.endAllEffect();
-
-				this.shouldStop = false;
-			} else {
-				this.player.status = AudioStatus.Paused;
-				this.endAllEffect();
-			}
-			this.endAllEffect();
-		}
-
-		/**
-		 * 继续音频播放
-		 */
-		resume() {
-			if (this.player.status === AudioStatus.Playing) return;
-			if (
-				this.player.status === AudioStatus.Pausing ||
-				this.player.status === AudioStatus.Stoping
-			) {
-				this.audioStartHook?.(this);
-
-				return;
-			}
-			if (this.player.status === AudioStatus.Paused) {
-				this.play(this.pauseTime);
-			} else {
-				this.play(0);
-			}
-			this.player.status = AudioStatus.Playing;
-			this.pauseTime = 0;
-			this.audioStartHook?.(this);
-			this.startAllEffect();
-		}
-
-		/**
-		 * 停止音频播放
-		 */
-		async stop() {
-			if (this.status !== AudioStatus.Playing) {
-				if (this.status === AudioStatus.Pausing) {
-					this.shouldStop = true;
-				}
-				return;
-			}
-			this.status = AudioStatus.Stoping;
-			this.stopIdentifier++;
-			const identifier = this.stopIdentifier;
-			if (this.audioEndHook) {
-				this.audioEndHook(this.endTime, this);
-				await sleep(this.endTime);
-			}
-			if (
-				this.status !== AudioStatus.Stoping ||
-				this.stopIdentifier !== identifier
-			) {
-				return;
-			}
-			this.source.stop();
-			this.status = AudioStatus.Stoped;
-			this.pauseTime = 0;
-			this.endAllEffect();
-		}
-
-		/**
-		 * 添加效果器
-		 * @param effect 要添加的效果,可以是数组,表示一次添加多个
-		 * @param index 从哪个位置开始添加,如果大于数组长度,那么加到末尾,如果小于0,那么将会从后面往前数。默认添加到末尾
-		 */
-		addEffect(effect, index) {
-			if (isNil(index)) {
-				if (effect instanceof Array) {
-					this.effectRoute.push(...effect);
-				} else {
-					this.effectRoute.push(effect);
-				}
-			} else {
-				if (effect instanceof Array) {
-					this.effectRoute.splice(index, 0, ...effect);
-				} else {
-					this.effectRoute.splice(index, 0, effect);
-				}
-			}
-			this.setOutput();
-			if (this.source.playing) this.link();
-		}
-
-		/**
-		 * 移除一个效果器
-		 * @param effect 要移除的效果
-		 */
-		removeEffect(effect) {
-			const index = this.effectRoute.indexOf(effect);
-			if (index === -1) return;
-			this.effectRoute.splice(index, 1);
-			effect.disconnect();
-			this.setOutput();
-			if (this.source.playing) this.link();
-		}
-
-		setOutput() {
-			const effect = this.effectRoute.at(-1);
-			if (!effect) this.output = this.source.output;
-			else this.output = effect.output;
-		}
-
-		/**
-		 * 连接音频路由图
-		 */
-		link() {
-			this.effectRoute.forEach((v) => v.disconnect());
-			this.effectRoute.forEach((v, i) => {
-				const next = this.effectRoute[i + 1];
-				if (next) {
-					v.connect(next);
-				}
-			});
-		}
-
-		startAllEffect() {
-			this.effectRoute.forEach((v) => v.start());
-		}
-
-		endAllEffect() {
-			this.effectRoute.forEach((v) => v.end());
-		}
-	}
-
-	const audioPlayer = new AudioPlayer();
-
-	class BgmController {
-		constructor(player) {
-			this.mainGain = player.createVolumeEffect();
-			this.player = player;
-			/** bgm音频名称的前缀 */
-			this.prefix = "bgms.";
-			/** 每个 bgm 的音量控制器 */
-			this.gain = new Map();
-
-			/** 正在播放的 bgm */
-			this.playingBgm = "";
-			/** 是否正在播放 */
-			this.playing = false;
-
-			/** 是否已经启用 */
-			this.enabled = true;
-			/** 是否屏蔽所有的音乐切换 */
-			this.blocking = false;
-			/** 渐变时长 */
-			this.transitionTime = 2000;
-		}
-
-		/**
-		 * 设置音频渐变时长
-		 * @param time 渐变时长
-		 */
-		setTransitionTime(time) {
-			this.transitionTime = time;
-			for (const [, value] of this.gain) {
-				value.transition.time(time);
-			}
-		}
-
-		/**
-		 * 屏蔽音乐切换
-		 */
-		blockChange() {
-			this.blocking = true;
-		}
-
-		/**
-		 * 取消屏蔽音乐切换
-		 */
-		unblockChange() {
-			this.blocking = false;
-		}
-
-		/**
-		 * 设置总音量大小
-		 * @param volume 音量大小
-		 */
-		setVolume(volume) {
-			this.mainGain.setVolume(volume);
-			this._volume = volume;
-		}
-		/**
-		 * 获取总音量大小
-		 */
-		getVolume() {
-			return this.mainGain.getVolume();
-		}
-		/**
-		 * 设置是否启用
-		 * @param enabled 是否启用
-		 */
-		setEnabled(enabled) {
-			if (enabled) this.resume();
-			else this.stop();
-			this.enabled = enabled;
-		}
-
-		/**
-		 * 设置 bgm 音频名称的前缀
-		 */
-		setPrefix(prefix) {
-			this.prefix = prefix;
-		}
-
-		getId(name) {
-			return `${this.prefix}${name}`;
-		}
-
-		/**
-		 * 根据 bgm 名称获取其 AudioRoute 实例
-		 * @param id 音频名称
-		 */
-		get(id) {
-			return this.player.getRoute(this.getId(id));
-		}
-
-		/**
-		 * 添加一个 bgm
-		 * @param id 要添加的 bgm 的名称
-		 * @param url 指定 bgm 的加载地址
-		 */
-		addBgm(id, url = `project/bgms/${id}`) {
-			const type = guessTypeByExt(id);
-			if (!type) {
-				console.warn(
-					"Unknown audio extension name: '" +
-					id.split(".").slice(0, -1).join(".") +
-					"'"
-				);
-				return;
-			}
-			const gain = this.player.createVolumeEffect();
-			if (isAudioSupport(type)) {
-				const source = audioPlayer.createElementSource();
-				source.setSource(url);
-				source.setLoop(true);
-				const route = new AudioRoute(source, audioPlayer);
-				route.addEffect([gain, this.mainGain]);
-				audioPlayer.addRoute(this.getId(id), route);
-				this.setTransition(id, route, gain);
-			} else {
-				const source = audioPlayer.createStreamSource();
-				const stream = new StreamLoader(url);
-				stream.pipe(source);
-				source.setLoop(true);
-				const route = new AudioRoute(source, audioPlayer);
-				route.addEffect([gain, this.mainGain]);
-				audioPlayer.addRoute(this.getId(id), route);
-				this.setTransition(id, route, gain);
-			}
-		}
-
-		/**
-		 * 移除一个 bgm
-		 * @param id 要移除的 bgm 的名称
-		 */
-		removeBgm(id) {
-			this.player.removeRoute(this.getId(id));
-			const gain = this.gain.get(id);
-			gain?.transition.ticker.destroy();
-			this.gain.delete(id);
-		}
-
-		setTransition(id, route, gain) {
-			const transition = new Transition();
-			transition
-				.time(this.transitionTime)
-				.mode(linear())
-				.transition("volume", 0);
-
-			const tick = () => {
-				gain.setVolume(transition.value.volume);
-			};
-
-			/**
-			 * @param expect 在结束时应该是正在播放还是停止
-			 */
-			const setTick = async (expect) => {
-				transition.ticker.remove(tick);
-				transition.ticker.add(tick);
-				const identifier = route.stopIdentifier;
-				await sleep(this.transitionTime + 500);
-				if (route.status === expect && identifier === route.stopIdentifier) {
-					transition.ticker.remove(tick);
-					if (route.status === AudioStatus.Playing) {
-						gain.setVolume(1);
-					} else {
-						gain.setVolume(0);
-					}
-				}
-			};
-
-			route.onStart(async () => {
-				transition.transition("volume", 1);
-				setTick(AudioStatus.Playing);
-			});
-			route.onEnd(() => {
-				transition.transition("volume", 0);
-				setTick(AudioStatus.Paused);
-			});
-			route.setEndTime(this.transitionTime);
-
-			this.gain.set(id, { effect: gain, transition });
-		}
-
-		/**
-		 * 播放一个 bgm
-		 * @param id 要播放的 bgm 名称
-		 */
-		play(id, when) {
-			if (this.blocking) return;
-			if (id !== this.playingBgm && this.playingBgm) {
-				this.player.pause(this.getId(this.playingBgm));
-			}
-			this.playingBgm = id;
-			if (!this.enabled) return;
-			this.player.play(this.getId(id), when);
-			this.playing = true;
-			if (this.player.status !== AudioStatus.Playing) {
-				this.player.status = AudioStatus.Playing;
-			}
-		}
-
-		/**
-		 * 继续当前的 bgm
-		 */
-		resume() {
-			if (this.blocking || !this.enabled || this.playing) return;
-			if (this.playingBgm) {
-				this.player.resume(this.getId(this.playingBgm));
-			}
-			this.playing = true;
-		}
-
-		/**
-		 * 暂停当前的 bgm
-		 */
-		pause() {
-			if (this.blocking || !this.enabled) return;
-			if (this.playingBgm) {
-				this.player.pause(this.getId(this.playingBgm));
-			}
-			this.playing = false;
-		}
-
-		/**
-		 * 停止当前的 bgm
-		 */
-		stop() {
-			if (this.blocking || !this.enabled) return;
-			if (this.playingBgm) {
-				this.player.stop(this.getId(this.playingBgm));
-			}
-			this.playing = false;
-		}
-	}
-	const bgmController = new BgmController(audioPlayer);
-
-	class SoundPlayer {
-		constructor(player) {
-			/** 每个音效的唯一标识符 */
-			this.num = 0;
-			this.enabled = true;
-			this.gain = player.createVolumeEffect();
-			/** 每个音效的数据 */
-			this.buffer = new Map();
-			/** 所有正在播放的音乐 */
-			this.playing = new Set();
-			this.player = player;
-		}
-		/**
-		 * 设置是否启用音效
-		 * @param enabled 是否启用音效
-		 */
-		setEnabled(enabled) {
-			if (!enabled) this.stopAllSounds();
-			this.enabled = enabled;
-		}
-
-		/**
-		 * 设置音量大小
-		 * @param volume 音量大小
-		 */
-		setVolume(volume) {
-			this.gain.setVolume(volume);
-		}
-		/**
-		 * 获取音量大小
-		 */
-		getVolume() {
-			return this.gain.getVolume();
-		}
-		/**
-		 * 添加一个音效
-		 * @param id 音效名称
-		 * @param data 音效的Uint8Array数据
-		 */
-		async add(id, data) {
-			const buffer = await this.player.decodeAudioData(data);
-			if (!buffer) {
-				console.warn(
-					"Cannot decode sound '" +
-					id +
-					"', since audio file may not supported by 2.b."
-				);
-				return;
-			}
-			this.buffer.set(id, buffer);
-		}
-
-		/**
-		 * 播放一个音效
-		 * @param id 音效名称
-		 * @param position 音频位置,[0, 0, 0]表示正中心,x轴指向水平向右,y轴指向水平向上,z轴指向竖直向上
-		 * @param orientation 音频朝向,[0, 1, 0]表示朝向前方
-		 */
-		play(id, position = [0, 0, 0], orientation = [1, 0, 0]) {
-			if (!this.enabled) return -1;
-			const buffer = this.buffer.get(id);
-			if (!buffer) {
-				console.warn(
-					"Cannot play sound '" +
-					id +
-					"', since there is no added data named it."
-				);
-				return -1;
-			}
-			const soundNum = this.num++;
-
-			const source = this.player.createBufferSource();
-			source.setBuffer(buffer);
-			const route = this.player.createRoute(source);
-			const stereo = this.player.createStereoEffect();
-			stereo.setPosition(position[0], position[1], position[2]);
-			stereo.setOrientation(orientation[0], orientation[1], orientation[2]);
-			route.addEffect([stereo, this.gain]);
-			this.player.addRoute(`sounds.${soundNum}`, route);
-			route.play();
-			source.output.addEventListener("ended", () => {
-				this.playing.delete(soundNum);
-			});
-			this.playing.add(soundNum);
-			return soundNum;
-		}
-
-		/**
-		 * 停止一个音效
-		 * @param num 音效的唯一 id
-		 */
-		stop(num) {
-			const id = `sounds.${num}`;
-			const route = this.player.getRoute(id);
-			if (route) {
-				route.stop();
-				this.player.removeRoute(id);
-				this.playing.delete(num);
-			}
-		}
-
-		/**
-		 * 停止播放所有音效
-		 */
-		stopAllSounds() {
-			this.playing.forEach((v) => {
-				const id = `sounds.${v}`;
-				const route = this.player.getRoute(id);
-				if (route) {
-					route.stop();
-					this.player.removeRoute(id);
-				}
-			});
-			this.playing.clear();
-		}
-	}
-	const soundPlayer = new SoundPlayer(audioPlayer);
-
-	function loadAllBgm() {
-		const data = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d;
-		for (const bgm of data.main.bgms) {
-			bgmController.addBgm(bgm);
-		}
-	}
-	loadAllBgm();
-	AudioDecoder.registerDecoder(AudioType.Ogg, VorbisDecoder);
-	AudioDecoder.registerDecoder(AudioType.Opus, OpusDecoder);
-
-	core.plugin.audioSystem = {
-		AudioType,
-		AudioDecoder,
-		AudioStatus,
-		checkAudioType,
-		isAudioSupport,
-		audioPlayer,
-		soundPlayer,
-		bgmController,
-		guessTypeByExt,
-		BgmController,
-		SoundPlayer,
-		EchoEffect,
-		DelayEffect,
-		ChannelVolumeEffect,
-		VolumeEffect,
-		StereoEffect,
-		AudioEffect,
-		AudioPlayer,
-		AudioRoute,
-		AudioStreamSource,
-		AudioElementSource,
-		AudioBufferSource,
-		loadAllBgm,
-		StreamLoader,
-	};
-	//bgm相关复写
-	control.prototype.playBgm = (bgm, when) => {
-		bgmController.play(bgm, when);
-		core.setMusicBtn();
-	};
-	control.prototype.pauseBgm = () => {
-		bgmController.pause();
-		core.setMusicBtn();
-	};
-
-	control.prototype.resumeBgm = function () {
-		bgmController.resume();
-		core.setMusicBtn();
-	};
-	control.prototype.checkBgm = function () {
-		if (bgmController.playing) return;
-		if (core.musicStatus.bgmStatus) {
-			if (bgmController.playingBgm) {
-				bgmController.play(bgmController.playingBgm);
-			} else {
-				play(main.startBgm, 0);
-			}
-		} else {
-			pause();
-		}
-	};
-	control.prototype.triggerBgm = function () {
-		core.musicStatus.bgmStatus = !core.musicStatus.bgmStatus;
-		if (bgmController.playing) bgmController.pause();
-		else bgmController.resume();
-		core.setMusicBtn();
-		core.setLocalStorage("bgmStatus", core.musicStatus.bgmStatus);
-	};
-	//sound相关复写
-	control.prototype.playSound = function (
-		sound,
-		_pitch,
-		callback,
-		position,
-		orientation
-	) {
-		if (main.mode != "play" || !core.musicStatus.soundStatus) return;
-		const name = core.getMappedName(sound);
-		const num = soundPlayer.play(name, position, orientation);
-		const route = audioPlayer.getRoute(`sounds.${num}`);
-		if (!route) {
-			callback?.();
-			return -1;
-		} else {
-			sleep(route.duration).then(() => callback?.());
-			return num;
-		}
-	};
-	control.prototype.stopSound = function (id) {
-		if (isNil(id)) {
-			soundPlayer.stopAllSounds();
-		} else {
-			soundPlayer.stop(id);
-		}
-	};
-	control.prototype.getPlayingSounds = function () {
-		return [...soundPlayer.playing];
-	};
-	//sound加载复写
-	loader.prototype._loadOneSound_decodeData = function (name, data) {
-		if (data instanceof Blob) {
-			var blobReader = new zip.BlobReader(data);
-			blobReader.init(function () {
-				blobReader.readUint8Array(0, blobReader.size, function (uint8) {
-					//core.loader._loadOneSound_decodeData(name, uint8.buffer);
-					soundPlayer.add(name, uint8);
-				});
-			});
-			return;
-		}
-		if (data instanceof ArrayBuffer) {
-			const uint8 = new Uint8Array(data);
-			soundPlayer.add(name, uint8);
-		}
-	};
-	//音量控制复写
-	soundPlayer.setVolume(
-		core.musicStatus.userVolume * core.musicStatus.designVolume
-	);
-	bgmController.setVolume(
-		core.musicStatus.userVolume * core.musicStatus.designVolume
-	);
-	actions.prototype._clickSwitchs_sounds_userVolume = function (delta) {
-		var value = Math.round(Math.sqrt(100 * core.musicStatus.userVolume));
-		if (value == 0 && delta < 0) return;
-		core.musicStatus.userVolume = core.clamp(
-			Math.pow(value + delta, 2) / 100,
-			0,
-			1
-		);
-		//audioContext 音效 不受designVolume 影响
-		if (core.musicStatus.gainNode != null)
-			core.musicStatus.gainNode.gain.value = core.musicStatus.userVolume;
-		soundPlayer.setVolume(
-			core.musicStatus.userVolume * core.musicStatus.designVolume
-		);
-		bgmController.setVolume(
-			core.musicStatus.userVolume * core.musicStatus.designVolume
-		);
-		core.setLocalStorage("userVolume", core.musicStatus.userVolume);
-		core.playSound("确定");
-		core.ui._drawSwitchs_sounds();
-	};
-},
-    "怪物碎裂特效": function () {
-    // 在此增加新插件
-    // -------------------- 安装说明 -------------------- //
-    // 先安装两个在插件简介中说明的前置插件
-    // 然后再将本插件复制到插件编写中即可
-    // 插件自带一个打怪后显示碎裂特效的功能
-    // -------------------- 使用说明 -------------------- //
-    /*
-
-	本插件的核心是一个名为 applyFragWith 的函数,打怪后的碎裂特效也是由它执行的。
-	我们来说明一下这个函数的使用方式。
-	1. 引入
-	  你可以使用 const { applyFragWith } = core.plugin.frag; 在任何地方来引入这个函数。
-
-	2. 函数的参数
-	  该函数有三个参数,分别是canvas, length, time。
-	  其中,第一个参数意思是,在执行碎裂时,其内容由该画布决定,这个特效并不会修改传入的画布,因此原画布的内容会依然存在
-	  第二个参数指的是每个碎片的边长,虽然原则上每个碎片都是正方形,但边缘一周的碎片可能不是正方形,但中间的碎片一定是
-	  第三个参数指的是这个特效要执行多长时间
-	  第四个参数是一个对象,包含四种配置量,均为可选,分别是maxMoveLength,moveFlush,maxRotate,fragTiming
-	  当这些不存在时会默认取同名的常量作为默认值。这些值有什么用可以看下面的常量注释。
-
-	3. 函数的返回值
-	  这个函数会返回一个特效控制器对象,这个控制器共有三个属性。
-	  animation: 指的是当前特效的高级动画对象
-	  onEnd: 一个Promise,当这个特效执行完毕后会被 fulfilled
-	  canvas: 特效所显示的画布。这个画布不会自动部署到样板中,需要你手动使用appendChild来部署,具体可参考打怪后碎裂的样例
-
-	4. 修改一些常量
-	  在下面有四个有注释的常量MAX_MOVE_LENGTH ~ FRAG_TIMING,你可以根据你自己的需要来更改。
-
-	*/
-
-    if (main.replayChecking) return (core.plugin.frag = {});
-
-    const { Animation, linear, sleep } = core.plugin.animate;
-    const { has } = core.plugin.utils;
-
-    /** 最大移动距离,最终位置距离中心的距离变成原来的几倍 */
-    const MAX_MOVE_LENGTH = 1.15;
-    /** 移动距离波动,在最大移动距离的基础上加上多少倍距离的波动距离 */
-    const MOVE_FLUSH = 0.7;
-    /** 最大旋转角,单位是弧度,每个碎片都会有自己的旋转程度,是随机的 */
-    const MAX_ROTATE = 0.5;
-    /** 碎裂动画的速率曲线函数 */
-    const FRAG_TIMING = linear();
-
+    // 将__enable置为false将关闭插件
+    let __enable = true;
+    if (!__enable || main.mode === "editor") return;
+    const { OggOpusDecoderWebWorker } = window["ogg-opus-decoder"];
+    const { OggVorbisDecoderWebWorker } = window["ogg-vorbis-decoder"];
+    const { CodecParser } = window.CodecParser;
+    const { Transition, linear } = core.plugin.animate;
+
+    const audio = new Audio();
+    const AudioStatus = {
+      Playing: 0,
+      Pausing: 1,
+      Paused: 2,
+      Stoping: 3,
+      Stoped: 4,
+    };
+    const supportMap = new Map();
+    const AudioType = {
+      Mp3: "audio/mpeg",
+      Wav: 'audio/wav; codecs="1"',
+      Flac: "audio/flac",
+      Opus: 'audio/ogg; codecs="opus"',
+      Ogg: 'audio/ogg; codecs="vorbis"',
+      Aac: "audio/aac",
+    };
     /**
-     * @param {HTMLCanvasElement} canvas 要执行特效的画布
-     * @param {number} length 切分成的碎片的边长,碎片为正方形
-     * @param {number} time 特效持续时长
-     * @returns 返回一个碎裂特效控制器,是一个对象,详见开头的使用注释
+     * 检查一种音频类型是否能被播放
+     * @param type 音频类型 AudioType
      */
-    function applyFragWith(canvas, length = 4, time = 2000, config = {}) {
-      // 先切分图片
-      const imgs = splitCanvas(canvas, length);
-      const cx = canvas.width / 2;
-      const cy = canvas.height / 2;
-
-      let maxX = 0;
-      let maxY = 0;
-      const toMove = imgs.map((v) => {
-        const centerX = v.x + v.canvas.width / 2;
-        const centerY = v.y + v.canvas.height / 2;
-        const onX = centerX === cx;
-        const onY = centerY === cy;
-        const mml = config.maxMoveLength ?? MAX_MOVE_LENGTH;
-        const mf = config.moveFlush ?? MOVE_FLUSH;
-        const rate = mml - 1 + Math.random() ** 3 * mf;
-        let endX = onY ? 0 : (centerX - cx) * rate;
-        let endY = onX ? 0 : (centerY - cy) * rate;
-        const mx = Math.abs(endX + centerX) + Math.abs(v.canvas.width);
-        const my = Math.abs(endY + centerY) + Math.abs(v.canvas.height);
-        if (mx > maxX) maxX = mx;
-        if (my > maxY) maxY = my;
-        const r = config.maxRotate ?? MAX_ROTATE;
-        const endRad = Math.random() * r * 2 - r;
-
-        return {
-          deltaX: endX,
-          deltaY: endY,
-          endRad,
-          x: centerX,
-          y: centerY,
-          canvas: v.canvas,
-        };
-      });
-
-      // 再执行动画
-      const frag = document.createElement("canvas");
-      const ctx = frag.getContext("2d");
-      const ani = new Animation();
-      ani.register("rate", 0);
-      const ft = config.fragTiming ?? FRAG_TIMING;
-      ani.absolute().time(time).mode(ft).apply("rate", 1);
-      frag.width = maxX * 2;
-      frag.height = maxY * 2;
-      ctx.save();
-      const dw = maxX - canvas.width / 2;
-      const dh = maxY - canvas.height / 2;
-
-      const fragFn = () => {
-        const rate = ani.value.rate;
-        const opacity = 1 - rate;
-        ctx.globalAlpha = opacity;
-        ctx.clearRect(0, 0, frag.width, frag.height);
-        toMove.forEach((v) => {
-          ctx.save();
-          const nx = v.deltaX * rate;
-          const ny = v.deltaY * rate;
-          const rotate = v.endRad * rate;
-
-          ctx.translate(nx + v.x + dw, ny + v.y + dh);
-          ctx.rotate(rotate);
-          ctx.drawImage(
-            v.canvas,
-            nx - v.canvas.width / 2,
-            ny - v.canvas.height / 2
-          );
-          ctx.restore();
-        });
-      };
-      const onEnd = () => {};
-      ani.ticker.add(fragFn);
-
-      return makeFragManager(frag, ani, time, onEnd);
-    }
-
-    function makeFragManager(canvas, ani, time, onEnd) {
-      const promise = sleep(time + 50);
-
-      return {
-        animation: ani,
-
-        onEnd: promise.then(() => {
-          ani.ticker.destroy();
-          onEnd();
-        }),
-        canvas,
-      };
-    }
-
-    function withImage(image, sx, sy, sw, sh) {
-      const canvas = document.createElement("canvas");
-      const ctx = canvas.getContext("2d");
-      canvas.width = sw;
-      canvas.height = sh;
-      ctx.drawImage(image, sx, sy, sw, sh, 0, 0, sw, sh);
-      return { canvas, x: sx, y: sy };
-    }
-
-    /**
-     * 切分画布
-     * @param canvas 要被切分的画布
-     * @param l 切分小块的边长
-     */
-    function splitCanvas(canvas, l) {
-      if (canvas.width / l < 2 || canvas.height / l < 2) {
-        console.warn("切分画布要求切分边长大于等于画布长宽的一半!");
-        return [];
+    function isAudioSupport(type) {
+      if (supportMap.has(type)) return supportMap.get(type);
+      else {
+        const support = audio.canPlayType(type);
+        const canPlay = support === "maybe" || support === "probably";
+        supportMap.set(type, canPlay);
+        return canPlay;
       }
-      const w = canvas.width;
-      const h = canvas.height;
-      const numX = Math.floor(w / l);
-      const numY = Math.floor(h / l);
-      const rw = (w - numX * l) / 2;
-      const rh = (h - numY * l) / 2;
+    }
 
-      const res = [];
+    const typeMap = new Map([
+      ["ogg", AudioType.Ogg],
+      ["mp3", AudioType.Mp3],
+      ["wav", AudioType.Wav],
+      ["flac", AudioType.Flac],
+      ["opus", AudioType.Opus],
+      ["aac", AudioType.Aac],
+    ]);
 
-      if (rw > 0) {
-        if (rh > 0) {
-          res.push(
-            withImage(canvas, 0, 0, rw, rh),
-            withImage(canvas, 0, canvas.height - rh, rw, rh),
-            withImage(canvas, canvas.width - rw, 0, rw, rh),
-            withImage(canvas, canvas.width - rw, canvas.height - rh, rw, rh)
-          );
-        }
-        for (const x of [0, canvas.width - rw]) {
-          for (let ny = 0; ny < numY; ny++) {
-            res.push(withImage(canvas, x, rh + l * ny, rw, l));
+    /**
+     * 根据文件名拓展猜测其类型
+     * @param file 文件名 string
+     */
+    function guessTypeByExt(file) {
+      const ext = /\.[a-zA-Z\d]+$/.exec(file);
+      if (!ext?.[0]) return "";
+      const type = ext[0].slice(1);
+      return typeMap.get(type.toLocaleLowerCase()) ?? "";
+    }
+
+    isAudioSupport(AudioType.Ogg);
+    isAudioSupport(AudioType.Mp3);
+    isAudioSupport(AudioType.Wav);
+    isAudioSupport(AudioType.Flac);
+    isAudioSupport(AudioType.Opus);
+    isAudioSupport(AudioType.Aac);
+
+    function isNil(value) {
+      return value === void 0 || value === null;
+    }
+
+    function sleep(time) {
+      return new Promise((res) => setTimeout(res, time));
+    }
+    class AudioEffect {
+      constructor(ac) {}
+      /**
+       * 连接至其他效果器
+       * @param target 目标输入 IAudioInput
+       * @param output 当前效果器输出通道 Number
+       * @param input 目标效果器的输入通道 Number
+       */
+      connect(target, output, input) {
+        this.output.connect(target.input, output, input);
+      }
+
+      /**
+       * 与其他效果器取消连接
+       * @param target 目标输入 IAudioInput
+       * @param output 当前效果器输出通道 Number
+       * @param input 目标效果器的输入通道 Number
+       */
+      disconnect(target, output, input) {
+        if (!target) {
+          if (!isNil(output)) {
+            this.output.disconnect(output);
+          } else {
+            this.output.disconnect();
+          }
+        } else {
+          if (!isNil(output)) {
+            if (!isNil(input)) {
+              this.output.disconnect(target.input, output, input);
+            } else {
+              this.output.disconnect(target.input, output);
+            }
+          } else {
+            this.output.disconnect(target.input);
           }
         }
       }
-      if (rh > 0) {
-        for (const y of [0, canvas.height - rh]) {
-          for (let nx = 0; nx < numX; nx++) {
-            res.push(withImage(canvas, rw + l * nx, y, l, rh));
+    }
+
+    class StereoEffect extends AudioEffect {
+      constructor(ac) {
+        super(ac);
+        const panner = ac.createPanner();
+        this.input = panner;
+        this.output = panner;
+      }
+
+      /**
+       * 设置音频朝向,x正方形水平向右,y正方形垂直于地面向上,z正方向垂直屏幕远离用户
+       * @param x 朝向x坐标 Number
+       * @param y 朝向y坐标 Number
+       * @param z 朝向z坐标 Number
+       */
+      setOrientation(x, y, z) {
+        this.output.orientationX.value = x;
+        this.output.orientationY.value = y;
+        this.output.orientationZ.value = z;
+      }
+      /**
+       * 设置音频位置,x正方形水平向右,y正方形垂直于地面向上,z正方向垂直屏幕远离用户
+       * @param x 位置x坐标 Number
+       * @param y 位置y坐标 Number
+       * @param z 位置z坐标 Number
+       */
+      setPosition(x, y, z) {
+        this.output.positionX.value = x;
+        this.output.positionY.value = y;
+        this.output.positionZ.value = z;
+      }
+      end() {}
+
+      start() {}
+    }
+    class VolumeEffect extends AudioEffect {
+      constructor(ac) {
+        super(ac);
+        const gain = ac.createGain();
+        this.input = gain;
+        this.output = gain;
+      }
+
+      /**
+       * 设置音量大小
+       * @param volume 音量大小 Number
+       */
+      setVolume(volume) {
+        this.output.gain.value = volume;
+      }
+
+      /**
+       * 获取音量大小 Number
+       */
+      getVolume() {
+        return this.output.gain.value;
+      }
+
+      end() {}
+
+      start() {}
+    }
+    class ChannelVolumeEffect extends AudioEffect {
+      /** 所有的音量控制节点 */
+
+      constructor(ac) {
+        super(ac);
+        /** 所有的音量控制节点 */
+        this.gain = [];
+        const splitter = ac.createChannelSplitter();
+        const merger = ac.createChannelMerger();
+        this.output = merger;
+        this.input = splitter;
+        for (let i = 0; i < 6; i++) {
+          const gain = ac.createGain();
+          splitter.connect(gain, i);
+          gain.connect(merger, 0, i);
+          this.gain.push(gain);
+        }
+      }
+
+      /**
+       * 设置某个声道的音量大小
+       * @param channel 要设置的声道,可填0-5 Number
+       * @param volume 这个声道的音量大小 Number
+       */
+      setVolume(channel, volume) {
+        if (!this.gain[channel]) return;
+        this.gain[channel].gain.value = volume;
+      }
+
+      /**
+       * 获取某个声道的音量大小,可填0-5
+       * @param channel 要获取的声道 Number
+       */
+      getVolume(channel) {
+        if (!this.gain[channel]) return 0;
+        return this.gain[channel].gain.value;
+      }
+
+      end() {}
+
+      start() {}
+    }
+    class DelayEffect extends AudioEffect {
+      constructor(ac) {
+        super(ac);
+
+        const delay = ac.createDelay();
+        this.input = delay;
+        this.output = delay;
+      }
+
+      /**
+       * 设置延迟时长
+       * @param delay 延迟时长,单位秒 Number
+       */
+      setDelay(delay) {
+        this.output.delayTime.value = delay;
+      }
+
+      /**
+       * 获取延迟时长
+       */
+      getDelay() {
+        return this.output.delayTime.value;
+      }
+
+      end() {}
+
+      start() {}
+    }
+    class EchoEffect extends AudioEffect {
+      constructor(ac) {
+        super(ac);
+        /** 当前增益 */
+        this.gain = 0.5;
+        /** 是否正在播放 */
+        this.playing = false;
+        const delay = ac.createDelay();
+        const gain = ac.createGain();
+        gain.gain.value = 0.5;
+        delay.delayTime.value = 0.05;
+        delay.connect(gain);
+        gain.connect(delay);
+        /** 延迟节点 */
+        this.delay = delay;
+        /** 反馈增益节点 */
+        this.gainNode = gain;
+
+        this.input = gain;
+        this.output = gain;
+      }
+
+      /**
+       * 设置回声反馈增益大小
+       * @param gain 增益大小,范围 0-1,大于等于1的视为0.5,小于0的视为0 Number
+       */
+      setFeedbackGain(gain) {
+        const resolved = gain >= 1 ? 0.5 : gain < 0 ? 0 : gain;
+        this.gain = resolved;
+        if (this.playing) this.gainNode.gain.value = resolved;
+      }
+
+      /**
+       * 设置回声间隔时长
+       * @param delay 回声时长,范围 0.01-Infinity,小于0.01的视为0.01 Number
+       */
+      setEchoDelay(delay) {
+        const resolved = delay < 0.01 ? 0.01 : delay;
+        this.delay.delayTime.value = resolved;
+      }
+
+      /**
+       * 获取反馈节点增益
+       */
+      getFeedbackGain() {
+        return this.gain;
+      }
+
+      /**
+       * 获取回声间隔时长
+       */
+      getEchoDelay() {
+        return this.delay.delayTime.value;
+      }
+
+      end() {
+        this.playing = false;
+        const echoTime = Math.ceil(Math.log(0.001) / Math.log(this.gain)) + 10;
+        sleep(this.delay.delayTime.value * echoTime).then(() => {
+          if (!this.playing) this.gainNode.gain.value = 0;
+        });
+      }
+
+      start() {
+        this.playing = true;
+        this.gainNode.gain.value = this.gain;
+      }
+    }
+
+    class StreamLoader {
+      constructor(url) {
+        /** 传输目标  Set<IStreamReader>*/
+        this.target = new Set();
+        this.loading = false;
+      }
+
+      /**
+       * 将加载流传递给字节流读取对象
+       * @param reader 字节流读取对象 IStreamReader
+       */
+      pipe(reader) {
+        if (this.loading) {
+          console.warn(
+            "Cannot pipe new StreamReader object when stream is loading."
+          );
+          return;
+        }
+        this.target.add(reader);
+        reader.piped(this);
+        return this;
+      }
+
+      async start() {
+        if (this.loading) return;
+        this.loading = true;
+        const response = await window.fetch(this.url);
+        const stream = response.body;
+        if (!stream) {
+          console.error("Cannot get reader when fetching '" + this.url + "'.");
+          return;
+        }
+        // 获取读取器
+        this.stream = stream;
+        const reader = response.body?.getReader();
+        const targets = [...this.target];
+
+        await Promise.all(targets.map((v) => v.start(stream, this, response)));
+        if (reader && reader.read) {
+          // 开始流传输
+          while (true) {
+            const { value, done } = await reader.read();
+            await Promise.all(
+              targets.map((v) => v.pump(value, done, response))
+            );
+            if (done) break;
+          }
+        } else {
+          // 如果不支持流传输
+          const buffer = await response.arrayBuffer();
+          const data = new Uint8Array(buffer);
+          await Promise.all(targets.map((v) => v.pump(data, true, response)));
+        }
+
+        this.loading = false;
+        targets.forEach((v) => v.end(true));
+
+        //
+      }
+
+      cancel(reason) {
+        if (!this.stream) return;
+        this.stream.cancel(reason);
+        this.loading = false;
+        this.target.forEach((v) => v.end(false, reason));
+      }
+    }
+    const fileSignatures = [
+      [AudioType.Mp3, [0x49, 0x44, 0x33]],
+      [AudioType.Ogg, [0x4f, 0x67, 0x67, 0x53]],
+      [AudioType.Wav, [0x52, 0x49, 0x46, 0x46]],
+      [AudioType.Flac, [0x66, 0x4c, 0x61, 0x43]],
+      [AudioType.Aac, [0xff, 0xf1]],
+      [AudioType.Aac, [0xff, 0xf9]],
+    ];
+    const oggHeaders = [
+      [AudioType.Opus, [0x4f, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64]],
+    ];
+
+    function checkAudioType(data) {
+      let audioType = "";
+      // 检查头文件获取音频类型,仅检查前256个字节
+      const toCheck = data.slice(0, 256);
+      for (const [type, value] of fileSignatures) {
+        if (value.every((v, i) => toCheck[i] === v)) {
+          audioType = type;
+          break;
+        }
+      }
+      if (audioType === AudioType.Ogg) {
+        // 如果是ogg的话,进一步判断是不是opus
+        for (const [key, value] of oggHeaders) {
+          const has = toCheck.some((_, i) => {
+            return value.every((v, ii) => toCheck[i + ii] === v);
+          });
+          if (has) {
+            audioType = key;
+            break;
           }
         }
       }
-      for (let nx = 0; nx < numX; nx++) {
-        for (let ny = 0; ny < numY; ny++) {
-          res.push(withImage(canvas, rw + l * nx, rh + l * ny, l, l));
+
+      return audioType;
+    }
+    class AudioDecoder {
+      /**
+       * 注册一个解码器
+       * @param type 要注册的解码器允许解码的类型
+       * @param decoder 解码器对象
+       */
+      static registerDecoder(type, decoder) {
+        if (!this.decoderMap) this.decoderMap = new Map();
+        if (this.decoderMap.has(type)) {
+          console.warn(
+            "Audio stream decoder for audio type '" +
+              type +
+              "' has already existed."
+          );
+          return;
+        }
+
+        this.decoderMap.set(type, decoder);
+      }
+
+      /**
+       * 解码音频数据
+       * @param data 音频文件数据
+       * @param player AudioPlayer实例
+       */
+      static async decodeAudioData(data, player) {
+        // 检查头文件获取音频类型,仅检查前256个字节
+        const toCheck = data.slice(0, 256);
+        const type = checkAudioType(data);
+        if (type === "") {
+          console.error(
+            "Unknown audio type. Header: '" +
+              [...toCheck]
+                .map((v) => v.toString().padStart(2, "0"))
+                .join(" ")
+                .toUpperCase() +
+              "'"
+          );
+          return null;
+        }
+        if (isAudioSupport(type)) {
+          if (data.buffer instanceof ArrayBuffer) {
+            return player.ac.decodeAudioData(data.buffer);
+          } else {
+            return null;
+          }
+        } else {
+          const Decoder = this.decoderMap.get(type);
+          if (!Decoder) {
+            return null;
+          } else {
+            const decoder = new Decoder();
+            await decoder.create();
+            const decodedData = await decoder.decode(data);
+            if (!decodedData) return null;
+            const buffer = player.ac.createBuffer(
+              decodedData.channelData.length,
+              decodedData.channelData[0].length,
+              decodedData.sampleRate
+            );
+            decodedData.channelData.forEach((v, i) => {
+              buffer.copyToChannel(v, i);
+            });
+            decoder.destroy();
+            return buffer;
+          }
         }
       }
-
-      return res;
     }
 
-    const origin = core.events.afterBattle;
-    core.events.afterBattle = function (enemyId, x, y) {
-      // 打怪特效
-      if (has(x) && has(y)) {
-        const frame = core.status.globalAnimateStatus % 2;
-        // 生成怪物图像
-        const canvas = document.createElement("canvas");
-        canvas.width = 32;
-        canvas.height = 32;
-        core.drawIcon(canvas, enemyId, 0, 0, 32, 32, frame);
-        // 执行动画
-        const manager = applyFragWith(canvas);
-        const frag = manager.canvas;
-        // 设置特效画布的css属性
-        frag.style.imageRendering = "pixelated";
-        frag.style.width = `${frag.width * core.domStyle.scale}px`;
-        frag.style.height = `${frag.height * core.domStyle.scale}px`;
-        const left =
-          (x * 32 + 16 - frag.width / 2 - core.bigmap.offsetX) *
-          core.domStyle.scale;
-        const top =
-          (y * 32 + 16 - frag.height / 2 - core.bigmap.offsetY) *
-          core.domStyle.scale;
-        frag.style.left = `${left}px`;
-        frag.style.top = `${top}px`;
-        frag.style.zIndex = "45";
-        frag.style.position = "absolute";
-        // 将特效画布部署到样板上
-        core.dom.gameDraw.appendChild(frag);
-        // 当特效执行完毕后移除这个特效画布
-        manager.onEnd.then(() => {
-          frag.remove();
-        });
+    class VorbisDecoder {
+      /**
+       * 创建音频解码器
+       */
+      async create() {
+        this.decoder = new OggVorbisDecoderWebWorker();
+        await this.decoder.ready;
       }
-      return origin.apply(this, arguments);
+      /**
+       * 摧毁这个解码器
+       */
+      destroy() {
+        this.decoder?.free();
+      }
+      /**
+       * 解码流数据
+       * @param data 流数据
+       */
+
+      async decode(data) {
+        return this.decoder?.decode(data);
+      }
+      /**
+       * 解码整个文件
+       * @param data 文件数据
+       */
+      async decodeAll(data) {
+        return this.decoder?.decodeFile(data);
+      }
+      /**
+       * 当音频解码完成后,会调用此函数,需要返回之前还未解析或未返回的音频数据。调用后,该解码器将不会被再次使用
+       */
+      async flush() {
+        return this.decoder?.flush();
+      }
+    }
+
+    class OpusDecoder {
+      /**
+       * 创建音频解码器
+       */
+      async create() {
+        this.decoder = new OggOpusDecoderWebWorker();
+        await this.decoder.ready;
+      }
+      /**
+       * 摧毁这个解码器
+       */
+      destroy() {
+        this.decoder?.free();
+      }
+      /**
+       * 解码流数据
+       * @param data 流数据
+       */
+      async decode(data) {
+        return this.decoder?.decode(data);
+      }
+      /**
+       * 解码整个文件
+       * @param data 文件数据
+       */
+      async decodeAll(data) {
+        return this.decoder?.decodeFile(data);
+      }
+      /**
+       * 当音频解码完成后,会调用此函数,需要返回之前还未解析或未返回的音频数据。调用后,该解码器将不会被再次使用
+       */
+      async flush() {
+        return await this.decoder?.flush();
+      }
+    }
+    const mimeTypeMap = {
+      [AudioType.Aac]: "audio/aac",
+      [AudioType.Flac]: "audio/flac",
+      [AudioType.Mp3]: "audio/mpeg",
+      [AudioType.Ogg]: "application/ogg",
+      [AudioType.Opus]: "application/ogg",
+      [AudioType.Wav]: "application/ogg",
     };
 
-    if ("frag" in core.plugin) {
-      throw new ReferenceError(`core.plugin上已存在名为frag的属性!`);
+    function isOggPage(data) {
+      return !isNil(data.isFirstPage);
     }
-    core.plugin.frag = {
-      applyFragWith,
+    class AudioStreamSource {
+      constructor(context) {
+        this.output = context.createBufferSource();
+        /** 是否已经完全加载完毕 */
+        this.loaded = false;
+        /** 是否正在播放 */
+        this.playing = false;
+        /** 已经缓冲了多长时间,如果缓冲完那么跟歌曲时长一致 */
+        this.buffered = 0;
+        /** 已经缓冲的采样点数量 */
+        this.bufferedSamples = 0;
+        /** 歌曲时长,加载完毕之前保持为 0 */
+        this.duration = 0;
+        /** 在流传输阶段,至少缓冲多长时间的音频之后才开始播放,单位秒 */
+        this.bufferPlayDuration = 1;
+        /** 音频的采样率,未成功解析出之前保持为 0 */
+        this.sampleRate = 0;
+        //是否循环播放
+        this.loop = false;
+        /** 上一次播放是从何时开始的 */
+        this.lastStartWhen = 0;
+        /** 开始播放时刻 */
+        this.lastStartTime = 0;
+        /** 上一次播放的缓存长度 */
+        this.lastBufferSamples = 0;
+
+        /** 是否已经获取到头文件 */
+        this.headerRecieved = false;
+        /** 音频类型 */
+        this.audioType = "";
+        /** 每多长时间组成一个缓存 Float32Array */
+        this.bufferChunkSize = 10;
+        /** 缓存音频数据,每 bufferChunkSize 秒钟组成一个 Float32Array,用于流式解码 */
+        this.audioData = [];
+
+        this.errored = false;
+        this.ac = context;
+      }
+      /** 当前已经播放了多长时间 */
+      get currentTime() {
+        return this.ac.currentTime - this.lastStartTime + this.lastStartWhen;
+      }
+      /**
+       * 设置每个缓存数据的大小,默认为10秒钟一个缓存数据
+       * @param size 每个缓存数据的时长,单位秒
+       */
+      setChunkSize(size) {
+        if (this.controller?.loading || this.loaded) return;
+        this.bufferChunkSize = size;
+      }
+
+      piped(controller) {
+        this.controller = controller;
+      }
+
+      async pump(data, done) {
+        if (!data || this.errored) return;
+        if (!this.headerRecieved) {
+          // 检查头文件获取音频类型,仅检查前256个字节
+          const toCheck = data.slice(0, 256);
+          this.audioType = checkAudioType(data);
+          if (!this.audioType) {
+            console.error(
+              "Unknown audio type. Header: '" +
+                [...toCheck]
+                  .map((v) => v.toString(16).padStart(2, "0"))
+                  .join(" ")
+                  .toUpperCase() +
+                "'"
+            );
+            return;
+          }
+          // 创建解码器
+          const Decoder = AudioDecoder.decoderMap.get(this.audioType);
+          if (!Decoder) {
+            this.errored = true;
+            console.error(
+              "Cannot decode stream source type of '" +
+                this.audioType +
+                "', since there is no registered decoder for that type."
+            );
+            return Promise.reject(
+              `Cannot decode stream source type of '${this.audioType}', since there is no registered decoder for that type.`
+            );
+          }
+          this.decoder = new Decoder();
+          // 创建数据解析器
+          const mime = mimeTypeMap[this.audioType];
+          const parser = new CodecParser(mime);
+          this.parser = parser;
+          await this.decoder.create();
+          this.headerRecieved = true;
+        }
+
+        const decoder = this.decoder;
+        const parser = this.parser;
+        if (!decoder || !parser) {
+          this.errored = true;
+          return Promise.reject(
+            "No parser or decoder attached in this AudioStreamSource"
+          );
+        }
+
+        await this.decodeData(data, decoder, parser);
+        if (done) await this.decodeFlushData(decoder, parser);
+        this.checkBufferedPlay();
+      }
+
+      /**
+       * 检查采样率,如果还未解析出采样率,那么将设置采样率,如果当前采样率与之前不同,那么发出警告
+       */
+      checkSampleRate(info) {
+        for (const one of info) {
+          const frame = isOggPage(one) ? one.codecFrames[0] : one;
+          if (frame) {
+            const rate = frame.header.sampleRate;
+            if (this.sampleRate === 0) {
+              this.sampleRate = rate;
+              break;
+            } else {
+              if (rate !== this.sampleRate) {
+                console.warn("Sample rate in stream audio must be constant.");
+              }
+            }
+          }
+        }
+      }
+
+      /**
+       * 解析音频数据
+       */
+      async decodeData(data, decoder, parser) {
+        // 解析音频数据
+        const audioData = await decoder.decode(data);
+        if (!audioData) return;
+        // @ts-expect-error 库类型声明错误
+        const audioInfo = [...parser.parseChunk(data)];
+
+        // 检查采样率
+        this.checkSampleRate(audioInfo);
+        // 追加音频数据
+        this.appendDecodedData(audioData, audioInfo);
+      }
+
+      /**
+       * 解码剩余数据
+       */
+      async decodeFlushData(decoder, parser) {
+        const audioData = await decoder.flush();
+        if (!audioData) return;
+        // @ts-expect-error 库类型声明错误
+        const audioInfo = [...parser.flush()];
+
+        this.checkSampleRate(audioInfo);
+        this.appendDecodedData(audioData, audioInfo);
+      }
+
+      /**
+       * 追加音频数据
+       */
+      appendDecodedData(data, info) {
+        const channels = data.channelData.length;
+        if (channels === 0) return;
+        if (this.audioData.length !== channels) {
+          this.audioData = [];
+          for (let i = 0; i < channels; i++) {
+            this.audioData.push([]);
+          }
+        }
+        // 计算出应该放在哪
+        const chunk = this.sampleRate * this.bufferChunkSize;
+        const sampled = this.bufferedSamples;
+        const pushIndex = Math.floor(sampled / chunk);
+        const bufferIndex = sampled % chunk;
+        const dataLength = data.channelData[0].length;
+        let buffered = 0;
+        let nowIndex = pushIndex;
+        let toBuffer = bufferIndex;
+        while (buffered < dataLength) {
+          const rest = toBuffer !== 0 ? chunk - bufferIndex : chunk;
+
+          for (let i = 0; i < channels; i++) {
+            const audioData = this.audioData[i];
+            if (!audioData[nowIndex]) {
+              audioData.push(new Float32Array(chunk));
+            }
+            const toPush = data.channelData[i].slice(buffered, buffered + rest);
+
+            audioData[nowIndex].set(toPush, toBuffer);
+          }
+          buffered += rest;
+          nowIndex++;
+          toBuffer = 0;
+        }
+
+        this.buffered +=
+          info.reduce((prev, curr) => prev + curr.duration, 0) / 1000;
+        this.bufferedSamples += info.reduce(
+          (prev, curr) => prev + curr.samples,
+          0
+        );
+      }
+
+      /**
+       * 检查已缓冲内容,并在未开始播放时播放
+       */
+      checkBufferedPlay() {
+        if (this.playing || this.sampleRate === 0) return;
+        const played = this.lastBufferSamples / this.sampleRate;
+        const dt = this.buffered - played;
+        if (this.loaded) {
+          this.playAudio(played);
+          return;
+        }
+        if (dt < this.bufferPlayDuration) return;
+
+        this.lastBufferSamples = this.bufferedSamples;
+        // 需要播放
+        this.mergeBuffers();
+        if (!this.buffer) return;
+        if (this.playing) this.output.stop();
+        this.createSourceNode(this.buffer);
+        this.output.loop = false;
+        this.output.start(0, played);
+        this.lastStartTime = this.ac.currentTime;
+        this.playing = true;
+        this.output.addEventListener("ended", () => {
+          this.playing = false;
+          this.checkBufferedPlay();
+        });
+      }
+
+      mergeBuffers() {
+        const buffer = this.ac.createBuffer(
+          this.audioData.length,
+          this.bufferedSamples,
+          this.sampleRate
+        );
+        const chunk = this.sampleRate * this.bufferChunkSize;
+        const bufferedChunks = Math.floor(this.bufferedSamples / chunk);
+        const restLength = this.bufferedSamples % chunk;
+        for (let i = 0; i < this.audioData.length; i++) {
+          const audio = this.audioData[i];
+          const data = new Float32Array(this.bufferedSamples);
+          for (let j = 0; j < bufferedChunks; j++) {
+            data.set(audio[j], chunk * j);
+          }
+          if (restLength !== 0) {
+            data.set(
+              audio[bufferedChunks].slice(0, restLength),
+              chunk * bufferedChunks
+            );
+          }
+
+          buffer.copyToChannel(data, i, 0);
+        }
+        this.buffer = buffer;
+      }
+
+      async start() {
+        delete this.buffer;
+        this.headerRecieved = false;
+        this.audioType = "";
+        this.errored = false;
+        this.buffered = 0;
+        this.sampleRate = 0;
+        this.bufferedSamples = 0;
+        this.duration = 0;
+        this.loaded = false;
+        if (this.playing) this.output.stop();
+        this.playing = false;
+        this.lastStartTime = this.ac.currentTime;
+      }
+
+      end(done, reason) {
+        if (done && this.buffer) {
+          this.loaded = true;
+          delete this.controller;
+          this.mergeBuffers();
+
+          this.duration = this.buffered;
+          this.audioData = [];
+          this.decoder?.destroy();
+          delete this.decoder;
+          delete this.parser;
+        } else {
+          console.warn(
+            "Unexpected end when loading stream audio, reason: '" +
+              (reason ?? "") +
+              "'"
+          );
+        }
+      }
+
+      playAudio(when) {
+        if (!this.buffer) return;
+        this.lastStartTime = this.ac.currentTime;
+        if (this.playing) this.output.stop();
+        if (this.route.status !== AudioStatus.Playing) {
+          this.route.status = AudioStatus.Playing;
+        }
+        this.createSourceNode(this.buffer);
+        this.output.start(0, when);
+        this.playing = true;
+
+        this.output.addEventListener("ended", () => {
+          this.playing = false;
+          if (this.route.status === AudioStatus.Playing) {
+            this.route.status = AudioStatus.Stoped;
+          }
+          if (this.loop && !this.output.loop) this.play(0);
+        });
+      }
+      /**
+       * 开始播放这个音频源
+       */
+      play(when) {
+        if (this.playing || this.errored) return;
+        if (this.loaded && this.buffer) {
+          this.playing = true;
+          this.playAudio(when);
+        } else {
+          this.controller?.start();
+        }
+      }
+
+      createSourceNode(buffer) {
+        if (!this.target) return;
+        const node = this.ac.createBufferSource();
+        node.buffer = buffer;
+        if (this.playing) this.output.stop();
+        this.playing = false;
+        this.output = node;
+        node.connect(this.target.input);
+        node.loop = this.loop;
+      }
+      /**
+       * 停止播放这个音频源
+       * @returns 音频暂停的时刻 number
+       */
+      stop() {
+        if (this.playing) this.output.stop();
+        this.playing = false;
+        return this.ac.currentTime - this.lastStartTime;
+      }
+      /**
+       * 连接到音频路由图上,每次调用播放的时候都会执行一次
+       * @param target 连接至的目标 IAudioInput
+       */
+      connect(target) {
+        this.target = target;
+      }
+      /**
+       * 设置是否循环播放
+       * @param loop 是否循环 boolean)
+       */
+      setLoop(loop) {
+        this.loop = loop;
+      }
+    }
+    class AudioElementSource {
+      constructor(context) {
+        const audio = new Audio();
+        audio.preload = "none";
+        this.output = context.createMediaElementSource(audio);
+        this.audio = audio;
+        this.ac = context;
+        audio.addEventListener("play", () => {
+          this.playing = true;
+          if (this.route.status !== AudioStatus.Playing) {
+            this.route.status = AudioStatus.Playing;
+          }
+        });
+        audio.addEventListener("ended", () => {
+          this.playing = false;
+          if (this.route.status === AudioStatus.Playing) {
+            this.route.status = AudioStatus.Stoped;
+          }
+        });
+      }
+      get duration() {
+        return this.audio.duration;
+      }
+      get currentTime() {
+        return this.audio.currentTime;
+      }
+      /**
+       * 设置音频源的路径
+       * @param url 音频路径
+       */
+      setSource(url) {
+        this.audio.src = url;
+      }
+
+      play(when = 0) {
+        if (this.playing) return;
+        this.audio.currentTime = when;
+        this.audio.play();
+      }
+
+      stop() {
+        this.audio.pause();
+        this.playing = false;
+        if (this.route.status === AudioStatus.Playing) {
+          this.route.status = AudioStatus.Stoped;
+        }
+        return this.audio.currentTime;
+      }
+
+      connect(target) {
+        this.output.connect(target.input);
+      }
+
+      setLoop(loop) {
+        this.audio.loop = loop;
+      }
+    }
+    class AudioBufferSource {
+      constructor(context) {
+        this.output = context.createBufferSource();
+        /** 是否循环 */
+        this.loop = false;
+        /** 上一次播放是从何时开始的 */
+        this.lastStartWhen = 0;
+        /** 播放开始时刻 */
+        this.lastStartTime = 0;
+        this.duration = 0;
+        this.ac = context;
+      }
+      get currentTime() {
+        return this.ac.currentTime - this.lastStartTime + this.lastStartWhen;
+      }
+
+      /**
+       * 设置音频源数据
+       * @param buffer 音频源,可以是未解析的 ArrayBuffer,也可以是已解析的 AudioBuffer
+       */
+      async setBuffer(buffer) {
+        if (buffer instanceof ArrayBuffer) {
+          this.buffer = await this.ac.decodeAudioData(buffer);
+        } else {
+          this.buffer = buffer;
+        }
+        this.duration = this.buffer.duration;
+      }
+
+      play(when) {
+        if (this.playing || !this.buffer) return;
+        this.playing = true;
+        this.lastStartTime = this.ac.currentTime;
+        if (this.route.status !== AudioStatus.Playing) {
+          this.route.status = AudioStatus.Playing;
+        }
+        this.createSourceNode(this.buffer);
+        this.output.start(0, when);
+        this.output.addEventListener("ended", () => {
+          this.playing = false;
+          if (this.route.status === AudioStatus.Playing) {
+            this.route.status = AudioStatus.Stoped;
+          }
+          if (this.loop && !this.output.loop) this.play(0);
+        });
+      }
+
+      createSourceNode(buffer) {
+        if (!this.target) return;
+        const node = this.ac.createBufferSource();
+        node.buffer = buffer;
+        this.output = node;
+        node.connect(this.target.input);
+        node.loop = this.loop;
+      }
+
+      stop() {
+        this.output.stop();
+        return this.ac.currentTime - this.lastStartTime;
+      }
+
+      connect(target) {
+        this.target = target;
+      }
+
+      setLoop(loop) {
+        this.loop = loop;
+      }
+    }
+    class AudioPlayer {
+      constructor() {
+        /** 音频播放上下文 */
+        this.ac = new AudioContext();
+        /** 音量节点 */
+        this.gain = this.ac.createGain();
+        this.gain.connect(this.ac.destination);
+        this.audioRoutes = new Map();
+      }
+      /**
+       * 解码音频数据
+       * @param data 音频数据
+       */
+      decodeAudioData(data) {
+        return AudioDecoder.decodeAudioData(data, this);
+      }
+      /**
+       * 设置音量
+       * @param volume 音量
+       */
+      setVolume(volume) {
+        this.gain.gain.value = volume;
+      }
+
+      /**
+       * 获取音量
+       */
+      getVolume() {
+        return this.gain.gain.value;
+      }
+
+      /**
+       * 创建一个音频源
+       * @param Source 音频源类
+       */
+      createSource(Source) {
+        return new Source(this.ac);
+      }
+
+      /**
+       * 创建一个兼容流式音频源,可以与流式加载相结合,主要用于处理 opus ogg 不兼容的情况
+       */
+      createStreamSource() {
+        return new AudioStreamSource(this.ac);
+      }
+
+      /**
+       * 创建一个通过 audio 元素播放的音频源
+       */
+      createElementSource() {
+        return new AudioElementSource(this.ac);
+      }
+
+      /**
+       * 创建一个通过 AudioBuffer 播放的音频源
+       */
+      createBufferSource() {
+        return new AudioBufferSource(this.ac);
+      }
+
+      /**
+       * 获取音频目的地
+       */
+      getDestination() {
+        return this.gain;
+      }
+
+      /**
+       * 创建一个音频效果器
+       * @param Effect 效果器类
+       */
+      createEffect(Effect) {
+        return new Effect(this.ac);
+      }
+
+      /**
+       * 创建一个修改音量的效果器
+       * ```txt
+       *             |----------|
+       * Input ----> | GainNode | ----> Output
+       *             |----------|
+       * ```
+       */
+      createVolumeEffect() {
+        return new VolumeEffect(this.ac);
+      }
+
+      /**
+       * 创建一个立体声效果器
+       * ```txt
+       *             |------------|
+       * Input ----> | PannerNode | ----> Output
+       *             |------------|
+       * ```
+       */
+      createStereoEffect() {
+        return new StereoEffect(this.ac);
+      }
+
+      /**
+       * 创建一个修改单个声道音量的效果器
+       * ```txt
+       *                                  |----------|
+       *                               -> | GainNode | \
+       *             |--------------| /   |----------|  -> |------------|
+       * Input ----> | SplitterNode |        ......        | MergerNode | ----> Output
+       *             |--------------| \   |----------|  -> |------------|
+       *                               -> | GainNode | /
+       *                                  |----------|
+       * ```
+       */
+      createChannelVolumeEffect() {
+        return new ChannelVolumeEffect(this.ac);
+      }
+
+      /**
+       * 创建一个延迟效果器
+       *             |-----------|
+       * Input ----> | DelayNode | ----> Output
+       *             |-----------|
+       */
+      createDelay() {
+        return new DelayEffect(this.ac);
+      }
+
+      /**
+       * 创建一个回声效果器
+       * ```txt
+       *             |----------|
+       * Input ----> | GainNode | ----> Output
+       *        ^    |----------|   |
+       *        |                   |
+       *        |   |------------|  ↓
+       *        |-- | Delay Node | <--
+       *            |------------|
+       * ```
+       */
+      createEchoEffect() {
+        return new EchoEffect(this.ac);
+      }
+
+      /**
+       * 创建一个音频播放路由
+       * @param source 音频源
+       */
+      createRoute(source) {
+        return new AudioRoute(source, this);
+      }
+
+      /**
+       * 添加一个音频播放路由,可以直接被播放
+       * @param id 这个音频播放路由的名称
+       * @param route 音频播放路由对象
+       */
+      addRoute(id, route) {
+        if (!this.audioRoutes) this.audioRoutes = new Map();
+        if (this.audioRoutes.has(id)) {
+          console.warn(
+            "Audio route with id of '" +
+              id +
+              "' has already existed. New route will override old route."
+          );
+        }
+        this.audioRoutes.set(id, route);
+      }
+
+      /**
+       * 根据名称获取音频播放路由对象
+       * @param id 音频播放路由的名称
+       */
+      getRoute(id) {
+        return this.audioRoutes.get(id);
+      }
+      /**
+       * 移除一个音频播放路由
+       * @param id 要移除的播放路由的名称
+       */
+      removeRoute(id) {
+        this.audioRoutes.delete(id);
+      }
+      /**
+       * 播放音频
+       * @param id 音频名称
+       * @param when 从音频的哪个位置开始播放,单位秒
+       */
+      play(id, when) {
+        const route = this.getRoute(id);
+        if (!route) {
+          console.warn(
+            "Cannot play audio route '" +
+              id +
+              "', since there is not added route named it."
+          );
+          return;
+        }
+
+        route.play(when);
+      }
+
+      /**
+       * 暂停音频播放
+       * @param id 音频名称
+       * @returns 当音乐真正停止时兑现
+       */
+      pause(id) {
+        const route = this.getRoute(id);
+        if (!route) {
+          console.warn(
+            "Cannot pause audio route '" +
+              id +
+              "', since there is not added route named it."
+          );
+          return;
+        }
+        return route.pause();
+      }
+
+      /**
+       * 停止音频播放
+       * @param id 音频名称
+       * @returns 当音乐真正停止时兑现
+       */
+      stop(id) {
+        const route = this.getRoute(id);
+        if (!route) {
+          console.warn(
+            "Cannot stop audio route '" +
+              id +
+              "', since there is not added route named it."
+          );
+          return;
+        }
+        return route.stop();
+      }
+
+      /**
+       * 继续音频播放
+       * @param id 音频名称
+       */
+      resume(id) {
+        const route = this.getRoute(id);
+        if (!route) {
+          console.warn(
+            "Cannot pause audio route '" +
+              id +
+              "', since there is not added route named it."
+          );
+          return;
+        }
+        route.resume();
+      }
+
+      /**
+       * 设置听者位置,x正方向水平向右,y正方向垂直于地面向上,z正方向垂直屏幕远离用户
+       * @param x 位置x坐标
+       * @param y 位置y坐标
+       * @param z 位置z坐标
+       */
+      setListenerPosition(x, y, z) {
+        const listener = this.ac.listener;
+        listener.positionX.value = x;
+        listener.positionY.value = y;
+        listener.positionZ.value = z;
+      }
+
+      /**
+       * 设置听者朝向,x正方向水平向右,y正方向垂直于地面向上,z正方向垂直屏幕远离用户
+       * @param x 朝向x坐标
+       * @param y 朝向y坐标
+       * @param z 朝向z坐标
+       */
+      setListenerOrientation(x, y, z) {
+        const listener = this.ac.listener;
+        listener.forwardX.value = x;
+        listener.forwardY.value = y;
+        listener.forwardZ.value = z;
+      }
+
+      /**
+       * 设置听者头顶朝向,x正方向水平向右,y正方向垂直于地面向上,z正方向垂直屏幕远离用户
+       * @param x 头顶朝向x坐标
+       * @param y 头顶朝向y坐标
+       * @param z 头顶朝向z坐标
+       */
+      setListenerUp(x, y, z) {
+        const listener = this.ac.listener;
+        listener.upX.value = x;
+        listener.upY.value = y;
+        listener.upZ.value = z;
+      }
+    }
+    class AudioRoute {
+      constructor(source, player) {
+        source.route = this;
+        this.output = source.output;
+
+        /** 效果器路由图 */
+        this.effectRoute = [];
+
+        /** 结束时长,当音频暂停或停止时,会经过这么长时间之后才真正终止播放,期间可以做音频淡入淡出等效果 */
+        this.endTime = 0;
+        /** 暂停时播放了多长时间 */
+        this.pauseCurrentTime = 0;
+        /** 当前播放状态 */
+        this.player = player;
+        this.status = AudioStatus.Stoped;
+
+        this.shouldStop = false;
+        /**
+         * 每次暂停或停止时自增,用于判断当前正在处理的情况。
+         * 假如暂停后很快播放,然后很快暂停,那么需要根据这个来判断实际是否应该执行暂停后操作
+         */
+        this.stopIdentifier = 0;
+        /** 暂停时刻 */
+        this.pauseTime = 0;
+        this.source = source;
+        this.source.player = player;
+      }
+      /** 音频时长,单位秒 */
+      get duration() {
+        return this.source.duration;
+      }
+      /** 当前播放了多长时间,单位秒 */
+      get currentTime() {
+        if (this.status === AudioStatus.Paused) {
+          return this.pauseCurrentTime;
+        } else {
+          return this.source.currentTime;
+        }
+      }
+      set currentTime(time) {
+        this.source.stop();
+        this.source.play(time);
+      }
+      /**
+       * 设置结束时间,暂停或停止时,会经过这么长时间才终止音频的播放,这期间可以做一下音频淡出的效果。
+       * @param time 暂停或停止时,经过多长时间之后才会结束音频的播放
+       */
+      setEndTime(time) {
+        this.endTime = time;
+      }
+
+      /**
+       * 当音频播放时执行的函数,可以用于音频淡入效果
+       * @param fn 音频开始播放时执行的函数
+       */
+      onStart(fn) {
+        this.audioStartHook = fn;
+      }
+
+      /**
+       * 当音频暂停或停止时执行的函数,可以用于音频淡出效果
+       * @param fn 音频在暂停或停止时执行的函数,不填时表示取消这个钩子。
+       *           包含两个参数,第一个参数是结束时长,第二个参数是当前音频播放路由对象
+       */
+      onEnd(fn) {
+        this.audioEndHook = fn;
+      }
+
+      /**
+       * 开始播放这个音频
+       * @param when 从音频的什么时候开始播放,单位秒
+       */
+      async play(when = 0) {
+        if (this.status === AudioStatus.Playing) return;
+        this.link();
+        await this.player.ac.resume();
+        if (this.effectRoute.length > 0) {
+          const first = this.effectRoute[0];
+          this.source.connect(first);
+          const last = this.effectRoute.at(-1);
+          last.connect({ input: this.player.getDestination() });
+        } else {
+          this.source.connect({ input: this.player.getDestination() });
+        }
+        this.source.play(when);
+        this.status = AudioStatus.Playing;
+        this.pauseTime = 0;
+        this.audioStartHook?.(this);
+        this.startAllEffect();
+        if (this.status !== AudioStatus.Playing) {
+          this.status = AudioStatus.Playing;
+        }
+      }
+
+      /**
+       * 暂停音频播放
+       */
+      async pause() {
+        if (this.status !== AudioStatus.Playing) return;
+        this.status = AudioStatus.Pausing;
+        this.stopIdentifier++;
+        const identifier = this.stopIdentifier;
+        if (this.audioEndHook) {
+          this.audioEndHook(this.endTime, this);
+          await sleep(this.endTime);
+        }
+        if (
+          this.status !== AudioStatus.Pausing ||
+          this.stopIdentifier !== identifier
+        ) {
+          return;
+        }
+        this.pauseCurrentTime = this.source.currentTime;
+        const time = this.source.stop();
+        this.pauseTime = time;
+        if (this.shouldStop) {
+          this.status = AudioStatus.Stoped;
+          this.endAllEffect();
+
+          this.shouldStop = false;
+        } else {
+          this.status = AudioStatus.Paused;
+          this.endAllEffect();
+        }
+        this.endAllEffect();
+      }
+
+      /**
+       * 继续音频播放
+       */
+      resume() {
+        if (this.status === AudioStatus.Playing) return;
+        if (
+          this.status === AudioStatus.Pausing ||
+          this.status === AudioStatus.Stoping
+        ) {
+          this.audioStartHook?.(this);
+
+          return;
+        }
+        if (this.status === AudioStatus.Paused) {
+          this.play(this.pauseTime);
+        } else {
+          this.play(0);
+        }
+        this.status = AudioStatus.Playing;
+        this.pauseTime = 0;
+        this.audioStartHook?.(this);
+        this.startAllEffect();
+      }
+
+      /**
+       * 停止音频播放
+       */
+      async stop() {
+        if (this.status !== AudioStatus.Playing) {
+          if (this.status === AudioStatus.Pausing) {
+            this.shouldStop = true;
+          }
+          return;
+        }
+        this.status = AudioStatus.Stoping;
+        this.stopIdentifier++;
+        const identifier = this.stopIdentifier;
+        if (this.audioEndHook) {
+          this.audioEndHook(this.endTime, this);
+          await sleep(this.endTime);
+        }
+        if (
+          this.status !== AudioStatus.Stoping ||
+          this.stopIdentifier !== identifier
+        ) {
+          return;
+        }
+        this.source.stop();
+        this.status = AudioStatus.Stoped;
+        this.pauseTime = 0;
+        this.endAllEffect();
+      }
+
+      /**
+       * 添加效果器
+       * @param effect 要添加的效果,可以是数组,表示一次添加多个
+       * @param index 从哪个位置开始添加,如果大于数组长度,那么加到末尾,如果小于0,那么将会从后面往前数。默认添加到末尾
+       */
+      addEffect(effect, index) {
+        if (isNil(index)) {
+          if (effect instanceof Array) {
+            this.effectRoute.push(...effect);
+          } else {
+            this.effectRoute.push(effect);
+          }
+        } else {
+          if (effect instanceof Array) {
+            this.effectRoute.splice(index, 0, ...effect);
+          } else {
+            this.effectRoute.splice(index, 0, effect);
+          }
+        }
+        this.setOutput();
+        if (this.source.playing) this.link();
+      }
+
+      /**
+       * 移除一个效果器
+       * @param effect 要移除的效果
+       */
+      removeEffect(effect) {
+        const index = this.effectRoute.indexOf(effect);
+        if (index === -1) return;
+        this.effectRoute.splice(index, 1);
+        effect.disconnect();
+        this.setOutput();
+        if (this.source.playing) this.link();
+      }
+
+      setOutput() {
+        const effect = this.effectRoute.at(-1);
+        if (!effect) this.output = this.source.output;
+        else this.output = effect.output;
+      }
+
+      /**
+       * 连接音频路由图
+       */
+      link() {
+        this.effectRoute.forEach((v) => v.disconnect());
+        this.effectRoute.forEach((v, i) => {
+          const next = this.effectRoute[i + 1];
+          if (next) {
+            v.connect(next);
+          }
+        });
+      }
+
+      startAllEffect() {
+        this.effectRoute.forEach((v) => v.start());
+      }
+
+      endAllEffect() {
+        this.effectRoute.forEach((v) => v.end());
+      }
+    }
+
+    const audioPlayer = new AudioPlayer();
+
+    class BgmController {
+      constructor(player) {
+        this.mainGain = player.createVolumeEffect();
+        this.player = player;
+        /** bgm音频名称的前缀 */
+        this.prefix = "bgms.";
+        /** 每个 bgm 的音量控制器 */
+        this.gain = new Map();
+
+        /** 正在播放的 bgm */
+        this.playingBgm = "";
+        /** 是否正在播放 */
+        this.playing = false;
+
+        /** 是否已经启用 */
+        this.enabled = true;
+        /** 是否屏蔽所有的音乐切换 */
+        this.blocking = false;
+        /** 渐变时长 */
+        this.transitionTime = 2000;
+      }
+
+      /**
+       * 设置音频渐变时长
+       * @param time 渐变时长
+       */
+      setTransitionTime(time) {
+        this.transitionTime = time;
+        for (const [, value] of this.gain) {
+          value.transition.time(time);
+        }
+      }
+
+      /**
+       * 屏蔽音乐切换
+       */
+      blockChange() {
+        this.blocking = true;
+      }
+
+      /**
+       * 取消屏蔽音乐切换
+       */
+      unblockChange() {
+        this.blocking = false;
+      }
+
+      /**
+       * 设置总音量大小
+       * @param volume 音量大小
+       */
+      setVolume(volume) {
+        this.mainGain.setVolume(volume);
+        this._volume = volume;
+      }
+      /**
+       * 获取总音量大小
+       */
+      getVolume() {
+        return this.mainGain.getVolume();
+      }
+      /**
+       * 设置是否启用
+       * @param enabled 是否启用
+       */
+      setEnabled(enabled) {
+        if (enabled) this.resume();
+        else this.stop();
+        this.enabled = enabled;
+      }
+
+      /**
+       * 设置 bgm 音频名称的前缀
+       */
+      setPrefix(prefix) {
+        this.prefix = prefix;
+      }
+
+      getId(name) {
+        return `${this.prefix}${name}`;
+      }
+
+      /**
+       * 根据 bgm 名称获取其 AudioRoute 实例
+       * @param id 音频名称
+       */
+      get(id) {
+        return this.player.getRoute(this.getId(id));
+      }
+
+      /**
+       * 添加一个 bgm
+       * @param id 要添加的 bgm 的名称
+       * @param url 指定 bgm 的加载地址
+       */
+      addBgm(id, url = `project/bgms/${id}`) {
+        const type = guessTypeByExt(id);
+        if (!type) {
+          console.warn(
+            "Unknown audio extension name: '" +
+              id.split(".").slice(0, -1).join(".") +
+              "'"
+          );
+          return;
+        }
+        const gain = this.player.createVolumeEffect();
+        if (isAudioSupport(type)) {
+          const source = audioPlayer.createElementSource();
+          source.setSource(url);
+          source.setLoop(true);
+          const route = new AudioRoute(source, audioPlayer);
+          route.addEffect([gain, this.mainGain]);
+          audioPlayer.addRoute(this.getId(id), route);
+          this.setTransition(id, route, gain);
+        } else {
+          const source = audioPlayer.createStreamSource();
+          const stream = new StreamLoader(url);
+          stream.pipe(source);
+          source.setLoop(true);
+          const route = new AudioRoute(source, audioPlayer);
+          route.addEffect([gain, this.mainGain]);
+          audioPlayer.addRoute(this.getId(id), route);
+          this.setTransition(id, route, gain);
+        }
+      }
+
+      /**
+       * 移除一个 bgm
+       * @param id 要移除的 bgm 的名称
+       */
+      removeBgm(id) {
+        this.player.removeRoute(this.getId(id));
+        const gain = this.gain.get(id);
+        gain?.transition.ticker.destroy();
+        this.gain.delete(id);
+      }
+
+      setTransition(id, route, gain) {
+        const transition = new Transition();
+        transition
+          .time(this.transitionTime)
+          .mode(linear())
+          .transition("volume", 0);
+
+        const tick = () => {
+          gain.setVolume(transition.value.volume);
+        };
+
+        /**
+         * @param expect 在结束时应该是正在播放还是停止
+         */
+        const setTick = async (expect) => {
+          transition.ticker.remove(tick);
+          transition.ticker.add(tick);
+          const identifier = route.stopIdentifier;
+          await sleep(this.transitionTime + 500);
+          if (route.status === expect && identifier === route.stopIdentifier) {
+            transition.ticker.remove(tick);
+            if (route.status === AudioStatus.Playing) {
+              gain.setVolume(1);
+            } else {
+              gain.setVolume(0);
+            }
+          }
+        };
+
+        route.onStart(async () => {
+          transition.transition("volume", 1);
+          setTick(AudioStatus.Playing);
+        });
+        route.onEnd(() => {
+          transition.transition("volume", 0);
+          setTick(AudioStatus.Paused);
+        });
+        route.setEndTime(this.transitionTime);
+
+        this.gain.set(id, { effect: gain, transition });
+      }
+
+      /**
+       * 播放一个 bgm
+       * @param id 要播放的 bgm 名称
+       */
+      play(id, when) {
+        if (this.blocking) return;
+        if (id !== this.playingBgm && this.playingBgm) {
+          this.player.pause(this.getId(this.playingBgm));
+        }
+        this.playingBgm = id;
+        if (!this.enabled) return;
+        this.player.play(this.getId(id), when);
+        this.playing = true;
+      }
+
+      /**
+       * 继续当前的 bgm
+       */
+      resume() {
+        if (this.blocking || !this.enabled || this.playing) return;
+        if (this.playingBgm) {
+          this.player.resume(this.getId(this.playingBgm));
+        }
+        this.playing = true;
+      }
+
+      /**
+       * 暂停当前的 bgm
+       */
+      pause() {
+        if (this.blocking || !this.enabled) return;
+        if (this.playingBgm) {
+          this.player.pause(this.getId(this.playingBgm));
+        }
+        this.playing = false;
+      }
+
+      /**
+       * 停止当前的 bgm
+       */
+      stop() {
+        if (this.blocking || !this.enabled) return;
+        if (this.playingBgm) {
+          this.player.stop(this.getId(this.playingBgm));
+        }
+        this.playing = false;
+      }
+    }
+    const bgmController = new BgmController(audioPlayer);
+
+    class SoundPlayer {
+      constructor(player) {
+        /** 每个音效的唯一标识符 */
+        this.num = 0;
+        this.enabled = true;
+        this.gain = player.createVolumeEffect();
+        /** 每个音效的数据 */
+        this.buffer = new Map();
+        /** 所有正在播放的音乐 */
+        this.playing = new Set();
+        this.player = player;
+      }
+      /**
+       * 设置是否启用音效
+       * @param enabled 是否启用音效
+       */
+      setEnabled(enabled) {
+        if (!enabled) this.stopAllSounds();
+        this.enabled = enabled;
+      }
+
+      /**
+       * 设置音量大小
+       * @param volume 音量大小
+       */
+      setVolume(volume) {
+        this.gain.setVolume(volume);
+      }
+      /**
+       * 获取音量大小
+       */
+      getVolume() {
+        return this.gain.getVolume();
+      }
+      /**
+       * 添加一个音效
+       * @param id 音效名称
+       * @param data 音效的Uint8Array数据
+       */
+      async add(id, data) {
+        const buffer = await this.player.decodeAudioData(data);
+        if (!buffer) {
+          console.warn(
+            "Cannot decode sound '" +
+              id +
+              "', since audio file may not supported by 2.b."
+          );
+          return;
+        }
+        this.buffer.set(id, buffer);
+      }
+
+      /**
+       * 播放一个音效
+       * @param id 音效名称
+       * @param position 音频位置,[0, 0, 0]表示正中心,x轴指向水平向右,y轴指向水平向上,z轴指向竖直向上
+       * @param orientation 音频朝向,[0, 1, 0]表示朝向前方
+       */
+      play(id, position = [0, 0, 0], orientation = [1, 0, 0]) {
+        if (!this.enabled || !id) return -1;
+        const buffer = this.buffer.get(id);
+        if (!buffer) {
+          console.warn(
+            "Cannot play sound '" +
+              id +
+              "', since there is no added data named it."
+          );
+          return -1;
+        }
+        const soundNum = this.num++;
+
+        const source = this.player.createBufferSource();
+        source.setBuffer(buffer);
+        const route = this.player.createRoute(source);
+        const stereo = this.player.createStereoEffect();
+        stereo.setPosition(position[0], position[1], position[2]);
+        stereo.setOrientation(orientation[0], orientation[1], orientation[2]);
+        route.addEffect([stereo, this.gain]);
+        this.player.addRoute(`sounds.${soundNum}`, route);
+        route.play();
+        source.output.addEventListener("ended", () => {
+          this.playing.delete(soundNum);
+        });
+        this.playing.add(soundNum);
+        return soundNum;
+      }
+
+      /**
+       * 停止一个音效
+       * @param num 音效的唯一 id
+       */
+      stop(num) {
+        const id = `sounds.${num}`;
+        const route = this.player.getRoute(id);
+        if (route) {
+          route.stop();
+          this.player.removeRoute(id);
+          this.playing.delete(num);
+        }
+      }
+
+      /**
+       * 停止播放所有音效
+       */
+      stopAllSounds() {
+        this.playing.forEach((v) => {
+          const id = `sounds.${v}`;
+          const route = this.player.getRoute(id);
+          if (route) {
+            route.stop();
+            this.player.removeRoute(id);
+          }
+        });
+        this.playing.clear();
+      }
+    }
+    const soundPlayer = new SoundPlayer(audioPlayer);
+
+    function loadAllBgm() {
+      const data = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d;
+      for (const bgm of data.main.bgms) {
+        bgmController.addBgm(bgm);
+      }
+    }
+    loadAllBgm();
+    AudioDecoder.registerDecoder(AudioType.Ogg, VorbisDecoder);
+    AudioDecoder.registerDecoder(AudioType.Opus, OpusDecoder);
+
+    core.plugin.audioSystem = {
+      AudioType,
+      AudioDecoder,
+      AudioStatus,
+      checkAudioType,
+      isAudioSupport,
+      audioPlayer,
+      soundPlayer,
+      bgmController,
+      guessTypeByExt,
+      BgmController,
+      SoundPlayer,
+      EchoEffect,
+      DelayEffect,
+      ChannelVolumeEffect,
+      VolumeEffect,
+      StereoEffect,
+      AudioEffect,
+      AudioPlayer,
+      AudioRoute,
+      AudioStreamSource,
+      AudioElementSource,
+      AudioBufferSource,
+      loadAllBgm,
+      StreamLoader,
+    };
+    //bgm相关复写
+    control.prototype.playBgm = (bgm, when) => {
+      bgm = core.getMappedName(bgm);
+      bgmController.play(bgm, when);
+      core.setMusicBtn();
+    };
+    control.prototype.pauseBgm = () => {
+      bgmController.pause();
+      core.setMusicBtn();
+    };
+
+    control.prototype.resumeBgm = function () {
+      bgmController.resume();
+      core.setMusicBtn();
+    };
+    control.prototype.checkBgm = function () {
+      core.playBgm(bgmController.playingBgm || main.startBgm);
+    };
+    control.prototype.triggerBgm = function () {
+      core.musicStatus.bgmStatus = !core.musicStatus.bgmStatus;
+      if (bgmController.playing) bgmController.pause();
+      else bgmController.resume();
+      core.setMusicBtn();
+      core.setLocalStorage("bgmStatus", core.musicStatus.bgmStatus);
+    };
+    //sound相关复写
+    control.prototype.playSound = function (
+      sound,
+      _pitch,
+      callback,
+      position,
+      orientation
+    ) {
+      if (main.mode != "play" || !core.musicStatus.soundStatus) return;
+      const name = core.getMappedName(sound);
+      const num = soundPlayer.play(name, position, orientation);
+      const route = audioPlayer.getRoute(`sounds.${num}`);
+      if (!route) {
+        callback?.();
+        return -1;
+      } else {
+        sleep(route.duration * 1000).then(() => callback?.());
+        return num;
+      }
+    };
+    control.prototype.stopSound = function (id) {
+      if (isNil(id)) {
+        soundPlayer.stopAllSounds();
+      } else {
+        soundPlayer.stop(id);
+      }
+    };
+    control.prototype.getPlayingSounds = function () {
+      return [...soundPlayer.playing];
+    };
+    //sound加载复写
+    loader.prototype._loadOneSound_decodeData = function (name, data) {
+      if (data instanceof Blob) {
+        var blobReader = new zip.BlobReader(data);
+        blobReader.init(function () {
+          blobReader.readUint8Array(0, blobReader.size, function (uint8) {
+            //core.loader._loadOneSound_decodeData(name, uint8.buffer);
+            soundPlayer.add(name, uint8);
+          });
+        });
+        return;
+      }
+      if (data instanceof ArrayBuffer) {
+        const uint8 = new Uint8Array(data);
+        soundPlayer.add(name, uint8);
+      }
+    };
+    //音量控制复写
+    soundPlayer.setVolume(
+      core.musicStatus.userVolume * core.musicStatus.designVolume
+    );
+    bgmController.setVolume(
+      core.musicStatus.userVolume * core.musicStatus.designVolume
+    );
+    actions.prototype._clickSwitchs_sounds_userVolume = function (delta) {
+      var value = Math.round(Math.sqrt(100 * core.musicStatus.userVolume));
+      if (value == 0 && delta < 0) return;
+      core.musicStatus.userVolume = core.clamp(
+        Math.pow(value + delta, 2) / 100,
+        0,
+        1
+      );
+      //audioContext 音效 不受designVolume 影响
+      if (core.musicStatus.gainNode != null)
+        core.musicStatus.gainNode.gain.value = core.musicStatus.userVolume;
+      soundPlayer.setVolume(
+        core.musicStatus.userVolume * core.musicStatus.designVolume
+      );
+      bgmController.setVolume(
+        core.musicStatus.userVolume * core.musicStatus.designVolume
+      );
+      core.setLocalStorage("userVolume", core.musicStatus.userVolume);
+      core.playSound("确定");
+      core.ui._drawSwitchs_sounds();
     };
   },
     "自定义常用事件": function () {
-    // editorBlocklyconfigPlus.js
-    // 自訂常見事件模板插件
-    // 本插件引用了通用函數插件(Utility.js)
-    // 適用樣板:2.10.3
-    // 請注意:
-    // 此插件對事件編輯器(editor_blocklyconfig)進行複寫,若還有其它針對事件編輯器做複寫的插件,請謹慎使用!
-    // 此插件對表格操作行為(editor_mode.doActionList)進行複寫,若還有其它對表格操作行為做複寫的插件,請謹慎使用!
-    // 使用方法:
-    // 現在在主頁下拉選單多了個常用事件模版,在那邊可以自由設定常用事件模板。
-    // 設定完後按F5刷新,再到事件編輯器看就有你設定好的常用事件模板了。
+	// editorBlocklyconfigPlus.js
+	// 自訂常見事件模板插件
+	// 本插件引用了通用函數插件(Utility.js)
+	// 適用樣板:2.10.3
+	// 請注意:
+	// 此插件對事件編輯器(editor_blocklyconfig)進行複寫,若還有其它針對事件編輯器做複寫的插件,請謹慎使用!
+	// 此插件對表格操作行為(editor_mode.doActionList)進行複寫,若還有其它對表格操作行為做複寫的插件,請謹慎使用!
+	// 使用方法:
+	// 現在在主頁下拉選單多了個常用事件模版,在那邊可以自由設定常用事件模板。
+	// 設定完後按F5刷新,再到事件編輯器看就有你設定好的常用事件模板了。
 
-    if (main.mode == "editor") {
-      //#region 配置表格初始化
-      let TableFileName = "project/table/CommonEventTemplate_comment.js";
-      let TableRow = `
+	if (main.mode == "editor") {
+		//#region 配置表格初始化
+		let TableFileName = "project/table/CommonEventTemplate_comment.js";
+		let TableRow = `
 				var CommonEventTemplate_comment = {"_type": "object",
 				"_data": {
 					"CommonEventTemplate": {
@@ -10851,241 +11696,221 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
 					}
 				}}
 			`;
-      if (!events_c12a15a8_c380_4b28_8144_256cba95f760.CommonEventTemplate) {
-        /**
-         * @type {{[EvnetName:actionParserJson]}}
-         */
-        events_c12a15a8_c380_4b28_8144_256cba95f760.CommonEventTemplate = {
-          检测音乐如果没有开启则系统提示开启: [
-            {
-              type: "if",
-              condition: "!core.musicStatus.bgmStatus",
-              true: [
-                "\t[系统提示]你当前音乐处于关闭状态,本塔开音乐游戏效果更佳",
-              ],
-              false: [],
-            },
-          ],
-          仿新新魔塔一次性商人: [
-            {
-              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: "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: "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.webp",
-                  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"],
-            },
-          ],
-          多阶段Boss战斗: [
-            {
-              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]我一定会回来的!"],
-                },
-              ],
-            },
-          ],
-        };
-      }
-      //#endregion
+		if (!events_c12a15a8_c380_4b28_8144_256cba95f760.CommonEventTemplate) {
+			/**
+			 * @type {{[EvnetName:actionParserJson]}}
+			 */
+			events_c12a15a8_c380_4b28_8144_256cba95f760.CommonEventTemplate = {
+				检测音乐如果没有开启则系统提示开启: [{
+					type: "if",
+					condition: "!core.musicStatus.bgmStatus",
+					true: [
+						"\t[系统提示]你当前音乐处于关闭状态,本塔开音乐游戏效果更佳",
+					],
+					false: [],
+				}, ],
+				仿新新魔塔一次性商人: [{
+					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: "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: "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.webp",
+								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"],
+					},
+				],
+				多阶段Boss战斗: [{
+						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]我一定会回来的!"],
+							},
+						],
+					},
+				],
+			};
+		}
+		//#endregion
 
-      // 新增模板選項
-      let editModeSelect = document.getElementById("editModeSelect");
-      let newEditModeOption = document.createElement("option");
-      newEditModeOption.value = "CommonEventTemplate";
-      newEditModeOption.text = "常見事件模板";
-      editModeSelect.add(newEditModeOption);
+		// 新增模板選項
+		let editModeSelect = document.getElementById("editModeSelect");
+		let newEditModeOption = document.createElement("option");
+		newEditModeOption.value = "CommonEventTemplate";
+		newEditModeOption.text = "常見事件模板";
+		editModeSelect.add(newEditModeOption);
 
-      //檢查可用的編輯模板ID
-      let leftIDNumber = 11 - 1;
-      let ExistLeftElement = document.querySelector(".main");
-      while (ExistLeftElement) {
-        leftIDNumber++;
-        ExistLeftElement = document.getElementById(`left${leftIDNumber}`);
-      }
+		//檢查可用的編輯模板ID
+		let leftIDNumber = 11 - 1;
+		let ExistLeftElement = document.querySelector(".main");
+		while (ExistLeftElement) {
+			leftIDNumber++;
+			ExistLeftElement = document.getElementById(`left${leftIDNumber}`);
+		}
 
-      //新增編輯模板
-      let MainDiv = document.querySelector(".main");
+		//新增編輯模板
+		let MainDiv = document.querySelector(".main");
 
-      let CommonEventTemplateMainDiv = document.createElement("div");
-      CommonEventTemplateMainDiv.id = `left${leftIDNumber}`;
-      CommonEventTemplateMainDiv.className = "leftTab";
-      CommonEventTemplateMainDiv.style.zIndex = "-1";
-      CommonEventTemplateMainDiv.style.opacity = "0";
+		let CommonEventTemplateMainDiv = document.createElement("div");
+		CommonEventTemplateMainDiv.id = `left${leftIDNumber}`;
+		CommonEventTemplateMainDiv.className = "leftTab";
+		CommonEventTemplateMainDiv.style.zIndex = "-1";
+		CommonEventTemplateMainDiv.style.opacity = "0";
 
-      CommonEventTemplateMainDiv.innerHTML = `
+		CommonEventTemplateMainDiv.innerHTML = `
 				<!-- CommonEventTemplate -->
 				<h3 class="leftTabHeader">
 				常見事件模板  
@@ -11108,980 +11933,968 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
 					</div>
 				</div>
 			`;
-      MainDiv.appendChild(CommonEventTemplateMainDiv);
+		MainDiv.appendChild(CommonEventTemplateMainDiv);
 
-      (async function () {
-        //等待編輯器初始化
-        while (!editor_mode.ids) {
-          await Sleep(100);
-        }
-        //新增編輯模板ID
-        editor_mode.ids["CommonEventTemplate"] = `left${leftIDNumber}`;
-        editor_mode.init_dom_ids();
-        //切換至常見事件模板
-        editor_mode.CommonEventTemplate = function (callback) {
-          var objs = [];
-          editor.file.editCommonEventTemplate([], function (objs_) {
-            objs = objs_;
-            //console.log(objs_)
-          });
-          //只查询不修改时,内部实现不是异步的,所以可以这么写
-          var tableinfo = editor.table.objToTable(objs[0], objs[1]);
-          document.getElementById(
-            "table_298572d8-93dd-4c6e-a278-6a7d49831e3a"
-          ).innerHTML = tableinfo.HTML;
-          tableinfo.listen(tableinfo.guids);
-          if (Boolean(callback)) callback();
-        };
+		(async function () {
+			//等待編輯器初始化
+			while (!editor_mode.ids) {
+				await Sleep(100);
+			}
+			//新增編輯模板ID
+			editor_mode.ids["CommonEventTemplate"] = `left${leftIDNumber}`;
+			editor_mode.init_dom_ids();
+			//切換至常見事件模板
+			editor_mode.CommonEventTemplate = function (callback) {
+				var objs = [];
+				editor.file.editCommonEventTemplate([], function (objs_) {
+					objs = objs_;
+					//console.log(objs_)
+				});
+				//只查询不修改时,内部实现不是异步的,所以可以这么写
+				var tableinfo = editor.table.objToTable(objs[0], objs[1]);
+				document.getElementById(
+					"table_298572d8-93dd-4c6e-a278-6a7d49831e3a"
+				).innerHTML = tableinfo.HTML;
+				tableinfo.listen(tableinfo.guids);
+				if (Boolean(callback)) callback();
+			};
 
-        //檢查配置表格存在
-        let TableRowExist = null;
-        fs.readFile(TableFileName, "base64", function (err, data) {
-          if (err) {
-            console.log(`察覺常見事件模板配置表格不存在,原因:${err}`);
-            console.log("新建一個常見事件模板配置表格。");
-            TableRowExist = false;
-          } else {
-            TableRowExist = true;
-          }
-        });
-        //等待配置表格載入完畢(最多0.3秒,超過則視為失敗)
-        for (let i = 0; i < 3; i++) {
-          if (TableRowExist == null) {
-            await Sleep(100);
-          }
-        }
-        //配置表格初始化
-        if (TableRowExist != true) {
-          fs.mkdir("project/table", function (err, data) {
-            if (err) throw `常見事件模板配置表格目錄初始化失敗,原因:${err}`;
-          });
-          fs.writeFile(
-            TableFileName,
-            editor.util.encode64(TableRow || ""),
-            "base64",
-            function (err, data) {
-              if (err) throw `常見事件模板配置表格文件初始化失敗,原因:${err}`;
-            }
-          );
-        }
-        //載入配置表格
-        //editor.file.loadCommentjs(callback);
-        (function () {
-          var key = "CommonEventTemplate_comment";
-          var script = document.createElement("script");
-          script.src = "project/table/" + key + ".js";
-          document.body.appendChild(script);
-          script.onload = function () {
-            editor.file[key] = eval(key.replace(".", "_"));
-            var loaded = Boolean(editor.file[key]);
-          };
-        })();
-        //按下配置表格
-        editor_multi.CommonEventTemplateEditCommentJs = function (mod) {
-          editor_multi.lintAutocomplete = true;
-          editor_multi.setLint();
-          editor_multi.importFile(TableFileName);
-        };
+			//檢查配置表格存在
+			let TableRowExist = null;
+			fs.readFile(TableFileName, "base64", function (err, data) {
+				if (err) {
+					console.log(`察覺常見事件模板配置表格不存在,原因:${err}`);
+					console.log("新建一個常見事件模板配置表格。");
+					TableRowExist = false;
+				} else {
+					TableRowExist = true;
+				}
+			});
+			//等待配置表格載入完畢(最多0.3秒,超過則視為失敗)
+			for (let i = 0; i < 3; i++) {
+				if (TableRowExist == null) {
+					await Sleep(100);
+				}
+			}
+			//配置表格初始化
+			if (TableRowExist != true) {
+				fs.mkdir("project/table", function (err, data) {
+					if (err) throw `常見事件模板配置表格目錄初始化失敗,原因:${err}`;
+				});
+				fs.writeFile(
+					TableFileName,
+					editor.util.encode64(TableRow || ""),
+					"base64",
+					function (err, data) {
+						if (err) throw `常見事件模板配置表格文件初始化失敗,原因:${err}`;
+					}
+				);
+			}
+			//載入配置表格
+			//editor.file.loadCommentjs(callback);
+			(function () {
+				var key = "CommonEventTemplate_comment";
+				var script = document.createElement("script");
+				script.src = "project/table/" + key + ".js";
+				document.body.appendChild(script);
+				script.onload = function () {
+					editor.file[key] = eval(key.replace(".", "_"));
+					var loaded = Boolean(editor.file[key]);
+				};
+			})();
+			//按下配置表格
+			editor_multi.CommonEventTemplateEditCommentJs = function (mod) {
+				editor_multi.lintAutocomplete = true;
+				editor_multi.setLint();
+				editor_multi.importFile(TableFileName);
+			};
 
-        //定義表格操作行為
-        editor_mode.OriginDoActionList = editor_mode.doActionList;
-        editor_mode.doActionList = function (mode, actionList, callback) {
-          if (editor_mode.mode == "CommonEventTemplate") {
-            if (actionList.length == 0) return;
-            printf("修改中...");
-            var cb = function (objs_) {
-              if (objs_.slice(-1)[0] != null) {
-                printe(objs_.slice(-1)[0]);
-                throw objs_.slice(-1)[0];
-              }
-              var str = "修改成功!";
-              if (
-                data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.name ==
-                "template"
-              )
-                str += "<br/>请注意:全塔属性的name尚未修改,请及时予以设置。";
-              printf(str);
-              if (callback) callback();
-            };
-            editor.file.editCommonEventTemplate(actionList, cb);
-          } else {
-            editor_mode.OriginDoActionList(mode, actionList, callback);
-          }
-        };
-        //添加表格列
-        editor.table.CommonEventTemplateAddFunc = function () {
-          let obj = events_c12a15a8_c380_4b28_8144_256cba95f760;
+			//定義表格操作行為
+			editor_mode.OriginDoActionList = editor_mode.doActionList;
+			editor_mode.doActionList = function (mode, actionList, callback) {
+				if (editor_mode.mode == "CommonEventTemplate") {
+					if (actionList.length == 0) return;
+					printf("修改中...");
+					var cb = function (objs_) {
+						if (objs_.slice(-1)[0] != null) {
+							printe(objs_.slice(-1)[0]);
+							throw objs_.slice(-1)[0];
+						}
+						var str = "修改成功!";
+						if (
+							data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.name ==
+							"template"
+						)
+							str += "<br/>请注意:全塔属性的name尚未修改,请及时予以设置。";
+						printf(str);
+						if (callback) callback();
+					};
+					editor.file.editCommonEventTemplate(actionList, cb);
+				} else {
+					editor_mode.OriginDoActionList(mode, actionList, callback);
+				}
+			};
+			//添加表格列
+			editor.table.CommonEventTemplateAddFunc = function () {
+				let obj = events_c12a15a8_c380_4b28_8144_256cba95f760;
 
-          // 1.输入id
-          let newid = prompt("请输入新项的ID(支持中文)");
-          if (newid == null || newid.length == 0) {
-            return;
-          }
+				// 1.输入id
+				let newid = prompt("请输入新项的ID(支持中文)");
+				if (newid == null || newid.length == 0) {
+					return;
+				}
 
-          // 2.检查id是否符合规范或与已有id重复
-          var conflict = true;
-          var basefield = "".replace(/\[[^\[]*\]$/, "");
+				// 2.检查id是否符合规范或与已有id重复
+				var conflict = true;
+				var basefield = "".replace(/\[[^\[]*\]$/, "");
 
-          try {
-            var baseobj = eval("obj" + basefield);
-            conflict = newid in baseobj;
-          } catch (ee) {
-            // 理论上这里不会发生错误
-            printe(ee);
-            throw ee;
-          }
+				try {
+					var baseobj = eval("obj" + basefield);
+					conflict = newid in baseobj;
+				} catch (ee) {
+					// 理论上这里不会发生错误
+					printe(ee);
+					throw ee;
+				}
 
-          if (conflict) {
-            printe("id已存在, 请直接修改该项的值");
-            return;
-          }
+				if (conflict) {
+					printe("id已存在, 请直接修改该项的值");
+					return;
+				}
 
-          // 3.添加
-          editor_mode.addAction(["add", basefield + "['" + newid + "']", null]);
-          editor_mode.onmode("save", function () {
-            printf("添加成功,刷新后生效;也可以继续新增其他项目。");
-          }); //自动保存 删掉此行的话点保存按钮才会保存
-        };
-        //對表格的存讀
-        editor.file.editCommonEventTemplate = function (actionList, callback) {
-          /*actionList:[
+				// 3.添加
+				editor_mode.addAction(["add", basefield + "['" + newid + "']", null]);
+				editor_mode.onmode("save", function () {
+					printf("添加成功,刷新后生效;也可以继续新增其他项目。");
+				}); //自动保存 删掉此行的话点保存按钮才会保存
+			};
+			//對表格的存讀
+			editor.file.editCommonEventTemplate = function (actionList, callback) {
+				/*actionList:[
 				  ["change","['test']",['123']],
 				]
 				为[]时只查询不修改
 				*/
-          var data_obj =
-            events_c12a15a8_c380_4b28_8144_256cba95f760.CommonEventTemplate;
-          checkCallback(callback);
-          if (isset(actionList) && actionList.length > 0) {
-            actionList.forEach(function (value) {
-              value[1] = "['CommonEventTemplate']" + value[1];
-            });
-            editor.file.saveSetting("events", actionList, function (err) {
-              callback([err]);
-            });
-          } else {
-            callback([
-              Object.assign({}, data_obj),
-              editor.file.CommonEventTemplate_comment._data.CommonEventTemplate,
-              null,
-            ]);
-          }
-        };
-      })();
+				var data_obj =
+					events_c12a15a8_c380_4b28_8144_256cba95f760.CommonEventTemplate;
+				checkCallback(callback);
+				if (isset(actionList) && actionList.length > 0) {
+					actionList.forEach(function (value) {
+						value[1] = "['CommonEventTemplate']" + value[1];
+					});
+					editor.file.saveSetting("events", actionList, function (err) {
+						callback([err]);
+					});
+				} else {
+					callback([
+						Object.assign({}, data_obj),
+						editor.file.CommonEventTemplate_comment._data.CommonEventTemplate,
+						null,
+					]);
+				}
+			};
+		})();
 
-      //複寫事件編輯器(editor_blocklyconfig)
-      editor_blocklyconfig = function () {
-        // start mark sfergsvae
+		//複寫事件編輯器(editor_blocklyconfig)
+		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 = {
-            入口方块: [
-              '<label text="入口方块会根据当前类型在此数组中筛选,具体控制在editor_blockly.entranceCategoryCallback中"></label>',
-              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.webp",
-                    x: 0,
-                    y: 0,
-                    canvas: "bg",
-                  },
-                ],
-                "floorImage"
-              ),
-              MotaActionFunctions.actionParser.parse(
-                {
-                  time: 160,
-                  openSound: "door.opus",
-                  closeSound: "door.opus",
-                  keys: { yellowKey: 1, orangeKey: 1 },
-                },
-                "doorInfo"
-              ),
-              MotaActionBlocks["faceIds_m"].xmlText(),
-              MotaActionBlocks["mainStyle_m"].xmlText(),
-              MotaActionFunctions.actionParser.parse(
-                {
-                  背景音乐: "bgm.opus",
-                  确定: "confirm.opus",
-                  攻击: "attack.opus",
-                  背景图: "bg.webp",
-                  领域: "zone",
-                  文件名: "file.jpg",
-                },
-                "nameMap"
-              ),
-              MotaActionFunctions.actionParser.parse(
-                [{ name: "hero.webp", width: 32, height: 32, prefix: "hero_" }],
-                "splitImages"
-              ),
-            ],
-            显示文字: [
-              MotaActionBlocks["text_0_s"].xmlText(),
-              MotaActionBlocks["text_1_s"].xmlText(),
-              MotaActionFunctions.actionParser.parseList(
-                "\t[小妖精,fairy]\f[fairy.webp,0,0]欢迎使用事件编辑器(双击方块可直接预览)"
-              ),
-              MotaActionBlocks["over_s"].xmlText(),
-              MotaActionFunctions.actionParser.parseList([
-                {
-                  type: "overlist",
-                  image: "bg_5043.webp",
-                  memory: false,
-                  hidetime: 30,
-                  list: [
-                    {
-                      text: "",
-                      sound: "",
-                      time: 50,
-                      textColor: "255,255,255,1",
-                      boldColor: "0,0,0,1",
-                      font: "bold 48px Verdana",
-                      frame: 0,
-                    },
-                  ],
-                },
-              ]),
-              MotaActionFunctions.actionParser.parseList([
-                {
-                  type: "cgtext",
-                  bg: "bg_5043.webp",
-                  memory: false,
-                  WindowSkin: false,
-                  head: { name: "face_050445.webp", px: -300 },
-                  name: "菲奥奈",
-                  time: 0,
-                  wait: 2000,
-                  sound: "",
-                  text: "这句话显示在对话框内",
-                  bodyList: [
-                    { name: "tati_050145a.webp", px: 100, filter: false },
-                  ],
-                },
-              ]),
-              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["addPop_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(),
-              MotaActionBlocks["changebg_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["op_s"].xmlText(),
-              MotaActionBlocks["drawWarning_s"].xmlText(),
-              MotaActionBlocks["changeMouse_s"].xmlText(),
-              MotaActionBlocks["removeMouse_s"].xmlText(),
-              MotaActionBlocks["vibrate_s"].xmlText(),
-              MotaActionBlocks["setanimate_s"].xmlText(),
-              MotaActionBlocks["deleteanimate_s"].xmlText(),
-              MotaActionBlocks["playanimate_s"].xmlText(),
-              MotaActionBlocks["clearanimate_s"].xmlText(),
-              MotaActionBlocks["animate_s"].xmlText(),
-              MotaActionBlocks["animate_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["animationDrawable_s"].xmlText(),
-              MotaActionBlocks["setanimate_s"].xmlText(),
-              MotaActionBlocks["deleteanimate_s"].xmlText(),
-              MotaActionBlocks["playanimate_s"].xmlText(),
-              MotaActionBlocks["clearanimate_s"].xmlText(),
-              MotaActionBlocks["showImage_s"].xmlText(),
-              MotaActionBlocks["showImage_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["playStereo_s"].xmlText(),
-              MotaActionBlocks["moveStereo_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(),
-            ],
-            常见事件模板: [
-              '<label text="此处只是占位符,实际定义在#region 動態常見事件模板"></label>',
-            ],
-            最近使用事件: [
-              '<label text="此处只是占位符,实际定义在editor_blockly.searchBlockCategoryCallback中"></label>',
-            ],
-          };
-          var toolboxgap = '<sep gap="5"></sep>';
-          //xml_text = MotaActionFunctions.actionParser.parse(obj,type||'event')
-          //MotaActionBlocks['idString_e'].xmlText()
+					var toolboxObj = {
+						入口方块: [
+							'<label text="入口方块会根据当前类型在此数组中筛选,具体控制在editor_blockly.entranceCategoryCallback中"></label>',
+							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.webp",
+									x: 0,
+									y: 0,
+									canvas: "bg",
+								}, ],
+								"floorImage"
+							),
+							MotaActionFunctions.actionParser.parse({
+									time: 160,
+									openSound: "door.opus",
+									closeSound: "door.opus",
+									keys: { yellowKey: 1, orangeKey: 1 },
+								},
+								"doorInfo"
+							),
+							MotaActionBlocks["faceIds_m"].xmlText(),
+							MotaActionBlocks["mainStyle_m"].xmlText(),
+							MotaActionFunctions.actionParser.parse({
+									背景音乐: "bgm.opus",
+									确定: "confirm.opus",
+									攻击: "attack.opus",
+									背景图: "bg.webp",
+									领域: "zone",
+									文件名: "file.jpg",
+								},
+								"nameMap"
+							),
+							MotaActionFunctions.actionParser.parse(
+								[{ name: "hero.webp", width: 32, height: 32, prefix: "hero_" }],
+								"splitImages"
+							),
+						],
+						显示文字: [
+							MotaActionBlocks["text_0_s"].xmlText(),
+							MotaActionBlocks["text_1_s"].xmlText(),
+							MotaActionFunctions.actionParser.parseList(
+								"\t[小妖精,fairy]\f[fairy.webp,0,0]欢迎使用事件编辑器(双击方块可直接预览)"
+							),
+							MotaActionBlocks["over_s"].xmlText(),
+							MotaActionFunctions.actionParser.parseList([{
+								type: "overlist",
+								image: "bg_5043.webp",
+								memory: false,
+								hidetime: 30,
+								list: [{
+									text: "",
+									sound: "",
+									time: 50,
+									textColor: "255,255,255,1",
+									boldColor: "0,0,0,1",
+									font: "bold 48px Verdana",
+									frame: 0,
+								}, ],
+							}, ]),
+							MotaActionBlocks["cgtextList_s"].xmlText(),
+							MotaActionFunctions.actionParser.parseList([{
+								type: "cgtext",
+								bg: "bg_5043.webp",
+								memory: false,
+								WindowSkin: false,
+								index: 0,
+								head: { name: "face_050445.webp", px: -300 },
 
-          //#region 動態常見事件模板
-          let CommonEventTemplateHTML = [];
+								time: 0,
+								wait: 2000,
+								sound: "",
 
-          for (let commonEventName in events_c12a15a8_c380_4b28_8144_256cba95f760.CommonEventTemplate) {
-            if (
-              events_c12a15a8_c380_4b28_8144_256cba95f760.CommonEventTemplate.hasOwnProperty(
-                commonEventName
-              )
-            ) {
-              let actionParserJson = Array.from(
-                events_c12a15a8_c380_4b28_8144_256cba95f760.CommonEventTemplate[
-                  commonEventName
-                ] ?? []
-              );
+								bodyList: [
+									{ name: "tati_050145a.webp", px: 100, filter: false },
+								],
+							}, ]),
+							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["addPop_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(),
+							MotaActionBlocks["setq_s"].xmlText(),
+							MotaActionBlocks["setcgs_s"].xmlText(),
+							MotaActionBlocks["setmusics_s"].xmlText(),
+							MotaActionBlocks["changebg_s"].xmlText(),
+							MotaActionBlocks["drawbackground_s"].xmlText(),
+							MotaActionBlocks["clearbackground_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["op_s"].xmlText(),
+							MotaActionBlocks["drawWarning_s"].xmlText(),
+							MotaActionBlocks["changeMouse_s"].xmlText(),
+							MotaActionBlocks["removeMouse_s"].xmlText(),
+							MotaActionBlocks["vibrate_s"].xmlText(),
+							MotaActionBlocks["animate_s"].xmlText(),
+							MotaActionBlocks["animate_1_s"].xmlText(),
+							MotaActionBlocks["animateResize_s"].xmlText(),
+							MotaActionBlocks["moveAnimate_s"].xmlText(),
+							MotaActionBlocks["pauseAnimate_s"].xmlText(),
+							MotaActionBlocks["remuseAnimate_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["animationDrawable_s"].xmlText(),
+							MotaActionBlocks["setanimate_s"].xmlText(),
+							MotaActionBlocks["deleteanimate_s"].xmlText(),
+							MotaActionBlocks["playanimate_s"].xmlText(),
+							MotaActionBlocks["clearanimate_s"].xmlText(),
+							MotaActionBlocks["animateloop_s"].xmlText(),
+							MotaActionBlocks["animatereverse_s"].xmlText(),
+							MotaActionBlocks["animatepause_s"].xmlText(),
+							MotaActionBlocks["animatemove_s"].xmlText(),
+							MotaActionBlocks["introAndLoop_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(),
+						],
+						常见事件模板: [
+							'<label text="此处只是占位符,实际定义在#region 動態常見事件模板"></label>',
+						],
+						最近使用事件: [
+							'<label text="此处只是占位符,实际定义在editor_blockly.searchBlockCategoryCallback中"></label>',
+						],
+					};
+					var toolboxgap = '<sep gap="5"></sep>';
+					//xml_text = MotaActionFunctions.actionParser.parse(obj,type||'event')
+					//MotaActionBlocks['idString_e'].xmlText()
 
-              let labelHTML = "";
-              let blockHTML = "";
+					//#region 動態常見事件模板
+					let CommonEventTemplateHTML = [];
 
-              labelHTML = `<label text="${commonEventName}"></label>`;
+					for (let commonEventName in events_c12a15a8_c380_4b28_8144_256cba95f760.CommonEventTemplate) {
+						if (
+							events_c12a15a8_c380_4b28_8144_256cba95f760.CommonEventTemplate.hasOwnProperty(
+								commonEventName
+							)
+						) {
+							let actionParserJson = Array.from(
+								events_c12a15a8_c380_4b28_8144_256cba95f760.CommonEventTemplate[
+									commonEventName
+								] ?? []
+							);
 
-              if (actionParserJson.length > 1) {
-                actionParserJson = {
-                  type: "if",
-                  condition: "true",
-                  true: actionParserJson,
-                };
-              } else if (actionParserJson.length < 1) {
-                actionParserJson = [
-                  "空的常用事件模板。\n請在主頁下拉菜單中,選擇常用事件模板,進行編輯。\n編輯後需按F5刷新事件編輯器。",
-                ];
-              }
-              blockHTML =
-                MotaActionFunctions.actionParser.parseList(actionParserJson);
+							let labelHTML = "";
+							let blockHTML = "";
 
-              CommonEventTemplateHTML.push(labelHTML);
-              CommonEventTemplateHTML.push(blockHTML);
-            }
-          }
+							labelHTML = `<label text="${commonEventName}"></label>`;
 
-          toolboxObj["常见事件模板"] = CommonEventTemplateHTML;
-          //#endregion
+							if (actionParserJson.length > 1) {
+								actionParserJson = {
+									type: "if",
+									condition: "true",
+									true: actionParserJson,
+								};
+							} else if (actionParserJson.length < 1) {
+								actionParserJson = [
+									"空的常用事件模板。\n請在主頁下拉菜單中,選擇常用事件模板,進行編輯。\n編輯後需按F5刷新事件編輯器。",
+								];
+							}
+							blockHTML =
+								MotaActionFunctions.actionParser.parseList(actionParserJson);
 
-          for (var name in toolboxObj) {
-            var custom = null;
-            if (name == "最近使用事件") custom = "searchBlockCategory";
-            if (name == "入口方块") custom = "entranceCategory";
-            getCategory(name, custom).innerHTML =
-              toolboxObj[name].join(toolboxgap);
-          }
+							CommonEventTemplateHTML.push(labelHTML);
+							CommonEventTemplateHTML.push(blockHTML);
+						}
+					}
 
-          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,
-          });
+					toolboxObj["常见事件模板"] = CommonEventTemplateHTML;
+					//#endregion
 
-          editor_blockly.isCommonEntry = function () {
-            var commonEntries = [
-              "beforeBattle",
-              "afterBattle",
-              "afterOpenDoor",
-              "firstArrive",
-              "eachArrive",
-              "commonEvent",
-              "item",
-            ];
-            return commonEntries.indexOf(editor_blockly.entryType) >= 0;
-          };
+					for (var name in toolboxObj) {
+						var custom = null;
+						if (name == "最近使用事件") custom = "searchBlockCategory";
+						if (name == "入口方块") custom = "entranceCategory";
+						getCategory(name, custom).innerHTML =
+							toolboxObj[name].join(toolboxgap);
+					}
 
-          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('<block type="' + eventType + '">').exec(blockText)
-              ) {
-                var block = Blockly.Xml.textToDom(
-                  "<xml>" + blockText + "</xml>"
-                ).firstChild;
-                block.setAttribute("gap", 5);
-                xmlList.push(block);
-              }
-            }
-            return xmlList;
-          };
+					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,
+					});
 
-          workspace.registerToolboxCategoryCallback(
-            "entranceCategory",
-            editor_blockly.entranceCategoryCallback
-          );
+					editor_blockly.isCommonEntry = function () {
+						var commonEntries = [
+							"beforeBattle",
+							"afterBattle",
+							"afterOpenDoor",
+							"firstArrive",
+							"eachArrive",
+							"commonEvent",
+							"item",
+						];
+						return commonEntries.indexOf(editor_blockly.entryType) >= 0;
+					};
 
-          editor_blockly.searchBlockCategoryCallback = function (workspace) {
-            var xmlList = [];
-            var labels = editor_blockly.searchBlock();
-            for (var i = 0; i < labels.length; i++) {
-              var blockText =
-                "<xml>" + MotaActionBlocks[labels[i]].xmlText() + "</xml>";
-              var block = Blockly.Xml.textToDom(blockText).firstChild;
-              block.setAttribute("gap", 5);
-              xmlList.push(block);
-            }
-            return xmlList;
-          };
+					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('<block type="' + eventType + '">').exec(blockText)
+							) {
+								var block = Blockly.Xml.textToDom(
+									"<xml>" + blockText + "</xml>"
+								).firstChild;
+								block.setAttribute("gap", 5);
+								xmlList.push(block);
+							}
+						}
+						return xmlList;
+					};
 
-          workspace.registerToolboxCategoryCallback(
-            "searchBlockCategory",
-            editor_blockly.searchBlockCategoryCallback
-          );
+					workspace.registerToolboxCategoryCallback(
+						"entranceCategory",
+						editor_blockly.entranceCategoryCallback
+					);
 
-          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);
+					editor_blockly.searchBlockCategoryCallback = function (workspace) {
+						var xmlList = [];
+						var labels = editor_blockly.searchBlock();
+						for (var i = 0; i < labels.length; i++) {
+							var blockText =
+								"<xml>" + MotaActionBlocks[labels[i]].xmlText() + "</xml>";
+							var block = Blockly.Xml.textToDom(blockText).firstChild;
+							block.setAttribute("gap", 5);
+							xmlList.push(block);
+						}
+						return xmlList;
+					};
 
-          //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);
-          };
+					workspace.registerToolboxCategoryCallback(
+						"searchBlockCategory",
+						editor_blockly.searchBlockCategoryCallback
+					);
 
-          var doubleClickCheck = [[0, "abc"]];
+					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);
 
-          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);
-            }
-          }
+					//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);
+					};
 
-          workspace.addChangeListener(omitedcheckUpdateFunction);
+					var doubleClickCheck = [
+						[0, "abc"]
+					];
 
-          workspace.addChangeListener(Blockly.Events.disableOrphans);
+					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);
+						}
+					}
 
-          editor_blockly.workspace = workspace;
+					workspace.addChangeListener(omitedcheckUpdateFunction);
 
-          MotaActionFunctions.workspace = function () {
-            return editor_blockly.workspace;
-          };
+					workspace.addChangeListener(Blockly.Events.disableOrphans);
 
-          // 因为在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("<comment>");
-              xmlText.push(comment);
-              xmlText.push("</comment>");
-            }
-            var next = inputs[rule.args.length];
-            if (next) {
-              //next
-              xmlText.push("<next>");
-              xmlText.push(next);
-              xmlText.push("</next>");
-            }
-            xmlText.push("</" + blocktext + ">");
-            return xmlText.join("");
-          };
-        })();
+					editor_blockly.workspace = workspace;
 
-        // end mark sfergsvae
-      }
-        .toString()
-        .split("// start mark sfergsvae")[1]
-        .split("// end mark sfergsvae")[0];
-    }
-  },
+					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("<comment>");
+							xmlText.push(comment);
+							xmlText.push("</comment>");
+						}
+						var next = inputs[rule.args.length];
+						if (next) {
+							//next
+							xmlText.push("<next>");
+							xmlText.push(next);
+							xmlText.push("</next>");
+						}
+						xmlText.push("</" + blocktext + ">");
+						return xmlText.join("");
+					};
+				})();
+
+				// end mark sfergsvae
+			}
+			.toString()
+			.split("// start mark sfergsvae")[1]
+			.split("// end mark sfergsvae")[0];
+	}
+},
     "夹击激光动画": function () {
     function createCanvas(name, zIndex) {
       if (!name) return;
@@ -12461,2035 +13274,2079 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
     };
   },
     "小地图": function () {
-    // 在此增加新插件
-    // ----- 不可自定义 杂七杂八的变量
-    /** @type {{[x: string]: BFSResult}} */
-    let mapCache = {}; // 地图缓存
-    let drawCache = {}; // 绘制信息缓存
-    let status = "none"; // 当前的绘制状态
-    /** @type {{[x: string]: Sprite}} */
-    let sprites = {}; // 当前所有的sprite
-    /** @type {{[x: string]: Sprite}} */
-    let canDrag = {}; // 可以拖拽的sprite
-    /** @type {{[x: string]: Button}} */
-    let areaSprite = {}; // 区域列表对应的sprite
-    let clicking = false; // 是否正在点击,用于拖拽判定
-    let drawingMap = ""; // 正在绘制的中心楼层
-    let nowScale = 0; // 当前绘制的放缩比例
-    let lastTouch = {}; // 上一次的单点点击信息
-    let lastLength = 0; // 手机端缩放时上一次的两指间距离
-    let nowDepth = 0; // 当前的遍历深度
-    let drawedThumbnail = {}; // 已经绘制过的缩略图
-    let moved = false; // 鼠标按下后是否移动了
-    let noBorder = false; // 是否是无边框拼接模式
-    let lastScale = 0; // 上一次缩放,用于优化缩略图绘制
-    let areaPage = 0; // 区域显示的当前页数
-    let nowArea = 0; // 当前区域index
-    let selecting = ""; // 选择时当前正在选择的地图
+	// 在此增加新插件
+	// ----- 不可自定义 杂七杂八的变量
+	/** @type {{[x: string]: BFSResult}} */
+	let mapCache = {}; // 地图缓存
+	let drawCache = {}; // 绘制信息缓存
+	let status = "none"; // 当前的绘制状态
+	/** @type {{[x: string]: Sprite}} */
+	let sprites = {}; // 当前所有的sprite
+	/** @type {{[x: string]: Sprite}} */
+	let canDrag = {}; // 可以拖拽的sprite
+	/** @type {{[x: string]: Button}} */
+	let areaSprite = {}; // 区域列表对应的sprite
+	let clicking = false; // 是否正在点击,用于拖拽判定
+	let drawingMap = ""; // 正在绘制的中心楼层
+	let nowScale = 0; // 当前绘制的放缩比例
+	let lastTouch = {}; // 上一次的单点点击信息
+	let lastLength = 0; // 手机端缩放时上一次的两指间距离
+	let nowDepth = 0; // 当前的遍历深度
+	let drawedThumbnail = {}; // 已经绘制过的缩略图
+	let moved = false; // 鼠标按下后是否移动了
+	let noBorder = false; // 是否是无边框拼接模式
+	let lastScale = 0; // 上一次缩放,用于优化缩略图绘制
+	let areaPage = 0; // 区域显示的当前页数
+	let nowArea = 0; // 当前区域index
+	let selecting = ""; // 选择时当前正在选择的地图
 
-    // ---- 不可自定义,常量
-    /** @type {Area} */
-    let areas = []; // 区域信息
-    const perPage = Math.floor((core._PY_ - 60) / 30); // 区域的每页显示数量
+	// ---- 不可自定义,常量
+	/** @type {Area} */
+	let areas = []; // 区域信息
+	const perPage = Math.floor((core._PY_ - 60) / 30); // 区域的每页显示数量
 
-    // ---- 可自定义,默认的切换地图的图块id
-    const defaultChange = {
-      left: "leftPortal", // 左箭头
-      up: "upPortal", // 上箭头
-      right: "rightPortal", // 右箭头
-      down: "downPortal", // 下箭头
-      upFloor: "upFloor", // 上楼
-      downFloor: "downFloor", // 下楼
-    };
-    // ---- 可自定义,默认数值
-    const defaultValue = {
-      font: "Verdana", // 默认字体
-      scale: 60, // 默认地图缩放比例
-      depth: Infinity, // 默认的遍历深度
-    };
+	// ---- 可自定义,默认的切换地图的图块id
+	const defaultChange = {
+		left: "leftPortal", // 左箭头
+		up: "upPortal", // 上箭头
+		right: "rightPortal", // 右箭头
+		down: "downPortal", // 下箭头
+		upFloor: "upFloor", // 上楼
+		downFloor: "downFloor", // 下楼
+	};
+	// ---- 可自定义,默认数值
+	const defaultValue = {
+		font: "Verdana", // 默认字体
+		scale: 60, // 默认地图缩放比例
+		depth: Infinity, // 默认的遍历深度
+	};
 
-    // ---- 不可自定义,计算数据
-    const dirData = {
-      up: [1, 0],
-      down: [-1, 0],
-      left: [0, 1],
-      right: [0, -1],
-      upFloor: [0, 0],
-      downFloor: [0, 0],
-    };
-    let ignoreEnemies = (this.ignoreEnemies = []);
+	// ---- 不可自定义,计算数据
+	const dirData = {
+		up: [1, 0],
+		down: [-1, 0],
+		left: [0, 1],
+		right: [0, -1],
+		upFloor: [0, 0],
+		downFloor: [0, 0],
+	};
+	let ignoreEnemies = (this.ignoreEnemies = []);
 
-    let allChangeEntries = Object.entries(defaultChange);
+	let allChangeEntries = Object.entries(defaultChange);
 
-    this.setq = function (floorId) {
-      core.setFlag("任务地点", floorId);
-    };
+	this.setq = function (floorId) {
+		core.setFlag("任务地点", floorId);
+	};
 
-    const reset = core.events.resetGame;
-    this.bfs = function () {
-      areas = [];
-      // 获取所有分区,使用异步函数,保证不会卡顿
-      // 原理是用bfs扫,将所有连在一起的地图合并成一个区域
-      (async function () {
-        let all = core.floorIds.slice();
-        const scanned = {
-          [all[0]]: true,
-        };
-        while (all.length > 0) {
-          let now = all.shift();
-          if (core.status.maps[now].deleted) continue;
-          if (!now) return;
-          await new Promise((res) => {
-            const result = core.plugin.bfsSearch(now, Infinity, true);
-            mapCache[`${now}_Infinity_false`] = result;
-            areas.push({ name: core.floors[now].areas, maps: result.order });
-            for (const map of result.order) {
-              scanned[map] = true;
-              all = all.filter((v) => !result.order.includes(v));
-            }
-            res("success");
-          }).then(() => {
-            core.setFlag("areas", areas);
-          });
-        }
-      })();
-    };
-    core.events.resetGame = function () {
-      reset.apply(core.events, arguments);
-      core.plugin.bfs();
-    };
-    /**
-     * 广度优先搜索搜索地图路径
-     * @param {string} center 中心地图的id
-     * @param {number} depth 搜索深度
-     * @param {boolean} noCache 是否不使用缓存
-     * @returns {BFSResult} 格式:floorId_x_y_dir: floorId_x_y
-     */
-    this.bfsSearch = function bfsSearch(center, depth, noCache) {
-      // 检查缓存
-      const id = `${center}_${depth}_${noBorder}`;
-      if (mapCache[id] && !noCache) return mapCache[id];
-      const used = {
-        [center]: true,
-      }; // 搜索过的楼层
-      let queue = [];
-      let stack = [center]; // 当前栈
-      let nowDepth = -1;
-      const mapOrder = [center]; // 遍历顺序,顺便还能记录遍历了哪些楼层
+	const reset = core.events.resetGame;
+	this.bfs = function () {
+		areas = [];
+		// 获取所有分区,使用异步函数,保证不会卡顿
+		// 原理是用bfs扫,将所有连在一起的地图合并成一个区域
+		(async function () {
+			let all = core.floorIds.slice();
+			const scanned = {
+				[all[0]]: true,
+			};
+			while (all.length > 0) {
+				let now = all.shift();
+				if (core.status.maps[now].deleted) continue;
+				if (!now) return;
+				await new Promise((res) => {
+					const result = core.plugin.bfsSearch(now, Infinity, true);
+					mapCache[`${now}_Infinity_false`] = result;
+					areas.push({ name: core.floors[now].areas, maps: result.order });
+					for (const map of result.order) {
+						scanned[map] = true;
+						all = all.filter((v) => !result.order.includes(v));
+					}
+					res("success");
+				}).then(() => {
+					core.setFlag("areas", areas);
+				});
+			}
+		})();
+	};
+	core.events.resetGame = function () {
+		reset.apply(core.events, arguments);
+		core.plugin.bfs();
+	};
+	/**
+	 * 广度优先搜索搜索地图路径
+	 * @param {string} center 中心地图的id
+	 * @param {number} depth 搜索深度
+	 * @param {boolean} noCache 是否不使用缓存
+	 * @returns {BFSResult} 格式:floorId_x_y_dir: floorId_x_y
+	 */
+	this.bfsSearch = function bfsSearch(center, depth, noCache) {
+		// 检查缓存
+		const id = `${center}_${depth}_${noBorder}`;
+		if (mapCache[id] && !noCache) return mapCache[id];
+		const used = {
+			[center]: true,
+		}; // 搜索过的楼层
+		let queue = [];
+		let stack = [center]; // 当前栈
+		let nowDepth = -1;
+		const mapOrder = [center]; // 遍历顺序,顺便还能记录遍历了哪些楼层
 
-      const res = {}; // 输出结果,格式:floorId_x_y_dir: floorId_x_y
-      const enemies = {};
-      const upOrDown = {};
-      const mapdir = {};
-      // 开始循环搜索
-      while (nowDepth < depth && stack.length > 0) {
-        const now = stack.shift(); // 当前id
-        if (core.status.maps[now].deleted) continue;
-        mapdir[now] = mapdir[now] ?? [];
-        const blocks = core.getMapBlocksObj(now); // 获取当前地图的每点的事件
-        enemies[now] = {};
-        // 遍历,获取可以传送的点,只检测绿点事件,因此可用红点事件进行传送来实现分区功能
-        for (const i in blocks) {
-          const block = blocks[i];
-          // 整合漏怪检测,所以要检测怪物
-          if (block.event.trigger === "battle") {
-            const id = block.event.id;
-            if (ignoreEnemies.includes(id)) continue;
-            else enemies[now][i] = block.event.id;
-            continue;
-          }
-          // 检测触发器是否为切换楼层,不是则直接跳过
-          if (block.event.trigger !== "changeFloor") continue;
-          const dirEntries = allChangeEntries.find(
-            (v) => v[1] === block.event.id
-          );
-          // 如果不是那六种传送门,直接忽略
-          if (!dirEntries) continue;
-          const data = block.event.data;
-          const dir = dirEntries[0];
-          const route = now + "_" + i.replace(",", "_") + "_" + dir;
-          const target = data.floorId + "_" + data.loc.join("_");
+		const res = {}; // 输出结果,格式:floorId_x_y_dir: floorId_x_y
+		const enemies = {};
+		const upOrDown = {};
+		const mapdir = {};
+		// 开始循环搜索
+		while (nowDepth < depth && stack.length > 0) {
+			const now = stack.shift(); // 当前id
+			if (core.status.maps[now].deleted) continue;
+			mapdir[now] = mapdir[now] ?? [];
+			const blocks = core.getMapBlocksObj(now); // 获取当前地图的每点的事件
+			enemies[now] = {};
+			// 遍历,获取可以传送的点,只检测绿点事件,因此可用红点事件进行传送来实现分区功能
+			for (const i in blocks) {
+				const block = blocks[i];
+				// 整合漏怪检测,所以要检测怪物
+				if (block.event.trigger === "battle") {
+					const id = block.event.id;
+					if (ignoreEnemies.includes(id)) continue;
+					else enemies[now][i] = block.event.id;
+					continue;
+				}
+				// 检测触发器是否为切换楼层,不是则直接跳过
+				if (block.event.trigger !== "changeFloor") continue;
+				const dirEntries = allChangeEntries.find(
+					(v) => v[1] === block.event.id
+				);
+				// 如果不是那六种传送门,直接忽略
+				if (!dirEntries) continue;
+				const data = block.event.data;
+				const dir = dirEntries[0];
+				const route = now + "_" + i.replace(",", "_") + "_" + dir;
+				const target = data.floorId + "_" + data.loc.join("_");
 
-          mapdir[now].push(dir);
-          if (!used[data.floorId]) {
-            if (dir === "upFloor" || dir === "downFloor") {
-              upOrDown[now] = upOrDown[id] ?? [];
-              upOrDown[now].push(dir);
-            }
+				mapdir[now].push(dir);
+				if (!used[data.floorId]) {
+					if (dir === "upFloor" || dir === "downFloor") {
+						upOrDown[now] = upOrDown[id] ?? [];
+						upOrDown[now].push(dir);
+					}
 
-            queue.push(data.floorId); // 没有搜索过,则加入栈中
-            mapOrder.push(data.floorId);
-            used[data.floorId] = true;
-          }
-          res[route] = target;
-        }
-        if (stack.length === 0) {
-          stack = queue;
-          queue = [];
-          nowDepth++;
-        }
-        if (stack.length === 0 && queue.length === 0) break;
-      }
-      return { res, order: mapOrder, enemies, upOrDown, mapdir };
-    };
-    /**
-     * 获取绘制信息
-     * @param {string?} center 中心地图id
-     * @param {number?} depth 搜索深度
-     * @param {boolean?} noCache 是否不使用缓存
-     * @returns {MapDrawInfo}
-     */
-    this.getMapDrawInfo = function (
-      center = core.status.floorId,
-      depth = defaultValue.depth,
-      noCache = false
-    ) {
-      nowDepth = depth;
-      drawingMap = center;
-      const id = `${center}_${depth}_${noBorder}`;
-      // 检查缓存
-      if (drawCache[id] && !noCache) return drawCache[id];
-      const map = core.plugin.bfsSearch(center, depth, noCache);
-      mapCache[id] = map;
-      const res = getDrawInfo(map.res, center, map.order);
-      res.upOrDown = map.upOrDown;
-      res.mapdir = map.mapdir;
-      drawCache[id] = res;
-      return res;
-    };
-    /**
-     * 提供地图的绘制信息
-     * @param {{[x: string]: string}} map 要绘制的地图,格式:floorId_x_y_dir: floorId_x_y
-     * @param {string} center 中心地图的id
-     * @param {string[]} order 遍历顺序
-     * @returns {MapDrawInfo} 地图的绘制信息
-     */
+					queue.push(data.floorId); // 没有搜索过,则加入栈中
+					mapOrder.push(data.floorId);
+					used[data.floorId] = true;
+				}
+				res[route] = target;
+			}
+			if (stack.length === 0) {
+				stack = queue;
+				queue = [];
+				nowDepth++;
+			}
+			if (stack.length === 0 && queue.length === 0) break;
+		}
+		return { res, order: mapOrder, enemies, upOrDown, mapdir };
+	};
+	/**
+	 * 获取绘制信息
+	 * @param {string?} center 中心地图id
+	 * @param {number?} depth 搜索深度
+	 * @param {boolean?} noCache 是否不使用缓存
+	 * @returns {MapDrawInfo}
+	 */
+	this.getMapDrawInfo = function (
+		center = core.status.floorId,
+		depth = defaultValue.depth,
+		noCache = false
+	) {
+		nowDepth = depth;
+		drawingMap = center;
+		const id = `${center}_${depth}_${noBorder}`;
+		// 检查缓存
+		if (drawCache[id] && !noCache) return drawCache[id];
+		const map = core.plugin.bfsSearch(center, depth, noCache);
+		mapCache[id] = map;
+		const res = getDrawInfo(map.res, center, map.order);
+		res.upOrDown = map.upOrDown;
+		res.mapdir = map.mapdir;
+		drawCache[id] = res;
+		return res;
+	};
+	/**
+	 * 提供地图的绘制信息
+	 * @param {{[x: string]: string}} map 要绘制的地图,格式:floorId_x_y_dir: floorId_x_y
+	 * @param {string} center 中心地图的id
+	 * @param {string[]} order 遍历顺序
+	 * @returns {MapDrawInfo} 地图的绘制信息
+	 */
 
-    function getDrawInfo(map, center, order) {
-      // 先根据地图id分类,从而确定每个地图连接哪些地图,同时方便处理
-      const links = {};
-      for (const i in map) {
-        const splitted = i.split("_");
-        const id = splitted[0];
-        if (!links[id]) links[id] = {};
-        links[id][i] = map[i];
-      }
+	function getDrawInfo(map, center, order) {
+		// 先根据地图id分类,从而确定每个地图连接哪些地图,同时方便处理
+		const links = {};
+		for (const i in map) {
+			const splitted = i.split("_");
+			const id = splitted[0];
+			if (!links[id]) links[id] = {};
+			links[id][i] = map[i];
+		}
 
-      // 分类完毕,然后根据连接点先计算出各个地图的坐标,然后再进行判断
-      const centerFloor = core.status.maps[center];
-      const visitedCenter = core.hasVisitedFloor(center);
-      const locs = {
-        // 格式:[中心x, 中心y, 宽, 高, 是否到达过]
-        [center]: [2, 2, 1, 1, visitedCenter],
-      };
-      // 可以上楼下楼的地图
-      const upOrDown = {};
-      for (const id of order) {
-        const now = links[id];
-        // 遍历每一个地图的连接情况
-        for (const from in now) {
-          const to = now[from];
-          // 先根据from to计算物理位置
-          const fromData = from.split("_"),
-            toData = to.split("_");
-          const dir = fromData[3];
-          if (dir === "upFloor" || dir === "downFloor") continue;
-          if (!defaultChange[dir]) continue;
-          const v = dirData[dir][1], // 竖直数值
-            h = dirData[dir][0], // 水平数值
-            ha = Math.abs(h),
-            va = Math.abs(v);
-          const ff = id, // fromFloorId
-            tf = toData[0]; // toFloorId
-          const fromFloor = core.status.maps[ff],
-            toFloor = core.status.maps[tf];
-          const fhw = Math.floor(fromFloor.width / 2), // fromFloorHalfWidth
-            fhh = Math.floor(fromFloor.height / 2),
-            thw = Math.floor(toFloor.width / 2),
-            thh = Math.floor(toFloor.height / 2);
-          const fLoc = locs[id] ?? [0, 0];
-          if (!locs[ff]) continue;
-          let x, y;
-          if (locs && locs[tf]) {
-            x = locs[tf][0];
-            y = locs[tf][1];
-          } else {
-            // 计算坐标,公式可以通过画图推断出
-            x = fLoc[0] - v;
-            y = fLoc[1] - h;
-          }
-          locs[tf] = locs[tf] ?? [x, y, 1, 1, core.hasVisitedFloor(tf)];
-        }
-      }
-      // 获取地图绘制需要的长宽
-      let width = 0,
-        height = 0;
-      let left, right, up, down;
-      for (const id in locs) {
-        const [x, y, w, h] = locs[id];
-        if (left === void 0) {
-          left = right = x;
-          up = down = y;
-        }
-        left = Math.min(x - 1, left);
-        right = Math.max(x + 1, right);
-        up = Math.min(y - 1, up);
-        down = Math.max(y + 1, down);
-      }
-      width = right - left;
-      height = down - up;
+		// 分类完毕,然后根据连接点先计算出各个地图的坐标,然后再进行判断
+		const centerFloor = core.status.maps[center];
+		const visitedCenter = core.hasVisitedFloor(center);
+		const locs = {
+			// 格式:[中心x, 中心y, 宽, 高, 是否到达过]
+			[center]: [2, 2, 1, 1, visitedCenter],
+		};
+		// 可以上楼下楼的地图
+		const upOrDown = {};
+		for (const id of order) {
+			const now = links[id];
+			// 遍历每一个地图的连接情况
+			for (const from in now) {
+				const to = now[from];
+				// 先根据from to计算物理位置
+				const fromData = from.split("_"),
+					toData = to.split("_");
+				const dir = fromData[3];
+				if (dir === "upFloor" || dir === "downFloor") continue;
+				if (!defaultChange[dir]) continue;
+				const v = dirData[dir][1], // 竖直数值
+					h = dirData[dir][0], // 水平数值
+					ha = Math.abs(h),
+					va = Math.abs(v);
+				const ff = id, // fromFloorId
+					tf = toData[0]; // toFloorId
+				const fromFloor = core.status.maps[ff],
+					toFloor = core.status.maps[tf];
+				const fhw = Math.floor(fromFloor.width / 2), // fromFloorHalfWidth
+					fhh = Math.floor(fromFloor.height / 2),
+					thw = Math.floor(toFloor.width / 2),
+					thh = Math.floor(toFloor.height / 2);
+				const fLoc = locs[id] ?? [0, 0];
+				if (!locs[ff]) continue;
+				let x, y;
+				if (locs && locs[tf]) {
+					x = locs[tf][0];
+					y = locs[tf][1];
+				} else {
+					// 计算坐标,公式可以通过画图推断出
+					x = fLoc[0] - v;
+					y = fLoc[1] - h;
+				}
+				locs[tf] = locs[tf] ?? [x, y, 1, 1, core.hasVisitedFloor(tf)];
+			}
+		}
+		// 获取地图绘制需要的长宽
+		let width = 0,
+			height = 0;
+		let left, right, up, down;
+		for (const id in locs) {
+			const [x, y, w, h] = locs[id];
+			if (left === void 0) {
+				left = right = x;
+				up = down = y;
+			}
+			left = Math.min(x - 1, left);
+			right = Math.max(x + 1, right);
+			up = Math.min(y - 1, up);
+			down = Math.max(y + 1, down);
+		}
+		width = right - left;
+		height = down - up;
 
-      return { locs, width, height, layer: upOrDown };
-    }
+		return { locs, width, height, layer: upOrDown };
+	}
 
-    function mapblock(mapdir) {
-      let mb = "";
-      if (mapdir.includes("up")) mb += "u";
-      if (mapdir.includes("down")) mb += "d";
-      if (mapdir.includes("left")) mb += "l";
-      if (mapdir.includes("right")) mb += "r";
-      return mb ? mb + ".webp" : "null.webp";
-    }
-    core.animateFrame.globalAlphaFloor = 0;
-    core.animateFrame.globalAlphaFloorStatus = 1;
+	function mapblock(mapdir) {
+		let mb = "";
+		if (mapdir.includes("up")) mb += "u";
+		if (mapdir.includes("down")) mb += "d";
+		if (mapdir.includes("left")) mb += "l";
+		if (mapdir.includes("right")) mb += "r";
+		return mb ? mb + ".webp" : "null.webp";
+	}
+	core.animateFrame.globalAlphaFloor = 0;
+	core.animateFrame.globalAlphaFloorStatus = 1;
 
-    const tesk = document.createElement("canvas");
-    tesk.width = 300;
-    tesk.height = 300;
-    const teskctx = tesk.getContext("2d");
+	const tesk = document.createElement("canvas");
+	tesk.width = 300;
+	tesk.height = 300;
+	const teskctx = tesk.getContext("2d");
 
-    let line = 50;
-    teskctx.strokeStyle = "green";
-    teskctx.fillStyle = "green";
-    let now = 0;
-    core.registerAnimationFrame("tesk", true, function (timestamp) {
-      if (timestamp - now > 1000 / 60) {
-        now = timestamp;
-        core.clearMap(teskctx);
-        teskctx.lineWidth = 150 - line;
+	let line = 50;
+	teskctx.strokeStyle = "green";
+	teskctx.fillStyle = "green";
+	let now = 0;
+	core.registerAnimationFrame("tesk", true, function (timestamp) {
+		if (timestamp - now > 1000 / 60) {
+			now = timestamp;
+			core.clearMap(teskctx);
+			teskctx.lineWidth = 150 - line;
 
-        if (line <= 150) {
-          teskctx.beginPath();
-          teskctx.arc(150, 150, line, 0, Math.PI * 2);
-          line += 2;
-          teskctx.stroke();
-        } else {
-          teskctx.beginPath();
-          teskctx.arc(150, 150, line - 150, 0, Math.PI * 2);
-          line += 2;
-          teskctx.fill();
-          if (line >= 250) line = 50;
-        }
-      }
-    });
+			if (line <= 150) {
+				teskctx.beginPath();
+				teskctx.arc(150, 150, line, 0, Math.PI * 2);
+				line += 2;
+				teskctx.stroke();
+			} else {
+				teskctx.beginPath();
+				teskctx.arc(150, 150, line - 150, 0, Math.PI * 2);
+				line += 2;
+				teskctx.fill();
+				if (line >= 250) line = 50;
+			}
+		}
+	});
 
-    /**
-     * 绘制小地图
-     * @param {MapDrawInfo} info 地图绘制信息
-     * @param {number} scale 地图的绘制比例
-     */
-    this.drawSmallMap = function (
-      ctx,
-      info,
-      center,
-      sx,
-      sy,
-      sw,
-      sh,
-      scale = defaultValue.scale
-    ) {
-      core.clearMap(ctx, sx, sy, sw + 40, sh + 60);
-      if (core.domStyle.isVertical) {
-        sy += 50;
-        sx += 15;
-      } else {
-        sy += 60;
-        sx += 30;
-      }
-      core.fillRect(ctx, sx, sy, sw, sh, "#000");
-      core.strokeRect(ctx, sx, sy, sw, sh, "#fff", 5);
-      core.setTextAlign("outerUI", "center");
-      core.fillBoldText1(
-        ctx,
-        core.status.maps[center].areas,
-        sx + sw / 2,
-        sy - 10,
-        "#FFFFFF",
-        "#000000",
-        6,
-        "bold 42px Verdana"
-      );
-      const locs = info.locs;
-      for (const id in locs) {
-        const loc = locs[id];
-        let color = "#000";
-        if (!loc[4]) color = "#f0f";
-        const [x, y, w, h] = loc.map((v) => typeof v === "number" && v * scale);
-        const fx = x + sx,
-          fy = y + sy;
-        const mapdir = info.mapdir[id];
-        const img = mapblock(mapdir);
-        if (x < 0 || x > 4 * scale || y < 0 || y > 4 * scale) continue;
-        core.drawImage(ctx, img, 0, 0, 60, 60, fx, fy, w, h);
-        const layer = info.upOrDown[id];
-        const min = Math.min(w, h);
-        if (core.getFlag("任务地点") && core.getFlag("任务地点") === id)
-          ctx.drawImage(tesk, fx + min / 4, fy + min / 4, min / 2, min / 2);
-        if (layer?.includes("upFloor"))
-          core.drawIcon(
-            ctx,
-            defaultChange.upFloor,
-            fx + min / 4,
-            fy + min / 4,
-            min / 2,
-            min / 2
-          );
-        if (layer?.includes("downFloor"))
-          core.drawIcon(
-            ctx,
-            defaultChange.downFloor,
-            fx + min / 4,
-            fy + min / 4,
-            min / 2,
-            min / 2
-          );
+	/**
+	 * 绘制小地图
+	 * @param {MapDrawInfo} info 地图绘制信息
+	 * @param {number} scale 地图的绘制比例
+	 */
+	this.drawSmallMap = function (
+		ctx,
+		info,
+		center,
+		sx,
+		sy,
+		sw,
+		sh,
+		scale = defaultValue.scale
+	) {
+		core.clearMap(ctx, sx, sy, sw + 40, sh + 60);
+		if (core.domStyle.isVertical) {
+			sy += 50;
+			sx += 15;
+		} else {
+			sy += 60;
+			sx += 30;
+		}
+		core.fillRect(ctx, sx - 10, sy - 10, sw + 20, sh + 20, "#000");
+		core.strokeRect(ctx, sx - 10, sy - 10, sw + 20, sh + 20, "#fff", 5);
+		core.setTextAlign("outerUI", "center");
+		core.fillBoldText1(
+			ctx,
+			core.status.maps[center].areas,
+			sx + sw / 2,
+			sy - 20,
+			"#FFFFFF",
+			"#000000",
+			6,
+			"bold 42px Verdana"
+		);
+		const locs = info.locs;
+		for (const id in locs) {
+			const loc = locs[id];
+			let color = "#000";
+			if (!loc[4]) color = "#f0f";
+			const [x, y, w, h] = loc.map((v) => typeof v === "number" && v * scale);
+			const fx = x + sx,
+				fy = y + sy;
+			const mapdir = info.mapdir[id];
+			const img = mapblock(mapdir);
+			if (x < 0 || x > 4 * scale || y < 0 || y > 4 * scale) continue;
+			core.drawImage(ctx, img, 0, 0, 60, 60, fx, fy, w, h);
+			const layer = info.upOrDown[id];
+			const min = Math.min(w, h);
 
-        // 显示漏怪数量
-        if (core.getFlag("showEnemy")) {
-          ctx.textAlign = "center";
-          ctx.textBaseline = "middle";
-          const c = drawingMap + "_" + nowDepth + "_" + noBorder;
-          const n = Object.keys(mapCache[c].enemies[id]).length;
-          color = "#fff";
-          if (n > 10) color = "#fc3";
-          if (n > 20) color = "#f22";
-          ctx.shadowBlur = 0.6 * nowScale;
-          ctx.shadowColor = "#000";
-          if (n > 0)
-            core.fillText(
-              ctx,
-              n,
-              fx + (w * 3) / 10,
-              fy + (h * 7) / 10,
-              color,
-              22 + "px normal"
-            );
-          ctx.shadowBlur = 0;
-        }
-      }
-    };
-  },
+			if (layer?.includes("upFloor"))
+				core.drawIcon(
+					ctx,
+					defaultChange.upFloor,
+					fx + min / 4,
+					fy + min / 4,
+					min / 2,
+					min / 2
+				);
+			if (layer?.includes("downFloor"))
+				core.drawIcon(
+					ctx,
+					defaultChange.downFloor,
+					fx + min / 4,
+					fy + min / 4,
+					min / 2,
+					min / 2
+				);
+			if (core.getFlag("任务地点") && core.getFlag("任务地点") === id)
+				ctx.drawImage(tesk, fx + min / 4, fy + min / 4, min / 2, min / 2);
+			if (id === core.status.floorId)
+				core.drawImage(
+					ctx,
+					"hero.webp",
+					0,
+					0,
+					32,
+					19,
+					fx + min / 4,
+					fy + (min * 5) / 16,
+					32,
+					19
+				);
+			// 显示漏怪数量
+			if (core.getFlag("showEnemy")) {
+				ctx.textAlign = "center";
+				ctx.textBaseline = "middle";
+				const c = drawingMap + "_" + nowDepth + "_" + noBorder;
+				const n = Object.keys(mapCache[c].enemies[id]).length;
+				color = "#fff";
+				if (n > 10) color = "#fc3";
+				if (n > 20) color = "#f22";
+				ctx.shadowBlur = 0.6 * nowScale;
+				ctx.shadowColor = "#000";
+				if (n > 0)
+					core.fillText(
+						ctx,
+						n,
+						fx + (w * 3) / 10,
+						fy + (h * 7) / 10,
+						color,
+						22 + "px normal"
+					);
+				ctx.shadowBlur = 0;
+			}
+			if (!core.hasVisitedFloor(id)) {
+				core.fillRect(ctx, fx, fy, w, h, "rgba(0,0,0,0.7)");
+				core.fillText(
+					ctx,
+					"?",
+					fx + min / 2,
+					fy + (min * 3) / 4,
+					"#FFFFFF",
+					"bold 42px Verdana"
+				);
+			}
+		}
+	};
+},
     "楼传": function () {
-    // 在此增加新插件
+	// 在此增加新插件
 
-    core.canMoveFloor = function () {
-      let canmove = false;
-      core.status.thisMap.blocks.forEach((block) => {
-        if (
-          !block.disable &&
-          (block.event.id == "upFloor" || block.event.id == "downFloor")
-        ) {
-          let automaticRoute = core.automaticRoute(block.x, block.y);
-          if (!core.flags.flyNearStair || automaticRoute.length > 0) {
-            let loc = automaticRoute.pop();
-            loc = automaticRoute.pop();
-            if (core.canMoveDirectly(loc?.x, loc?.y) >= 0 || !loc) {
-              canmove = true;
-            }
-          }
-        }
-      });
-      return canmove;
-    };
-    ui.prototype._drawViewMaps_drawHint = function () {
-      core.playSound("打开界面");
-    };
+	core.canMoveFloor = function () {
+		let canmove = false;
+		core.status.thisMap.blocks.forEach((block) => {
+			if (
+				!block.disable &&
+				(block.event.id == "upFloor" || block.event.id == "downFloor")
+			) {
+				let automaticRoute = core.automaticRoute(block.x, block.y);
+				if (!core.flags.flyNearStair || automaticRoute.length > 0) {
+					let loc = automaticRoute.pop();
+					loc = automaticRoute.pop();
+					if (core.canMoveDirectly(loc?.x, loc?.y) >= 0 || !loc) {
+						canmove = true;
+					}
+				}
+			}
+		});
+		return canmove;
+	};
+	ui.prototype._drawViewMaps_drawHint = function () {
+		core.playSound("打开界面");
+	};
 
-    ////// 绘制浏览地图界面 //////
-    ui.prototype._drawViewMaps = function (index, x, y) {
-      core.lockControl();
-      core.clearMap("data");
-      core.status.event.id = "viewMaps";
-      this.clearUI();
-      //console.log(index)
-      if (index == null) index = core.floorIds.indexOf(core.status.floorId);
-      core.animateFrame.tip = null;
-      core.status.checkBlock.cache = {};
-      let data = this._drawViewMaps_buildData(index, x, y);
-      core.drawWindowSkin("winskin1.webp", "ui", 0, 0, 416, 416);
-      let page = core.status.event.data.index;
-      let floorId = core.status.event.data.floorId;
-      core.ui.statusBar._update_map(floorId);
-      const bfs = core.plugin.bfsSearch(floorId, 1, true);
-      const mapdir = bfs.mapdir[floorId];
-      core.setTextAlign("ui", "center");
-      let size = (core.__PIXELS__ * 3) / 4; //312
-      const areas = core.getFlag("areas");
+	////// 绘制浏览地图界面 //////
+	ui.prototype._drawViewMaps = function (index, x, y) {
+		core.lockControl();
 
-      let i = areas.findIndex((v) => v.maps.includes(floorId));
-      core.fillRoundRect("ui", 15 - 2, 15 - 2, 35 + 4, 35 + 4, 4, "#444444");
-      core.strokeRoundRect(
-        "ui",
-        15 - 4,
-        15 - 4,
-        35 + 8,
-        35 + 8,
-        4,
-        "#444444",
-        1
-      );
-      core.fillBoldText1(
-        "ui",
-        "当前",
-        13 + 20,
-        17 + 20,
-        "#FFFFFF",
-        "#000000",
-        2,
-        this._buildFont(18, true)
-      );
+		core.clearMap("data");
+		core.status.event.id = "viewMaps";
+		this.clearUI();
+		//console.log(index)
+		if (index == null) index = core.floorIds.indexOf(core.status.floorId);
+		core.animateFrame.tip = null;
+		core.status.checkBlock.cache = {};
+		let data = this._drawViewMaps_buildData(index, x, y);
+		core.drawWindowSkin("winskin1.webp", "ui", 0, 0, 416, 416);
+		let page = core.status.event.data.index;
+		let floorId = core.status.event.data.floorId;
+		core.ui.statusBar._update_map(floorId);
+		const bfs = core.plugin.bfsSearch(floorId, 1, true);
+		const mapdir = bfs.mapdir[floorId];
+		core.setTextAlign("ui", "center");
+		let size = (core.__PIXELS__ * 3) / 4; //312
+		const areas = core.getFlag("areas");
 
-      core.fillRoundRect(
-        "ui",
-        15 - 2,
-        15 - 2 + 35 + 8 + size + 8 - 54,
-        35 + 4,
-        35 + 4,
-        4,
-        "#444444"
-      );
-      core.strokeRoundRect(
-        "ui",
-        15 - 4,
-        15 - 4 + 35 + 8 + size + 8 - 54,
-        35 + 8,
-        35 + 8,
-        4,
-        "#444444",
-        1
-      );
-      if (
-        !core.status.maps[core.floorIds[page]].canFlyTo ||
-        !core.hasVisitedFloor(core.floorIds[page])
-      ) {
-        core.fillBoldText1(
-          "ui",
-          "预览",
-          13 + 20,
-          17 + 20 + 35 + 8 + size + 8 - 54,
-          "#909090",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      } else {
-        core.fillBoldText1(
-          "ui",
-          "传送",
-          13 + 20,
-          17 + 20 + 35 + 8 + size + 8 - 54,
-          "#909090",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      }
-      core.fillRoundRect(
-        "ui",
-        15 - 4 + size - 2 + 45,
-        15 - 2 + size - 4 + 45,
-        35 + 4,
-        35 + 4,
-        4,
-        "#444444"
-      );
-      core.strokeRoundRect(
-        "ui",
-        15 - 4 + size - 4 + 45,
-        15 - 4 + size - 4 + 45,
-        35 + 8,
-        35 + 8,
-        4,
-        "#444444",
-        1
-      );
-      core.fillBoldText1(
-        "ui",
-        "离开",
-        15 - 4 + size - 4 + 45 + 22,
-        15 - 4 + size - 4 + 45 + 26,
-        "#FFFFFF",
-        "#000000",
-        2,
-        this._buildFont(18, true)
-      );
+		let i = areas.findIndex((v) => v.maps.includes(floorId));
+		core.fillRoundRect("ui", 15 - 2, 15 - 2, 35 + 4, 35 + 4, 4, "#444444");
+		core.strokeRoundRect(
+			"ui",
+			15 - 4,
+			15 - 4,
+			35 + 8,
+			35 + 8,
+			4,
+			"#444444",
+			1
+		);
+		core.fillBoldText1(
+			"ui",
+			"当前",
+			13 + 20,
+			17 + 20,
+			"#FFFFFF",
+			"#000000",
+			2,
+			this._buildFont(18, true)
+		);
 
-      core.fillRoundRect(
-        "ui",
-        15 + 44 - 2,
-        15 - 2,
-        size + 4 - 58,
-        35 + 4,
-        4,
-        "#444444"
-      );
-      core.strokeRoundRect(
-        "ui",
-        15 + 44 - 4,
-        15 - 4,
-        size + 8 - 58,
-        35 + 8,
-        4,
-        "#444444",
-        1
-      );
-      if (mapdir.includes("up")) {
-        core.fillBoldText1(
-          "ui",
-          "北▲",
-          30 + 145 + 10,
-          17 + 20,
-          "#FFFFFF",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      } else {
-        core.fillBoldText1(
-          "ui",
-          "北▲",
-          30 + 145 + 10,
-          17 + 20,
-          "#909090",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      }
+		core.fillRoundRect(
+			"ui",
+			15 - 2,
+			15 - 2 + 35 + 8 + size + 8 - 54,
+			35 + 4,
+			35 + 4,
+			4,
+			"#444444"
+		);
+		core.strokeRoundRect(
+			"ui",
+			15 - 4,
+			15 - 4 + 35 + 8 + size + 8 - 54,
+			35 + 8,
+			35 + 8,
+			4,
+			"#444444",
+			1
+		);
+		if (
+			!core.status.maps[core.floorIds[page]].canFlyTo ||
+			!core.hasVisitedFloor(core.floorIds[page])
+		) {
+			core.fillBoldText1(
+				"ui",
+				"预览",
+				13 + 20,
+				17 + 20 + 35 + 8 + size + 8 - 54,
+				"#909090",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		} else {
+			core.fillBoldText1(
+				"ui",
+				"传送",
+				13 + 20,
+				17 + 20 + 35 + 8 + size + 8 - 54,
+				"#909090",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		}
+		core.fillRoundRect(
+			"ui",
+			15 - 4 + size - 2 + 45,
+			15 - 2 + size - 4 + 45,
+			35 + 4,
+			35 + 4,
+			4,
+			"#444444"
+		);
+		core.strokeRoundRect(
+			"ui",
+			15 - 4 + size - 4 + 45,
+			15 - 4 + size - 4 + 45,
+			35 + 8,
+			35 + 8,
+			4,
+			"#444444",
+			1
+		);
+		core.fillBoldText1(
+			"ui",
+			"离开",
+			15 - 4 + size - 4 + 45 + 22,
+			15 - 4 + size - 4 + 45 + 26,
+			"#FFFFFF",
+			"#000000",
+			2,
+			this._buildFont(18, true)
+		);
 
-      core.fillRoundRect(
-        "ui",
-        15 - 2,
-        59 - 2,
-        35 + 4,
-        size + 4 - 58,
-        4,
-        "#444444"
-      );
-      core.strokeRoundRect(
-        "ui",
-        15 - 4,
-        59 - 4,
-        35 + 8,
-        size + 8 - 58,
-        4,
-        "#444444",
-        1
-      );
-      if (mapdir.includes("left")) {
-        core.fillBoldText1(
-          "ui",
-          "西",
-          15 + 17,
-          25 + 150,
-          "#FFFFFF",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-        core.fillBoldText1(
-          "ui",
-          "◀",
-          15 + 17,
-          45 + 150,
-          "#FFFFFF",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      } else {
-        core.fillBoldText1(
-          "ui",
-          "西",
-          15 + 17,
-          25 + 150,
-          "#909090",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-        core.fillBoldText1(
-          "ui",
-          "◀",
-          15 + 17,
-          45 + 150,
-          "#909090",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      }
-      core.fillRoundRect(
-        "ui",
-        15 + 44 - 2,
-        15 - 2 + size - 4,
-        size + 4 - 58,
-        35 + 4,
-        4,
-        "#444444"
-      );
-      core.strokeRoundRect(
-        "ui",
-        15 + 44 - 4,
-        15 - 4 + size - 4,
-        size + 8 - 58,
-        35 + 8,
-        4,
-        "#444444",
-        1
-      );
-      if (mapdir.includes("down")) {
-        core.fillBoldText1(
-          "ui",
-          "南▼",
-          30 + 145 + 10,
-          17 + 20 + size - 4,
-          "#FFFFFF",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      } else {
-        core.fillBoldText1(
-          "ui",
-          "南▼",
-          30 + 145 + 10,
-          17 + 20 + size - 4,
-          "#909090",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      }
+		core.fillRoundRect(
+			"ui",
+			15 + 44 - 2,
+			15 - 2,
+			size + 4 - 58,
+			35 + 4,
+			4,
+			"#444444"
+		);
+		core.strokeRoundRect(
+			"ui",
+			15 + 44 - 4,
+			15 - 4,
+			size + 8 - 58,
+			35 + 8,
+			4,
+			"#444444",
+			1
+		);
+		if (mapdir.includes("up")) {
+			core.fillBoldText1(
+				"ui",
+				"北▲",
+				30 + 145 + 10,
+				17 + 20,
+				"#FFFFFF",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		} else {
+			core.fillBoldText1(
+				"ui",
+				"北▲",
+				30 + 145 + 10,
+				17 + 20,
+				"#909090",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		}
 
-      core.fillRoundRect(
-        "ui",
-        15 - 2 + size - 4,
-        59 - 2,
-        35 + 4,
-        size + 4 - 58,
-        4,
-        "#444444"
-      );
-      core.strokeRoundRect(
-        "ui",
-        15 - 4 + size - 4,
-        59 - 4,
-        35 + 8,
-        size + 8 - 58,
-        4,
-        "#444444",
-        1
-      );
-      if (mapdir.includes("right")) {
-        core.fillBoldText1(
-          "ui",
-          "东",
-          15 + 17 + size - 4,
-          25 + 150,
-          "#FFFFFF",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-        core.fillBoldText1(
-          "ui",
-          "▶",
-          15 + 17 + size - 4,
-          45 + 150,
-          "#FFFFFF",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      } else {
-        core.fillBoldText1(
-          "ui",
-          "东",
-          15 + 17 + size - 4,
-          25 + 150,
-          "#909090",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-        core.fillBoldText1(
-          "ui",
-          "▶",
-          15 + 17 + size - 4,
-          45 + 150,
-          "#909090",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      }
-      core.fillRoundRect(
-        "ui",
-        60 - 2,
-        60 - 2,
-        size - 58 + 4,
-        size - 58 + 4,
-        4,
-        "#444444"
-      );
-      core.strokeRoundRect(
-        "ui",
-        60 - 4,
-        60 - 4,
-        size - 58 + 8,
-        size - 58 + 8,
-        4,
-        "#444444",
-        1
-      );
-      core.drawThumbnail(floorId, null, {
-        damage: data.damage,
-        ctx: "ui",
-        x: 58,
-        y: 58,
-        size: 0.62,
-        all: data.all,
-      });
-      if (
-        !core.status.maps[core.floorIds[page]].canFlyTo ||
-        !core.hasVisitedFloor(core.floorIds[page])
-      )
-        core.drawImage(
-          "ui",
-          "lock.webp",
-          0,
-          0,
-          size,
-          size,
-          58,
-          58,
-          size - 8,
-          size - 8
-        );
+		core.fillRoundRect(
+			"ui",
+			15 - 2,
+			59 - 2,
+			35 + 4,
+			size + 4 - 58,
+			4,
+			"#444444"
+		);
+		core.strokeRoundRect(
+			"ui",
+			15 - 4,
+			59 - 4,
+			35 + 8,
+			size + 8 - 58,
+			4,
+			"#444444",
+			1
+		);
+		if (mapdir.includes("left")) {
+			core.fillBoldText1(
+				"ui",
+				"西",
+				15 + 17,
+				25 + 150,
+				"#FFFFFF",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+			core.fillBoldText1(
+				"ui",
+				"◀",
+				15 + 17,
+				45 + 150,
+				"#FFFFFF",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		} else {
+			core.fillBoldText1(
+				"ui",
+				"西",
+				15 + 17,
+				25 + 150,
+				"#909090",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+			core.fillBoldText1(
+				"ui",
+				"◀",
+				15 + 17,
+				45 + 150,
+				"#909090",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		}
+		core.fillRoundRect(
+			"ui",
+			15 + 44 - 2,
+			15 - 2 + size - 4,
+			size + 4 - 58,
+			35 + 4,
+			4,
+			"#444444"
+		);
+		core.strokeRoundRect(
+			"ui",
+			15 + 44 - 4,
+			15 - 4 + size - 4,
+			size + 8 - 58,
+			35 + 8,
+			4,
+			"#444444",
+			1
+		);
+		if (mapdir.includes("down")) {
+			core.fillBoldText1(
+				"ui",
+				"南▼",
+				30 + 145 + 10,
+				17 + 20 + size - 4,
+				"#FFFFFF",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		} else {
+			core.fillBoldText1(
+				"ui",
+				"南▼",
+				30 + 145 + 10,
+				17 + 20 + size - 4,
+				"#909090",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		}
 
-      core.fillRoundRect(
-        "ui",
-        15 + 44 - 2,
-        60 - 2 + size - 4,
-        size + 4 - 58,
-        35 + 4,
-        4,
-        "#444444"
-      );
-      core.strokeRoundRect(
-        "ui",
-        15 + 44 - 4,
-        60 - 4 + size - 4,
-        size + 8 - 58,
-        35 + 8,
-        4,
-        "#444444",
-        1
-      );
-      core.fillBoldText1(
-        "ui",
-        core.status.maps[floorId].areas,
-        30 + 145 + 10,
-        17 + 65 + size - 4,
-        "#FFFFFF",
-        "#000000",
-        2,
-        this._buildFont(18, true)
-      );
-      core.fillRoundRect(
-        "ui",
-        15 - 2,
-        60 - 2 + size - 4,
-        35 + 4,
-        35 + 4,
-        4,
-        "#444444"
-      );
-      core.strokeRoundRect(
-        "ui",
-        15 - 4,
-        60 - 4 + size - 4,
-        35 + 8,
-        35 + 8,
-        4,
-        "#444444",
-        1
-      );
-      if (i === 0) {
-        core.fillBoldText1(
-          "ui",
-          "◀",
-          30,
-          17 + 65 + size - 4,
-          "#909090",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      } else {
-        core.fillBoldText1(
-          "ui",
-          "◀",
-          30,
-          17 + 65 + size - 4,
-          "#FFFFFF",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      }
-      core.fillRoundRect(
-        "ui",
-        15 - 2 + size - 4,
-        60 - 2 + size - 4,
-        35 + 4,
-        35 + 4,
-        4,
-        "#444444"
-      );
-      core.strokeRoundRect(
-        "ui",
-        15 - 4 + size - 4,
-        60 - 4 + size - 4,
-        35 + 8,
-        35 + 8,
-        4,
-        "#444444",
-        1
-      );
-      if (i === areas.length - 1) {
-        core.fillBoldText1(
-          "ui",
-          "▶",
-          30 + 300 + 10,
-          17 + 65 + size - 4,
-          "#909090",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      } else {
-        core.fillBoldText1(
-          "ui",
-          "▶",
-          30 + 300 + 10,
-          17 + 65 + size - 4,
-          "#FFFFFF",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      }
+		core.fillRoundRect(
+			"ui",
+			15 - 2 + size - 4,
+			59 - 2,
+			35 + 4,
+			size + 4 - 58,
+			4,
+			"#444444"
+		);
+		core.strokeRoundRect(
+			"ui",
+			15 - 4 + size - 4,
+			59 - 4,
+			35 + 8,
+			size + 8 - 58,
+			4,
+			"#444444",
+			1
+		);
+		if (mapdir.includes("right")) {
+			core.fillBoldText1(
+				"ui",
+				"东",
+				15 + 17 + size - 4,
+				25 + 150,
+				"#FFFFFF",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+			core.fillBoldText1(
+				"ui",
+				"▶",
+				15 + 17 + size - 4,
+				45 + 150,
+				"#FFFFFF",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		} else {
+			core.fillBoldText1(
+				"ui",
+				"东",
+				15 + 17 + size - 4,
+				25 + 150,
+				"#909090",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+			core.fillBoldText1(
+				"ui",
+				"▶",
+				15 + 17 + size - 4,
+				45 + 150,
+				"#909090",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		}
+		core.fillRoundRect(
+			"ui",
+			60 - 2,
+			60 - 2,
+			size - 58 + 4,
+			size - 58 + 4,
+			4,
+			"#444444"
+		);
+		core.strokeRoundRect(
+			"ui",
+			60 - 4,
+			60 - 4,
+			size - 58 + 8,
+			size - 58 + 8,
+			4,
+			"#444444",
+			1
+		);
+		core.drawThumbnail(floorId, null, {
+			damage: data.damage,
+			ctx: "ui",
+			x: 58,
+			y: 58,
+			size: 0.62,
+			all: data.all,
+		});
+		if (
+			!core.status.maps[core.floorIds[page]].canFlyTo ||
+			!core.hasVisitedFloor(core.floorIds[page])
+		) {
+			/*core.fillRect("ui", 58,
+				58,
+				size - 50,
+				size - 50, "rgba(0,0,0,0.5)")*/
+			core.getContextByName("ui").globalAlpha = 0.7;
 
-      core.fillRoundRect(
-        "ui",
-        15 - 2 + size - 4,
-        15 - 2,
-        80 + 4,
-        35 + 4,
-        4,
-        "#444444"
-      );
-      core.strokeRoundRect(
-        "ui",
-        15 - 4 + size - 4,
-        15 - 4,
-        80 + 8,
-        35 + 8,
-        4,
-        "#444444",
-        1
-      );
-      if (mapdir.includes("upFloor")) {
-        core.fillBoldText1(
-          "ui",
-          "上楼",
-          30 + 320 + 10,
-          17 + 20,
-          "#FFFFFF",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      } else {
-        core.fillBoldText1(
-          "ui",
-          "上楼",
-          30 + 320 + 10,
-          17 + 20,
-          "#909090",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      }
-      core.fillRoundRect(
-        "ui",
-        15 - 2 + size - 4,
-        15 - 2 + size - 4,
-        80 + 4,
-        35 + 4,
-        4,
-        "#444444"
-      );
-      core.strokeRoundRect(
-        "ui",
-        15 - 4 + size - 4,
-        15 - 4 + size - 4,
-        80 + 8,
-        35 + 8,
-        4,
-        "#444444",
-        1
-      );
-      if (mapdir.includes("downFloor")) {
-        core.fillBoldText1(
-          "ui",
-          "下楼",
-          30 + 320 + 10,
-          17 + 20 + size - 4,
-          "#FFFFFF",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      } else {
-        core.fillBoldText1(
-          "ui",
-          "下楼",
-          30 + 320 + 10,
-          17 + 20 + size - 4,
-          "#909090",
-          "#000000",
-          2,
-          this._buildFont(18, true)
-        );
-      }
+			core.drawImage(
+				"ui",
+				"miwu.webp",
+				0,
+				0,
+				size,
+				size,
+				58,
+				58,
+				size - 50,
+				size - 50
+			);
+			core.getContextByName("ui").globalAlpha = 1;
+			/*core.fillText("ui", '?', 188,
+				278,
+				"rgba(255,255,255,0.2)", this._buildFont(250, true))*/
+		}
+		core.fillRoundRect(
+			"ui",
+			15 + 44 - 2,
+			60 - 2 + size - 4,
+			size + 4 - 58,
+			35 + 4,
+			4,
+			"#444444"
+		);
+		core.strokeRoundRect(
+			"ui",
+			15 + 44 - 4,
+			60 - 4 + size - 4,
+			size + 8 - 58,
+			35 + 8,
+			4,
+			"#444444",
+			1
+		);
+		core.fillBoldText1(
+			"ui",
+			core.status.maps[floorId].areas,
+			30 + 145 + 10,
+			17 + 65 + size - 4,
+			"#FFFFFF",
+			"#000000",
+			2,
+			this._buildFont(18, true)
+		);
+		core.fillRoundRect(
+			"ui",
+			15 - 2,
+			60 - 2 + size - 4,
+			35 + 4,
+			35 + 4,
+			4,
+			"#444444"
+		);
+		core.strokeRoundRect(
+			"ui",
+			15 - 4,
+			60 - 4 + size - 4,
+			35 + 8,
+			35 + 8,
+			4,
+			"#444444",
+			1
+		);
+		if (i === 0) {
+			core.fillBoldText1(
+				"ui",
+				"◀",
+				30,
+				17 + 65 + size - 4,
+				"#909090",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		} else {
+			core.fillBoldText1(
+				"ui",
+				"◀",
+				30,
+				17 + 65 + size - 4,
+				"#FFFFFF",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		}
+		core.fillRoundRect(
+			"ui",
+			15 - 2 + size - 4,
+			60 - 2 + size - 4,
+			35 + 4,
+			35 + 4,
+			4,
+			"#444444"
+		);
+		core.strokeRoundRect(
+			"ui",
+			15 - 4 + size - 4,
+			60 - 4 + size - 4,
+			35 + 8,
+			35 + 8,
+			4,
+			"#444444",
+			1
+		);
+		if (i === areas.length - 1) {
+			core.fillBoldText1(
+				"ui",
+				"▶",
+				30 + 300 + 10,
+				17 + 65 + size - 4,
+				"#909090",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		} else {
+			core.fillBoldText1(
+				"ui",
+				"▶",
+				30 + 300 + 10,
+				17 + 65 + size - 4,
+				"#FFFFFF",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		}
 
-      core.fillRoundRect(
-        "ui",
-        15 - 2 + size - 4 + 35 + 8,
-        59 - 2,
-        37 + 4,
-        (size - 58) / 2 + 4,
-        4,
-        "#444444"
-      );
-      core.strokeRoundRect(
-        "ui",
-        15 - 4 + size - 4 + 35 + 8,
-        59 - 4,
-        37 + 8,
-        (size - 58) / 2 + 8,
-        4,
-        "#444444",
-        1
-      );
-      const title = core.status.maps[floorId].title;
-      //const length = title.length
-      fillTextVertical(
-        "ui",
-        title,
-        15 - 4 + size - 4 + 45,
-        85,
-        "#FFFFFF",
-        "#000000",
-        18
-      );
-      //const uictx = main.dom.gameCanvas.ui.getContext('2d')
-      core.fillRoundRect(
-        "ui",
-        15 - 2 + size - 4 + 35 + 8,
-        59 - 2 + (size - 58) / 2 + 8,
-        37 + 4,
-        119 + 4,
-        4,
-        "#444444"
-      );
-      core.strokeRoundRect(
-        "ui",
-        15 - 4 + size - 4 + 35 + 8,
-        59 - 4 + (size - 58) / 2 + 8,
-        37 + 8,
-        119 + 8,
-        4,
-        "#444444",
-        1
-      );
-      if (core.getFlag("showEnemy")) {
-        fillTextVertical(
-          "ui",
-          "关闭漏怪检测",
-          15 - 4 + size - 4 + 45,
-          220,
-          "#FFFFFF",
-          "#000000",
-          18
-        );
-      } else {
-        fillTextVertical(
-          "ui",
-          "开启漏怪检测",
-          15 - 4 + size - 4 + 45,
-          220,
-          "#FFFFFF",
-          "#000000",
-          18
-        );
-      }
+		core.fillRoundRect(
+			"ui",
+			15 - 2 + size - 4,
+			15 - 2,
+			80 + 4,
+			35 + 4,
+			4,
+			"#444444"
+		);
+		core.strokeRoundRect(
+			"ui",
+			15 - 4 + size - 4,
+			15 - 4,
+			80 + 8,
+			35 + 8,
+			4,
+			"#444444",
+			1
+		);
+		if (mapdir.includes("upFloor")) {
+			core.fillBoldText1(
+				"ui",
+				"上楼",
+				30 + 320 + 10,
+				17 + 20,
+				"#FFFFFF",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		} else {
+			core.fillBoldText1(
+				"ui",
+				"上楼",
+				30 + 320 + 10,
+				17 + 20,
+				"#909090",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		}
+		core.fillRoundRect(
+			"ui",
+			15 - 2 + size - 4,
+			15 - 2 + size - 4,
+			80 + 4,
+			35 + 4,
+			4,
+			"#444444"
+		);
+		core.strokeRoundRect(
+			"ui",
+			15 - 4 + size - 4,
+			15 - 4 + size - 4,
+			80 + 8,
+			35 + 8,
+			4,
+			"#444444",
+			1
+		);
+		if (mapdir.includes("downFloor")) {
+			core.fillBoldText1(
+				"ui",
+				"下楼",
+				30 + 320 + 10,
+				17 + 20 + size - 4,
+				"#FFFFFF",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		} else {
+			core.fillBoldText1(
+				"ui",
+				"下楼",
+				30 + 320 + 10,
+				17 + 20 + size - 4,
+				"#909090",
+				"#000000",
+				2,
+				this._buildFont(18, true)
+			);
+		}
 
-      //uictx.fillTextVertical(title, 15 - 4 + size - 4 + 35 + 29, 25 + 150)
-      //fillTextVertical('ui', title, 15 - 4 + size - 4 + 35 + 29, 25 + 150, '#FFFFFF', this._buildFont(18, true))
-    };
+		core.fillRoundRect(
+			"ui",
+			15 - 2 + size - 4 + 35 + 8,
+			59 - 2,
+			37 + 4,
+			(size - 58) / 2 + 4,
+			4,
+			"#444444"
+		);
+		core.strokeRoundRect(
+			"ui",
+			15 - 4 + size - 4 + 35 + 8,
+			59 - 4,
+			37 + 8,
+			(size - 58) / 2 + 8,
+			4,
+			"#444444",
+			1
+		);
+		const title = core.status.maps[floorId].title;
+		//const length = title.length
+		fillTextVertical(
+			"ui",
+			title,
+			15 - 4 + size - 4 + 45,
+			85,
+			core.hasVisitedFloor(floorId) ? "#FFFFFF" : "#444444",
+			"#000000",
+			18
+		);
+		//const uictx = main.dom.gameCanvas.ui.getContext('2d')
+		core.fillRoundRect(
+			"ui",
+			15 - 2 + size - 4 + 35 + 8,
+			59 - 2 + (size - 58) / 2 + 8,
+			37 + 4,
+			119 + 4,
+			4,
+			"#444444"
+		);
+		core.strokeRoundRect(
+			"ui",
+			15 - 4 + size - 4 + 35 + 8,
+			59 - 4 + (size - 58) / 2 + 8,
+			37 + 8,
+			119 + 8,
+			4,
+			"#444444",
+			1
+		);
+		if (core.getFlag("showEnemy")) {
+			fillTextVertical(
+				"ui",
+				"关闭漏怪检测",
+				15 - 4 + size - 4 + 45,
+				220,
+				"#FFFFFF",
+				"#000000",
+				18
+			);
+		} else {
+			fillTextVertical(
+				"ui",
+				"开启漏怪检测",
+				15 - 4 + size - 4 + 45,
+				220,
+				"#FFFFFF",
+				"#000000",
+				18
+			);
+		}
 
-    function fillTextVertical(name, text, x, y, style, boldstyle, fontsize) {
-      //竖向文字绘制
+		//uictx.fillTextVertical(title, 15 - 4 + size - 4 + 35 + 29, 25 + 150)
+		//fillTextVertical('ui', title, 15 - 4 + size - 4 + 35 + 29, 25 + 150, '#FFFFFF', this._buildFont(18, true))
+	};
 
-      const ctx = core.ui.getContextByName(name);
-      if (!ctx) return;
-      const canvas = document.createElement("canvas");
-      const context = canvas.getContext("2d");
-      fontsize *= 3;
-      const length = text.length;
-      canvas.width = fontsize * 2;
-      canvas.height = fontsize * length * 2;
-      if (style) context.fillStyle = core.arrayToRGBA(style);
-      if (boldstyle) context.strokeStyle = core.arrayToRGBA(boldstyle);
-      context.lineWidth = 2;
-      if (fontsize) context.font = core.ui._buildFont(fontsize, true);
-      let arrText = text.split("");
+	function fillTextVertical(name, text, x, y, style, boldstyle, fontsize) {
+		//竖向文字绘制
 
-      let arrWidth = arrText.map(function (letter) {
-        return context.measureText(letter).width;
-      });
+		const ctx = core.ui.getContextByName(name);
+		if (!ctx) return;
+		const canvas = document.createElement("canvas");
+		const context = canvas.getContext("2d");
+		fontsize *= 3;
+		const length = text.length;
+		canvas.width = fontsize * 2;
+		canvas.height = fontsize * length * 2;
+		if (style) context.fillStyle = core.arrayToRGBA(style);
+		if (boldstyle) context.strokeStyle = core.arrayToRGBA(boldstyle);
+		context.lineWidth = 2;
+		if (fontsize) context.font = core.ui._buildFont(fontsize, true);
+		let arrText = text.split("");
 
-      let align = context.textAlign;
+		let arrWidth = arrText.map(function (letter) {
+			return context.measureText(letter).width;
+		});
 
-      let baseline = context.textBaseline;
-      let sx = fontsize,
-        sy = fontsize * length;
-      if (align == "left") {
-        sx = sx + Math.max.apply(null, arrWidth) / 2;
-      } else if (align == "right") {
-        sx = sx - Math.max.apply(null, arrWidth) / 2;
-      }
+		let align = context.textAlign;
 
-      if (
-        baseline == "bottom" ||
-        baseline == "alphabetic" ||
-        baseline == "ideographic"
-      ) {
-        sy = sy - arrWidth[0] / 2;
-      } else if (baseline == "top" || baseline == "hanging") {
-        sy = sy + arrWidth[0] / 2;
-      }
+		let baseline = context.textBaseline;
+		let sx = fontsize,
+			sy = fontsize * length;
+		if (align == "left") {
+			sx = sx + Math.max.apply(null, arrWidth) / 2;
+		} else if (align == "right") {
+			sx = sx - Math.max.apply(null, arrWidth) / 2;
+		}
 
-      context.textAlign = "center";
+		if (
+			baseline == "bottom" ||
+			baseline == "alphabetic" ||
+			baseline == "ideographic"
+		) {
+			sy = sy - arrWidth[0] / 2;
+		} else if (baseline == "top" || baseline == "hanging") {
+			sy = sy + arrWidth[0] / 2;
+		}
 
-      context.textBaseline = "middle";
-      context.lineWidth = 6;
+		context.textAlign = "center";
 
-      // 开始逐字绘制
+		context.textBaseline = "middle";
+		context.lineWidth = 6;
 
-      arrText.forEach(function (letter, index) {
-        // 确定下一个字符的纵坐标位置
+		// 开始逐字绘制
 
-        context.strokeText(letter, sx, sy);
-        context.fillText(letter, sx, sy);
-        // 旋转坐标系还原成初始态
+		arrText.forEach(function (letter, index) {
+			// 确定下一个字符的纵坐标位置
 
-        context.setTransform(1, 0, 0, 1, 0, 0);
+			context.strokeText(letter, sx, sy);
+			context.fillText(letter, sx, sy);
+			// 旋转坐标系还原成初始态
 
-        // 确定下一个字符的纵坐标位置
+			context.setTransform(1, 0, 0, 1, 0, 0);
 
-        var letterWidth = 54;
+			// 确定下一个字符的纵坐标位置
 
-        sy = sy + letterWidth;
-      });
+			var letterWidth = 54;
 
-      // 水平垂直对齐方式还原
+			sy = sy + letterWidth;
+		});
 
-      context.textAlign = align;
+		// 水平垂直对齐方式还原
 
-      context.textBaseline = baseline;
+		context.textAlign = align;
 
-      //绘制到目标位置
-      ctx.drawImage(
-        canvas,
-        x,
-        y - (fontsize / 3) * length,
-        canvas.width / 3,
-        canvas.height / 3
-      );
-    }
+		context.textBaseline = baseline;
 
-    ////// 点击楼层传送器时的打开操作 //////
-    events.prototype.useFly = function (fromUserAction) {
-      if (core.isReplaying()) return;
-      if (!core.status.maps[core.status.floorId].canFlyFrom) {
-        core.drawTip(core.material.items["fly"].name + "好像失效了", "fly");
-        return;
-      }
-      // 从“浏览地图”页面:尝试直接传送到该层
-      if (core.status.event.id == "viewMaps") {
-        if (!core.hasItem("fly")) {
-          core.playSound("操作失败");
-          core.drawTip("你没有" + core.material.items["fly"].name, "fly");
-        } else if (
-          core.flags.flyNearStair &&
-          !core.nearStair() &&
-          !core.canMoveFloor()
-        ) {
-          core.playSound("操作失败");
-          core.drawTip(
-            "无法到达楼梯边使用" + core.material.items["fly"].name,
-            "fly"
-          );
-        } else {
-          core.flyTo(core.status.event.data.floorId);
-        }
-        return;
-      }
+		//绘制到目标位置
+		ctx.drawImage(
+			canvas,
+			x,
+			y - (fontsize / 3) * length,
+			canvas.width / 3,
+			canvas.height / 3
+		);
+	}
 
-      if (!this._checkStatus("fly", fromUserAction, true)) return;
-      //if (core.flags.flyNearStair && !core.nearStair())
+	////// 点击楼层传送器时的打开操作 //////
+	events.prototype.useFly = function (fromUserAction) {
+		if (!core.isPlaying()) return;
+		if (!core.status.maps[core.status.floorId].canFlyFrom) {
+			core.drawTip(core.material.items["fly"].name + "好像失效了", "fly");
+			return;
+		}
+		// 从“浏览地图”页面:尝试直接传送到该层
+		if (core.status.event.id == "viewMaps") {
+			if (!core.hasItem("fly")) {
+				core.playSound("操作失败");
+				core.drawTip("你没有" + core.material.items["fly"].name, "fly");
+			} else if (
+				core.flags.flyNearStair &&
+				!core.nearStair() &&
+				!flags.canMoveFloor
+			) {
+				core.playSound("操作失败");
+				core.drawTip(
+					"无法到达楼梯边使用" + core.material.items["fly"].name,
+					"fly"
+				);
+			} else {
+				core.flyTo(core.status.event.data.floorId);
+				core.updateStatusBar();
+			}
+			return;
+		}
 
-      if (
-        (core.flags.flyNearStair && !core.nearStair()) ||
-        !core.canMoveFloor()
-      ) {
-        core.playSound("操作失败");
-        core.drawTip(
-          "无法到达楼梯边使用" + core.material.items["fly"].name,
-          "fly"
-        );
-        core.unlockControl();
-        core.status.event.data = null;
-        core.status.event.id = null;
-        return;
-      }
-      if (!core.canUseItem("fly")) {
-        core.playSound("操作失败");
-        core.drawTip(core.material.items["fly"].name + "好像失效了", "fly");
-        core.unlockControl();
-        core.status.event.data = null;
-        core.status.event.id = null;
-        return;
-      }
-      core.playSound("打开界面");
-      core.useItem("fly", true);
-      return;
-    };
-    ////// 系统菜单栏界面时的点击操作 //////
-    actions.prototype._clickSettings = function (x, y) {
-      if (this._out(x)) return;
-      var choices = core.status.event.ui.choices;
-      var topIndex = this._getChoicesTopIndex(choices.length);
-      if (y >= topIndex && y < topIndex + choices.length) {
-        var selection = y - topIndex;
-        core.status.event.selection = selection;
-        switch (selection) {
-          case 0:
-            core.status.event.selection = 0;
-            core.playSound("确定");
-            core.ui._drawSwitchs();
-            break;
-          case 1:
-            // core.playSound('确定');
-            core.ui._drawKeyBoard();
-            break;
-          case 2:
-            // core.playSound('确定');
-            core.clearUI();
-            core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));
-            break;
-          case 3:
-            core.status.event.selection = 0;
-            core.playSound("确定");
-            core.ui._drawNotes();
-            break;
-          case 4:
-            core.status.event.selection = 0;
-            core.playSound("确定");
-            core.ui._drawSyncSave();
-            break;
-          case 5:
-            core.status.event.selection = 0;
-            core.playSound("确定");
-            core.ui._drawGameInfo();
-            break;
-          case 6:
-            return core.confirmRestart();
-          case 7:
-            core.playSound("取消");
-            core.ui.closePanel();
-            break;
-        }
-      }
-      return;
-    };
-    ////// 查看地图界面时的点击操作 //////
-    actions.prototype._clickViewMaps = function (x, y, px, py) {
-      if (core.status.event.data == null) {
-        core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));
-        return;
-      }
-      let now = core.floorIds.indexOf(core.status.floorId);
-      let index = core.status.event.data.index;
-      let cx = core.status.event.data.x,
-        cy = core.status.event.data.y;
-      let floorId = core.floorIds[index],
-        mw = core.floors[floorId].width,
-        mh = core.floors[floorId].height;
-      let perpx = core.__PIXELS__ / 5,
-        cornerpx = (perpx * 3) / 4;
-      const bfs = core.plugin.bfsSearch(floorId, 1, true);
-      const mapdir = bfs.mapdir[floorId];
-      const res = bfs.res;
-      const formto = {};
-      for (let from in res) {
-        const to = res[from];
-        const [fromfloorId, fromsx, fromsy, dir] = from.split("_");
-        const [tofloorId, tosx, tosy] = to.split("_");
-        if (!formto[fromfloorId]) formto[fromfloorId] = {};
-        if (!formto[fromfloorId][dir]) formto[fromfloorId][dir] = tofloorId;
-      }
-      const areas = core.getFlag("areas");
-      let i = areas.findIndex((v) => v.maps.includes(floorId));
+		if (!this._checkStatus("fly", fromUserAction, true)) return;
+		//if (core.flags.flyNearStair && !core.nearStair())
 
-      if (px >= 11 && px <= 54 && py >= 11 && py <= 54) {
-        core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));
-      } else if (px >= 362 && px <= 407 && py >= 191 && py <= 318) {
-        flags.showEnemy = !flags.showEnemy;
-        core.ui._drawViewMaps(index);
-      } else if (px >= 364 && px <= 407 && py >= 364 && py <= 407) {
-        core.clearMap("data");
-        core.playSound("取消");
-        core.ui.closePanel();
-        core.getItemDetail();
-        core.redrawMap();
-        core.ui.statusBar._update_map();
-        return;
-      } else if (px >= 55 && px <= 317 && py >= 11 && py <= 54) {
-        if (mapdir.includes("up"))
-          core.ui._drawViewMaps(core.floorIds.indexOf(formto[floorId].up));
-      } else if (px >= 55 && px <= 317 && py >= 319 && py <= 362) {
-        if (mapdir.includes("down"))
-          core.ui._drawViewMaps(core.floorIds.indexOf(formto[floorId].down));
-      } else if (px >= 11 && px <= 54 && py >= 55 && py <= 317) {
-        if (mapdir.includes("left"))
-          core.ui._drawViewMaps(core.floorIds.indexOf(formto[floorId].left));
-      } else if (px >= 319 && px <= 362 && py >= 55 && py <= 317) {
-        if (mapdir.includes("right"))
-          core.ui._drawViewMaps(core.floorIds.indexOf(formto[floorId].right));
-      } else if (px >= 319 && px <= 407 && py >= 11 && py <= 54) {
-        if (mapdir.includes("upFloor"))
-          core.ui._drawViewMaps(core.floorIds.indexOf(formto[floorId].upFloor));
-      } else if (px >= 319 && px <= 407 && py >= 319 && py <= 362) {
-        if (mapdir.includes("downFloor"))
-          core.ui._drawViewMaps(
-            core.floorIds.indexOf(formto[floorId].downFloor)
-          );
-      } else if (
-        px >= 55 &&
-        px <= 317 &&
-        py >= 55 &&
-        py <= 317 &&
-        !core.isReplaying()
-      ) {
-        core.useFly(false);
-        return;
-      } else if (px >= 11 && px <= 54 && py >= 364 && py <= 407) {
-        if (i > 0) {
-          i -= 1;
-          core.ui._drawViewMaps(core.floorIds.indexOf(areas[i].maps[0]));
-        }
-      } else if (px >= 319 && px <= 362 && py >= 364 && py <= 407) {
-        if (i < areas.length - 1) {
-          i += 1;
-          core.ui._drawViewMaps(core.floorIds.indexOf(areas[i].maps[0]));
-        }
-      }
-    };
-    const replayAction_fly = function (action) {
-      //楼层传送的录像操作
-      if (action.indexOf("fly:") != 0) return false;
-      var floorId = action.substring(4);
-      var toIndex = core.floorIds.indexOf(floorId);
-      if (
-        !core.canUseItem("fly") ||
-        (core.flags.flyNearStair && !core.nearStair())
-      )
-        return false;
-      core.ui._drawViewMaps(toIndex);
-      if (core.status.replay.speed == 24) {
-        if (!core.flyTo(floorId, core.replay))
-          core.control._replay_error(action);
-        return true;
-      }
-      setTimeout(function () {
-        if (!core.flyTo(floorId, core.replay))
-          core.control._replay_error(action);
-      }, core.control.__replay_getTimeout());
-      return true;
-    };
-    core.registerReplayAction("fly", replayAction_fly);
-    ////// 查看地图界面时,放开某个键的操作 //////
-    actions.prototype._keyUpViewMaps = function (keycode) {
-      if (core.status.event.data == null) {
-        core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));
-        return;
-      }
-      var floorId = core.floorIds[core.status.event.data.index];
+		if (
+			(core.flags.flyNearStair && !core.nearStair()) ||
+			!flags.canMoveFloor
+		) {
+			core.playSound("操作失败");
+			core.drawTip(
+				"无法到达楼梯边使用" + core.material.items["fly"].name,
+				"fly"
+			);
+			core.unlockControl();
+			core.status.event.data = null;
+			core.status.event.id = null;
+			return;
+		}
+		if (!core.canUseItem("fly")) {
+			core.playSound("操作失败");
+			core.drawTip(core.material.items["fly"].name + "好像失效了", "fly");
+			core.unlockControl();
+			core.status.event.data = null;
+			core.status.event.id = null;
+			return;
+		}
+		core.playSound("打开界面");
+		core.useItem("fly", true);
+		core.updateStatusBar();
+		return;
+	};
+	////// 系统菜单栏界面时的点击操作 //////
+	actions.prototype._clickSettings = function (x, y) {
+		if (this._out(x)) return;
+		var choices = core.status.event.ui.choices;
+		var topIndex = this._getChoicesTopIndex(choices.length);
+		if (y >= topIndex && y < topIndex + choices.length) {
+			var selection = y - topIndex;
+			core.status.event.selection = selection;
+			switch (selection) {
+			case 0:
+				core.status.event.selection = 0;
+				core.playSound("确定");
+				core.ui._drawSwitchs();
+				break;
+			case 1:
+				// core.playSound('确定');
+				core.ui._drawKeyBoard();
+				break;
+			case 2:
+				// core.playSound('确定');
+				core.clearUI();
+				core.useItem("fly");
+				break;
+			case 3:
+				core.status.event.selection = 0;
+				core.playSound("确定");
+				core.ui._drawNotes();
+				break;
+			case 4:
+				core.status.event.selection = 0;
+				core.playSound("确定");
+				core.ui._drawSyncSave();
+				break;
+			case 5:
+				core.status.event.selection = 0;
+				core.playSound("确定");
+				core.ui._drawGameInfo();
+				break;
+			case 6:
+				return core.confirmRestart();
+			case 7:
+				core.playSound("取消");
+				core.ui.closePanel();
+				break;
+			}
+		}
+		return;
+	};
+	////// 查看地图界面时的点击操作 //////
+	actions.prototype._clickViewMaps = function (x, y, px, py) {
+		if (core.status.event.data == null) {
+			core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));
+			return;
+		}
+		let now = core.floorIds.indexOf(core.status.floorId);
+		let index = core.status.event.data.index;
+		let cx = core.status.event.data.x,
+			cy = core.status.event.data.y;
+		let floorId = core.floorIds[index],
+			mw = core.floors[floorId].width,
+			mh = core.floors[floorId].height;
+		let perpx = core.__PIXELS__ / 5,
+			cornerpx = (perpx * 3) / 4;
+		const bfs = core.plugin.bfsSearch(floorId, 1, true);
+		const mapdir = bfs.mapdir[floorId];
+		const res = bfs.res;
+		const formto = {};
+		for (let from in res) {
+			const to = res[from];
+			const [fromfloorId, fromsx, fromsy, dir] = from.split("_");
+			const [tofloorId, tosx, tosy] = to.split("_");
+			if (!formto[fromfloorId]) formto[fromfloorId] = {};
+			if (!formto[fromfloorId][dir]) formto[fromfloorId][dir] = tofloorId;
+		}
+		const areas = core.getFlag("areas");
+		let i = areas.findIndex((v) => v.maps.includes(floorId));
 
-      if (keycode == 27 || keycode == 71) {
-        core.clearMap("data");
-        core.playSound("取消");
-        core.ui.closePanel();
-        core.getItemDetail();
-        core.redrawMap();
-        core.ui.statusBar._update_map();
-        return;
-      }
-      if (keycode == 88) {
-        core.openBook(true);
-        return;
-      }
-      if (keycode == 86) {
-        core.status.event.data.damage = !core.status.event.data.damage;
-        core.playSound("光标移动");
-        core.ui._drawViewMaps(core.status.event.data);
-        return;
-      }
-      if (keycode == 66) {
-        core.openBook(false);
-        return;
-      }
-      if (
-        (keycode == 13 || keycode == 32 || keycode == 67) &&
-        !core.isReplaying()
-      ) {
-        core.useFly(false);
-        return;
-      }
-      return;
-    };
-    actions.prototype._keyDownViewMaps = function (keycode) {
-      if (core.status.event.data == null) return;
+		if (px >= 11 && px <= 54 && py >= 11 && py <= 54) {
+			core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));
+		} else if (px >= 362 && px <= 407 && py >= 191 && py <= 318) {
+			flags.showEnemy = !flags.showEnemy;
+			core.ui._drawViewMaps(index);
+		} else if (px >= 364 && px <= 407 && py >= 364 && py <= 407) {
+			core.clearMap("data");
+			core.playSound("取消");
+			core.ui.closePanel();
+			core.getItemDetail();
+			core.redrawMap();
+			core.updateStatusBar();
+			core.ui.statusBar._update_map();
+			return;
+		} else if (px >= 55 && px <= 317 && py >= 11 && py <= 54) {
+			if (mapdir.includes("up"))
+				core.ui._drawViewMaps(core.floorIds.indexOf(formto[floorId].up));
+		} else if (px >= 55 && px <= 317 && py >= 319 && py <= 362) {
+			if (mapdir.includes("down"))
+				core.ui._drawViewMaps(core.floorIds.indexOf(formto[floorId].down));
+		} else if (px >= 11 && px <= 54 && py >= 55 && py <= 317) {
+			if (mapdir.includes("left"))
+				core.ui._drawViewMaps(core.floorIds.indexOf(formto[floorId].left));
+		} else if (px >= 319 && px <= 362 && py >= 55 && py <= 317) {
+			if (mapdir.includes("right"))
+				core.ui._drawViewMaps(core.floorIds.indexOf(formto[floorId].right));
+		} else if (px >= 319 && px <= 407 && py >= 11 && py <= 54) {
+			if (mapdir.includes("upFloor"))
+				core.ui._drawViewMaps(core.floorIds.indexOf(formto[floorId].upFloor));
+		} else if (px >= 319 && px <= 407 && py >= 319 && py <= 362) {
+			if (mapdir.includes("downFloor"))
+				core.ui._drawViewMaps(
+					core.floorIds.indexOf(formto[floorId].downFloor)
+				);
+		} else if (
+			px >= 55 &&
+			px <= 317 &&
+			py >= 55 &&
+			py <= 317 &&
+			core.isPlaying()
+		) {
+			core.useFly(false);
+			return;
+		} else if (px >= 11 && px <= 54 && py >= 364 && py <= 407) {
+			if (i > 0) {
+				i -= 1;
+				core.ui._drawViewMaps(core.floorIds.indexOf(areas[i].maps[0]));
+			}
+		} else if (px >= 319 && px <= 362 && py >= 364 && py <= 407) {
+			if (i < areas.length - 1) {
+				i += 1;
+				core.ui._drawViewMaps(core.floorIds.indexOf(areas[i].maps[0]));
+			}
+		}
+	};
+	const replayAction_fly = function (action) {
+		//楼层传送的录像操作
+		if (action.indexOf("fly:") != 0) return false;
+		var floorId = action.substring(4);
+		var toIndex = core.floorIds.indexOf(floorId);
+		if (
+			!core.canUseItem("fly") ||
+			(core.flags.flyNearStair && !core.nearStair() && !flags.canMoveFloor)
+		)
+			return false;
+		core.ui._drawViewMaps(toIndex);
+		if (core.status.replay.speed == 24) {
+			if (!core.flyTo(floorId, core.replay))
+				core.control._replay_error(action);
+			return true;
+		}
+		setTimeout(function () {
+			if (!core.flyTo(floorId, core.replay))
+				core.control._replay_error(action);
+		}, core.control.__replay_getTimeout());
+		return true;
+	};
+	core.registerReplayAction("fly", replayAction_fly);
+	////// 查看地图界面时,放开某个键的操作 //////
 
-      var floorId = core.floorIds[core.status.event.data.index],
-        mh = core.floors[floorId].height;
+	actions.prototype._keyUpViewMaps = function (keycode) {
+		if (core.status.event.data == null) {
+			core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));
+			return;
+		}
+		var floorId = core.floorIds[core.status.event.data.index];
 
-      if (keycode == 39) this._clickViewMaps(9, 1, 330, 250);
-      if (keycode == 37) this._clickViewMaps(9, 8, 25, 200);
-      if (keycode == 40) this._clickViewMaps(9, 6, 250, 330);
-      if (keycode == 38) this._clickViewMaps(9, 3, 200, 25);
-      if (keycode == 34) this._clickViewMaps(9, 3, 350, 330);
-      if (keycode == 33) this._clickViewMaps(9, 3, 350, 25);
-      return;
-    };
+		if (keycode == 27 || keycode == 71) {
+			core.clearMap("data");
+			core.playSound("取消");
+			core.ui.closePanel();
+			core.getItemDetail();
+			core.redrawMap();
+			core.ui.statusBar._update_map();
+			core.updateStatusBar();
+			return;
+		}
 
-    actions.prototype._sys_onmousewheel = function (direct) {
-      // 向下滚动是 -1 ,向上是 1
+		if (keycode == 86) {
+			core.status.event.data.damage = !core.status.event.data.damage;
+			core.playSound("光标移动");
+			core.ui._drawViewMaps(core.status.event.data);
+			return;
+		}
+		if (keycode == 66 || keycode == 88) {
+			if (core.isReplaying()) {
+				core.control._replay_book();
+			} else {
+				core.openBook(false);
+			}
+			return;
+		}
+		if (
+			(keycode == 13 || keycode == 32 || keycode == 67) &&
+			!core.isReplaying()
+		) {
+			core.useFly(false);
+			return;
+		}
+		return;
+	};
+	actions.prototype._keyDownViewMaps = function (keycode) {
+		if (core.status.event.data == null) return;
 
-      if (this._checkReplaying()) {
-        // 滚轮控制速度
-        if (direct == 1) core.speedUpReplay();
-        if (direct == -1) core.speedDownReplay();
-        return;
-      }
+		var floorId = core.floorIds[core.status.event.data.index],
+			mh = core.floors[floorId].height;
 
-      // 楼层飞行器
-      if (core.status.lockControl && core.status.event.id == "fly") {
-        if (direct == 1) core.ui.drawFly(this._getNextFlyFloor(1));
-        if (direct == -1) core.ui.drawFly(this._getNextFlyFloor(-1));
-        return;
-      }
+		if (keycode == 39) this._clickViewMaps(9, 1, 330, 250);
+		if (keycode == 37) this._clickViewMaps(9, 8, 25, 200);
+		if (keycode == 40) this._clickViewMaps(9, 6, 250, 330);
+		if (keycode == 38) this._clickViewMaps(9, 3, 200, 25);
+		if (keycode == 34) this._clickViewMaps(9, 3, 350, 330);
+		if (keycode == 33) this._clickViewMaps(9, 3, 350, 25);
+		return;
+	};
 
-      // 怪物手册
-      if (core.status.lockControl && core.status.event.id == "book") {
-        var pageinfo = core.ui._drawBook_pageinfo();
-        if (direct == 1)
-          core.ui.drawBook(core.status.event.data - pageinfo.per_page);
-        if (direct == -1)
-          core.ui.drawBook(core.status.event.data + pageinfo.per_page);
-        return;
-      }
+	actions.prototype._sys_onmousewheel = function (direct) {
+		// 向下滚动是 -1 ,向上是 1
 
-      // 存读档
-      if (
-        core.status.lockControl &&
-        (core.status.event.id == "save" || core.status.event.id == "load")
-      ) {
-        var index =
-          core.status.event.data.page * 10 + core.status.event.data.offset;
-        if (direct == 1) core.ui._drawSLPanel(index - 10);
-        if (direct == -1) core.ui._drawSLPanel(index + 10);
-        return;
-      }
+		if (this._checkReplaying()) {
+			// 滚轮控制速度
+			if (direct == 1) core.speedUpReplay();
+			if (direct == -1) core.speedDownReplay();
+			return;
+		}
 
-      // 浏览地图
-      if (core.status.lockControl && core.status.event.id == "viewMaps") {
-        let floorId = core.floorIds[core.status.event.data.index];
-        if (!flags.__visited__[floorId]) floorId = core.status.floorId;
-        const visit = Object.keys(flags.__visited__);
-        let index = visit.indexOf(floorId);
-        if (direct == 1) {
-          if (index > 0)
-            core.ui._drawViewMaps(core.floorIds.indexOf(visit[index - 1]));
-        }
-        if (direct == -1) {
-          if (index < visit.length - 1)
-            core.ui._drawViewMaps(core.floorIds.indexOf(visit[index + 1]));
-        }
-        return;
-      }
+		// 楼层飞行器
+		if (core.status.lockControl && core.status.event.id == "fly") {
+			if (direct == 1) core.ui.drawFly(this._getNextFlyFloor(1));
+			if (direct == -1) core.ui.drawFly(this._getNextFlyFloor(-1));
+			return;
+		}
 
-      // wait事件
-      if (
-        core.status.lockControl &&
-        core.status.event.id == "action" &&
-        core.status.event.data.type == "wait"
-      ) {
-        var timeout =
-          Math.max(0, core.status.event.timeout - new Date().getTime()) || 0;
-        core.setFlag("type", 0);
-        var keycode = direct == 1 ? 33 : 34;
-        core.setFlag("keycode", keycode);
-        core.setFlag("timeout", timeout);
-        var executed = core.events.__action_wait_afterGet(
-          core.status.event.data.current
-        );
-        if (executed || !core.status.event.data.current.forceChild) {
-          core.status.route.push("input:" + (1e8 * timeout + keycode));
-          clearTimeout(core.status.event.interval);
-          delete core.status.event.timeout;
-          core.doAction();
-        }
-        return;
-      }
-    };
-    core.registerAction(
-      "onmousewheel",
-      "_sys_onmousewheel",
-      actions.prototype._sys_onmousewheel,
-      0
-    );
-  },
+		// 怪物手册
+		if (core.status.lockControl && core.status.event.id == "book") {
+			var pageinfo = core.ui._drawBook_pageinfo();
+			if (direct == 1)
+				core.ui.drawBook(core.status.event.data - pageinfo.per_page);
+			if (direct == -1)
+				core.ui.drawBook(core.status.event.data + pageinfo.per_page);
+			return;
+		}
+
+		// 存读档
+		if (
+			core.status.lockControl &&
+			(core.status.event.id == "save" || core.status.event.id == "load")
+		) {
+			var index =
+				core.status.event.data.page * 10 + core.status.event.data.offset;
+			if (direct == 1) core.ui._drawSLPanel(index - 10);
+			if (direct == -1) core.ui._drawSLPanel(index + 10);
+			return;
+		}
+
+		// 浏览地图
+		if (core.status.lockControl && core.status.event.id == "viewMaps") {
+			let floorId = core.floorIds[core.status.event.data.index];
+			if (!flags.__visited__[floorId]) floorId = core.status.floorId;
+			const visit = Object.keys(flags.__visited__);
+			let index = visit.indexOf(floorId);
+			if (direct == 1) {
+				if (index > 0)
+					core.ui._drawViewMaps(core.floorIds.indexOf(visit[index - 1]));
+			}
+			if (direct == -1) {
+				if (index < visit.length - 1)
+					core.ui._drawViewMaps(core.floorIds.indexOf(visit[index + 1]));
+			}
+			return;
+		}
+
+		// wait事件
+		if (
+			core.status.lockControl &&
+			core.status.event.id == "action" &&
+			core.status.event.data.type == "wait"
+		) {
+			var timeout =
+				Math.max(0, core.status.event.timeout - new Date().getTime()) || 0;
+			core.setFlag("type", 0);
+			var keycode = direct == 1 ? 33 : 34;
+			core.setFlag("keycode", keycode);
+			core.setFlag("timeout", timeout);
+			var executed = core.events.__action_wait_afterGet(
+				core.status.event.data.current
+			);
+			if (executed || !core.status.event.data.current.forceChild) {
+				core.status.route.push("input:" + (1e8 * timeout + keycode));
+				clearTimeout(core.status.event.interval);
+				delete core.status.event.timeout;
+				core.doAction();
+			}
+			return;
+		}
+	};
+	core.registerAction(
+		"onmousewheel",
+		"_sys_onmousewheel",
+		actions.prototype._sys_onmousewheel,
+		0
+	);
+},
     "CG回廊": function () {
-    // 在此增加新插件
-    const CGUI = document.createElement("canvas"); //CGui画布设置
-    CGUI.style.position = "absolute";
-    CGUI.style.zIndex = 300;
-    CGUI.style.display = "none";
-    CGUI.id = "CGUI";
-    main.dom.gameGroup.insertAdjacentElement("afterend", CGUI);
-    CGUI.style.top = "50%";
-    CGUI.style.left = "50%";
-    CGUI.style.transform = "translate(-50%,-50%)";
-    const ctx = CGUI.getContext("2d");
-    main.dom.CGUI = CGUI;
-    let page = 0; //初始页面
-    let show = false; //展示状态
-    CGUI.onclick = function (e) {
-      try {
-        e.preventDefault();
-        if (core.isPlaying()) return false;
-        const left = core.dom.gameGroup.offsetLeft;
-        const top = core.dom.gameGroup.offsetTop;
-        const px = Math.floor((e.clientX - left) / core.domStyle.scale),
-          py = Math.floor((e.clientY - top) / core.domStyle.scale);
-        core.ui.CG.onclick(px * 3, py * 3);
-      } catch (ee) {
-        main.log(ee);
-      }
-    };
+	// 在此增加新插件
+	const CGUI = document.createElement("canvas"); //CGui画布设置
+	CGUI.style.position = "absolute";
+	CGUI.style.zIndex = 300;
+	CGUI.style.display = "none";
+	CGUI.id = "CGUI";
+	main.dom.gameGroup.insertAdjacentElement("afterend", CGUI);
+	CGUI.style.top = "50%";
+	CGUI.style.left = "50%";
+	CGUI.style.transform = "translate(-50%,-50%)";
+	const ctx = CGUI.getContext("2d");
+	main.dom.CGUI = CGUI;
+	let page = 0; //初始页面
+	let show = false; //展示状态
+	CGUI.onclick = function (e) {
+		try {
+			e.preventDefault();
+			if (core.isPlaying()) return false;
+			const left = core.dom.gameGroup.offsetLeft;
+			const top = core.dom.gameGroup.offsetTop;
+			const px = Math.floor((e.clientX - left) / core.domStyle.scale),
+				py = Math.floor((e.clientY - top) / core.domStyle.scale);
+			core.ui.CG.onclick(px * 3, py * 3);
+		} catch (ee) {
+			main.log(ee);
+		}
+	};
 
-    class CG {
-      constructor() {
-        this.cgs;
-        //cg列表
-        this.UIMx = [
-          //空位用‘none’填充,当前ui至多4列6行
-          [
-            ["eve_010102.webp", "eve_010203.webp", "eve_010304.webp"],
-            ["eve_010501.webp", "eve_010601.webp", "eve_010701.webp"],
-          ],
-          [
-            ["eve_010801.webp", "eve_010902.webp", "eve_011001.webp"],
-            ["eve_011101.webp", "eve_011202.webp", "eve_011302.webp"],
-          ],
-          [
-            ["eve_011402.webp", "eve_020102.webp", "eve_020201.webp"],
-            ["eve_020301.webp", "eve_020401.webp", "eve_020501.webp"],
-          ],
-          [
-            ["eve_020605.webp", "eve_020701.webp", "eve_020801.webp"],
-            ["eve_030101.webp", "eve_030206.webp", "eve_030302.webp"],
-          ],
-          [
-            ["eve_030508.webp", "eve_030601.webp", "eve_030801.webp"],
-            ["eve_030901.webp", "eve_031002.webp", "eve_031101.webp"],
-          ],
-          [
-            ["eve_040201.webp", "eve_040401.webp", "eve_040501.webp"],
-            ["eve_040601.webp", "eve_040702.webp", "eve_040801.webp"],
-          ],
-          [
-            ["eve_050101.webp", "eve_050201.webp", "eve_050401.webp"],
-            ["eve_050501.webp", "eve_050601.webp", "eve_050704.webp"],
-          ],
-          [
-            ["eve_050801.webp", "eve_070101.webp", "bg_1511.webp"],
-            ["bg_1521.webp", "bg_2011.webp", "bg_2521.webp"],
-          ],
-          [
-            ["bg_3042.webp", "bg_3551.webp", "bg_3571.webp"],
-            ["bg_3721.webp", "bg_5033.webp", "bg_5044.webp"],
-          ],
-        ];
-      }
+	class CG {
+		constructor() {
+			this.cgs;
+			//cg列表
+			this.UIMx = [
+				//空位用‘none’填充,当前ui3*2
+				[
+					["eve_010102.webp", "eve_010203.webp", "eve_010304.webp"],
+					["eve_010501.webp", "eve_010601.webp", "eve_010701.webp"],
+				],
+				[
+					["eve_010801.webp", "eve_010902.webp", "eve_011001.webp"],
+					["eve_011101.webp", "eve_011202.webp", "eve_011302.webp"],
+				],
+				[
+					["eve_011402.webp", "eve_020102.webp", "eve_020201.webp"],
+					["eve_020301.webp", "eve_020401.webp", "eve_020501.webp"],
+				],
+				[
+					["eve_020605.webp", "eve_020701.webp", "eve_020801.webp"],
+					["eve_030101.webp", "eve_030206.webp", "eve_030302.webp"],
+				],
+				[
+					["eve_030508.webp", "eve_030601.webp", "eve_030801.webp"],
+					["eve_030901.webp", "eve_031002.webp", "eve_031101.webp"],
+				],
+				[
+					["eve_040201.webp", "eve_040401.webp", "eve_040501.webp"],
+					["eve_040601.webp", "eve_040702.webp", "eve_040801.webp"],
+				],
+				[
+					["eve_050101.webp", "eve_050201.webp", "eve_050401.webp"],
+					["eve_050501.webp", "eve_050601.webp", "eve_050704.webp"],
+				],
+				[
+					["eve_050801.webp", "eve_070101.webp", "bg_1511.webp"],
+					["bg_1521.webp", "bg_2011.webp", "bg_2521.webp"],
+				],
+				[
+					["bg_3042.webp", "bg_3551.webp", "bg_3571.webp"],
+					["bg_3721.webp", "bg_5033.webp", "bg_5044.webp"],
+				],
+			];
+		}
 
-      //更新
-      update() {
-        this.background();
-        this.drawUI();
-      }
-      background() {
-        //画布大小设置
-        if (core.domStyle.isVertical) {
-          CGUI.width = 1248;
-          CGUI.height = 2028;
-        } else {
-          CGUI.width = 2028;
-          CGUI.height = 1248;
-        }
-        core.setTextAlign(ctx, "center");
-      }
-      onclick(px, py) {
-        //点击
+		//更新
+		update() {
+			this.background();
+			this.drawUI();
+		}
+		background() {
+			//画布大小设置
+			if (core.domStyle.isVertical) {
+				CGUI.width = 1248;
+				CGUI.height = 2028;
+			} else {
+				CGUI.width = 2028;
+				CGUI.height = 1248;
+			}
+			core.setTextAlign(ctx, "center");
+		}
+		onclick(px, py) {
+			//点击
 
-        if (show) {
-          show = !show;
-          core.clearMap(ctx);
-          this.update();
-          return;
-        }
-        const makeBox = ([x, y], [w, h]) => {
-          return [
-            [x, y],
-            [x + w, y + h],
-          ];
-        };
-        const inRect = ([x, y], [[sx, sy], [dx, dy]]) => {
-          return sx <= x && x <= dx && sy <= y && y <= dy;
-        };
-        const pos = [px, py];
-        const backbox = makeBox([15, 35], [210, 90]);
-        if (inRect(pos, backbox)) {
-          //离开按钮是一致的,其余的记区分横竖屏
-          CGUI.style.display = "none";
-          core.clearMap(ctx);
-          core.restart();
-          return;
-        }
-        if (core.domStyle.isVertical) {
-          //竖屏
-          const pageupbox = makeBox([200, 1830], [200, 100]);
-          const pagedownbox = makeBox([900, 1830], [200, 100]);
+			if (show) {
+				show = !show;
+				core.clearMap(ctx);
+				this.update();
+				return;
+			}
+			const makeBox = ([x, y], [w, h]) => {
+				return [
+					[x, y],
+					[x + w, y + h],
+				];
+			};
+			const inRect = ([x, y], [
+				[sx, sy],
+				[dx, dy]
+			]) => {
+				return sx <= x && x <= dx && sy <= y && y <= dy;
+			};
+			const pos = [px, py];
+			const backbox = makeBox([15, 35], [210, 90]);
+			if (inRect(pos, backbox)) {
+				//离开按钮是一致的,其余的记区分横竖屏
+				CGUI.style.display = "none";
+				core.clearMap(ctx);
+				core.restart();
+				return;
+			}
+			if (core.domStyle.isVertical) {
+				//竖屏
+				const pageupbox = makeBox([200, 1830], [200, 100]);
+				const pagedownbox = makeBox([900, 1830], [200, 100]);
 
-          const imagebox0 = makeBox([50, 200], [560, 420]);
-          const imagebox1 = makeBox([50, 750], [560, 420]);
-          const imagebox2 = makeBox([50, 1300], [560, 420]);
+				const imagebox0 = makeBox([50, 200], [560, 420]);
+				const imagebox1 = makeBox([50, 750], [560, 420]);
+				const imagebox2 = makeBox([50, 1300], [560, 420]);
 
-          const imagebox3 = makeBox([650, 200], [560, 420]);
-          const imagebox4 = makeBox([650, 750], [560, 420]);
-          const imagebox5 = makeBox([650, 1300], [560, 420]);
-          if (inRect(pos, pagedownbox)) {
-            //2代表当前最大页数-1
-            if (page < this.UIMx.length - 1) {
-              page++;
-              core.clearMap(ctx);
-              this.update();
-            }
-          } else if (inRect(pos, pageupbox)) {
-            if (page > 0) {
-              page--;
-              core.clearMap(ctx);
-              this.update();
-            }
-          } else if (inRect(pos, imagebox0)) {
-            if (this.cgs.includes(this.UIMx[page][0][0])) {
-              const img = core.material.images.images[this.UIMx[page][0][0]];
-              if (img) {
-                ctx.save(); //保存设置
-                ctx.translate(1248, 0); //重新定位右上角为基准
-                ctx.rotate(Math.PI / 2); //旋转90度
-                ctx.drawImage(img, 0, 0, 2028, 1248);
-                ctx.restore(); //重置画布设置
-                show = !show;
-              }
-            }
-          } else if (inRect(pos, imagebox1)) {
-            if (this.cgs.includes(this.UIMx[page][0][1])) {
-              const img = core.material.images.images[this.UIMx[page][0][1]];
-              if (img) {
-                ctx.save(); //保存设置
-                ctx.translate(1248, 0); //重新定位右上角为基准
-                ctx.rotate(Math.PI / 2); //旋转90度
-                ctx.drawImage(img, 0, 0, 2028, 1248);
-                ctx.restore(); //重置画布设置
-                show = !show;
-              }
-            }
-          } else if (inRect(pos, imagebox2)) {
-            if (this.cgs.includes(this.UIMx[page][0][2])) {
-              const img = core.material.images.images[this.UIMx[page][0][2]];
-              if (img) {
-                ctx.save(); //保存设置
-                ctx.translate(1248, 0); //重新定位右上角为基准
-                ctx.rotate(Math.PI / 2); //旋转90度
-                ctx.drawImage(img, 0, 0, 2028, 1248);
-                ctx.restore(); //重置画布设置
-                show = !show;
-              }
-            }
-          } else if (inRect(pos, imagebox3)) {
-            if (this.cgs.includes(this.UIMx[page][1][0])) {
-              const img = core.material.images.images[this.UIMx[page][1][0]];
-              if (img) {
-                ctx.save(); //保存设置
-                ctx.translate(1248, 0); //重新定位右上角为基准
-                ctx.rotate(Math.PI / 2); //旋转90度
-                ctx.drawImage(img, 0, 0, 2028, 1248);
-                ctx.restore(); //重置画布设置
-                show = !show;
-              }
-            }
-          } else if (inRect(pos, imagebox4)) {
-            if (this.cgs.includes(this.UIMx[page][1][1])) {
-              const img = core.material.images.images[this.UIMx[page][1][1]];
-              if (img) {
-                ctx.save(); //保存设置
-                ctx.translate(1248, 0); //重新定位右上角为基准
-                ctx.rotate(Math.PI / 2); //旋转90度
-                ctx.drawImage(img, 0, 0, 2028, 1248);
-                ctx.restore(); //重置画布设置
-                show = !show;
-              }
-            }
-          } else if (inRect(pos, imagebox5)) {
-            if (this.cgs.includes(this.UIMx[page][1][2])) {
-              const img = core.material.images.images[this.UIMx[page][1][2]];
-              if (img) {
-                ctx.save(); //保存设置
-                ctx.translate(1248, 0); //重新定位右上角为基准
-                ctx.rotate(Math.PI / 2); //旋转90度
-                ctx.drawImage(img, 0, 0, 2028, 1248);
-                ctx.restore(); //重置画布设置
-                show = !show;
-              }
-            }
-          }
-        } else {
-          const pageupbox = makeBox([200, 1110], [200, 100]);
-          const pagedownbox = makeBox([1600, 1110], [200, 100]);
-          const imagebox0 = makeBox([75, 150], [600, 450]);
-          const imagebox1 = makeBox([725, 150], [600, 450]);
-          const imagebox2 = makeBox([1300, 150], [600, 450]);
-          const imagebox3 = makeBox([75, 650], [600, 450]);
-          const imagebox4 = makeBox([725, 650], [600, 450]);
-          const imagebox5 = makeBox([1375, 650], [600, 450]);
-          if (inRect(pos, pagedownbox)) {
-            if (page < this.UIMx.length - 1) {
-              page++;
-              core.clearMap(ctx);
-              this.update();
-            }
-          } else if (inRect(pos, pageupbox)) {
-            if (page > 0) {
-              page--;
-              core.clearMap(ctx);
-              this.update();
-            }
-          } else if (inRect(pos, imagebox0)) {
-            if (this.cgs.includes(this.UIMx[page][0][0])) {
-              const img = core.material.images.images[this.UIMx[page][0][0]];
-              if (img) {
-                ctx.drawImage(img, 0, 0, 2028, 1248);
-                show = !show;
-              }
-            }
-          } else if (inRect(pos, imagebox1)) {
-            if (this.cgs.includes(this.UIMx[page][0][1])) {
-              const img = core.material.images.images[this.UIMx[page][0][1]];
-              if (img) {
-                ctx.drawImage(img, 0, 0, 2028, 1248);
-                show = !show;
-              }
-            }
-          } else if (inRect(pos, imagebox2)) {
-            if (this.cgs.includes(this.UIMx[page][0][2])) {
-              const img = core.material.images.images[this.UIMx[page][0][2]];
-              if (img) {
-                ctx.drawImage(img, 0, 0, 2028, 1248);
-                show = !show;
-              }
-            }
-          } else if (inRect(pos, imagebox3)) {
-            if (this.cgs.includes(this.UIMx[page][1][0])) {
-              const img = core.material.images.images[this.UIMx[page][1][0]];
-              if (img) {
-                ctx.drawImage(img, 0, 0, 2028, 1248);
-                show = !show;
-              }
-            }
-          } else if (inRect(pos, imagebox4)) {
-            if (this.cgs.includes(this.UIMx[page][1][1])) {
-              const img = core.material.images.images[this.UIMx[page][1][1]];
-              if (img) {
-                ctx.drawImage(img, 0, 0, 2028, 1248);
-                show = !show;
-              }
-            }
-          } else if (inRect(pos, imagebox5)) {
-            if (this.cgs.includes(this.UIMx[page][1][2])) {
-              const img = core.material.images.images[this.UIMx[page][1][2]];
-              if (img) {
-                ctx.drawImage(img, 0, 0, 2028, 1248);
-                show = !show;
-              }
-            }
-          }
-        }
-      }
-      drawUI() {
-        //绘制页面
-        core.clearMap(CGUI);
-        const bgVertical = core.material.images.images["bg_2010.webp"]; //竖屏背景
-        const bg = core.material.images.images["bg_5043.webp"]; //横屏背景
+				const imagebox3 = makeBox([650, 200], [560, 420]);
+				const imagebox4 = makeBox([650, 750], [560, 420]);
+				const imagebox5 = makeBox([650, 1300], [560, 420]);
+				if (inRect(pos, pagedownbox)) {
+					//2代表当前最大页数-1
+					if (page < this.UIMx.length - 1) {
+						page++;
+						core.clearMap(ctx);
+						this.update();
+					}
+				} else if (inRect(pos, pageupbox)) {
+					if (page > 0) {
+						page--;
+						core.clearMap(ctx);
+						this.update();
+					}
+				} else if (inRect(pos, imagebox0)) {
+					if (this.cgs.includes(this.UIMx[page][0][0])) {
+						const img = core.material.images.images[this.UIMx[page][0][0]];
+						if (img) {
+							ctx.save(); //保存设置
+							ctx.translate(1248, 0); //重新定位右上角为基准
+							ctx.rotate(Math.PI / 2); //旋转90度
+							ctx.drawImage(img, 0, 0, 2028, 1248);
+							ctx.restore(); //重置画布设置
+							show = !show;
+						}
+					}
+				} else if (inRect(pos, imagebox1)) {
+					if (this.cgs.includes(this.UIMx[page][0][1])) {
+						const img = core.material.images.images[this.UIMx[page][0][1]];
+						if (img) {
+							ctx.save(); //保存设置
+							ctx.translate(1248, 0); //重新定位右上角为基准
+							ctx.rotate(Math.PI / 2); //旋转90度
+							ctx.drawImage(img, 0, 0, 2028, 1248);
+							ctx.restore(); //重置画布设置
+							show = !show;
+						}
+					}
+				} else if (inRect(pos, imagebox2)) {
+					if (this.cgs.includes(this.UIMx[page][0][2])) {
+						const img = core.material.images.images[this.UIMx[page][0][2]];
+						if (img) {
+							ctx.save(); //保存设置
+							ctx.translate(1248, 0); //重新定位右上角为基准
+							ctx.rotate(Math.PI / 2); //旋转90度
+							ctx.drawImage(img, 0, 0, 2028, 1248);
+							ctx.restore(); //重置画布设置
+							show = !show;
+						}
+					}
+				} else if (inRect(pos, imagebox3)) {
+					if (this.cgs.includes(this.UIMx[page][1][0])) {
+						const img = core.material.images.images[this.UIMx[page][1][0]];
+						if (img) {
+							ctx.save(); //保存设置
+							ctx.translate(1248, 0); //重新定位右上角为基准
+							ctx.rotate(Math.PI / 2); //旋转90度
+							ctx.drawImage(img, 0, 0, 2028, 1248);
+							ctx.restore(); //重置画布设置
+							show = !show;
+						}
+					}
+				} else if (inRect(pos, imagebox4)) {
+					if (this.cgs.includes(this.UIMx[page][1][1])) {
+						const img = core.material.images.images[this.UIMx[page][1][1]];
+						if (img) {
+							ctx.save(); //保存设置
+							ctx.translate(1248, 0); //重新定位右上角为基准
+							ctx.rotate(Math.PI / 2); //旋转90度
+							ctx.drawImage(img, 0, 0, 2028, 1248);
+							ctx.restore(); //重置画布设置
+							show = !show;
+						}
+					}
+				} else if (inRect(pos, imagebox5)) {
+					if (this.cgs.includes(this.UIMx[page][1][2])) {
+						const img = core.material.images.images[this.UIMx[page][1][2]];
+						if (img) {
+							ctx.save(); //保存设置
+							ctx.translate(1248, 0); //重新定位右上角为基准
+							ctx.rotate(Math.PI / 2); //旋转90度
+							ctx.drawImage(img, 0, 0, 2028, 1248);
+							ctx.restore(); //重置画布设置
+							show = !show;
+						}
+					}
+				}
+			} else {
+				const pageupbox = makeBox([200, 1110], [200, 100]);
+				const pagedownbox = makeBox([1600, 1110], [200, 100]);
+				const imagebox0 = makeBox([75, 150], [600, 450]);
+				const imagebox1 = makeBox([725, 150], [600, 450]);
+				const imagebox2 = makeBox([1300, 150], [600, 450]);
+				const imagebox3 = makeBox([75, 650], [600, 450]);
+				const imagebox4 = makeBox([725, 650], [600, 450]);
+				const imagebox5 = makeBox([1375, 650], [600, 450]);
+				if (inRect(pos, pagedownbox)) {
+					if (page < this.UIMx.length - 1) {
+						page++;
+						core.clearMap(ctx);
+						this.update();
+					}
+				} else if (inRect(pos, pageupbox)) {
+					if (page > 0) {
+						page--;
+						core.clearMap(ctx);
+						this.update();
+					}
+				} else if (inRect(pos, imagebox0)) {
+					if (this.cgs.includes(this.UIMx[page][0][0])) {
+						const img = core.material.images.images[this.UIMx[page][0][0]];
+						if (img) {
+							ctx.drawImage(img, 0, 0, 2028, 1248);
+							show = !show;
+						}
+					}
+				} else if (inRect(pos, imagebox1)) {
+					if (this.cgs.includes(this.UIMx[page][0][1])) {
+						const img = core.material.images.images[this.UIMx[page][0][1]];
+						if (img) {
+							ctx.drawImage(img, 0, 0, 2028, 1248);
+							show = !show;
+						}
+					}
+				} else if (inRect(pos, imagebox2)) {
+					if (this.cgs.includes(this.UIMx[page][0][2])) {
+						const img = core.material.images.images[this.UIMx[page][0][2]];
+						if (img) {
+							ctx.drawImage(img, 0, 0, 2028, 1248);
+							show = !show;
+						}
+					}
+				} else if (inRect(pos, imagebox3)) {
+					if (this.cgs.includes(this.UIMx[page][1][0])) {
+						const img = core.material.images.images[this.UIMx[page][1][0]];
+						if (img) {
+							ctx.drawImage(img, 0, 0, 2028, 1248);
+							show = !show;
+						}
+					}
+				} else if (inRect(pos, imagebox4)) {
+					if (this.cgs.includes(this.UIMx[page][1][1])) {
+						const img = core.material.images.images[this.UIMx[page][1][1]];
+						if (img) {
+							ctx.drawImage(img, 0, 0, 2028, 1248);
+							show = !show;
+						}
+					}
+				} else if (inRect(pos, imagebox5)) {
+					if (this.cgs.includes(this.UIMx[page][1][2])) {
+						const img = core.material.images.images[this.UIMx[page][1][2]];
+						if (img) {
+							ctx.drawImage(img, 0, 0, 2028, 1248);
+							show = !show;
+						}
+					}
+				}
+			}
+		}
+		drawUI() {
+			//绘制页面
+			core.clearMap(CGUI);
+			const bgVertical = core.material.images.images["bg_2010.webp"]; //竖屏背景
+			const bg = core.material.images.images["bg_5043.webp"]; //横屏背景
 
-        if (core.domStyle.isVertical) {
-          //竖屏
+			if (core.domStyle.isVertical) {
+				//竖屏
 
-          core.fillRect(ctx, 0, 0, 1248, 2028, "#000000"); //黑色背景
-          ctx.globalAlpha = 0.5; //透明度
-          if (bgVertical)
-            ctx.drawImage(bgVertical, 0, 0, 1280, 1500, 0, 0, 1248, 2028); //绘制半透明背景图片
-          ctx.globalAlpha = 1; //恢复为不透明
+				core.fillRect(ctx, 0, 0, 1248, 2028, "#000000"); //黑色背景
+				ctx.globalAlpha = 0.5; //透明度
+				if (bgVertical)
+					ctx.drawImage(bgVertical, 0, 0, 1280, 1500, 0, 0, 1248, 2028); //绘制半透明背景图片
+				ctx.globalAlpha = 1; //恢复为不透明
 
-          core.setTextAlign(ctx, "center");
-          core.fillBoldText1(
-            ctx,
-            "◀离开",
-            100,
-            110,
-            "#FFFFFF",
-            "#000000",
-            6,
-            core.ui._buildFont(66, true)
-          );
+				core.setTextAlign(ctx, "center");
+				core.fillBoldText1(
+					ctx,
+					"◀离开",
+					100,
+					110,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(66, true)
+				);
 
-          core.fillBoldText1(
-            ctx,
-            "上一页",
-            300,
-            1900,
-            page === 0 ? "#444444" : "#FFFFFF",
-            "#000000",
-            6,
-            core.ui._buildFont(66, true)
-          );
+				core.fillBoldText1(
+					ctx,
+					"上一页",
+					300,
+					1900,
+					page === 0 ? "#444444" : "#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(66, true)
+				);
 
-          core.fillBoldText1(
-            ctx,
-            page + 1 + "/" + this.UIMx.length,
-            650,
-            1900,
-            "#FFFFFF",
-            "#000000",
-            6,
-            core.ui._buildFont(66, true)
-          );
-          core.fillBoldText1(
-            ctx,
-            "下一页",
-            1000,
-            1900,
-            page === this.UIMx.length - 1 ? "#444444" : "#FFFFFF",
-            "#000000",
-            6,
-            core.ui._buildFont(66, true)
-          );
-          // 添加向上翻页和向下翻页的按钮
+				core.fillBoldText1(
+					ctx,
+					page + 1 + "/" + this.UIMx.length,
+					650,
+					1900,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(66, true)
+				);
+				core.fillBoldText1(
+					ctx,
+					"下一页",
+					1000,
+					1900,
+					page === this.UIMx.length - 1 ? "#444444" : "#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(66, true)
+				);
+				// 添加向上翻页和向下翻页的按钮
 
-          // 添加3*2个4:3的画框,及图片
-          for (let i = 0; i < 3; i++) {
-            for (let j = 0; j < 2; j++) {
-              const img = core.material.images.images[this.UIMx[page][j][i]];
-              core.strokeRect(
-                ctx,
-                50 + j * 600,
-                200 + i * 550,
-                560,
-                420,
-                "#444444",
-                5
-              );
-              if (this.cgs.includes(this.UIMx[page][j][i])) {
-                if (img)
-                  ctx.drawImage(
-                    img,
-                    50 + j * 600 + 15,
-                    200 + i * 550 + 15,
-                    560 - 30,
-                    420 - 30
-                  );
-              } else {
-                ctx.fillStyle = "#000000";
-                ctx.fillRect(
-                  50 + j * 600 + 15,
-                  200 + i * 550 + 15,
-                  560 - 30,
-                  420 - 30
-                );
-                const img = core.material.images.images["LOGO.webp"];
-                if (img)
-                  ctx.drawImage(
-                    img,
-                    50 + j * 600 + 15,
-                    200 + i * 550 + 15,
-                    560 - 30,
-                    420 - 30
-                  );
-              }
-            }
-          }
-        } else {
-          //横屏
-          core.fillRect(ctx, 0, 0, 2028, 1248, "#000000"); //黑色背景
-          ctx.globalAlpha = 0.5; //透明度
-          if (bg) ctx.drawImage(bg, 0, 0, 1280, 720, 0, 0, 2028, 1248); //绘制半透明背景图片
-          ctx.globalAlpha = 1; //恢复为不透明
-          //core.drawWindowSkin('winskin1.png', ctx, 0, 0, 2028, 1248);
-          core.setTextAlign(ctx, "center");
-          core.fillBoldText1(
-            ctx,
-            "◀离开",
-            110,
-            100,
-            "#FFFFFF",
-            "#000000",
-            6,
-            core.ui._buildFont(66, true)
-          );
+				// 添加3*2个4:3的画框,及图片
+				for (let i = 0; i < 3; i++) {
+					for (let j = 0; j < 2; j++) {
+						const img = core.material.images.images[this.UIMx[page][j][i]];
+						core.strokeRect(
+							ctx,
+							50 + j * 600,
+							200 + i * 550,
+							560,
+							420,
+							"#444444",
+							5
+						);
+						if (this.cgs.includes(this.UIMx[page][j][i])) {
+							if (img)
+								ctx.drawImage(
+									img,
+									50 + j * 600 + 15,
+									200 + i * 550 + 15,
+									560 - 30,
+									420 - 30
+								);
+						} else {
+							ctx.fillStyle = "#000000";
+							ctx.fillRect(
+								50 + j * 600 + 15,
+								200 + i * 550 + 15,
+								560 - 30,
+								420 - 30
+							);
+							const img = core.material.images.images["LOGO.webp"];
+							if (img)
+								ctx.drawImage(
+									img,
+									50 + j * 600 + 15,
+									200 + i * 550 + 15,
+									560 - 30,
+									420 - 30
+								);
+						}
+					}
+				}
+			} else {
+				//横屏
+				core.fillRect(ctx, 0, 0, 2028, 1248, "#000000"); //黑色背景
+				ctx.globalAlpha = 0.5; //透明度
+				if (bg) ctx.drawImage(bg, 0, 0, 1280, 720, 0, 0, 2028, 1248); //绘制半透明背景图片
+				ctx.globalAlpha = 1; //恢复为不透明
 
-          // 添加向上翻页和向下翻页的按钮
-          core.fillBoldText1(
-            ctx,
-            "上一页",
-            300,
-            1180,
-            page === 0 ? "#444444" : "#FFFFFF",
-            "#000000",
-            6,
-            core.ui._buildFont(66, true)
-          );
+				core.setTextAlign(ctx, "center");
+				core.fillBoldText1(
+					ctx,
+					"◀离开",
+					110,
+					100,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(66, true)
+				);
 
-          core.fillBoldText1(
-            ctx,
-            page + 1 + "/" + this.UIMx.length,
-            1000,
-            1180,
-            "#FFFFFF",
-            "#000000",
-            6,
-            core.ui._buildFont(66, true)
-          );
-          core.fillBoldText1(
-            ctx,
-            "下一页",
-            1700,
-            1180,
-            page === this.UIMx.length - 1 ? "#444444" : "#FFFFFF",
-            "#000000",
-            6,
-            core.ui._buildFont(66, true)
-          );
+				// 添加向上翻页和向下翻页的按钮
+				core.fillBoldText1(
+					ctx,
+					"上一页",
+					300,
+					1180,
+					page === 0 ? "#444444" : "#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(66, true)
+				);
 
-          // 添加3*2个4:3的画框
-          for (let i = 0; i < 2; i++) {
-            for (let j = 0; j < 3; j++) {
-              core.strokeRect(
-                ctx,
-                75 + j * 650,
-                150 + i * 500,
-                600,
-                450,
-                "#444444",
-                2
-              );
-              if (this.cgs.includes(this.UIMx[page][i][j])) {
-                const img = core.material.images.images[this.UIMx[page][i][j]];
-                if (img)
-                  ctx.drawImage(
-                    img,
-                    75 + j * 650 + 15,
-                    150 + i * 500 + 15,
-                    600 - 30,
-                    450 - 30
-                  );
-              } else {
-                ctx.fillStyle = "#000000";
-                ctx.fillRect(
-                  75 + j * 650 + 15,
-                  150 + i * 500 + 15,
-                  600 - 30,
-                  450 - 30
-                );
-                const img = core.material.images.images["LOGO.webp"];
-                if (img)
-                  ctx.drawImage(
-                    img,
-                    75 + j * 650 + 15,
-                    150 + i * 500 + 15,
-                    600 - 30,
-                    450 - 30
-                  );
-              }
-            }
-          }
-        }
-      }
-    }
-    this.setcgs = function (img) {
-      const a = core.getLocalStorage("cgs", []);
-      if (img) {
-        if (!a.includes(img)) a.push(img);
-        core.setLocalStorage("cgs", a);
-      } else core.setLocalStorage("cgs");
-    };
-    core.ui.CG = new CG();
-    main.dom.CGMode.onclick = function () {
-      //点击开始页面的CG MODE进入cg回廊
-      main.core.control.checkBgm();
-      page = 0;
-      main.core.ui.CG.cgs = core.getLocalStorage("cgs", []);
-      CGUI.style.display = "block";
-      main.core.ui.CG.update();
-    };
-  },
+				core.fillBoldText1(
+					ctx,
+					page + 1 + "/" + this.UIMx.length,
+					1000,
+					1180,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(66, true)
+				);
+				core.fillBoldText1(
+					ctx,
+					"下一页",
+					1700,
+					1180,
+					page === this.UIMx.length - 1 ? "#444444" : "#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(66, true)
+				);
+
+				// 添加3*2个4:3的画框
+				for (let i = 0; i < 2; i++) {
+					for (let j = 0; j < 3; j++) {
+						core.strokeRect(
+							ctx,
+							75 + j * 650,
+							150 + i * 500,
+							600,
+							450,
+							"#444444",
+							2
+						);
+						if (this.cgs.includes(this.UIMx[page][i][j])) {
+							const img = core.material.images.images[this.UIMx[page][i][j]];
+							if (img)
+								ctx.drawImage(
+									img,
+									75 + j * 650 + 15,
+									150 + i * 500 + 15,
+									600 - 30,
+									450 - 30
+								);
+						} else {
+							ctx.fillStyle = "#000000";
+							ctx.fillRect(
+								75 + j * 650 + 15,
+								150 + i * 500 + 15,
+								600 - 30,
+								450 - 30
+							);
+							const img = core.material.images.images["LOGO.webp"];
+							if (img)
+								ctx.drawImage(
+									img,
+									75 + j * 650 + 15,
+									150 + i * 500 + 15,
+									600 - 30,
+									450 - 30
+								);
+						}
+					}
+				}
+			}
+		}
+	}
+	this.setcgs = function (img) {
+		const a = core.getLocalStorage("cgs", []);
+		if (img) {
+			if (!a.includes(img)) a.push(img);
+			core.setLocalStorage("cgs", a);
+		} else core.setLocalStorage("cgs");
+	};
+	core.ui.CG = new CG();
+	main.dom.CGMode.onclick = function () {
+		//点击开始页面的CG MODE进入cg回廊
+		main.core.control.checkBgm();
+		page = 0;
+		main.core.ui.CG.cgs = core.getLocalStorage("cgs", []);
+		CGUI.style.display = "block";
+		main.core.ui.CG.update();
+	};
+},
     "光标设置": function () {
     // 在此增加新插件
     this.changeMouse = function (
@@ -14528,1536 +15385,4107 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
     };
   },
     "信息弹出": function () {
-    // 在此增加新插件
-    /* 弹出显示某个内容
-     * 使用方法:core.addPop(px, py, value, color, boldColor, left, jump, time, show, font, speed)
-     * 参数说明:
-     * px & py: number  弹出位置
-     * value: string  显示内容
-     * color: string  填充颜色
-     * boldColor: string  描边颜色
-     */
+	// 在此增加新插件
+	/* 弹出显示某个内容
+	 * 使用方法:core.addPop(px, py, value, color, boldColor, left, jump, time, show, font, speed)
+	 * 参数说明:
+	 * px & py: number  弹出位置
+	 * value: string  显示内容
+	 * color: string  填充颜色
+	 * boldColor: string  描边颜色
+	 */
 
-    // 默认字体
-    var fontD = "16px Verdana";
-    // 默认颜色
-    var colorD = "red";
-    // 默认描边颜色
-    var boldColorD = "black";
+	// 默认字体
+	var fontD = "16px Verdana";
+	// 默认颜色
+	var colorD = "red";
+	// 默认描边颜色
+	var boldColorD = "black";
 
-    /** 血量弹出 */
-    function pop() {
-      var ctx = core.getContextByName("pop");
-      if (!ctx)
-        ctx = core.createCanvas(
-          "pop",
-          0,
-          0,
-          core.__PIXELS__,
-          core.__PIXELS__,
-          90
-        );
-      ctx.canvas.classList.add("gameCanvas", "anti-aliasing");
-      core.clearMap(ctx);
-      core.setTextAlign("pop", "left");
-      var list = core.status.pop || [];
-      var count = 0;
-      list.forEach(function (one) {
-        // 由frame计算出dy
-        var dy = 6 - one.frame * 0.2;
-        var dx = one.speed;
-        if (one.jump) {
-          one.py -= dy;
-        }
-        if (!one.left) {
-          one.px += dx;
-        } else {
-          one.px -= dx;
-        }
-        one.frame++;
-        // 绘制
-        if (one.frame >= one.time)
-          core.setAlpha(ctx, 1 - (one.frame - one.time) / one.show);
-        else core.setAlpha(ctx, 1);
-        core.fillBoldText1(
-          ctx,
-          one.value,
-          one.px,
-          one.py,
-          one.color || "red",
-          one.boldColor || "black",
-          2,
-          one.font
-        );
-        if (one.frame >= one.time + one.show) count++;
-      });
-      if (count > 0) list.splice(0, count);
-    }
-    let now = 0;
-    if (!main.replayChecking)
-      core.registerAnimationFrame("pop", true, (temptime) => {
-        if (temptime - now > 1000 / 60) {
-          now = temptime;
-          pop();
-        }
-      });
+	/** 血量弹出 */
+	function pop() {
+		var ctx = core.getContextByName("pop");
+		if (!ctx)
+			ctx = core.createCanvas(
+				"pop",
+				0,
+				0,
+				core.__PIXELS__,
+				core.__PIXELS__,
+				90
+			);
+		ctx.canvas.classList.add("gameCanvas", "anti-aliasing");
+		core.clearMap(ctx);
+		core.setTextAlign("pop", "left");
+		var list = core.status.pop || [];
+		var count = 0;
+		list.forEach(function (one) {
+			// 由frame计算出dy
+			var dy = 6 - one.frame * 0.2;
+			var dx = one.speed;
+			if (one.jump) {
+				one.py -= dy;
+			}
+			if (!one.left) {
+				one.px += dx;
+			} else {
+				one.px -= dx;
+			}
+			one.frame++;
+			// 绘制
+			if (one.frame >= one.time)
+				core.setAlpha(ctx, 1 - (one.frame - one.time) / one.show);
+			else core.setAlpha(ctx, 1);
+			core.fillBoldText1(
+				ctx,
+				one.value,
+				one.px,
+				one.py,
+				one.color || "red",
+				one.boldColor || "black",
+				2,
+				one.font
+			);
+			if (one.frame >= one.time + one.show) count++;
+		});
+		if (count > 0) list.splice(0, count);
+	}
+	if (!main.replayChecking)
+		core.registerAnimationFrame("pop", true, (temptime) => {
+			pop();
 
-    /** 添加弹出内容 */
-    this.addPop = function (
-      value,
-      px,
-      py,
-      color,
-      boldColor,
-      left,
-      jump,
-      time,
-      show,
-      font,
-      speed
-    ) {
-      var data = {
-        px: px,
-        py: py,
-        value: value,
-        color: color || colorD,
-        boldColor: boldColor || boldColorD,
-        frame: 0,
-        left: left || false,
-        jump: jump || false,
-        time: time || 60,
-        show: show || 30,
-        font: font || fontD,
-        speed: speed || 1,
-      };
-      if (!core.status.pop) core.status.pop = [data];
-      else core.status.pop.push(data);
-    };
-  },
+		});
+
+	/** 添加弹出内容 */
+	this.addPop = function (
+		value,
+		px,
+		py,
+		color,
+		boldColor,
+		left,
+		jump,
+		time,
+		show,
+		font,
+		speed
+	) {
+		var data = {
+			px: px,
+			py: py,
+			value: value,
+			color: color || colorD,
+			boldColor: boldColor || boldColorD,
+			frame: 0,
+			left: left || false,
+			jump: jump || false,
+			time: time || 60,
+			show: show || 30,
+			font: font || fontD,
+			speed: speed || 1,
+		};
+		if (!core.status.pop) core.status.pop = [data];
+		else core.status.pop.push(data);
+	};
+},
     "warning": function () {
-    // 在此增加新插件
-    // 默认音效名
-    var defaultSound = "jingbao.opus";
-    // 默认字体名
-    var defaultFont = "Verdana";
+	// 默认音效名
+	var defaultSound = "jingbao.mp3";
+	// 默认字体名
+	var defaultFont = "Verdana";
 
-    var timeout;
-    /** warning提示
-     * @param {number} x 横坐标
-     * @param {number} y 纵坐标
-     * @param {string} text 显示的文字
-     */
-    this.drawWarning = function (x, y, size, text, text2, warning) {
-      if (timeout) return;
-      x = x ?? 6;
-      y = y ?? 6;
-      text = text || "boss";
-      text += "</br>";
-      for (var i = 0; i < 10; i++) text += " ";
-      text += text2;
-      // 生成文字
-      var elements = document.querySelectorAll(".gameCanvas");
-      var t = document.createElement("p");
-      t.innerHTML = text;
-      t.style.position = "absolute";
-      t.style.fontSize = size * core.domStyle.scale + "px";
-      t.style.left = -(300 * core.domStyle.scale) + "px";
-      t.style.top = parseInt(elements[0].style.height) / 2 - 100 + "px";
-      t.style.zIndex = "300";
-      t.style.color = "#f11";
-      t.style.fontFamily = defaultFont;
-      t.style.overflow = "none";
-      t.style.width = "100%";
-      t.classList.add("warning");
-      core.dom.gameDraw.appendChild(t);
-      setTimeout(function () {
-        t.style.left = 416 * core.domStyle.scale + "px";
-      }, 50);
-      // 计算偏移量
-      var px = ((6 - x) / 12) * 50;
-      var py = ((6 - y) / 12) * 50;
-      // 修改画布的scale和transform
-      elements.forEach(function (v) {
-        if (v instanceof HTMLCanvasElement) {
-          v.style.transform = "scale(2)translate(" + px + "%, " + py + "%)";
-        }
-      });
-      if (!warning) core.playSound(defaultSound);
-      // 拉回镜头
-      timeout = setTimeout(function () {
-        timeout = setTimeout(function () {
-          timeout = void 0;
-          core.dom.gameDraw.removeChild(t);
-        }, 1500);
-        elements.forEach(function (v) {
-          if (v instanceof HTMLCanvasElement) {
-            v.style.transform = "none";
-          }
-        });
-      }, 1600);
-    };
-  },
-    "立体声音效": function () {
-    // 在此增加新插件
-    // 音效双声道播放
-    var can = true;
-    if (!AudioContext) {
-      console.warn("该浏览器不支持AudioContext,无法播放立体声");
-      can = false;
-    }
-    if (can) var ac = new AudioContext();
-    var datas = {};
-
-    /** 播放立体声 参考:https://developer.mozilla.org/zh-CN/docs/Web/API/BaseAudioContext/createChannelSplitter
-     * @param {number} name 音效名
-     * @param {number} left 左声道音量,默认为1
-     * @param {number} right 右声道音量,默认为1
-     * @param {boolean} split 音效为双声道,请填true,为单声道,请填false或不填
-     * @returns 该音效的唯一id
-     */
-    this.playStereo = function (name, left, right, split) {
-      if (!can) return core.playSound(name);
-      var sound = core.getMappedName(name);
-      if (
-        main.mode != "play" ||
-        !core.musicStatus.soundStatus ||
-        !core.material.sounds[sound]
-      )
-        return;
-      if (!core.status.stereo) core.status.stereo = {};
-      var buffer = core.material.sounds[sound];
-      var source = ac.createBufferSource();
-      source.buffer = buffer;
-      var splitter = ac.createChannelSplitter(2);
-      source.connect(splitter);
-      var merger = ac.createChannelMerger(2);
-
-      /* 大致流程
-		                            gain(L)
-		                        /			  \
-		source  ----  splitter  				 merger  ----  destination
-		                        \			  /
-		                            gain(R) 
-		*/
-
-      var L = ac.createGain();
-      var R = ac.createGain();
-      L.gain.value = left * core.musicStatus.userVolume;
-      R.gain.value = right * core.musicStatus.userVolume;
-      splitter.connect(L, 0, 0);
-      if (!split) splitter.connect(R, 0, 0);
-      else splitter.connect(R, 1, 0);
-
-      var id = setTimeout(null);
-      core.status.stereo[id] = { source: source, L: L, R: R };
-
-      L.connect(merger, 0, 0);
-      R.connect(merger, 0, 1);
-
-      var dest = ac.destination;
-
-      source.onended = function () {
-        delete datas[id];
-        source = void 0;
-      };
-
-      merger.connect(dest);
-      source.start(0);
-      return id;
-    };
-
-    /** 移动声源(渐变调整左右声道音量)
-     * @param {number} id 为playStereo返回的id
-     * @param {number} left 要渐变到的左声道音量
-     * @param {number} right 要渐变到的右声道音量
-     * @param {number} time 渐变时间
-     */
-    this.moveStereo = function (id, left, right, time) {
-      if (!can) return;
-      if (main.mode != "play" || !core.musicStatus.soundStatus) return;
-      var stereo = core.status.stereo[id];
-      datas[id] = {
-        time: time,
-        curr: 0,
-        dL:
-          ((left - stereo.L.gain.value) / time) *
-          10 *
-          core.musicStatus.userVolume,
-        dR:
-          ((right - stereo.R.gain.value) / time) *
-          10 *
-          core.musicStatus.userVolume,
-      };
-      var interval = setInterval(function () {
-        var data = datas[id];
-        if (!data) return clearInterval(interval);
-        data.curr += 10;
-        if (data.curr >= data.time) {
-          clearInterval(interval);
-          datas[id] = void 0;
-        }
-        stereo.L.gain.value += data.dL;
-        stereo.R.gain.value += data.dR;
-      }, 10);
-    };
-  },
+	var timeout;
+	/** warning提示
+	 * @param {number} x 横坐标
+	 * @param {number} y 纵坐标
+	 * @param {string} text 显示的文字
+	 */
+	this.drawWarning = function (
+		x,
+		y,
+		text,
+		text2,
+		warning,
+		large = 2,
+		size = 36
+	) {
+		if (timeout) return;
+		x = x ?? 6;
+		y = y ?? 6;
+		text = text || "boss";
+		text += "</br>";
+		for (var i = 0; i < 10; i++) text += " ";
+		text += text2;
+		// 生成文字
+		var elements = document.querySelectorAll(".gameCanvas");
+		var t = document.createElement("p");
+		t.innerHTML = text;
+		t.style.position = "absolute";
+		t.style.fontSize = size * core.domStyle.scale + "px";
+		t.style.left = -(300 * core.domStyle.scale) + "px";
+		t.style.top = parseInt(elements[0].style.height) / 2 - 100 + "px";
+		t.style.zIndex = "300";
+		t.style.color = "#f11";
+		t.style.fontFamily = defaultFont;
+		t.style.overflow = "none";
+		t.style.width = "100%";
+		t.classList.add("warning");
+		core.dom.gameDraw.appendChild(t);
+		setTimeout(function () {
+			t.style.left = 416 * core.domStyle.scale + "px";
+		}, 50);
+		// 计算偏移量
+		var px = ((6 - x) / 12) * (100 - 100 / large + 2);
+		var py = ((6 - y) / 12) * (100 - 100 / large + 2);
+		// 修改画布的scale和transform
+		let time = 0;
+		let s = 1;
+		let sx = 0;
+		let sy = 0;
+		let cishu = 1;
+		core.registerAnimationFrame("big", true, function (temptime) {
+			if (temptime - time > 10) {
+				time = temptime;
+				s += (large - 1) / 30;
+				sx += px / 30;
+				sy += py / 30;
+				elements.forEach(function (v) {
+					if (v instanceof HTMLCanvasElement) {
+						v.style.transform =
+							"scale(" + s + ")translate(" + sx + "%, " + sy + "%)";
+					}
+				});
+				cishu++;
+				if (cishu == 30) {
+					core.unregisterAnimationFrame("big");
+				}
+			}
+		});
+		if (!warning) core.playSound(defaultSound);
+		// 拉回镜头
+		timeout = setTimeout(function () {
+			// 			timeout = setTimeout(function () {
+			// 				timeout = void 0;
+			// 				core.dom.gameDraw.removeChild(t);
+			// 			}, 1500);
+			let time2 = 0;
+			let s2 = large - (large - 1) / 30;
+			let sx2 = px;
+			let sy2 = py;
+			let cishu2 = 1;
+			core.registerAnimationFrame("small", true, function (temptime) {
+				if (temptime - time2 > 10) {
+					time2 = temptime;
+					s2 -= (large - 1) / 30;
+					sx2 -= px / 30;
+					sy2 -= py / 30;
+					elements.forEach(function (v) {
+						if (v instanceof HTMLCanvasElement) {
+							v.style.transform =
+								"scale(" + s2 + ")translate(" + sx2 + "%, " + sy2 + "%)";
+						}
+					});
+					cishu2++;
+					if (cishu2 == 30) {
+						core.unregisterAnimationFrame("small");
+						elements.forEach(function (v) {
+							if (v instanceof HTMLCanvasElement) {
+								v.style.transform = "none";
+							}
+						});
+					}
+				}
+			});
+			// 			elements.forEach(function (v) {
+			// 				if (v instanceof HTMLCanvasElement) {
+			// 					v.style.transform = "none";
+			// 				}
+			// 			});
+		}, 1600);
+	};
+},
     "滑动转场": function () {
-    // 在此增加新插件
-    const defaultChange = {
-      left: "leftPortal", // 左箭头
-      up: "upPortal", // 上箭头
-      right: "rightPortal", // 右箭头
-      down: "downPortal", // 下箭头
-      upFloor: "upFloor", // 上楼
-      downFloor: "downFloor", // 下楼
-    };
-    const dirData = {
-      //方向坐标
-      up: [-1, 0],
-      down: [1, 0],
-      left: [0, -1],
-      right: [0, 1],
-      upFloor: [0, 0],
-      downFloor: [0, 0],
-    };
-    let allChangeEntries = Object.entries(defaultChange);
-    const move = document.createElement("canvas");
-    const speed = 12;
-    let modedata = 0;
+	// 在此增加新插件
+	const defaultChange = {
+		left: "leftPortal", // 左箭头
+		up: "upPortal", // 上箭头
+		right: "rightPortal", // 右箭头
+		down: "downPortal", // 下箭头
+		upFloor: "upFloor", // 上楼
+		downFloor: "downFloor", // 下楼
+	};
+	const dirData = {
+		//方向坐标
+		up: [-1, 0],
+		down: [1, 0],
+		left: [0, -1],
+		right: [0, 1],
+		upFloor: [0, 0],
+		downFloor: [0, 0],
+	};
+	let allChangeEntries = Object.entries(defaultChange);
+	const move = document.createElement("canvas");
+	const speed = 12;
+	let modedata = 0;
 
-    move.width = 1248;
-    move.height = 1248;
+	move.width = 1248;
+	move.height = 1248;
 
-    const ctx = move.getContext("2d");
+	const ctx = move.getContext("2d");
 
-    events.prototype.changeFloor = function (
-      floorId,
-      stair,
-      heroLoc,
-      time,
-      callback
-    ) {
-      let block = core.getBlock(hero.loc.x, hero.loc.y);
-      var info = this._changeFloor_getInfo(floorId, stair, heroLoc, time);
+	events.prototype.changeFloor = function (
+		floorId,
+		stair,
+		heroLoc,
+		time,
+		callback
+	) {
+		let block = core.getBlock(hero.loc.x, hero.loc.y);
+		var info = this._changeFloor_getInfo(floorId, stair, heroLoc, time);
 
-      if (info == null) {
-        if (callback) callback();
-        return;
-      }
-      floorId = info.floorId;
-      info.locked = core.status.lockControl;
+		if (info == null) {
+			if (callback) callback();
+			return;
+		}
+		floorId = info.floorId;
+		info.locked = core.status.lockControl;
 
-      core.dom.floorNameLabel.innerText = core.status.maps[floorId].title;
-      core.lockControl();
-      core.stopAutomaticRoute();
-      core.clearContinueAutomaticRoute();
-      core.status.replay.animate = true;
-      clearInterval(core.interval.onDownInterval);
-      core.interval.onDownInterval = "tmp";
+		core.dom.floorNameLabel.innerText = core.status.maps[floorId].title;
+		core.lockControl();
+		core.stopAutomaticRoute();
+		core.clearContinueAutomaticRoute();
+		core.status.replay.animate = true;
+		clearInterval(core.interval.onDownInterval);
+		delete core.animateFrame.tip;
+		core.interval.onDownInterval = "tmp";
 
-      this._changeFloor_beforeChange(info, block, callback);
-    };
-    events.prototype._changeFloor_beforeChange = function (
-      info,
-      block,
-      callback
-    ) {
-      this._changeFloor_playSound();
-      if (
-        block &&
-        block?.event &&
-        !main.replayChecking &&
-        !core.isReplaying()
-      ) {
-        const dirEntries = allChangeEntries.find(
-          (v) => v[1] === block.event.id
-        );
-        if (block?.event?.trigger === "changeFloor" && dirEntries) {
-          const toFloorId = block.event.data.floorId;
-          const dir = dirEntries[0];
+		this._changeFloor_beforeChange(info, block, callback);
+	};
+	events.prototype._changeFloor_beforeChange = function (
+		info,
+		block,
+		callback
+	) {
+		this._changeFloor_playSound();
+		if (
+			block &&
+			block?.event &&
+			!main.replayChecking &&
+			!core.isReplaying() &&
+			!core.hasFlag("__isFlying__") && !core.hasFlag("__fromLoad__")
+		) {
+			const dirEntries = allChangeEntries.find(
+				(v) => v[1] === block.event.id
+			);
+			if (block?.event?.trigger === "changeFloor" && dirEntries) {
+				const toFloorId = block.event.data.floorId;
+				const dir = dirEntries[0];
 
-          const data = core.ui._drawViewMaps_buildData(
-            core.floorIds.indexOf(core.status.floorId)
-          );
-          const dataTo = core.ui._drawViewMaps_buildData(
-            core.floorIds.indexOf(toFloorId)
-          );
-          const v = dirData[dir][1], // 水平数值
-            h = dirData[dir][0]; //竖直数值
-          ctx.clearRect(0, 0, 1248, 1248);
-          core.drawThumbnail(core.status.floorId, null, {
-            damage: data.damage,
-            ctx: ctx,
-            x: 416,
-            y: 416,
-            size: 1,
-            all: data.all,
-          });
-          if (dir !== "upFloor" && dir !== "downFloor") {
-            core.drawThumbnail(toFloorId, null, {
-              damage: dataTo.damage,
-              ctx: ctx,
-              x: 416 + 416 * v,
-              y: 416 + 416 * h,
-              size: 1,
-              all: dataTo.all,
-            });
+				const data = core.ui._drawViewMaps_buildData(
+					core.floorIds.indexOf(core.status.floorId)
+				);
+				const dataTo = core.ui._drawViewMaps_buildData(
+					core.floorIds.indexOf(toFloorId)
+				);
+				const v = dirData[dir][1], // 水平数值
+					h = dirData[dir][0]; //竖直数值
+				ctx.clearRect(0, 0, 1248, 1248);
+				core.drawThumbnail(core.status.floorId, null, {
+					damage: data.damage,
+					ctx: ctx,
+					x: 416,
+					y: 416,
+					size: 1,
+					all: data.all,
+				});
+				if (dir !== "upFloor" && dir !== "downFloor") {
+					core.drawThumbnail(toFloorId, null, {
+						damage: dataTo.damage,
+						ctx: ctx,
+						x: 416 + 416 * v,
+						y: 416 + 416 * h,
+						size: 1,
+						all: dataTo.all,
+					});
 
-            var _run = function () {
-              var cb = function () {
-                modedata = 0;
-                core.clearUI();
-                core.clearMap("data");
-                core.events._changeFloor_changing(info, callback);
-              };
+					var _run = function () {
+						var cb = function () {
+							modedata = 0;
+							core.clearUI();
+							core.clearMap("data");
+							core.events._changeFloor_changing(info, callback);
+						};
 
-              var animate = window.setInterval(
-                function () {
-                  if (modedata >= 416) {
-                    delete core.animateFrame.asyncId[animate];
-                    clearInterval(animate);
-                    cb();
-                  } else {
-                    core.clearUI();
-                    core.clearMap("data");
+						var animate = window.setInterval(
+							function () {
+								if (modedata >= 416) {
+									delete core.animateFrame.asyncId[animate];
+									clearInterval(animate);
+									cb();
+								} else {
+									core.clearUI();
+									core.clearMap("data");
 
-                    core.canvas.data.drawImage(
-                      move,
-                      416 + modedata * v,
-                      416 + modedata * h,
-                      416,
-                      416,
-                      0,
-                      0,
-                      416,
-                      416
-                    );
-                    let status = "leftFoot";
+									core.canvas.data.drawImage(
+										move,
+										416 + modedata * v,
+										416 + modedata * h,
+										416,
+										416,
+										0,
+										0,
+										416,
+										416
+									);
+									let status = "leftFoot";
 
-                    if (modedata > 208) {
-                      status = "rightFoot";
-                    }
-                    const img = core.material.images.hero;
-                    const heroIconArr = core.material.icons.hero;
-                    const width = core.material.icons.hero.width || 32;
-                    const height = core.material.icons.hero.height;
-                    const heroIcon = heroIconArr[dir];
+									if (modedata > 208) {
+										status = "rightFoot";
+									}
+									const img = core.material.images.hero;
+									const heroIconArr = core.material.icons.hero;
+									const width = core.material.icons.hero.width || 32;
+									const height = core.material.icons.hero.height;
+									const heroIcon = heroIconArr[dir];
 
-                    core.canvas.data.drawImage(
-                      img,
-                      (heroIcon[status] % 4) * width,
-                      heroIcon.loc * height,
-                      width,
-                      height,
-                      core.status.hero.loc.x * 32 -
-                        core.bigmap.offsetX -
-                        (modedata - (modedata * 32) / 416) * v,
-                      core.status.hero.loc.y * 32 -
-                        16 -
-                        (modedata - (modedata * 32) / 416) * h,
-                      width,
-                      height
-                    );
-                    modedata += speed;
-                    clearInterval(animate);
-                    delete core.animateFrame.asyncId[animate];
-                    _run();
-                  }
-                },
-                core.status.replay.speed == 24
-                  ? 1
-                  : 10 / core.status.replay.speed
-              );
+									core.canvas.data.drawImage(
+										img,
+										(heroIcon[status] % 4) * width,
+										heroIcon.loc * height,
+										width,
+										height,
+										core.status.hero.loc.x * 32 -
+										core.bigmap.offsetX -
+										(modedata - (modedata * 32) / 416) * v,
+										core.status.hero.loc.y * 32 -
+										16 -
+										(modedata - (modedata * 32) / 416) * h,
+										width,
+										height
+									);
+									modedata += speed;
+									clearInterval(animate);
+									delete core.animateFrame.asyncId[animate];
+									_run();
+								}
+							},
+							core.status.replay.speed == 24 ?
+							1 :
+							10 / core.status.replay.speed
+						);
 
-              core.animateFrame.lastAsyncId = animate;
-              core.animateFrame.asyncId[animate] = cb;
-            };
-            _run();
-            return;
-          }
-        }
-      }
-      // 需要 setTimeout 执行,不然会出错
-      window.setTimeout(function () {
-        if (info.time == 0) core.events._changeFloor_changing(info, callback);
-        else
-          core.showWithAnimate(
-            core.dom.floorMsgGroup,
-            info.time / 2,
-            function () {
-              core.events._changeFloor_changing(info, callback);
-            }
-          );
-      }, 25);
-    };
-  },
+						core.animateFrame.lastAsyncId = animate;
+						core.animateFrame.asyncId[animate] = cb;
+					};
+					_run();
+					return;
+				}
+			}
+		}
+		// 需要 setTimeout 执行,不然会出错
+		window.setTimeout(function () {
+			if (info.time == 0) core.events._changeFloor_changing(info, callback);
+			else
+				core.showWithAnimate(
+					core.dom.floorMsgGroup,
+					info.time / 2,
+					function () {
+						core.events._changeFloor_changing(info, callback);
+					}
+				);
+		}, 25);
+	};
+},
     "剧情cg": function () {
-    // 在此增加新插件
-    const cg = document.createElement("canvas"); //cg画布设置
-    cg.style.position = "absolute";
-    cg.style.zIndex = 300;
-    cg.style.display = "none";
-    cg.id = "cgText";
-    main.dom.gameGroup.insertAdjacentElement("afterend", cg);
-    cg.style.top = "50%";
-    cg.style.left = "50%";
-    cg.style.transform = "translate(-50%,-50%)";
-    const ctx = cg.getContext("2d");
-    main.dom.cgText = cg;
+	// 在此增加新插件
+	// 在此增加新插件
+	const cg = document.createElement("canvas"); //cg画布设置
+	cg.style.position = "absolute";
+	cg.style.zIndex = 320;
+	cg.style.display = "none";
+	cg.id = "cgText";
+	main.dom.gameGroup.insertAdjacentElement("afterend", cg);
+	cg.style.top = "50%";
+	cg.style.left = "50%";
+	cg.style.transform = "translate(-50%,-50%)";
+	const ctx = cg.getContext("2d");
+	main.dom.cgText = cg;
+	const logcanvas = document.createElement("canvas"); //cg画布设置
+	logcanvas.style.position = "absolute";
+	logcanvas.style.zIndex = 321;
+	logcanvas.style.display = "none";
+	logcanvas.id = "cgText";
+	main.dom.gameGroup.insertAdjacentElement("afterend", logcanvas);
+	logcanvas.style.top = "50%";
+	logcanvas.style.left = "50%";
+	logcanvas.style.transform = "translate(-50%,-50%)";
+	const logctx = logcanvas.getContext("2d");
+	main.dom.logcanvas = logcanvas;
+	logcanvas.onmouseup = function (e) {
+		//鼠标抬起
 
-    cg.onmouseup = function (e) {
-      //鼠标抬起
+		try {
+			if (!core.isPlaying()) return false;
+			core.unregisterAnimationFrame("skip");
+			let a = core.getFlag("skip", false);
+			core.setFlag("skip", false);
+			if (a) {
+				const data = core.clone(core.status.event.data.current);
 
-      try {
-        e.stopPropagation();
-        if (!core.isPlaying()) return false;
-        core.unregisterAnimationFrame("skip");
-        let a = core.getFlag("skip", false);
-        core.setFlag("skip", false);
-        if (a) {
-          const data = core.clone(core.status.event.data.current);
+				core.insertAction(data);
+				core.doAction();
+			}
+		} catch (ee) {
+			console.error(ee);
+		}
+	};
+	logcanvas.onmousedown = function (e) {
+		//鼠标按下
+		try {
+			if (!core.isPlaying()) return false;
+			const left = core.dom.gameGroup.offsetLeft;
+			const top = core.dom.gameGroup.offsetTop;
+			const px = Math.floor((e.clientX - left) / core.domStyle.scale),
+				py = Math.floor((e.clientY - top) / core.domStyle.scale);
+			core.ui.cgText.click(px * 3, py * 3);
+		} catch (ee) {
+			main.log(ee);
+		}
+	};
+	logcanvas.ontouchend = function (e) {
+		//触摸抬起
 
-          core.insertAction(data);
-          core.doAction();
-        }
-      } catch (ee) {
-        console.error(ee);
-      }
-    };
-    cg.onmousedown = function (e) {
-      //鼠标按下
-      try {
-        e.stopPropagation();
-        if (!core.isPlaying()) return false;
-        const left = core.dom.gameGroup.offsetLeft;
-        const top = core.dom.gameGroup.offsetTop;
-        const px = Math.floor((e.clientX - left) / core.domStyle.scale),
-          py = Math.floor((e.clientY - top) / core.domStyle.scale);
-        core.ui.cgText.click(px * 3, py * 3);
-      } catch (ee) {
-        main.log(ee);
-      }
-    };
-    cg.ontouchend = function (e) {
-      //触摸抬起
+		try {
+			if (!core.isPlaying()) return false;
+			core.unregisterAnimationFrame("skip");
+			core.setFlag("skip", false);
+			let a = core.getFlag("skip", false);
+			core.setFlag("skip", false);
+			if (a) {
+				const data = core.clone(core.status.event.data.current);
 
-      try {
-        e.preventDefault();
-        if (!core.isPlaying()) return false;
-        core.unregisterAnimationFrame("skip");
-        core.setFlag("skip", false);
-        let a = core.getFlag("skip", false);
-        core.setFlag("skip", false);
-        if (a) {
-          const data = core.clone(core.status.event.data.current);
+				core.insertAction(data);
+				core.doAction();
+			}
+		} catch (ee) {}
+	};
+	logcanvas.ontouchstart = function (e) {
+		//触摸按下
+		try {
+			if (!core.isPlaying()) return false;
+			const left = core.dom.gameGroup.offsetLeft;
+			const top = core.dom.gameGroup.offsetTop;
+			const px = Math.floor(
+					(e.targetTouches[0].clientX - left) / core.domStyle.scale
+				),
+				py = Math.floor(
+					(e.targetTouches[0].clientY - top) / core.domStyle.scale
+				);
+			core.ui.cgText.click(px * 3, py * 3);
+		} catch (ee) {
+			main.log(ee);
+		}
+	};
+	cg.onmouseup = function (e) {
+		//鼠标抬起
 
-          core.insertAction(data);
-          core.doAction();
-        }
-      } catch (ee) {
-        console.error(ee);
-      }
-    };
-    cg.ontouchstart = function (e) {
-      //触摸按下
-      try {
-        e.preventDefault();
-        if (!core.isPlaying()) return false;
-        const left = core.dom.gameGroup.offsetLeft;
-        const top = core.dom.gameGroup.offsetTop;
-        const px = Math.floor(
-            (e.targetTouches[0].clientX - left) / core.domStyle.scale
-          ),
-          py = Math.floor(
-            (e.targetTouches[0].clientY - top) / core.domStyle.scale
-          );
-        core.ui.cgText.click(px * 3, py * 3);
-      } catch (ee) {
-        main.log(ee);
-      }
-    };
-    let auto = false;
-    class cgText {
-      constructor() {
-        //绘制需要的变量
-        this.image = "";
-        this.head = { name: "face_050445.webp", px: -300 };
-        this.bodyList = [
-          { name: "tati_050145a.webp", px: 100, filter: false },
-          { name: "tati_120124.webp", px: 1100, filter: true },
-        ];
-        this.name = "";
-        this.text = "";
-        this.time = 0;
-        this.WindowSkin = false;
-        this.sound = "";
-        this.beforeSound = 0;
-        this.wait = 200;
-        this.memory = false;
-      }
-      click(px, py) {
-        //点击效果
+		try {
+			if (!core.isPlaying()) return false;
+			core.unregisterAnimationFrame("skip");
+			let a = core.getFlag("skip", false);
+			core.setFlag("skip", false);
+			if (a) {
+				const data = core.clone(core.status.event.data.current);
 
-        const makeBox = ([x, y], [w, h]) => {
-          return [
-            [x, y],
-            [x + w, y + h],
-          ];
-        };
-        const inRect = ([x, y], [[sx, sy], [dx, dy]]) => {
-          return sx <= x && x <= dx && sy <= y && y <= dy;
-        };
-        const pos = [px, py];
-        const savebox = makeBox([1700, 1100], [192, 96]);
-        const saveboxVertical = makeBox([52, 1700], [96, 192]);
-        const skipbox = makeBox([1400, 1100], [192, 96]);
-        const skipboxVertical = makeBox([52, 1400], [96, 192]);
-        const autobox = makeBox([1700, 900], [192, 96]);
-        const autoboxVertical = makeBox([256, 1700], [96, 192]);
-        if (
-          (core.domStyle.isVertical &&
-            inRect(pos, skipboxVertical) &&
-            !this.WindowSkin) ||
-          (!core.domStyle.isVertical &&
-            !this.WindowSkin &&
-            inRect(pos, skipbox))
-        ) {
-          auto = false;
-          let time = 0;
-          core.stopSound(this.beforeSound);
-          core.registerAnimationFrame("skip", true, (timestamp) => {
-            if (timestamp > time + 50) {
-              time = timestamp;
-              if (
-                core.status.event.id == "action" &&
-                core.status.event.data.type == "cgtext"
-              ) {
-                core.setFlag("skip", true);
-                main.dom.cgText.style.display = "none";
-                core.doAction();
-              }
-            }
-          });
-        } else if (
-          (core.domStyle.isVertical &&
-            inRect(pos, autoboxVertical) &&
-            !this.WindowSkin) ||
-          (!core.domStyle.isVertical &&
-            !this.WindowSkin &&
-            inRect(pos, autobox))
-        ) {
-          auto = !auto;
+				core.insertAction(data);
+				core.doAction();
+			}
+		} catch (ee) {
+			console.error(ee);
+		}
+	};
+	cg.onmousedown = function (e) {
+		//鼠标按下
+		try {
+			if (!core.isPlaying()) return false;
+			const left = core.dom.gameGroup.offsetLeft;
+			const top = core.dom.gameGroup.offsetTop;
+			const px = Math.floor((e.clientX - left) / core.domStyle.scale),
+				py = Math.floor((e.clientY - top) / core.domStyle.scale);
+			core.ui.cgText.click(px * 3, py * 3);
+		} catch (ee) {
+			main.log(ee);
+		}
+	};
+	cg.ontouchend = function (e) {
+		//触摸抬起
 
-          const data = core.clone(core.status.event.data.current);
-          data.showAll = true;
-          data.time = 0;
-          data.text = data.text.replace(/(\\(z))(\[.*?])?/g, ""); //去除打字机暂停效果
-          data.sound = "";
-          core.insertAction(data);
-          core.doAction();
-        } else if (
-          (core.domStyle.isVertical &&
-            inRect(pos, saveboxVertical) &&
-            !this.WindowSkin) ||
-          (!core.domStyle.isVertical &&
-            !this.WindowSkin &&
-            inRect(pos, savebox))
-        ) {
-          //存档
-          auto = false;
-          if (core.status.event.animateUI) return;
-          if (core.status.event.interval != null) return;
-          const current = core.clone(core.status.event.data.current);
-          current.showAll = true;
-          current.time = 0;
-          current.sound = "";
-          current.text = current.text.replace(/(\\(z))(\[.*?])?/g, ""); //去除当前事件所有打字机效果
-          cg.style.display = "none";
-          const data = [{ type: "callSave" }, current]; //插入存档事件
-          core.insertAction(data);
+		try {
+			if (!core.isPlaying()) return false;
+			core.unregisterAnimationFrame("skip");
+			core.setFlag("skip", false);
+			let a = core.getFlag("skip", false);
+			core.setFlag("skip", false);
+			if (a) {
+				const data = core.clone(core.status.event.data.current);
 
-          core.doAction();
-        } else if (!core.status.event.data) {
-          cg.style.display = "none";
-          core.ui._animateUI("hide", null, () => {
-            core.doAction();
-          });
-        } else {
-          // 正在淡入淡出的话不执行
-          if (core.status.event.animateUI) return;
-          auto = false;
+				core.insertAction(data);
+				core.doAction();
+			}
+		} catch (ee) {
+			console.error(ee);
+		}
+	};
+	cg.ontouchstart = function (e) {
+		//触摸按下
+		try {
+			if (!core.isPlaying()) return false;
+			const left = core.dom.gameGroup.offsetLeft;
+			const top = core.dom.gameGroup.offsetTop;
+			const px = Math.floor(
+					(e.targetTouches[0].clientX - left) / core.domStyle.scale
+				),
+				py = Math.floor(
+					(e.targetTouches[0].clientY - top) / core.domStyle.scale
+				);
+			core.ui.cgText.click(px * 3, py * 3);
+		} catch (ee) {
+			main.log(ee);
+		}
+	};
+	let auto = false;
 
-          // 打字机效果显示全部文字
-          if (core.status.event.interval != null) {
-            const data = core.clone(core.status.event.data?.current);
-            data.showAll = true;
-            data.time = 0;
-            data.text = data.text.replace(/(\\(z))(\[.*?])?/g, ""); //去除打字机暂停效果
-            data.sound = "";
-            core.insertAction(data);
-            core.doAction();
-            return;
-          } else {
-            core.stopSound(this.beforeSound);
-          }
+	class cgText {
+		constructor() {
+			this.nobg = false;
+			//绘制需要的变量
+			this.image = "";
+			this.head = { name: "face_050445.webp", px: -300 };
+			this.bodyList = [
+				{ name: "tati_050145a.webp", px: 100, filter: false },
+				{ name: "tati_120124.webp", px: 1100, filter: true },
+			];
+			this.name = "";
+			this.text = "";
+			this.time = 0;
+			this.WindowSkin = false;
+			this.sound = "";
+			this.beforeSound = 0;
+			this.wait = 1000;
+			this.memory = false;
+			this.textList = "";
+			this.page = 1;
+			this.overpage = 1;
+			this.log = false;
+			this.index = 0;
+		}
+		click(px, py) {
+			//点击效果
 
-          cg.style.display = "none";
-          core.ui._animateUI("hide", null, () => {
-            core.doAction();
-          });
-        }
-      }
+			const makeBox = ([x, y], [w, h]) => {
+				return [
+					[x, y],
+					[x + w, y + h],
+				];
+			};
+			const inRect = ([x, y], [
+				[sx, sy],
+				[dx, dy]
+			]) => {
+				return sx <= x && x <= dx && sy <= y && y <= dy;
+			};
+			const pos = [px, py];
+			const savebox = makeBox([1700, 1100], [192, 96]);
+			const saveboxVertical = makeBox([52, 1700], [96, 192]);
+			const skipbox = makeBox([1700, 1000], [192, 96]);
+			const skipboxVertical = makeBox([152, 1700], [96, 192]);
+			const autobox = makeBox([1700, 900], [192, 96]);
+			const autoboxVertical = makeBox([252, 1700], [96, 192]);
+			const textbox = makeBox([1700, 800], [192, 96]);
+			const textboxVertical = makeBox([352, 1700], [96, 192]);
+			const backbox = makeBox([15, 35], [210, 90]);
+			const backboxVertical = makeBox([1123, 15], [90, 210]);
+			const pageupbox = makeBox([300, 1130], [200, 100]);
+			const pageupboxVertical = makeBox([18, 300], [100, 200]);
+			const pagedownbox = makeBox([1500, 1130], [200, 100]);
+			const pagedownboxVertical = makeBox([18, 1500], [100, 200]);
+			const soundbox = makeBox([550, 150], [100, 900]);
+			const soundboxVertical = makeBox([198, 550], [900, 100]);
+			if (this.log) {
+				if (
+					(core.domStyle.isVertical && inRect(pos, backboxVertical)) ||
+					(!core.domStyle.isVertical && inRect(pos, backbox))
+				) {
+					core.clearMap(logctx);
+					core.stopSound();
+					main.dom.logcanvas.style.display = "none";
+					this.log = false;
+				} else if (
+					(core.domStyle.isVertical && inRect(pos, pageupboxVertical)) ||
+					(!core.domStyle.isVertical && inRect(pos, pageupbox))
+				) {
+					core.clearMap(logctx);
+					if (this.page > 1) this.page--;
+					this.logdraw(this.page);
+				} else if (
+					(core.domStyle.isVertical && inRect(pos, pagedownboxVertical)) ||
+					(!core.domStyle.isVertical && inRect(pos, pagedownbox))
+				) {
+					core.clearMap(logctx);
+					if (this.page < this.overpage) this.page++;
+					this.logdraw(this.page);
+				} else if (
+					(core.domStyle.isVertical && inRect(pos, soundboxVertical)) ||
+					(!core.domStyle.isVertical && inRect(pos, soundbox))
+				) {
+					if (core.domStyle.isVertical) {
+						const sound =
+							core.plugin[this.textList][
+								(this.page - 1) * 6 +
+								Math.min(Math.floor((px - 198) / 150), 5)
+							][2];
+						core.stopSound();
+						core.playSound(sound);
+					} else {
+						const sound =
+							core.plugin[this.textList][
+								(this.page - 1) * 6 +
+								Math.min(Math.floor((py - 150) / 150), 5)
+							][2];
+						core.stopSound();
+						core.playSound(sound);
+					}
+				}
+			} else {
+				if (
+					(core.domStyle.isVertical &&
+						inRect(pos, skipboxVertical) &&
+						!this.WindowSkin) ||
+					(!core.domStyle.isVertical &&
+						!this.WindowSkin &&
+						inRect(pos, skipbox))
+				) {
+					auto = false;
+					let time = 0;
+					core.stopSound(this.beforeSound);
+					core.registerAnimationFrame("skip", true, (timestamp) => {
+						if (timestamp > time + 50) {
+							time = timestamp;
+							if (
+								core.status.event.id == "action" &&
+								core.status.event.data.type == "cgtext"
+							) {
+								core.setFlag("skip", true);
+								main.dom.cgText.style.display = "none";
+								core.doAction();
+							}
+						}
+					});
+				} else if (
+					(core.domStyle.isVertical &&
+						inRect(pos, textboxVertical) &&
+						!this.WindowSkin) ||
+					(!core.domStyle.isVertical &&
+						!this.WindowSkin &&
+						inRect(pos, textbox))
+				) {
+					auto = false;
+					this.log = true;
+					this.overpage = Math.floor(this.index / 6) + 1;
+					this.page = this.overpage;
+					logcanvas.style.display = "block";
+					const data = core.clone(core.status.event.data.current);
+					data.showAll = true;
+					data.time = 0;
+					data.text = this.text.replaceAll(/(\\(z))(\[.*?\])?/g, ""); //去除打字机暂停效果
+					data.sound = "";
+					core.insertAction(data);
+					core.doAction();
+					this.logdraw(this.page);
+				} else if (
+					(core.domStyle.isVertical &&
+						inRect(pos, autoboxVertical) &&
+						!this.WindowSkin) ||
+					(!core.domStyle.isVertical &&
+						!this.WindowSkin &&
+						inRect(pos, autobox))
+				) {
+					auto = !auto;
 
-      drawTextContent(ctx, content, config) {
-        //绘制多行文字并执行打字机效果
+					const data = core.clone(core.status.event.data.current);
+					data.showAll = true;
+					data.time = 0;
+					data.text = this.text.replaceAll(/(\\(z))(\[.*?\])?/g, ""); //去除打字机暂停效果
+					data.sound = "";
+					core.insertAction(data);
+					core.doAction();
+				} else if (
+					(core.domStyle.isVertical &&
+						inRect(pos, saveboxVertical) &&
+						!this.WindowSkin) ||
+					(!core.domStyle.isVertical &&
+						!this.WindowSkin &&
+						inRect(pos, savebox))
+				) {
+					//存档
+					auto = false;
+					if (core.status.event.animateUI) return;
+					if (core.status.event.interval != null) return;
+					const current = core.clone(core.status.event.data.current);
+					current.showAll = true;
+					current.time = 0;
+					current.sound = "";
+					current.text = this.text.replaceAll(/(\\(z))(\[.*?\])?/g, ""); //去除当前事件所有打字机效果
+					cg.style.display = "none";
+					core.setFlag("_cgText", true)
+					const data = [{ type: "callSave" }, { "type": "setValue", "name": "flag:_cgText", "value": "false" }, current]; //插入存档事件
+					core.insertAction(data);
 
-        ctx = core.getContextByName(ctx);
-        // 设置默认配置项
-        var textAttribute =
-          core.status.textAttribute || core.initStatus.textAttribute;
-        var globalAttribute =
-          core.status.globalAttribute || core.initStatus.globalAttribute;
-        config = core.clone(config || {});
-        config.left = config.left || 0;
-        config.right =
-          config.left + (config.maxWidth == null ? core._PX_ : config.maxWidth);
-        config.top = config.top || 0;
-        config.color = core.arrayToRGBA(config.color || textAttribute.text);
-        if (config.bold == null) config.bold = textAttribute.bold;
-        config.italic = config.italic || false;
-        config.align = config.align || textAttribute.align || "left";
-        config.fontSize = config.fontSize || textAttribute.textfont;
-        config.lineHeight = config.lineHeight || config.fontSize * 1.3;
-        config.defaultFont = config.font = config.font || globalAttribute.font;
-        config.time = config.time || 0;
-        config.letterSpacing =
-          config.letterSpacing == null
-            ? textAttribute.letterSpacing || 0
-            : config.letterSpacing;
+					core.doAction();
+				} else if (!core.status.event.data) {
+					cg.style.display = "none";
+					core.ui._animateUI("hide", null, () => {
+						core.doAction();
+					});
+				} else {
+					// 正在淡入淡出的话不执行
+					if (core.status.event.animateUI) return;
+					auto = false;
 
-        config.index = 0;
-        config.currcolor = config.color;
-        config.currfont = config.fontSize;
-        config.lineMargin = Math.max(
-          Math.round(config.fontSize / 4),
-          config.lineHeight - config.fontSize
-        );
-        config.topMargin = parseInt(config.lineMargin / 2);
-        config.lineMaxHeight = config.lineMargin + config.fontSize;
-        config.offsetX = 0;
-        config.offsetY = 0;
-        config.line = 0;
-        config.blocks = [];
-        config.isHD = ctx == null || ctx.canvas.hasAttribute("isHD");
+					// 打字机效果显示全部文字
+					if (core.status.event.interval != null) {
+						const data = core.clone(core.status.event.data?.current);
+						data.showAll = true;
+						data.time = 0;
+						data.text = this.text.replaceAll(/(\\(z))(\[.*?\])?/g, ""); //去除打字机暂停效果
+						data.sound = "";
+						core.insertAction(data);
+						core.doAction();
+						return;
+					} else {
+						core.stopSound(this.beforeSound);
+					}
 
-        // 创建一个新的临时画布
-        var tempCtx = document.createElement("canvas").getContext("2d");
-        if (config.isHD && ctx) {
-          core.maps._setHDCanvasSize(
-            tempCtx,
-            ctx.canvas.width,
-            ctx.canvas.height
-          );
-        } else {
-          tempCtx.canvas.width = ctx == null ? 1 : ctx.canvas.width;
-          tempCtx.canvas.height = ctx == null ? 1 : ctx.canvas.height;
-        }
+					cg.style.display = "none";
+					core.ui._animateUI("hide", null, () => {
+						core.doAction();
+					});
+				}
+			}
+		}
 
-        tempCtx.textBaseline = "top";
-        tempCtx.font = core.ui._buildFont(
-          config.fontSize,
-          config.bold,
-          config.italic,
-          config.font
-        );
-        tempCtx.fillStyle = config.color;
-        config = this._drawTextContent_draw(ctx, tempCtx, content, config);
-        return config;
-      }
-      _drawTextContent_draw(ctx, tempCtx, content, config) {
-        // Step 1: 绘制到tempCtx上,并记录下图块信息
-        while (core.ui._drawTextContent_next(tempCtx, content, config));
+		drawTextContent(ctx, content, config) {
+			//绘制多行文字并执行打字机效果
 
-        if (ctx == null) return config;
+			ctx = core.getContextByName(ctx);
+			// 设置默认配置项
+			var textAttribute =
+				core.status.textAttribute || core.initStatus.textAttribute;
+			var globalAttribute =
+				core.status.globalAttribute || core.initStatus.globalAttribute;
+			config = core.clone(config || {});
+			config.left = config.left || 0;
+			config.right =
+				config.left + (config.maxWidth == null ? core._PX_ : config.maxWidth);
+			config.top = config.top || 0;
+			config.color = core.arrayToRGBA(config.color || textAttribute.text);
+			if (config.bold == null) config.bold = textAttribute.bold;
+			config.italic = config.italic || false;
+			config.align = config.align || textAttribute.align || "left";
+			config.fontSize = config.fontSize || textAttribute.textfont;
+			config.lineHeight = config.lineHeight || config.fontSize * 1.3;
+			config.defaultFont = config.font = config.font || globalAttribute.font;
+			config.time = config.time || 0;
+			config.letterSpacing =
+				config.letterSpacing == null ?
+				textAttribute.letterSpacing || 0 :
+				config.letterSpacing;
 
-        // Step 2: 从tempCtx绘制到画布上
-        config.index = 0;
-        var _drawNext = function () {
-          if (config.index >= config.blocks.length) return false;
-          var block = config.blocks[config.index++];
-          if (block != null) {
-            // It works, why?
-            const scale = config.isHD
-              ? devicePixelRatio * core.domStyle.scale
-              : 1;
-            ctx.restore();
-            ctx.save(); //保存设置
-            if (core.domStyle.isVertical) {
-              ctx.translate(1248, 0); //重新定位右上角为基准
-              ctx.rotate(Math.PI / 2); //旋转90度
-            }
-            ctx.drawImage(
-              tempCtx.canvas,
-              block.left * scale,
-              block.top * scale,
-              block.width * scale,
-              block.height * scale,
-              config.left + block.left + block.marginLeft,
-              config.top + block.top + block.marginTop,
-              block.width,
-              block.height
-            );
-            ctx.restore();
-          }
-          return true;
-        };
+			config.index = 0;
+			config.currcolor = config.color;
+			config.currfont = config.fontSize;
+			config.lineMargin = Math.max(
+				Math.round(config.fontSize / 4),
+				config.lineHeight - config.fontSize
+			);
+			config.topMargin = parseInt(config.lineMargin / 2);
+			config.lineMaxHeight = config.lineMargin + config.fontSize;
+			config.offsetX = 0;
+			config.offsetY = 0;
+			config.line = 0;
+			config.blocks = [];
+			config.isHD = ctx == null || ctx.canvas.hasAttribute("isHD");
 
-        if (config.time == 0) {
-          while (_drawNext());
-          if (
-            (auto && !this.WindowSkin && !core.ui.cgText.sound) ||
-            (core.ui.cgText.sound && !core.musicStatus.soundStatus)
-          ) {
-            setTimeout(() => {
-              if (auto) {
-                cg.style.display = "none";
-                core.ui._animateUI("hide", null, () => {
-                  core.doAction();
-                });
-              }
-            }, core.ui.cgText.wait);
-          }
-        } else {
-          clearInterval(core.status.event.interval);
-          core.status.event.interval = setInterval(function () {
-            if (!_drawNext()) {
-              clearInterval(core.status.event.interval);
-              core.status.event.interval = null;
-              if (
-                (auto && !this.WindowSkin && !core.ui.cgText.sound) ||
-                (core.ui.cgText.sound && !core.musicStatus.soundStatus)
-              )
-                setTimeout(() => {
-                  if (auto) {
-                    cg.style.display = "none";
-                    core.ui._animateUI("hide", null, () => {
-                      core.doAction();
-                    });
-                  }
-                }, core.ui.cgText.wait);
-            }
-          }, config.time);
-        }
+			// 创建一个新的临时画布
+			var tempCtx = document.createElement("canvas").getContext("2d");
+			if (config.isHD && ctx) {
+				core.maps._setHDCanvasSize(
+					tempCtx,
+					ctx.canvas.width,
+					ctx.canvas.height
+				);
+			} else {
+				tempCtx.canvas.width = ctx == null ? 1 : ctx.canvas.width;
+				tempCtx.canvas.height = ctx == null ? 1 : ctx.canvas.height;
+			}
 
-        return config;
-      }
+			tempCtx.textBaseline = "top";
+			tempCtx.font = core.ui._buildFont(
+				config.fontSize,
+				config.bold,
+				config.italic,
+				config.font
+			);
+			tempCtx.fillStyle = config.color;
+			config = this._drawTextContent_draw(ctx, tempCtx, content, config);
+			return config;
+		}
+		_drawTextContent_draw(ctx, tempCtx, content, config) {
+			// Step 1: 绘制到tempCtx上,并记录下图块信息
+			while (core.ui._drawTextContent_next(tempCtx, content, config));
 
-      update() {
-        this.background();
-      }
-      background() {
-        const img = core.material.images.images?.[this.image];
+			if (ctx == null) return config;
 
-        if (core.domStyle.isVertical) {
-          ctx.canvas.width = 1248;
-          ctx.canvas.height = 2028;
-          ctx.save(); //保存设置
-          ctx.translate(1248, 0); //重新定位右上角为基准
-          ctx.rotate(Math.PI / 2); //旋转90度
-        } else {
-          ctx.canvas.width = 2028;
-          ctx.canvas.height = 1248;
-        }
+			// Step 2: 从tempCtx绘制到画布上
+			config.index = 0;
+			var _drawNext = function () {
+				if (config.index >= config.blocks.length) return false;
+				var block = config.blocks[config.index++];
+				if (block != null) {
+					// It works, why?
+					const scale = config.isHD ?
+						devicePixelRatio * core.domStyle.scale :
+						1;
+					ctx.restore();
+					ctx.save(); //保存设置
+					if (core.domStyle.isVertical) {
+						ctx.translate(1248, 0); //重新定位右上角为基准
+						ctx.rotate(Math.PI / 2); //旋转90度
+					}
+					ctx.drawImage(
+						tempCtx.canvas,
+						block.left * scale,
+						block.top * scale,
+						block.width * scale,
+						block.height * scale,
+						config.left + block.left + block.marginLeft,
+						config.top + block.top + block.marginTop,
+						block.width,
+						block.height
+					);
+					ctx.restore();
+				}
+				return true;
+			};
 
-        if (img) {
-          //绘制背景
-          if (this.memory) ctx.filter = "sepia(50%)";
-          ctx.drawImage(img, 0, 0, 2028, 1248);
-          ctx.filter = "none";
-        } else {
-          core.fillRect(ctx, 0, 0, 2028, 1248);
-        }
-        this.bodyList.forEach((v) => {
-          //绘制立绘
-          const body = core.material.images.images?.[v.name];
-          if (v.filter) ctx.filter = "brightness(50%)";
-          if (body) {
-            if (!v.w && !v.h && !v.scale) v.scale = 1.7;
-            if (!v.w && !v.h) {
-              ctx.drawImage(
-                body,
-                0,
-                0,
-                body.width,
-                body.height,
-                v.px,
-                1248 - body.height * v.scale,
-                body.width * v.scale,
-                body.height * v.scale
-              );
-            } else {
-              ctx.drawImage(
-                body,
-                0,
-                0,
-                body.width,
-                body.height,
-                v.px,
-                1248 - (v.h ?? body.height),
-                v.w ?? body.width,
-                v.h ?? body.height
-              );
-            }
-          }
-          ctx.filter = "none";
-        });
-        if (core.isPlaying() && !this.WindowSkin)
-          core.drawWindowSkin("winskin.webp", ctx, 30, 802, 1968, 416); //绘制对话框
-        const head = core.material.images.images?.[this.head.name];
-        if (head) {
-          //绘制头像
-          ctx.drawImage(
-            head,
-            0,
-            0,
-            head.width,
-            head.height,
-            this.head.px,
-            1248 - head.height * 2,
-            head.width * 2,
-            head.height * 2
-          );
-        }
-        if (core.isPlaying() && !this.WindowSkin) {
-          core.drawWindowSkin("winskin.webp", ctx, 1700, 1100, 192, 96);
-          core.fillBoldText1(
-            ctx,
-            "存 档",
-            1736,
-            1166,
-            "#FFFFFF",
-            "#000000",
-            6,
-            "bold 48px Verdana"
-          );
-          core.drawWindowSkin("winskin.webp", ctx, 1400, 1100, 192, 96);
-          core.fillBoldText1(
-            ctx,
-            "▶▶",
-            1456,
-            1166,
-            "#FFFFFF",
-            "#000000",
-            6,
-            "bold 48px Verdana"
-          );
-          core.drawWindowSkin("winskin.webp", ctx, 1700, 900, 192, 96);
-          let autoText = "AUTO";
-          if (auto) autoText = "STOP";
-          core.fillBoldText1(
-            ctx,
-            autoText,
-            1722,
-            966,
-            "#FFFFFF",
-            "#000000",
-            6,
-            "bold 48px Verdana"
-          );
-        }
-        if (this.name)
-          core.fillBoldText1(
-            ctx,
-            `【${this.name}】`,
-            500,
-            880,
-            "#FFFFFF",
-            "#000000",
-            6,
-            "bold 48px Verdana"
-          ); //绘制名字
-        if (
-          this.sound &&
-          core.material.sounds[this.sound] &&
-          !core.getFlag("skip", false) &&
-          core.musicStatus.soundStatus
-        ) {
-          this.beforeSound = core.playSound(this.sound, null, () => {
-            if (
-              this.sound &&
-              auto &&
-              !this.WindowSkin &&
-              core.musicStatus.soundStatus
-            ) {
-              setTimeout(() => {
-                if (auto) {
-                  cg.style.display = "none";
-                  core.ui._animateUI("hide", null, () => {
-                    core.doAction();
-                  });
-                }
-              }, core.ui.cgText.wait);
-            }
-          });
-        }
-        if (this.text && !core.getFlag("skip", false)) {
-          //绘制对话
-          this.drawTextContent(ctx, this.text, {
-            left: 500,
-            top: 950,
-            bold: true,
-            color: "#FFFFFF",
-            align: "left",
-            fontSize: 48,
-            time: this.time || 0,
-            font: "Verdana",
-            maxWidth: 1000,
-          });
-        }
+			if (config.time == 0) {
+				while (_drawNext());
 
-        ctx.restore();
-      }
-    }
-    core.ui.cgText = new cgText();
-  },
+				if (
+					(auto && !core.ui.cgText.WindowSkin && !core.ui.cgText.sound) ||
+					(core.ui.cgText.sound && !core.musicStatus.soundStatus)
+				) {
+					setTimeout(() => {
+						if (auto) {
+							cg.style.display = "none";
+							core.ui._animateUI("hide", null, () => {
+								core.doAction();
+							});
+						}
+					}, core.ui.cgText.wait);
+				}
+			} else {
+				clearInterval(core.status.event.interval);
+				core.status.event.interval = setInterval(function () {
+					if (!_drawNext()) {
+						clearInterval(core.status.event.interval);
+						core.status.event.interval = null;
+
+						if (
+							(auto && !core.ui.cgText.WindowSkin && !core.ui.cgText.sound) ||
+							(core.ui.cgText.sound && !core.musicStatus.soundStatus)
+						)
+							setTimeout(() => {
+								if (auto) {
+									cg.style.display = "none";
+									core.ui._animateUI("hide", null, () => {
+										core.doAction();
+									});
+								}
+							}, core.ui.cgText.wait);
+					}
+				}, config.time);
+			}
+
+			return config;
+		}
+
+		update() {
+			this.background()
+			if (this.log) this.logdraw(this.page);
+		}
+		logdraw(page) {
+			if (core.domStyle.isVertical) {
+				logctx.canvas.width = 1248;
+				logctx.canvas.height = 2028;
+				logctx.save(); //保存设置
+				logctx.translate(1248, 0); //重新定位右上角为基准
+				logctx.rotate(Math.PI / 2); //旋转90度
+			} else {
+				logctx.canvas.width = 2028;
+				logctx.canvas.height = 1248;
+			}
+			core.fillRect(logctx, 0, 0, 2028, 1248, "rgba(0,0,0,0.5)");
+			core.setTextAlign(logctx, "center");
+			core.fillBoldText1(
+				logctx,
+				"◀离开",
+				110,
+				100,
+				"#FFFFFF",
+				"#000000",
+				6,
+				core.ui._buildFont(66, true)
+			);
+			logctx.strokeStyle = "#FFFFFF";
+			logctx.lineWidth = 3;
+			logctx.beginPath();
+			logctx.moveTo(100, 150);
+			logctx.lineTo(1928, 150);
+
+			logctx.stroke();
+			let posy = 150;
+			const indexList = this.textList;
+			core.setTextAlign(logctx, "left");
+			for (
+				let i = (page - 1) * 6; i <= Math.min(this.index, page * 6 - 1); i++
+			) {
+				const text = core.plugin[this.textList][i][1].replaceAll(
+					/(\\(d|e|f|g|i|n|r|b|c|t|z))(\[.*?\])?/g,
+					""
+				); //取消打字机
+				const name = core.plugin[this.textList][i][0] ?
+					"【" + core.plugin[this.textList][i][0] + "】" :
+					"";
+				const sound = core.plugin[this.textList][i][2];
+				if (name) {
+					core.fillBoldText1(
+						logctx,
+						name,
+						150,
+						posy + 50,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(42, true)
+					);
+				}
+				if (sound) core.drawImage(logctx, "sound.webp", 550, posy + 30);
+				if (text.length < 30) {
+					core.fillBoldText1(
+						logctx,
+						text,
+						650,
+						posy + 50,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(42, true)
+					);
+				} else {
+					let text1 = text.slice(0, 30);
+					core.fillBoldText1(
+						logctx,
+						text1,
+						650,
+						posy + 50,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(42, true)
+					);
+					if (text.length > 60) {
+						let text2 = text.slice(30, 60);
+						let text3 = text.slice(60);
+						core.fillBoldText1(
+							logctx,
+							text2,
+							650,
+							posy + 100,
+							"#FFFFFF",
+							"#000000",
+							6,
+							core.ui._buildFont(42, true)
+						);
+						core.fillBoldText1(
+							logctx,
+							text3,
+							650,
+							posy + 150,
+							"#FFFFFF",
+							"#000000",
+							6,
+							core.ui._buildFont(42, true)
+						);
+					} else {
+						let text2 = text.slice(30);
+						core.fillBoldText1(
+							logctx,
+							text2,
+							650,
+							posy + 100,
+							"#FFFFFF",
+							"#000000",
+							6,
+							core.ui._buildFont(42, true)
+						);
+					}
+				}
+
+				logctx.strokeStyle = "#FFFFFF";
+				logctx.lineWidth = 3;
+				logctx.beginPath();
+				logctx.moveTo(100, posy);
+				logctx.lineTo(1928, posy);
+				logctx.stroke();
+
+				posy += 160;
+			}
+			logctx.beginPath();
+			logctx.moveTo(100, 1120);
+			logctx.lineTo(1928, 1120);
+			logctx.moveTo(100, 1110);
+			logctx.lineTo(1928, 1110);
+			logctx.stroke();
+			core.fillBoldText1(
+				logctx,
+				"上一页",
+				300,
+				1200,
+				page === 1 ? "#444444" : "#FFFFFF",
+				"#000000",
+				6,
+				core.ui._buildFont(66, true)
+			);
+
+			core.fillBoldText1(
+				logctx,
+				page + "/" + this.overpage,
+				1000,
+				1200,
+				"#FFFFFF",
+				"#000000",
+				6,
+				core.ui._buildFont(66, true)
+			);
+			core.fillBoldText1(
+				logctx,
+				"下一页",
+				1500,
+				1200,
+				page === this.overpage ? "#444444" : "#FFFFFF",
+				"#000000",
+				6,
+				core.ui._buildFont(66, true)
+			);
+		}
+
+		background() {
+			if (core.domStyle.isVertical) {
+				ctx.canvas.width = 1248;
+				ctx.canvas.height = 2028;
+				ctx.save(); //保存设置
+				ctx.translate(1248, 0); //重新定位右上角为基准
+				ctx.rotate(Math.PI / 2); //旋转90度
+			} else {
+				ctx.canvas.width = 2028;
+				ctx.canvas.height = 1248;
+			}
+
+			this.bodyList.forEach((v) => {
+				//绘制立绘
+				const body = core.material.images.images?.[v.name];
+				if (v.filter) ctx.filter = "brightness(50%)";
+				if (body) {
+					if (!v.w && !v.h && !v.scale) v.scale = 1.7;
+					if (!v.w && !v.h) {
+						ctx.drawImage(
+							body,
+							0,
+							0,
+							body.width,
+							body.height,
+							v.px,
+							1248 - body.height * v.scale,
+							body.width * v.scale,
+							body.height * v.scale
+						);
+					} else {
+						ctx.drawImage(
+							body,
+							0,
+							0,
+							body.width,
+							body.height,
+							v.px,
+							1248 - (v.h ?? body.height),
+							v.w ?? body.width,
+							v.h ?? body.height
+						);
+					}
+				}
+				ctx.filter = "none";
+			});
+			if (core.isPlaying() && !this.WindowSkin)
+				core.drawWindowSkin(
+					"winskin.webp",
+					ctx,
+					30,
+					780,
+					1968,
+					436,
+					null,
+					null,
+					null,
+					3
+				); //绘制对话框
+			const head = core.material.images.images?.[this.head.name];
+			if (head) {
+				//绘制头像
+				ctx.drawImage(
+					head,
+					0,
+					0,
+					head.width,
+					head.height,
+					this.head.px,
+					1248 - head.height * 2.2,
+					head.width * 2.2,
+					head.height * 2.2
+				);
+			}
+			if (core.isPlaying() && !this.WindowSkin) {
+				core.drawWindowSkin(
+					"winskin.webp",
+					ctx,
+					1700,
+					800,
+					192,
+					96,
+					null,
+					null,
+					null,
+					3
+				);
+				core.fillBoldText1(
+					ctx,
+					"记 录",
+					1736,
+					866,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				);
+				core.drawWindowSkin(
+					"winskin.webp",
+					ctx,
+					1700,
+					1100,
+					192,
+					96,
+					null,
+					null,
+					null,
+					3
+				);
+				core.fillBoldText1(
+					ctx,
+					"存 档",
+					1736,
+					1166,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				);
+				core.drawWindowSkin(
+					"winskin.webp",
+					ctx,
+					1700,
+					1000,
+					192,
+					96,
+					null,
+					null,
+					null,
+					3
+				);
+				core.fillBoldText1(
+					ctx,
+					"▶▶",
+					1756,
+					1066,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				);
+				core.drawWindowSkin(
+					"winskin.webp",
+					ctx,
+					1700,
+					900,
+					192,
+					96,
+					null,
+					null,
+					null,
+					3
+				);
+				let autoText = "AUTO";
+				if (auto) autoText = "STOP";
+				core.fillBoldText1(
+					ctx,
+					autoText,
+					1722,
+					966,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				);
+			}
+			if (this.name)
+				core.fillBoldText1(
+					ctx,
+					`【${this.name}】`,
+					550,
+					880,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				); //绘制名字
+
+			if (
+				this.sound &&
+				core.sounds &&
+				!core.getFlag("skip", false) &&
+				core.musicStatus.soundStatus
+			) {
+				this.beforeSound = core.playSound(this.sound, null, () => {
+					if (
+						this.sound &&
+						auto &&
+						!this.WindowSkin &&
+						core.musicStatus.soundStatus
+					) {
+						setTimeout(() => {
+							if (auto) {
+								cg.style.display = "none";
+								core.ui._animateUI("hide", null, () => {
+									core.doAction();
+								});
+							}
+						}, this.wait);
+					}
+				});
+			}
+			if (this.text && !core.getFlag("skip", false)) {
+				//绘制对话
+				this.drawTextContent(ctx, this.text, {
+					left: 550,
+					top: 950,
+					bold: true,
+					color: "#FFFFFF",
+					align: "left",
+					fontSize: 48,
+					time: this.time || 0,
+					font: "Verdana",
+					maxWidth: 1000,
+				});
+			}
+
+			ctx.restore();
+		}
+	}
+	core.ui.cgText = new cgText();
+},
     "旁白": function () {
-    // 在此增加新插件
-    const over = document.createElement("canvas"); //over画布设置
-    over.style.position = "absolute";
-    over.style.zIndex = 310;
-    over.style.display = "none";
-    over.id = "over";
-    main.dom.gameGroup.insertAdjacentElement("afterend", over);
-    over.style.top = "50%";
-    over.style.left = "50%";
-    over.style.transform = "translate(-50%,-50%)";
-    const ctx = over.getContext("2d");
-    main.dom.over = over;
+	// 在此增加新插件
+	const over = document.createElement("canvas"); //over画布设置
+	over.style.position = "absolute";
+	over.style.zIndex = 310;
+	over.style.display = "none";
+	over.id = "over";
+	main.dom.gameGroup.insertAdjacentElement("afterend", over);
+	over.style.top = "50%";
+	over.style.left = "50%";
+	over.style.transform = "translate(-50%,-50%)";
+	const ctx1 = over.getContext("2d");
+	main.dom.over = over;
 
-    this.over = function (
-      image,
-      memory,
-      time = 100,
-      hidetime = 30,
-      sound = "",
-      textColor = "#FFFFFF",
-      boldColor = "#000000",
-      font = "bold 48px Verdana",
-      text = ""
-    ) {
-      if (!core.isPlaying()) {
-        return core.doAction();
-      }
-      const img = core.material.images.images?.[image];
-      over.style.display = "block";
-      let frame = 0;
-      let sod = 0;
-      let now = 0;
-      core.registerAnimationFrame("over", true, (timestamp) => {
-        if (timestamp - now > 1000 / 60) {
-          now = timestamp;
-          core.clearMap(ctx);
-          if (core.domStyle.isVertical) {
-            ctx.canvas.width = 416 * 3;
-            ctx.canvas.height = 676 * 3;
-            ctx.save(); //保存设置
-            ctx.translate(416 * 3, 0); //重新定位右上角为基准
-            ctx.rotate(Math.PI / 2); //旋转90度
-          } else {
-            ctx.canvas.width = 676 * 3;
-            ctx.canvas.height = 416 * 3;
-          }
-          ctx.globalAlpha = 1;
-          if (img) {
-            //绘制背景
-            if (memory) ctx.filter = "sepia(50%)";
-            ctx.drawImage(img, 0, 0, 676 * 3, 416 * 3);
-            ctx.filter = "none";
-          } else {
-            core.fillRect(ctx, 0, 0, 676 * 3, 416 * 3);
-          }
-          frame++;
-          // 绘制
-          if (frame <= hidetime)
-            core.setAlpha(ctx, 1 - (hidetime - frame) / hidetime);
-          if (frame > hidetime && frame <= hidetime + time) ctx.globalAlpha = 1;
-          if (frame > hidetime + time && frame <= hidetime * 2 + time)
-            core.setAlpha(ctx, 1 - (frame - hidetime - time) / hidetime);
-          const lisen =
-            sound &&
-            core.material.sounds[sound] &&
-            core.musicStatus.soundStatus;
-          if (frame == hidetime && lisen) {
-            sod = core.playSound(sound);
-          }
-          if (frame > hidetime * 2 + time) {
-            core.unregisterAnimationFrame("over");
-            ctx.restore();
-            over.style.display = "none";
-            core.stopSound(sod);
-            core.doAction();
-            return;
-          }
+	const temp = document.createElement("canvas")
+	temp.width = 676 * 3;
+	temp.height = 416 * 3;
 
-          core.setTextAlign(ctx, "center");
-          core.fillBoldText1(
-            ctx,
-            text,
-            1014,
-            624,
-            textColor,
-            boldColor,
-            6,
-            font
-          );
+	const ctx = temp.getContext("2d");
 
-          ctx.restore();
-        }
-      });
-    };
+	this.overupdate = function () {
+		if (core.domStyle.isVertical) {
+			ctx1.canvas.width = 416 * 3;
+			ctx1.canvas.height = 676 * 3;
+			ctx1.save(); //保存设置
+			ctx1.translate(416 * 3, 0); //重新定位右上角为基准
+			ctx1.rotate(Math.PI / 2); //旋转90度
+		} else {
+			ctx1.canvas.width = 676 * 3;
+			ctx1.canvas.height = 416 * 3;
+		}
+		core.clearMap(ctx1)
+		ctx1.drawImage(temp, 0, 0, 676 * 3, 416 * 3)
 
-    this.overlist = function (
-      image,
-      memory,
-      hidetime = 30,
-      list = [
-        {
-          text: "",
-          sound: "",
-          time: 50,
-          textColor: "#FFFFFF",
-          boldColor: "#000000",
-          font: "bold 48px Verdana",
-          frame: 0,
-        },
-      ]
-    ) {
-      if (!core.isPlaying()) {
-        return core.doAction();
-      }
-      const img = core.material.images.images?.[image];
-      over.style.display = "block";
-      let sod = 0;
-      let i = 0;
-      let now = 0;
-      core.registerAnimationFrame("overlist", true, (timestamp) => {
-        if (timestamp - now > 1000 / 60) {
-          now = timestamp;
-          core.clearMap(ctx);
-          if (core.domStyle.isVertical) {
-            ctx.canvas.width = 416 * 3;
-            ctx.canvas.height = 676 * 3;
-            ctx.save(); //保存设置
-            ctx.translate(416 * 3, 0); //重新定位右上角为基准
-            ctx.rotate(Math.PI / 2); //旋转90度
-          } else {
-            ctx.canvas.width = 676 * 3;
-            ctx.canvas.height = 416 * 3;
-          }
-          ctx.globalAlpha = 1;
-          if (img) {
-            //绘制背景
-            if (memory) ctx.filter = "sepia(50%)";
-            ctx.drawImage(img, 0, 0, 676 * 3, 416 * 3);
-            ctx.filter = "none";
-          } else {
-            core.fillRect(ctx, 0, 0, 676 * 3, 416 * 3);
-          }
-          const a = list[i];
-          const b = list[i - 1];
-          const c = list[i - 2];
-          const d = list[i - 3];
-          let ay = 624,
-            by = 624,
-            cy = 624,
-            dy = 624;
-          if (i === 0 && !list[1]) {
-            core.over(
-              image,
-              memory,
-              a.time,
-              hidetime,
-              a.sound,
-              a.textColor,
-              a.boldColor,
-              a.font,
-              a.text
-            );
-          } else {
-            const numa =
-              parseInt(a?.font?.match(/\s*[\d.-]+[a-zA-Z%]*\s*/)?.[0].trim()) ||
-              48;
-            const numb =
-              parseInt(b?.font?.match(/\s*[\d.-]+[a-zA-Z%]*\s*/)?.[0].trim()) ||
-              48;
-            const numc =
-              parseInt(c?.font?.match(/\s*[\d.-]+[a-zA-Z%]*\s*/)?.[0].trim()) ||
-              48;
-            const numd =
-              parseInt(d?.font?.match(/\s*[\d.-]+[a-zA-Z%]*\s*/)?.[0].trim()) ||
-              48;
+		ctx1.restore();
+	}
+	this.over = function (
+		image,
+		memory,
+		time = 100,
+		hidetime = 30,
+		sound = "",
+		textColor = "#FFFFFF",
+		boldColor = "#000000",
+		font = "bold 48px Verdana",
+		text = ""
+	) {
+		if (!core.isPlaying()) {
+			return core.doAction();
+		}
+		const img = core.material.images.images?.[image];
+		over.style.display = "block";
 
-            // 绘制
-            if (a) {
-              if (a.frame < hidetime / 2) {
-                a.frame++;
-                core.setAlpha(ctx, 1 - (hidetime - a.frame) / hidetime);
-                ay += ((numa * (hidetime - a.frame)) / hidetime) * 3;
-                core.setTextAlign(ctx, "center");
-                core.fillBoldText1(
-                  ctx,
-                  a.text,
-                  1014,
-                  ay,
-                  a.textColor,
-                  a.boldColor,
-                  6,
-                  a.font
-                );
-              }
-              if (a.frame === hidetime / 2) {
-                core.setAlpha(ctx, 1 - (hidetime - a.frame) / hidetime);
-                ay = 624 + ((numa * (hidetime - a.frame)) / hidetime) * 3;
-                core.setTextAlign(ctx, "center");
+		let sod = 0;
+		let start = 0;
+		core.registerAnimationFrame("over", true, (timestamp) => {
 
-                core.fillBoldText1(
-                  ctx,
-                  a.text,
-                  1014,
-                  ay,
-                  a.textColor,
-                  a.boldColor,
-                  6,
-                  a.font
-                );
-                if (!b) {
-                  a.frame++;
-                  i++;
-                }
-              }
-            }
-            if (b) {
-              if (b.frame > hidetime / 2 && b.frame <= hidetime) {
-                b.frame++;
-                core.setAlpha(ctx, 1 - (hidetime - b.frame) / hidetime);
-                by += ((numb * (hidetime - b.frame)) / hidetime) * 3;
-                core.setTextAlign(ctx, "center");
-                core.fillBoldText1(
-                  ctx,
-                  b.text,
-                  1014,
-                  by,
-                  b.textColor,
-                  b.boldColor,
-                  6,
-                  b.font
-                );
+			if (start === 0) start = timestamp;
+			core.clearMap(ctx);
 
-                core.stopSound(sod);
-              }
-              const lisenb =
-                b.sound &&
-                core.material.sounds[b.sound] &&
-                core.musicStatus.soundStatus;
-              if (b.frame && lisenb) {
-                sod = core.playSound(sound);
-              }
-              if (b.frame > hidetime && b.frame < hidetime + b.time) {
-                b.frame++;
-                ctx.globalAlpha = 1;
-                core.setTextAlign(ctx, "center");
-                core.fillBoldText1(
-                  ctx,
-                  b.text,
-                  1014,
-                  by,
-                  b.textColor,
-                  b.boldColor,
-                  6,
-                  b.font
-                );
-              }
 
-              if (b.frame == hidetime + b.time) {
-                ctx.globalAlpha = 1;
-                core.setTextAlign(ctx, "center");
-                core.fillBoldText1(
-                  ctx,
-                  b.text,
-                  1014,
-                  by,
-                  b.textColor,
-                  b.boldColor,
-                  6,
-                  b.font
-                );
-                if (a) a.frame++;
-                if (b) b.frame++;
-                if (c) c.frame++;
-                i++;
-              }
-            }
-            if (c) {
-              if (
-                c.frame > hidetime + c.time &&
-                c.frame < (hidetime * 3) / 2 + c.time
-              ) {
-                c.frame++;
-                core.setAlpha(
-                  ctx,
-                  1 - (c.frame - hidetime - c.time) / hidetime
-                );
-                cy -= ((numc * (c.frame - hidetime - c.time)) / hidetime) * 3;
-                core.setTextAlign(ctx, "center");
-                core.fillBoldText1(
-                  ctx,
-                  c.text,
-                  1014,
-                  cy,
-                  c.textColor,
-                  c.boldColor,
-                  6,
-                  c.font
-                );
-              }
-              if (c.frame === (hidetime * 3) / 2 + c.time) {
-                core.setAlpha(
-                  ctx,
-                  1 - (c.frame - hidetime - c.time) / hidetime
-                );
-                cy =
-                  624 - ((numc * (c.frame - hidetime - c.time)) / hidetime) * 3;
-                core.setTextAlign(ctx, "center");
-                core.fillBoldText1(
-                  ctx,
-                  c.text,
-                  1014,
-                  cy,
-                  c.textColor,
-                  c.boldColor,
-                  6,
-                  c.font
-                );
-                if (!b) {
-                  c.frame++;
-                  i++;
-                }
-              }
-            }
-            if (d) {
-              if (
-                d.frame > (hidetime * 3) / 2 + d.time &&
-                d.frame < hidetime * 2 + d.time
-              ) {
-                d.frame++;
-                core.setAlpha(
-                  ctx,
-                  1 - (d.frame - hidetime - d.time) / hidetime
-                );
-                dy -= ((numd * (d.frame - hidetime - d.time)) / hidetime) * 3;
-                core.setTextAlign(ctx, "center");
-                core.fillBoldText1(
-                  ctx,
-                  d.text,
-                  1014,
-                  dy,
-                  d.textColor,
-                  d.boldColor,
-                  6,
-                  d.font
-                );
-              }
-              if (d.frame == hidetime * 2 + d.time && !c) {
-                core.unregisterAnimationFrame("overlist");
-                ctx.restore();
-                over.style.display = "none";
-                core.stopSound(sod);
-                core.doAction();
-                return;
-              }
-            }
-          }
-          ctx.restore();
-        }
-      });
-    };
+			ctx.globalAlpha = 1;
+			if (img) {
+				//绘制背景
 
-    this.changebg = function (img1, memory1, img2, memory2, time, style) {
-      let globalAlpha1 = 0;
-      let globalAlpha2 = time;
-      img1 = core.material.images.images?.[img1];
-      img2 = core.material.images.images?.[img2];
-      over.style.display = "block";
-      let now = 0;
-      switch (style) {
-        case "引入":
-          core.registerAnimationFrame("bgin", true, (timestamp) => {
-            if (timestamp - now > 1000 / 60) {
-              now = timestamp;
-              core.clearMap(ctx);
-              if (core.domStyle.isVertical) {
-                ctx.canvas.width = 1248;
-                ctx.canvas.height = 676 * 3;
-                ctx.save(); //保存设置
-                ctx.translate(1248, 0); //重新定位右上角为基准
-                ctx.rotate(Math.PI / 2); //旋转90度
-              } else {
-                ctx.canvas.width = 676 * 3;
-                ctx.canvas.height = 1248;
-              }
-              ctx.globalAlpha = globalAlpha1 / time;
-              if (img2) {
-                //绘制背景
-                if (memory2) ctx.filter = "sepia(50%)";
-                ctx.drawImage(img2, 0, 0, 676 * 3, 1248);
-                ctx.filter = "none";
-              } else {
-                core.fillRect(ctx, 0, 0, 676 * 3, 1248);
-              }
-              globalAlpha1++;
-              ctx.restore();
-              if (globalAlpha1 >= time) {
-                core.unregisterAnimationFrame("bgin");
-                over.style.display = "none";
-                core.doAction();
-              }
-            }
-          });
+				if (memory) ctx.filter = "sepia(50%)";
+				ctx.drawImage(img, 0, 0, 676 * 3, 416 * 3);
+				ctx.filter = "none";
 
-          break;
-        case "引出":
-          core.registerAnimationFrame("bgout", true, (timestamp) => {
-            if (timestamp - now > 1000 / 60) {
-              now = timestamp;
-              core.clearMap(ctx);
-              if (core.domStyle.isVertical) {
-                ctx.canvas.width = 1248;
-                ctx.canvas.height = 676 * 3;
-                ctx.save(); //保存设置
-                ctx.translate(1248, 0); //重新定位右上角为基准
-                ctx.rotate(Math.PI / 2); //旋转90度
-              } else {
-                ctx.canvas.width = 676 * 3;
-                ctx.canvas.height = 1248;
-              }
-              ctx.globalAlpha = globalAlpha2 / time;
-              if (img1) {
-                //绘制背景
-                if (memory1) ctx.filter = "sepia(50%)";
-                ctx.drawImage(img1, 0, 0, 676 * 3, 1248);
-                ctx.filter = "none";
-              } else {
-                core.fillRect(ctx, 0, 0, 676 * 3, 1248);
-              }
-              globalAlpha2--;
-              ctx.restore();
-              if (globalAlpha2 <= 0) {
-                core.unregisterAnimationFrame("bgout");
-                over.style.display = "none";
-                core.doAction();
-              }
-            }
-          });
+			} else {
+				ctx.fillStyle = "#000000"
+				core.fillRect(ctx, 0, 0, 676 * 3, 416 * 3);
 
-          break;
-        case "场景切换":
-          core.registerAnimationFrame("changebg", true, (timestamp) => {
-            if (timestamp - now > 1000 / 60) {
-              now = timestamp;
-              core.clearMap(ctx);
-              if (core.domStyle.isVertical) {
-                ctx.canvas.width = 1248;
-                ctx.canvas.height = 676 * 3;
-                ctx.save(); //保存设置
-                ctx.translate(1248, 0); //重新定位右上角为基准
-                ctx.rotate(Math.PI / 2); //旋转90度
-              } else {
-                ctx.canvas.width = 676 * 3;
-                ctx.canvas.height = 1248;
-              }
-              ctx.globalAlpha = 1;
-              core.fillRect(ctx, 0, 0, 676 * 3, 1248);
-              ctx.globalAlpha = globalAlpha2 / time;
-              if (img1) {
-                //绘制背景
-                if (memory1) ctx.filter = "sepia(50%)";
-                ctx.drawImage(img1, 0, 0, 676 * 3, 1248);
-                ctx.filter = "none";
-              } else {
-                core.fillRect(ctx, 0, 0, 676 * 3, 1248);
-              }
-              ctx.globalAlpha = globalAlpha1 / time;
-              if (img2) {
-                //绘制背景
-                if (memory2) ctx.filter = "sepia(50%)";
-                ctx.drawImage(img2, 0, 0, 676 * 3, 1248);
-                ctx.filter = "none";
-              } else {
-                core.fillRect(ctx, 0, 0, 676 * 3, 1248);
-              }
-              globalAlpha2--;
-              globalAlpha1++;
-              ctx.restore();
-              if (globalAlpha2 <= 0 || globalAlpha1 >= time) {
-                core.unregisterAnimationFrame("changebg");
-                over.style.display = "none";
-                core.doAction();
-              }
-            }
-          });
+			}
+			let frame = Math.floor((timestamp - start) / (1000 / 60))
+			// 绘制
+			if (frame <= hidetime)
+				core.setAlpha(ctx, 1 - (hidetime - frame) / hidetime);
+			if (frame > hidetime && frame <= hidetime + time) ctx.globalAlpha = 1;
+			if (frame > hidetime + time && frame <= hidetime * 2 + time)
+				core.setAlpha(ctx, 1 - (frame - hidetime - time) / hidetime);
+			const lisen =
+				sound && core.sounds[sound] && core.musicStatus.soundStatus;
+			if (frame == hidetime && lisen) {
+				sod = core.playSound(sound);
+			}
+			if (frame > hidetime * 2 + time) {
+				core.unregisterAnimationFrame("over");
+				ctx.restore();
+				over.style.display = "none";
+				core.stopSound(sod);
+				core.doAction();
+				return;
+			}
 
-          break;
-      }
-    };
-  },
+			core.setTextAlign(ctx, "center");
+			core.fillBoldText1(
+				ctx,
+				text,
+				1014,
+				624,
+				textColor,
+				boldColor,
+				6,
+				font
+			);
+			if (core.domStyle.isVertical) {
+				ctx1.canvas.width = 416 * 3;
+				ctx1.canvas.height = 676 * 3;
+				ctx1.save(); //保存设置
+				ctx1.translate(416 * 3, 0); //重新定位右上角为基准
+				ctx1.rotate(Math.PI / 2); //旋转90度
+			} else {
+				ctx1.canvas.width = 676 * 3;
+				ctx1.canvas.height = 416 * 3;
+			}
+			core.clearMap(ctx1)
+			ctx1.drawImage(temp, 0, 0, 676 * 3, 416 * 3)
+			ctx1.restore();
+
+		});
+	};
+
+	this.overlist = function (
+		image,
+		memory,
+		hidetime = 30,
+		list = [{
+			text: "",
+			sound: "",
+			time: 50,
+			textColor: "#FFFFFF",
+			boldColor: "#000000",
+			font: "bold 48px Verdana",
+			frame: 0,
+		}, ]
+	) {
+		if (!core.isPlaying()) {
+			return core.doAction();
+		}
+		const img = core.material.images.images?.[image];
+		over.style.display = "block";
+		let sod = 0;
+		let i = 0;
+		let now = 0;
+		core.registerAnimationFrame("overlist", true, (timestamp) => {
+			if (timestamp - now > 1000 / 60) {
+				now = timestamp;
+				core.clearMap(ctx);
+
+				ctx.globalAlpha = 1;
+				if (img) {
+					//绘制背景
+					if (memory) ctx.filter = "sepia(50%)";
+
+					core.drawImage(ctx, img, 0, 0, 676 * 3, 416 * 3);
+					ctx.filter = "none";
+				} else {
+					ctx.fillStyle = "#000000"
+					core.fillRect(ctx, 0, 0, 676 * 3, 416 * 3);
+				}
+				const a = list[i];
+				const b = list[i - 1];
+				const c = list[i - 2];
+				const d = list[i - 3];
+				let ay = 624,
+					by = 624,
+					cy = 624,
+					dy = 624;
+				if (i === 0 && !list[1]) {
+					core.over(
+						image,
+						memory,
+						a.time,
+						hidetime,
+						a.sound,
+						a.textColor,
+						a.boldColor,
+						a.font,
+						a.text
+					);
+				} else {
+					const numa =
+						parseInt(a?.font?.match(/\s*[\d.-]+[a-zA-Z%]*\s*/)?.[0].trim()) ||
+						48;
+					const numb =
+						parseInt(b?.font?.match(/\s*[\d.-]+[a-zA-Z%]*\s*/)?.[0].trim()) ||
+						48;
+					const numc =
+						parseInt(c?.font?.match(/\s*[\d.-]+[a-zA-Z%]*\s*/)?.[0].trim()) ||
+						48;
+					const numd =
+						parseInt(d?.font?.match(/\s*[\d.-]+[a-zA-Z%]*\s*/)?.[0].trim()) ||
+						48;
+
+					// 绘制
+					if (a) {
+						if (a.frame < hidetime / 2) {
+							a.frame++;
+							core.setAlpha(ctx, 1 - (hidetime - a.frame) / hidetime);
+							ay += ((numa * (hidetime - a.frame)) / hidetime) * 3;
+							core.setTextAlign(ctx, "center");
+							core.fillBoldText1(
+								ctx,
+								a.text,
+								1014,
+								ay,
+								a.textColor,
+								a.boldColor,
+								6,
+								a.font
+							);
+						}
+						if (a.frame === hidetime / 2) {
+							core.setAlpha(ctx, 1 - (hidetime - a.frame) / hidetime);
+							ay = 624 + ((numa * (hidetime - a.frame)) / hidetime) * 3;
+							core.setTextAlign(ctx, "center");
+
+							core.fillBoldText1(
+								ctx,
+								a.text,
+								1014,
+								ay,
+								a.textColor,
+								a.boldColor,
+								6,
+								a.font
+							);
+							if (!b) {
+								a.frame++;
+								i++;
+							}
+						}
+					}
+					if (b) {
+						if (b.frame > hidetime / 2 && b.frame <= hidetime) {
+							b.frame++;
+							core.setAlpha(ctx, 1 - (hidetime - b.frame) / hidetime);
+							by += ((numb * (hidetime - b.frame)) / hidetime) * 3;
+							core.setTextAlign(ctx, "center");
+							core.fillBoldText1(
+								ctx,
+								b.text,
+								1014,
+								by,
+								b.textColor,
+								b.boldColor,
+								6,
+								b.font
+							);
+
+							core.stopSound(sod);
+						}
+						const lisenb =
+							b.sound && core.sounds[b.sound] && core.musicStatus.soundStatus;
+						if (b.frame && lisenb) {
+							sod = core.playSound(sound);
+						}
+						if (b.frame > hidetime && b.frame < hidetime + b.time) {
+							b.frame++;
+							ctx.globalAlpha = 1;
+							core.setTextAlign(ctx, "center");
+							core.fillBoldText1(
+								ctx,
+								b.text,
+								1014,
+								by,
+								b.textColor,
+								b.boldColor,
+								6,
+								b.font
+							);
+						}
+
+						if (b.frame == hidetime + b.time) {
+							ctx.globalAlpha = 1;
+							core.setTextAlign(ctx, "center");
+							core.fillBoldText1(
+								ctx,
+								b.text,
+								1014,
+								by,
+								b.textColor,
+								b.boldColor,
+								6,
+								b.font
+							);
+							if (a) a.frame++;
+							if (b) b.frame++;
+							if (c) c.frame++;
+							i++;
+						}
+					}
+					if (c) {
+						if (
+							c.frame > hidetime + c.time &&
+							c.frame < (hidetime * 3) / 2 + c.time
+						) {
+							c.frame++;
+							core.setAlpha(
+								ctx,
+								1 - (c.frame - hidetime - c.time) / hidetime
+							);
+							cy -= ((numc * (c.frame - hidetime - c.time)) / hidetime) * 3;
+							core.setTextAlign(ctx, "center");
+							core.fillBoldText1(
+								ctx,
+								c.text,
+								1014,
+								cy,
+								c.textColor,
+								c.boldColor,
+								6,
+								c.font
+							);
+						}
+						if (c.frame === (hidetime * 3) / 2 + c.time) {
+							core.setAlpha(
+								ctx,
+								1 - (c.frame - hidetime - c.time) / hidetime
+							);
+							cy =
+								624 - ((numc * (c.frame - hidetime - c.time)) / hidetime) * 3;
+							core.setTextAlign(ctx, "center");
+							core.fillBoldText1(
+								ctx,
+								c.text,
+								1014,
+								cy,
+								c.textColor,
+								c.boldColor,
+								6,
+								c.font
+							);
+							if (!b) {
+								c.frame++;
+								i++;
+							}
+						}
+					}
+					if (d) {
+						if (
+							d.frame > (hidetime * 3) / 2 + d.time &&
+							d.frame < hidetime * 2 + d.time
+						) {
+							d.frame++;
+							core.setAlpha(
+								ctx,
+								1 - (d.frame - hidetime - d.time) / hidetime
+							);
+							dy -= ((numd * (d.frame - hidetime - d.time)) / hidetime) * 3;
+							core.setTextAlign(ctx, "center");
+							core.fillBoldText1(
+								ctx,
+								d.text,
+								1014,
+								dy,
+								d.textColor,
+								d.boldColor,
+								6,
+								d.font
+							);
+						}
+						if (d.frame == hidetime * 2 + d.time && !c) {
+							core.unregisterAnimationFrame("overlist");
+							core.clearMap(ctx)
+							core.clearMap(ctx1)
+
+							over.style.display = "none";
+							core.stopSound(sod);
+							core.doAction();
+							return;
+						}
+					}
+				}
+				if (core.domStyle.isVertical) {
+					ctx1.canvas.width = 416 * 3;
+					ctx1.canvas.height = 676 * 3;
+					ctx1.save(); //保存设置
+					ctx1.translate(416 * 3, 0); //重新定位右上角为基准
+					ctx1.rotate(Math.PI / 2); //旋转90度
+				} else {
+					ctx1.canvas.width = 676 * 3;
+					ctx1.canvas.height = 416 * 3;
+				}
+				core.clearMap(ctx1)
+				ctx1.drawImage(temp, 0, 0, 676 * 3, 416 * 3)
+				ctx1.restore();
+			}
+		});
+	};
+
+	this.changebg = function (img1, memory1, img2, memory2, time, style) {
+		let frame = 0;
+		img1 = core.material.images.images?.[img1];
+		img2 = core.material.images.images?.[img2];
+		over.style.display = "block";
+		let start = 0;
+		switch (style) {
+		case "引入":
+			core.registerAnimationFrame("bgin", true, (timestamp) => {
+
+				if (start === 0) start = timestamp;
+				let frame = Math.floor((timestamp - start) / (1000 / 60))
+				core.clearMap(ctx);
+
+				ctx.globalAlpha = frame / time;
+				if (img2) {
+					//绘制背景
+					if (memory2) ctx.filter = "sepia(50%)";
+					core.drawImage(ctx, img2, 0, 0, 676 * 3, 1248);
+					ctx.filter = "none";
+				} else {
+					ctx.fillStyle = "#000000"
+					core.fillRect(ctx, 0, 0, 676 * 3, 1248);
+				}
+
+				if (core.domStyle.isVertical) {
+					ctx1.canvas.width = 416 * 3;
+					ctx1.canvas.height = 676 * 3;
+					ctx1.save(); //保存设置
+					ctx1.translate(416 * 3, 0); //重新定位右上角为基准
+					ctx1.rotate(Math.PI / 2); //旋转90度
+				} else {
+					ctx1.canvas.width = 676 * 3;
+					ctx1.canvas.height = 416 * 3;
+				}
+				core.clearMap(ctx1)
+				ctx1.drawImage(temp, 0, 0, 676 * 3, 416 * 3)
+				ctx1.restore();
+				if (frame > time) {
+					core.unregisterAnimationFrame("bgin");
+
+					core.doAction();
+				}
+
+
+			});
+
+			break;
+		case "引出":
+			core.registerAnimationFrame("bgout", true, (timestamp) => {
+				if (start === 0) start = timestamp;
+				let frame = Math.floor((timestamp - start) / (1000 / 60))
+				core.clearMap(ctx);
+
+				ctx.globalAlpha = 1 - frame / time;
+				if (img1) {
+					//绘制背景
+					if (memory1) ctx.filter = "sepia(50%)";
+					core.drawImage(ctx, img1, 0, 0, 676 * 3, 1248);
+					ctx.filter = "none";
+				} else {
+					ctx.fillStyle = "#000000"
+					core.fillRect(ctx, 0, 0, 676 * 3, 1248);
+				}
+
+				if (core.domStyle.isVertical) {
+					ctx1.canvas.width = 416 * 3;
+					ctx1.canvas.height = 676 * 3;
+					ctx1.save(); //保存设置
+					ctx1.translate(416 * 3, 0); //重新定位右上角为基准
+					ctx1.rotate(Math.PI / 2); //旋转90度
+				} else {
+					ctx1.canvas.width = 676 * 3;
+					ctx1.canvas.height = 416 * 3;
+				}
+				core.clearMap(ctx1)
+				ctx1.drawImage(temp, 0, 0, 676 * 3, 416 * 3)
+				ctx1.restore();
+				if (frame > time) {
+					core.unregisterAnimationFrame("bgout");
+					over.style.display = "none";
+					core.doAction();
+				}
+
+			});
+
+			break;
+		case "场景切换":
+			core.registerAnimationFrame("changebg", true, (timestamp) => {
+				if (start === 0) start = timestamp;
+				let frame = Math.floor((timestamp - start) / (1000 / 60))
+				core.clearMap(ctx);
+
+				ctx.globalAlpha = 1;
+				ctx.fillStyle = "#000000"
+				core.fillRect(ctx, 0, 0, 676 * 3, 1248);
+				ctx.globalAlpha = 1 - frame / time;
+				if (img1) {
+					//绘制背景
+					if (memory1) ctx.filter = "sepia(50%)";
+					core.drawImage(ctx, img1, 0, 0, 676 * 3, 1248);
+					ctx.filter = "none";
+				} else {
+					ctx.fillStyle = "#000000"
+					core.fillRect(ctx, 0, 0, 676 * 3, 1248);
+				}
+				ctx.globalAlpha = frame / time;
+				if (img2) {
+					//绘制背景
+					if (memory2) ctx.filter = "sepia(50%)";
+					core.drawImage(ctx, img2, 0, 0, 676 * 3, 1248);
+					ctx.filter = "none";
+				} else {
+					ctx.fillStyle = "#000000"
+					core.fillRect(ctx, 0, 0, 676 * 3, 1248);
+				}
+
+				if (core.domStyle.isVertical) {
+					ctx1.canvas.width = 416 * 3;
+					ctx1.canvas.height = 676 * 3;
+					ctx1.save(); //保存设置
+					ctx1.translate(416 * 3, 0); //重新定位右上角为基准
+					ctx1.rotate(Math.PI / 2); //旋转90度
+				} else {
+					ctx1.canvas.width = 676 * 3;
+					ctx1.canvas.height = 416 * 3;
+				}
+				core.clearMap(ctx1)
+				ctx1.drawImage(temp, 0, 0, 676 * 3, 416 * 3)
+				ctx1.restore();
+				if (frame > time) {
+					core.unregisterAnimationFrame("changebg");
+
+					core.doAction();
+				}
+
+			});
+
+			break;
+
+		}
+	};
+	this.drawbackground = function (image, memory) {
+
+
+		over.style.display = "block";
+
+		//绘制背景
+		if (memory) ctx.filter = "sepia(70%)";
+		core.drawImage(ctx, image, 0, 0, 2028, 1248);
+		ctx.filter = "none";
+		if (core.domStyle.isVertical) {
+			ctx1.canvas.width = 416 * 3;
+			ctx1.canvas.height = 676 * 3;
+			ctx1.save(); //保存设置
+			ctx1.translate(416 * 3, 0); //重新定位右上角为基准
+			ctx1.rotate(Math.PI / 2); //旋转90度
+		} else {
+			ctx1.canvas.width = 676 * 3;
+			ctx1.canvas.height = 416 * 3;
+		}
+		core.clearMap(ctx1)
+		ctx1.drawImage(temp, 0, 0, 676 * 3, 416 * 3)
+		ctx1.restore();
+
+	}
+	this.clearbackground = function () {
+
+		over.style.display = "none";
+		core.doAction();
+	}
+},
     "回合制boss战": function () {
-    // 在此增加新插件
-    const boss = document.createElement("canvas"); //boss战画布设置
-    boss.style.position = "absolute";
-    boss.style.zIndex = 300;
-    boss.style.display = "none";
-    boss.id = "boss";
-    main.dom.gameGroup.insertAdjacentElement("afterend", boss);
-    boss.style.top = "50%";
-    boss.style.left = "50%";
-    boss.style.transform = "translate(-50%,-50%)";
-    const ctx = boss.getContext("2d");
-    main.dom.boss = boss;
-    boss.onclick = function (e) {
-      try {
-        e.preventDefault();
-        if (core.isPlaying()) return false;
-        const left = core.dom.gameGroup.offsetLeft;
-        const top = core.dom.gameGroup.offsetTop;
-        const px = Math.floor((e.clientX - left) / core.domStyle.scale),
-          py = Math.floor((e.clientY - top) / core.domStyle.scale);
-        core.ui.boss.onclick(px * 3, py * 3);
-      } catch (ee) {
-        main.log(ee);
-      }
-    };
-    class boss1 {
-      constructor() {
-        this.bg = "";
-      }
-      cavans() {
-        if (core.domStyle.isVertical) {
-          ctx.canvas.width = 1248;
-          ctx.canvas.height = 2028;
+	// 在此增加新插件
+	const boss = document.createElement("canvas"); //boss战画布设置
+	boss.style.position = "absolute";
+	boss.style.zIndex = 310;
+	boss.style.display = "none";
+	boss.id = "boss";
+	main.dom.gameGroup.insertAdjacentElement("afterend", boss);
+	boss.style.top = "50%";
+	boss.style.left = "50%";
+	boss.style.transform = "translate(-50%,-50%)";
+	const ctx = boss.getContext("2d");
+	main.dom.boss = boss;
+	const boss1 = document.createElement("canvas"); //boss战画布设置
+	boss1.style.position = "absolute";
+	boss1.style.zIndex = 300;
+	boss1.style.display = "none";
+	boss1.id = "boss1";
+	main.dom.gameGroup.insertAdjacentElement("afterend", boss1);
+	boss1.style.top = "50%";
+	boss1.style.left = "50%";
+	boss1.style.transform = "translate(-50%,-50%)";
+	const ctx1 = boss1.getContext("2d");
+	main.dom.boss1 = boss1;
+	const boss2 = document.createElement("canvas"); //boss战画布设置
+	boss2.style.position = "absolute";
+	boss2.style.zIndex = 301;
+	boss2.style.display = "none";
+	boss2.id = "boss2";
+	main.dom.gameGroup.insertAdjacentElement("afterend", boss2);
+	boss2.style.top = "50%";
+	boss2.style.left = "50%";
+	boss2.style.transform = "translate(-50%,-50%)";
+	main.dom.boss2 = boss2;
+	const ctx2 = boss2.getContext("2d");
+	const boss3 = document.createElement("canvas"); //boss战画布设置
+	boss3.style.position = "absolute";
+	boss3.style.zIndex = 302;
+	boss3.style.display = "none";
+	boss3.id = "boss3";
+	main.dom.gameGroup.insertAdjacentElement("afterend", boss3);
+	boss3.style.top = "50%";
+	boss3.style.left = "50%";
+	boss3.style.transform = "translate(-50%,-50%)";
+	main.dom.boss3 = boss3;
+	const ctx3 = boss3.getContext("2d");
+	const boss4 = document.createElement("canvas"); //boss战画布设置
+	boss4.style.position = "absolute";
+	boss4.style.zIndex = 303;
+	boss4.style.display = "none";
+	boss4.id = "boss4";
+	main.dom.gameGroup.insertAdjacentElement("afterend", boss4);
+	boss4.style.top = "50%";
+	boss4.style.left = "50%";
+	boss4.style.transform = "translate(-50%,-50%)";
+	const ctx4 = boss4.getContext("2d");
+	main.dom.boss4 = boss4;
+	const boss5 = document.createElement("canvas"); //boss战画布设置
+	boss5.style.position = "absolute";
+	boss5.style.zIndex = 304;
+	boss5.style.display = "none";
+	boss5.id = "boss5";
+	main.dom.gameGroup.insertAdjacentElement("afterend", boss5);
+	boss5.style.top = "50%";
+	boss5.style.left = "50%";
+	boss5.style.transform = "translate(-50%,-50%)";
+	const ctx5 = boss5.getContext("2d");
+	main.dom.boss5 = boss5;
 
-          core.setTextAlign(ctx, "center");
-        } else {
-          ctx.canvas.width = 2028;
-          ctx.canvas.height = 1248;
+	const boss6 = document.createElement("canvas"); //boss战画布设置
+	boss6.style.position = "absolute";
+	boss6.style.zIndex = 305;
+	boss6.style.display = "none";
+	boss6.id = "boss6";
+	main.dom.gameGroup.insertAdjacentElement("afterend", boss6);
+	boss6.style.top = "50%";
+	boss6.style.left = "50%";
+	boss6.style.transform = "translate(-50%,-50%)";
+	const ctx6 = boss6.getContext("2d");
+	main.dom.boss6 = boss6;
+	const boss7 = document.createElement("canvas"); //boss战画布设置
+	boss7.style.position = "absolute";
+	boss7.style.zIndex = 306;
+	boss7.style.display = "none";
+	boss7.id = "boss7";
+	main.dom.gameGroup.insertAdjacentElement("afterend", boss7);
+	boss7.style.top = "50%";
+	boss7.style.left = "50%";
+	boss7.style.transform = "translate(-50%,-50%)";
+	const ctx7 = boss7.getContext("2d");
+	main.dom.boss7 = boss7;
+	const boss8 = document.createElement("canvas"); //boss战画布设置
+	boss8.style.position = "absolute";
+	boss8.style.zIndex = 307;
+	boss8.style.display = "none";
+	boss8.id = "boss8";
+	main.dom.gameGroup.insertAdjacentElement("afterend", boss8);
+	boss8.style.top = "50%";
+	boss8.style.left = "50%";
+	boss8.style.transform = "translate(-50%,-50%)";
+	const ctx8 = boss8.getContext("2d");
+	main.dom.boss8 = boss8;
+	const { imagelighter } = core.plugin.utils;
+	const { Animation, linear, bezier, circle, hyper, trigo, power, inverseTrigo, shake, sleep } = core.plugin.animate
 
-          core.setTextAlign(ctx, "center");
-        }
-      }
-      start() {}
-      onclick(px, py) {}
-    }
-    core.ui.boss = new boss1();
-  },
+	function animateFarme(name, animate, centerX, centerY, index) {
+		var a = core.getContextByName(name);
+		if (!a) return;
+		var frame = animate.frames[index % animate.frame];
+
+		core.playSound((animate.se || {})[index % animate.frame + 1], (animate.pitch || {})[index % animate.frame + 1]);
+		var ratio = animate.ratio * 6;
+		if (core.domStyle.isVertical) {
+			a.canvas.width = 1248;
+			a.canvas.height = 2028;
+			a.save(); //保存设置
+			a.translate(1248, 0); //重新定位右上角为基准
+			a.rotate(Math.PI / 2); //旋转90度
+		} else {
+			a.canvas.width = 2028;
+			a.canvas.height = 1248;
+		}
+		frame.forEach(function (t) {
+			var image = animate.images[t.index];
+			if (!image) return;
+
+			var realWidth = image.width * ratio * t.zoom / 100;
+			var realHeight = image.height * ratio * t.zoom / 100;
+			core.setAlpha(a, t.opacity / 255);
+
+			var cx = centerX + t.x * 6,
+				cy = centerY + t.y * 6;
+
+			var ix = cx - realWidth / 2,
+				iy = cy - realHeight / 2;
+
+			var mirror = t.mirror ? 'x' : null;
+			var angle = t.angle ? -t.angle * Math.PI / 180 : null;
+			core.drawImage(a, image, ix, iy, realWidth, realHeight, null, null, null, null, angle, mirror);
+
+			core.setAlpha(a, 1);
+			a.restore()
+		})
+	}
+	let ani = []
+
+	function drawanimate(timestamp) {
+		let frametime = timestamp - core.ui.boss.time
+		core.ui.boss.time = timestamp;
+		if (!ani || ani.length == 0) return;
+
+		core.clearMap(ctx6);
+		// 更新帧
+		for (var i = 0; i < ani.length; i++) {
+			var obj = ani[i];
+			if (obj.start === 0) obj.start = core.ui.boss.time
+			obj.index = Math.floor((core.ui.boss.time - obj.start) / (1000 / 60))
+
+			if (obj.index >= obj.animate.frames.length) {
+
+				(function (callback) {
+					setTimeout(function () {
+						if (callback) callback();
+					});
+				})(obj.callback);
+			}
+		}
+		ani = ani.filter(function (obj) {
+			return obj.index < obj.animate.frames.length;
+		});
+
+		ani.forEach(function (obj) {
+
+			animateFarme(ctx6, obj.animate, obj.centerX, obj.centerY, obj.index);
+
+		});
+	}
+
+
+	function getClick() {
+		return new Promise((resolve) => {
+			function handleBossClick(e) {
+				try {
+					e.preventDefault();
+					if (!core.isPlaying()) return false;
+
+					const left = core.dom.gameGroup.offsetLeft;
+					const top = core.dom.gameGroup.offsetTop;
+					const px = Math.floor((e.clientX - left) / core.domStyle.scale),
+						py = Math.floor((e.clientY - top) / core.domStyle.scale);
+
+					let x, y;
+					if (core.domStyle.isVertical) {
+						x = py * 3;
+						y = 1248 - px * 3;
+					} else {
+						x = px * 3;
+						y = py * 3;
+					}
+					core.ui.boss.click(x, y);
+
+					if (
+						x > 1050 &&
+						x < 1450 &&
+						y > 250 &&
+						y < 390 &&
+						!core.ui.boss.show &&
+						core.ui.boss.hasEnemy()
+					) {
+						// 移除事件监听器
+						boss.removeEventListener("click", handleBossClick);
+						resolve("普通攻击"); //有小怪时点击普通攻击
+						return; // 退出函数
+					}
+					if (
+						x > 850 &&
+						x < 1250 &&
+						y > 250 &&
+						y < 390 &&
+						!core.ui.boss.show &&
+						!core.ui.boss.hasEnemy()
+					) {
+						// 移除事件监听器
+						boss.removeEventListener("click", handleBossClick);
+						resolve("普通攻击"); //无小怪时点击普通攻击
+						return; // 退出函数
+					}
+				} catch (ee) {
+					main.log(ee);
+				}
+			}
+			boss.addEventListener("click", handleBossClick);
+		});
+	}
+
+	class Boss {
+		constructor() {
+			//绘制需要的变量
+			this.enemyfarme = 0;
+			this.bg = "bg_3512.webp";
+			this.heroImage = "tati_310101.webp";
+			this.hero = {
+				id: "hero",
+				name: "凯伊姆",
+				hp: 1000,
+				atk: 150,
+				def: 100,
+				spell: 100,
+				speed: 10,
+				mdef: 10,
+			};
+			this.boss = {
+				name: "菲奥奈",
+				id: "angel",
+				image: "tati_050143.webp",
+				hp: 1000,
+				atk: 200,
+				def: 100,
+				speed: 10,
+				mdef: 10,
+				skill: ["普通攻击", "重斩"],
+				index: 0,
+			};
+			this.onchoose = false
+			this.enemy = [];
+			this.enemy = [{
+					name: "小蝙蝠",
+					id: "bat",
+					image: "tati_020125a.webp",
+					hp: 1000,
+					atk: 100,
+					def: 20,
+					speed: 10,
+					mdef: 10,
+					skill: ["普通攻击", "重斩"],
+					index: 0,
+				},
+				{
+					name: "红蝙蝠",
+					id: "redBat",
+					image: "tati_050301.webp",
+					hp: 1000,
+					atk: 100,
+					def: 120,
+					speed: 10,
+					mdef: 10,
+					skill: ["普通攻击", "重斩"],
+					index: 0,
+				},
+				{
+					name: "大蝙蝠",
+					id: "bigBat",
+					image: "tati_120101.webp",
+					hp: 1000,
+					atk: 100,
+					def: 100,
+					speed: 10,
+					mdef: 10,
+					skill: ["普通攻击", "重斩"],
+					index: 0,
+				},
+				{
+					name: "绿色史莱姆",
+					id: "greenSlime",
+					image: "tati_340115.webp",
+					hp: 1000,
+					atk: 100,
+					def: 100,
+					speed: 10,
+					mdef: 10,
+					skill: ["普通攻击", "重斩"],
+					index: 0,
+				},
+				{
+					name: "红色史莱姆",
+					id: "redSlime",
+					image: "tati_430101.webp",
+					hp: 1000,
+					atk: 100,
+					def: 100,
+					speed: 10,
+					mdef: 10,
+					skill: ["普通攻击", "重斩"],
+					index: 0,
+				},
+				{
+					name: "黑色史莱姆",
+					id: "blackSlime",
+					image: "tati_440101.webp",
+					hp: 1000,
+					atk: 100,
+					def: 100,
+					speed: 10,
+					mdef: 10,
+					skill: ["普通攻击", "重斩"],
+					index: 0,
+				},
+			];
+			this.selection = "boss";
+			this.herobuff = [
+				{ id: "sword1", count: 1 },
+				{ id: "fly", count: 30 },
+			];
+			this.bossbuff = [
+				{ id: "fly", count: 2 },
+				{ id: "book", count: 12, hp: 100 },
+			];
+			this.enemybuff = [
+				[],
+				[],
+				[],
+				[],
+				[],
+				[]
+			];
+			this.skills = {
+				//技能列表,便于调用(可通过this.skills[name]调用)
+				菲奥奈: ["普通攻击", "重斩"],
+			};
+			this.skillShow = {
+				//技能说明
+				普通攻击: "常规攻击形式,伤害为自身攻击-对手防御",
+			};
+
+			this.turn = 0;
+			this.playingAnimate = new Set();
+			this.playerTurn = false;
+			this.show = false;
+			this.time = 0
+		}
+		buffshow(a) {
+			//buff说明(均未实装,之后改为实际需要的buff)
+			let text = "";
+			switch (a.id) {
+			case "sword1":
+				text = `\r[rgb(30,66,30)]剑气:\r造成伤害提升\r[red]${
+              10 * a.count
+            }%\r`;
+				break;
+			case "fly":
+				text = `羽翼守护:接下来\r[gold]${a.count}回合\r不受速度差值影响`;
+				break;
+			case "book":
+				text = `恢复之书:接下来\r[#000033]${a.count}回合\r,每回合行动时回复\r[green]${a.hp}\r点生命`;
+				break;
+			}
+			return text;
+		}
+		async shake(hero) {
+			const animate = new Animation()
+			const fn = () => {
+				if (hero) {
+					const img = imagelighter(
+						core.material.images.images[this.heroImage]
+					);
+					core.clearMap(ctx2);
+					if (core.domStyle.isVertical) {
+						ctx2.canvas.width = 1248;
+						ctx2.canvas.height = 2028;
+						ctx2.save(); //保存设置
+						ctx2.translate(1248, 0); //重新定位右上角为基准
+						ctx2.rotate(Math.PI / 2); //旋转90度
+					} else {
+						ctx2.canvas.width = 2028;
+						ctx2.canvas.height = 1248;
+					}
+
+					core.drawImage(ctx2, img, animate.x, 168, 750, 1080);
+					ctx2.restore();
+				} else {
+					core.clearMap(ctx3);
+					if (core.domStyle.isVertical) {
+						ctx3.canvas.width = 1248;
+						ctx3.canvas.height = 2028;
+						ctx3.save(); //保存设置
+						ctx3.translate(1248, 0); //重新定位右上角为基准
+						ctx3.rotate(Math.PI / 2); //旋转90度
+					} else {
+						ctx3.canvas.width = 2028;
+						ctx3.canvas.height = 1248;
+					}
+					if (this.selection === "boss" || this.selection === "") {
+						const img = imagelighter(
+							core.material.images.images[this.boss.image]
+						);
+						core.drawImage(ctx3, img, 1400 + animate.x, 168, 750, 1080);
+					} else {
+						const img = imagelighter(
+							core.material.images.images[
+								this.enemy[this.selection].image
+							]
+						);
+						core.drawImage(ctx3, img, 1400 + animate.x, 168, 750, 1080);
+					}
+
+					ctx3.restore();
+				}
+			}
+			animate.ticker.add(fn)
+			animate.getTime = () => Date.now() / 100
+			animate.mode(shake(30, linear()), true).time(5).shake(1, 0)
+			await animate.all();
+			animate.ticker.destroy()
+			this.drawhero();
+			this.drawboss();
+		}
+
+		popDamage(damage, onhero) {
+
+			let color = "#FFFFFF";
+			if (typeof damage === "number") {
+				color = damage < 0 ? "#22FF44" : "lightcoral";
+			}
+			let posx = onhero ? 300 : 1800;
+			let start = 0
+			const speed = 9;
+			return new Promise((resolve) => {
+				core.registerAnimationFrame("popDamageonboss", true, (temptime) => {
+
+					if (start === 0) start = temptime
+
+					let farme = Math.floor((temptime - start) / (1000 / 60))
+					if (core.domStyle.isVertical) {
+						ctx.canvas.width = 1248;
+						ctx.canvas.height = 2028;
+						ctx.save(); //保存设置
+						ctx.translate(1248, 0); //重新定位右上角为基准
+						ctx.rotate(Math.PI / 2); //旋转90度
+					} else {
+						ctx.canvas.width = 2028;
+						ctx.canvas.height = 1248;
+					}
+					core.clearMap(ctx);
+					core.setTextAlign(ctx, "center");
+					core.fillBoldText1(
+						ctx,
+						damage,
+						posx,
+						800 - speed * farme,
+						color,
+						"#000000",
+						6,
+						"bold 72px Arial"
+					);
+
+					ctx.restore();
+					if (farme > 30) {
+						core.unregisterAnimationFrame("popDamageonboss");
+
+						core.clearMap(ctx);
+						resolve();
+					}
+
+				});
+			});
+		}
+		async skill(sk, a, b) {
+			//a为发起方属性,sk为技能名
+			let damage = 0;
+			switch (
+				sk //所有技能效果及动画写在这里
+			) {
+			case "普通攻击":
+				damage = Math.max(a.atk - b.def, 0); //基础伤害
+				if (a.id === 'hero') damage = Math.floor((damage * a.speed) / b.speed); //勇者攻击时伤害根据速度比值伤害加成
+				b.hp -= damage; //承受伤害
+				if (b.id === "hero")
+					core.status.hero.statistics.battleDamage += damage; //数据统计记录伤害
+				if (damage === 0) damage = "抵抗";
+
+				switch (
+					a.id //根据id选取不同的特效
+				) {
+				case "hero":
+					this.popDamage(damage, false);
+					if (damage > 0 && typeof damage !== "string") this.shake(false);
+					await this.playanimate("jianji2", 1750, 770); //播放动画jianji2
+					break;
+				case "angel":
+					this.popDamage(damage, true);
+					if (damage > 0 && typeof damage !== "string") this.shake(true);
+					await this.playanimate("sword", 300, 770); //播放动画sword
+
+					break;
+				case "bat":
+					this.popDamage(damage, true);
+					if (damage > 0 && typeof damage !== "string") this.shake(true);
+					await this.playanimate("sword", 300, 770); //播放动画sword
+
+					break;
+				case "redBat":
+					this.popDamage(damage, true);
+					if (damage > 0 && typeof damage !== "string") this.shake(true);
+					await this.playanimate("hand", 300, 770); //播放动画hand
+					break;
+				case "bigBat":
+					this.popDamage(damage, true);
+					if (damage > 0 && typeof damage !== "string") this.shake(true);
+					await this.playanimate("jianji", 300, 770); //播放动画jianji
+					break;
+				case "greenSlime":
+					this.popDamage(damage, true);
+					if (damage > 0 && typeof damage !== "string") this.shake(true);
+					await this.playanimate("thunder", 300, 770); //播放动画thunder
+					break;
+				case "redSlime":
+					this.popDamage(damage, true);
+					if (damage > 0 && typeof damage !== "string") this.shake(true);
+					await this.playanimate("yongchang", 300, 770); //播放动画yongchang
+					break;
+				case "blackSlime":
+					this.popDamage(damage, true);
+					if (damage > 0 && typeof damage !== "string") this.shake(true);
+					await this.playanimate("zone", 300, 770); //播放动画zone
+					break;
+				}
+				break; //下面写其余技能
+			}
+			await sleep(500); //等待1000ms
+		}
+
+		click(px, py) {
+			//点击效果
+			const makeBox = ([x, y], [w, h]) => {
+				return [
+					[x, y],
+					[x + w, y + h],
+				];
+			};
+			const inRect = ([x, y], [
+				[sx, sy],
+				[dx, dy]
+			]) => {
+				return sx <= x && x <= dx && sy <= y && y <= dy;
+			};
+			const pos = [px, py];
+			if (main.replayChecking || core.isReplaying()) return;
+			const enemyStatusBox = makeBox([50, 50], [1900, 200]),
+				heroStatusBox = makeBox([600, 920], [900, 300]),
+				bossBox = makeBox([800, 300], [100, 150]),
+				enemyBox = makeBox([700, 500], [300, 300]),
+				imageBox = makeBox([1500, 250], [550, 1000]);
+			if (this.show) {
+				//清除展示画面
+				this.show = !this.show;
+				core.clearMap(ctx8);
+			} else {
+				if (
+					inRect(pos, enemyStatusBox) &&
+					this.selection !== "" &&
+					this.selection !== "boss" &&
+					this.hasEnemy()
+				) {
+					//绘制怪物详情
+					this.show = !this.show;
+					this.moreShow(this.selection);
+				} else if (
+					inRect(pos, enemyStatusBox) &&
+					(!this.hasEnemy() || this.selection === "boss")
+				) {
+					//绘制boss详情
+					this.show = !this.show;
+					this.moreShow("boss");
+				} else if (inRect(pos, heroStatusBox)) {
+					//绘制勇士详情
+					this.show = !this.show;
+					this.moreShow("hero");
+				} else if (inRect(pos, bossBox) && this.hasEnemy()) {
+					//切换selection为boss
+					this.selection = "boss";
+					this.update();
+				} else if (inRect(pos, enemyBox) && this.hasEnemy()) {
+					//切换selection为enemy
+					const symbol =
+						Math.floor((px - 700) / 100) + Math.floor((py - 500) / 150) * 3;
+
+					if (this.enemy[symbol] && this.enemy[symbol].hp > 0) {
+						this.selection = symbol;
+						this.update();
+					}
+				}
+			}
+		}
+		drawchoose() {
+			boss7.style.display = "block";
+			if (core.domStyle.isVertical) {
+				ctx7.canvas.width = 1248;
+				ctx7.canvas.height = 2028;
+				ctx7.save(); //保存设置
+				ctx7.translate(1248, 0); //重新定位右上角为基准
+				ctx7.rotate(Math.PI / 2); //旋转90度
+			} else {
+				ctx7.canvas.width = 2028;
+				ctx7.canvas.height = 1248;
+			}
+
+			core.clearMap(ctx7);
+			if (this.hasEnemy()) {
+				core.drawWindowSkin(
+					"winskin.webp",
+					ctx7,
+					1050,
+					250,
+					400,
+					660,
+					null,
+					null,
+					null,
+					3
+				);
+				core.fillBoldText1(
+					ctx7,
+					"普通攻击",
+					1120,
+					350,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 64px Verdana"
+				);
+				core.drawLine(ctx7, 1070, 390, 1430, 390, "#FFFFFF", 6);
+			} else {
+				core.drawWindowSkin(
+					"winskin.webp",
+					ctx7,
+					850,
+					250,
+					400,
+					660,
+					null,
+					null,
+					null,
+					3
+				);
+				core.fillBoldText1(
+					ctx7,
+					"普通攻击",
+					920,
+					350,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 64px Verdana"
+				);
+				core.drawLine(ctx7, 850, 390, 1250, 390, "#FFFFFF", 6);
+			}
+			ctx7.restore();
+		}
+		moreShow(select) {
+			if (core.domStyle.isVertical) {
+				ctx8.canvas.width = 1248;
+				ctx8.canvas.height = 2028;
+				ctx8.save(); //保存设置
+				ctx8.translate(1248, 0); //重新定位右上角为基准
+				ctx8.rotate(Math.PI / 2); //旋转90度
+			} else {
+				ctx8.canvas.width = 2028;
+				ctx8.canvas.height = 1248;
+			}
+			core.clearMap(ctx8);
+			core.fillRect(ctx8, 100, 100, 1800, 1000, "rgba(0,0,0,0.7)");
+			core.drawWindowSkin(
+				"winskin.webp",
+				ctx8,
+				100,
+				100,
+				1800,
+				1000,
+				null,
+				null,
+				null,
+				3
+			);
+			let posy = 200;
+			switch (select) {
+			case "hero":
+				//勇士技能/buff
+				core.fillBoldText1(
+					ctx8,
+					this.hero.name,
+					1000,
+					posy,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				);
+				posy += 100;
+				if (this.herobuff.length === 0) {
+					core.fillBoldText1(
+						ctx8,
+						"当前无特殊状态",
+						200,
+						posy,
+						"#FFFFFF",
+						"#000000",
+						6,
+						"bold 48px Verdana"
+					);
+					posy += 100;
+				} else {
+					this.herobuff.forEach((v) => {
+						core.drawTextContent(ctx8, this.buffshow(v), {
+							left: 200,
+							top: posy,
+							bold: true,
+							color: "#FFFFFF",
+							align: "left",
+							fontSize: 48,
+							time: 0,
+							font: "Verdana",
+							maxWidth: 1600,
+						});
+						posy += 100;
+					});
+				}
+				posy += 50;
+				core.setTextAlign(ctx8, "center")
+				core.fillBoldText1(
+					ctx8,
+					"主角所造成的伤害将提升主角速度与怪物敌人速度值之比",
+					1000,
+					posy,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				);
+				posy += 100;
+				core.fillBoldText1(
+					ctx8,
+					"技能说明",
+					1000,
+					posy,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				);
+				posy += 100;
+				core.fillBoldText1(
+					ctx8,
+					"普通攻击:" + this.skillShow["普通攻击"],
+					200,
+					posy,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				);
+				break;
+			case "boss":
+				core.fillBoldText1(
+					ctx8,
+					this.boss.name,
+					1000,
+					posy,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				);
+				posy += 100;
+				//boss技能/buff
+				if (this.bossbuff.length === 0) {
+					core.fillBoldText1(
+						ctx8,
+						"当前无特殊状态",
+						200,
+						posy,
+						"#FFFFFF",
+						"#000000",
+						6,
+						"bold 48px Verdana"
+					);
+					posy += 100;
+				} else {
+					this.bossbuff.forEach((v) => {
+						core.drawTextContent(ctx8, this.buffshow(v), {
+							left: 200,
+							top: posy,
+							bold: true,
+							color: "#FFFFFF",
+							align: "left",
+							fontSize: 48,
+							time: 0,
+							font: "Verdana",
+							maxWidth: 1600,
+						});
+						posy += 100;
+					});
+				}
+				posy += 50;
+				core.fillBoldText1(
+					ctx8,
+					"当前技能",
+					1000,
+					posy,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				);
+				posy += 100;
+				core.fillBoldText1(
+					ctx8,
+					this.boss.skill[this.boss.index] +
+					this.skillShow[this.boss.skill[this.boss.index]],
+					200,
+					posy,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				);
+				break;
+			default:
+				const enemy = this.enemy[select];
+				const enemybuff = this.enemybuff[select];
+				core.fillBoldText1(
+					ctx8,
+					enemy.name,
+					1000,
+					posy,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				);
+				posy += 100;
+				if (enemybuff.length === 0) {
+					core.fillBoldText1(
+						ctx8,
+						"当前无特殊状态",
+						200,
+						posy,
+						"#FFFFFF",
+						"#000000",
+						6,
+						"bold 48px Verdana"
+					);
+					posy += 100;
+				} else {
+					enemybuff.forEach((v) => {
+						core.drawTextContent(ctx8, this.buffshow(v), {
+							left: 200,
+							top: posy,
+							bold: true,
+							color: "#FFFFFF",
+							align: "left",
+							fontSize: 48,
+							time: 0,
+							font: "Verdana",
+							maxWidth: 1600,
+						});
+						posy += 100;
+					});
+				}
+				posy += 50;
+				core.fillBoldText1(
+					ctx8,
+					"当前技能",
+					1000,
+					posy,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				);
+				posy += 100;
+				core.fillBoldText1(
+					ctx8,
+					enemy.skill[enemy.index] +
+					this.skillShow[enemy.skill[enemy.index]],
+					200,
+					posy,
+					"#FFFFFF",
+					"#000000",
+					6,
+					"bold 48px Verdana"
+				);
+				break;
+			}
+			ctx8.restore();
+		}
+		hasEnemy() {
+			let enemy = false;
+			this.enemy.forEach((v) => {
+				if (v.hp > 0) enemy = true;
+			});
+			return enemy;
+		}
+		async bossStart() {
+			boss6.style.display = "block";
+
+			this.time = 0
+			core.registerAnimationFrame("animate-boss", true, drawanimate)
+			boss.style.display = "block";
+			this.selection = "boss";
+			this.playerturn = false;
+			this.show = false;
+			this.turn = 0;
+
+			core.lockControl();
+			await this.blackBg();
+			this.moveboss();
+			await this.movehero();
+			await this.moveStatus();
+			this.update();
+			this.fight();
+		}
+		async bossEnd() {
+			hero.hp = this.hero.hp;
+			this.selection = "boss";
+			await this.close();
+			core.unregisterAnimationFrame("animate-boss")
+			core.unlockControl();
+			core.updateStatusBar();
+			if (hero.hp <= 0) {
+				hero.hp = 0;
+				core.events.lose("BOSS战失败");
+			}
+		}
+		async fight() {
+			await this.drawturn();
+			this.selection = "boss"
+			this.update();
+			const fightList = [];
+			fightList.push(["hero", this.hero.speed]);
+			if (this.boss.hp > 0) fightList.push(["boss", this.boss.speed]);
+			this.enemy.forEach((v, i) => {
+				if (v.id && v.hp > 0) fightList.push([i, v.speed]);
+			});
+			fightList.sort((a, b) => b[1] - a[1]);
+			let damage;
+			for (const v of fightList) {
+				switch (v[0]) {
+				case "hero":
+					this.onchoose = true
+					this.drawchoose();
+					const skill = await getClick();
+					this.onchoose = false
+					core.clearMap(ctx7)
+					let select = this.boss;
+					if (this.selection !== "" && this.selection !== "boss")
+						select = this.enemy[this.selection];
+					this.skill(skill, this.hero, select);
+
+					break;
+				case "boss":
+					if (this.boss.hp > 0) {
+						this.selection = "boss";
+						this.update();
+						await sleep(500); //等待500ms
+						//这里写boss技能的效果
+						this.skill(
+							this.boss.skill[this.boss.index],
+							this.boss,
+							this.hero
+						);
+
+						this.boss.index++;
+						if (this.boss.index >= this.boss.skill.length)
+							this.boss.index = 0;
+					}
+					break;
+				default:
+					const enemy = this.enemy[v[0]];
+					if (enemy.hp > 0) {
+						this.selection = v[0];
+						this.update();
+						await sleep(500); //等待500ms
+						this.skill(enemy.skill[enemy.index], enemy, this.hero);
+						enemy.index++;
+						if (enemy.index >= enemy.skill.length) enemy.index = 0;
+					}
+					break;
+				}
+				await sleep(1000);
+				this.selection = "";
+				this.update();
+			}
+			let end = true;
+			if (this.boss.hp > 0) end = false;
+			this.enemy.forEach((v) => {
+				if (v.hp > 0) end = false;
+			});
+
+			if (this.hero.hp <= 0) end = true;
+			if (end) {
+				this.bossEnd();
+			} else {
+				this.fight();
+			}
+		}
+		async drawturn() {
+			const animate = new Animation();
+			boss8.style.display = "block";
+			this.turn++
+			const fn = () => {
+				core.clearMap(ctx);
+				if (core.domStyle.isVertical) {
+					ctx.canvas.width = 1248;
+					ctx.canvas.height = 2028;
+					ctx.save(); //保存设置
+					ctx.translate(1248, 0); //重新定位右上角为基准
+					ctx.rotate(Math.PI / 2); //旋转90度
+				} else {
+					ctx.canvas.width = 2028;
+					ctx.canvas.height = 1248;
+				}
+				core.fillRect(
+					ctx,
+					0,
+					624 - animate.y,
+					2028,
+					animate.y * 2,
+					"rgba(0,0,0,0.7)"
+				);
+
+				core.setTextAlign(ctx, "center");
+				core.fillBoldText1(
+					ctx,
+					"回合 " + this.turn,
+					animate.x - 300,
+					644,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(96, true)
+				);
+				ctx.restore()
+			}
+			animate.ticker.add(fn)
+
+			animate.mode(hyper('sin', 'out')).time(1000).move(1314, 200)
+			await animate.all()
+			await sleep(500)
+			animate.mode(hyper('sin', 'in')).time(1000).move(2800, 0)
+			await animate.all()
+			core.clearMap(ctx);
+			animate.ticker.destroy()
+
+		}
+
+		drawenemy() {
+			let block,
+				time = 0;
+
+			boss5.style.display = "block";
+			core.registerAnimationFrame("enemyanimate", true, (temptime) => {
+
+				if (temptime - time > 1000 / 60) {
+					time = temptime;
+					this.enemyfarme += 1;
+					let animate = Math.floor(this.enemyfarme / 10),
+						posx = 700,
+						posy = 500;
+					core.clearMap(ctx5);
+					if (core.domStyle.isVertical) {
+						ctx5.canvas.width = 1248;
+						ctx5.canvas.height = 2028;
+						ctx5.save(); //保存设置
+						ctx5.translate(1248, 0); //重新定位右上角为基准
+						ctx5.rotate(Math.PI / 2); //旋转90度
+					} else {
+						ctx5.canvas.width = 2028;
+						ctx5.canvas.height = 1248;
+					}
+
+					if (this.hasEnemy()) {
+						core.drawWindowSkin(
+							"winskin.webp",
+							ctx5,
+							650,
+							250,
+							400,
+							660,
+							null,
+							null,
+							null,
+							3
+						);
+						if (this.selection === "boss")
+							core.strokeRect(ctx5, 800, 300, 100, 150, "yellow", 6);
+						const bossBlock = core.getBlockInfo(this.boss.id);
+						core.drawImage(
+							ctx5,
+							bossBlock.image,
+							32 * (animate % 4),
+							bossBlock.posY * 48,
+							32,
+							48,
+							800,
+							300,
+							96,
+							144
+						);
+						core.drawImage(
+							ctx5,
+							"hero.webp",
+							32 * (animate % 4),
+							144,
+							32,
+							48,
+							800,
+							750,
+							96,
+							144
+						);
+						for (let i = 0; i < this.enemy.length; i++) {
+							if (this.enemy[i].id && this.enemy[i].hp > 0) {
+								block = core.getBlockInfo(this.enemy[i].id);
+							} else {
+								posx += 100;
+								if (i === 2) {
+									posx = 700;
+									posy += 150;
+								}
+								continue;
+							}
+
+							if (block.cls === "enemys") {
+								core.drawImage(
+									ctx5,
+									block.image,
+									32 * (animate % 2),
+									block.posY * 32,
+									32,
+									32,
+									posx,
+									posy,
+									96,
+									96
+								);
+								if (this.selection === i)
+									core.strokeRect(ctx5, posx, posy, 100, 100, "yellow", 6);
+							} else {
+								core.drawImage(
+									ctx5,
+									block.image,
+									32 * (animate % 4),
+									block.posY * 48,
+									32,
+									48,
+									posx,
+									posy,
+									96,
+									144
+								);
+								if (this.selection === i)
+									core.strokeRect(ctx5, posx, posy, 100, 150, "yellow", 6);
+							}
+
+							posx += 100;
+							if (i === 2) {
+								posx = 700;
+								posy += 150;
+							}
+						}
+					}
+
+					ctx5.restore();
+				}
+			});
+		}
+		drawhero() {
+			core.clearMap(ctx2);
+			if (core.domStyle.isVertical) {
+				ctx2.canvas.width = 1248;
+				ctx2.canvas.height = 2028;
+				ctx2.save(); //保存设置
+				ctx2.translate(1248, 0); //重新定位右上角为基准
+				ctx2.rotate(Math.PI / 2); //旋转90度
+			} else {
+				ctx2.canvas.width = 2028;
+				ctx2.canvas.height = 1248;
+			}
+			core.drawImage(ctx2, this.heroImage, 0, 168, 750, 1080);
+			ctx2.restore();
+		}
+		async movehero() {
+			const animate = new Animation();
+			boss2.style.display = "block";
+			const fn = () => {
+				core.clearMap(ctx2);
+				if (core.domStyle.isVertical) {
+					ctx2.canvas.width = 1248;
+					ctx2.canvas.height = 2028;
+					ctx2.save(); //保存设置
+					ctx2.translate(1248, 0); //重新定位右上角为基准
+					ctx2.rotate(Math.PI / 2); //旋转90度
+				} else {
+					ctx2.canvas.width = 2028;
+					ctx2.canvas.height = 1248;
+				}
+				core.drawImage(ctx2, this.heroImage, animate.x - 200, 168, 750, 1080);
+				ctx2.restore();
+			}
+			animate.ticker.add(fn)
+
+			animate.mode(hyper('sin', 'out')).time(1000).move(200, 0)
+			await animate.all()
+
+			core.clearMap(ctx2);
+			animate.ticker.destroy()
+			this.drawhero()
+
+		}
+		update() {
+			core.drawImage(ctx1, this.bg, 0, 0, 2028, 1248);
+			this.drawboss();
+			this.drawhero();
+			this.drawStatus();
+			let dodraw = false;
+			for (let i = 0; i < this.enemy.length; i++) {
+				if (this.enemy[i].id && this.enemy[i].hp > 0) {
+					dodraw = true;
+				}
+			}
+			if (dodraw === true) this.drawenemy();
+			if (this.onchoose) this.drawchoose()
+		}
+		async playanimate(name, x, y, callback) {
+			return new Promise(res => {
+				name = core.getMappedName(name);
+
+				// 正在播放录像:不显示动画
+				if (core.isReplaying() || !core.material.animates[name] || x == null || y == null) {
+					if (callback) callback();
+					return Promise.resolve(-1);
+				}
+
+				// 开始绘制
+				var animate = core.material.animates[name],
+					centerX = x,
+					centerY = y
+
+				animate.se = animate.se || {};
+				if (typeof animate.se == 'string') animate.se = { 1: animate.se };
+
+				var id = setTimeout(null);
+				ani.push({
+					"name": name,
+					"id": id,
+					"animate": animate,
+					"centerX": centerX,
+					"centerY": centerY,
+					"start": 0,
+					"index": 0,
+					"callback": () => {
+						if (callback) callback()
+						res()
+					}
+				});
+
+			})
+
+
+		}
+
+		drawboss() {
+			core.clearMap(ctx3);
+			if (core.domStyle.isVertical) {
+				ctx3.canvas.width = 1248;
+				ctx3.canvas.height = 2028;
+				ctx3.save(); //保存设置
+				ctx3.translate(1248, 0); //重新定位右上角为基准
+				ctx3.rotate(Math.PI / 2); //旋转90度
+			} else {
+				ctx3.canvas.width = 2028;
+				ctx3.canvas.height = 1248;
+			}
+			if (this.selection === "boss" || this.selection === "") {
+				core.drawImage(ctx3, this.boss.image, 1400, 168, 750, 1080);
+			} else {
+				core.drawImage(
+					ctx3,
+					this.enemy[this.selection].image,
+					1400,
+					168,
+					750,
+					1080
+				);
+			}
+
+			ctx3.restore();
+		}
+		async moveboss() {
+			const animate = new Animation();
+			boss3.style.display = "block";
+			const fn = () => {
+				core.clearMap(ctx3);
+				if (core.domStyle.isVertical) {
+					ctx3.canvas.width = 1248;
+					ctx3.canvas.height = 2028;
+					ctx3.save(); //保存设置
+					ctx3.translate(1248, 0); //重新定位右上角为基准
+					ctx3.rotate(Math.PI / 2); //旋转90度
+				} else {
+					ctx3.canvas.width = 2028;
+					ctx3.canvas.height = 1248;
+				}
+				core.drawImage(ctx3, this.boss.image, 1600 - animate.x, 168, 750, 1080);
+
+				ctx3.restore();
+			}
+			animate.ticker.add(fn)
+
+			animate.mode(hyper('sin', 'out')).time(1000).move(200, 0)
+			await animate.all()
+
+			core.clearMap(ctx3);
+			animate.ticker.destroy()
+			this.drawboss()
+
+		}
+		drawStatus() {
+			core.clearMap(ctx4);
+			if (core.domStyle.isVertical) {
+				ctx4.canvas.width = 1248;
+				ctx4.canvas.height = 2028;
+				ctx4.save(); //保存设置
+				ctx4.translate(1248, 0); //重新定位右上角为基准
+				ctx4.rotate(Math.PI / 2); //旋转90度
+			} else {
+				ctx4.canvas.width = 2028;
+				ctx4.canvas.height = 1248;
+			}
+			core.drawWindowSkin(
+				"winskin.webp",
+				ctx4,
+				600,
+				920,
+				900,
+				300,
+				null,
+				null,
+				null,
+				3
+			);
+			core.fillBoldText1(
+				ctx4,
+				hero.name,
+				630,
+				1000,
+				"#FFFFFF",
+				"#000000",
+				6,
+				core.ui._buildFont(44, true)
+			);
+			core.fillBoldText1(
+				ctx4,
+				"状态",
+				880,
+				1000,
+				"#FFFFFF",
+				"#000000",
+				6,
+				core.ui._buildFont(44, true)
+			);
+			core.fillBoldText1(
+				ctx4,
+				"生命 " + this.hero.hp,
+				630,
+				1070,
+				"#FFFFFF",
+				"#000000",
+				6,
+				core.ui._buildFont(44, true)
+			);
+			core.fillBoldText1(
+				ctx4,
+				"攻击 " + this.hero.atk,
+				630,
+				1120,
+				"#FFFFFF",
+				"#000000",
+				6,
+				core.ui._buildFont(44, true)
+			);
+			core.fillBoldText1(
+				ctx4,
+				"防御 " + this.hero.def,
+				630,
+				1170,
+				"#FFFFFF",
+				"#000000",
+				6,
+				core.ui._buildFont(44, true)
+			);
+			core.fillBoldText1(
+				ctx4,
+				"法强 " + this.hero.spell,
+				1080,
+				1070,
+				"#FFFFFF",
+				"#000000",
+				6,
+				core.ui._buildFont(44, true)
+			);
+			core.fillBoldText1(
+				ctx4,
+				"法抗 " + this.hero.mdef + "%",
+				1080,
+				1120,
+				"#FFFFFF",
+				"#000000",
+				6,
+				core.ui._buildFont(44, true)
+			);
+			core.fillBoldText1(
+				ctx4,
+				"速度 " + this.hero.speed,
+				1080,
+				1170,
+				"#FFFFFF",
+				"#000000",
+				6,
+				core.ui._buildFont(44, true)
+			);
+			let posx = 980;
+			this.herobuff.forEach((v) => {
+				if (v) {
+					core.drawIcon(ctx4, v.id, posx, 950, 64, 64);
+					core.setTextAlign(ctx4, "right");
+					core.fillBoldText1(
+						ctx4,
+						v.count,
+						posx + 50,
+						1000,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(24, true)
+					);
+					core.setTextAlign(ctx4, "left");
+					posx += 80;
+				}
+			});
+
+			if (this.selection === "boss" || !this.hasEnemy()) {
+				core.drawWindowSkin(
+					"winskin.webp",
+					ctx4,
+					50,
+					50,
+					1900,
+					200,
+					null,
+					null,
+					null,
+					3
+				);
+				core.fillBoldText1(
+					ctx4,
+					this.boss.name,
+					100,
+					120,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"状态",
+					500,
+					120,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"当前技能",
+					1400,
+					120,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				const bosstext = this.boss.skill[this.boss.index];
+				core.fillBoldText1(
+					ctx4,
+					bosstext,
+					1600,
+					120,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"生命 " + this.boss.hp,
+					100,
+					220,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"攻击 " + this.boss.atk,
+					500,
+					220,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"防御 " + this.boss.def,
+					900,
+					220,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"法抗 " + this.boss.mdef + "%",
+					1300,
+					220,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"速度 " + this.boss.speed,
+					1700,
+					220,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				let posx = 600;
+				this.bossbuff.forEach((v) => {
+					if (v) {
+						core.drawIcon(ctx4, v.id, posx, 80, 64, 64);
+						core.setTextAlign(ctx4, "right");
+						core.fillBoldText1(
+							ctx4,
+							v.count,
+							posx + 50,
+							130,
+							"#FFFFFF",
+							"#000000",
+							6,
+							core.ui._buildFont(24, true)
+						);
+						core.setTextAlign(ctx4, "left");
+						posx += 80;
+					}
+				});
+			} else if (this.selection === "") {} else {
+				core.drawWindowSkin(
+					"winskin.webp",
+					ctx4,
+					50,
+					50,
+					1900,
+					200,
+					null,
+					null,
+					null,
+					3
+				);
+				core.fillBoldText1(
+					ctx4,
+					this.enemy[this.selection].name,
+					100,
+					120,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"状态",
+					500,
+					120,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"当前技能",
+					1400,
+					120,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				const enemytext =
+					this.enemy[this.selection].skill[this.enemy[this.selection].index];
+				core.fillBoldText1(
+					ctx4,
+					enemytext,
+					1600,
+					120,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"生命 " + this.enemy[this.selection].hp,
+					100,
+					220,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"攻击 " + this.enemy[this.selection].atk,
+					500,
+					220,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"防御 " + this.enemy[this.selection].def,
+					900,
+					220,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"法抗 " + this.enemy[this.selection].mdef + "%",
+					1300,
+					220,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"速度 " + this.enemy[this.selection].speed,
+					1700,
+					220,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				let posx = 600;
+				this.enemybuff[this.selection].forEach((v) => {
+					if (v) {
+						core.drawIcon(ctx4, v.id, posx, 80, 64, 64);
+						core.setTextAlign(ctx4, "right");
+						core.fillBoldText1(
+							ctx4,
+							v.count,
+							posx + 50,
+							130,
+							"#FFFFFF",
+							"#000000",
+							6,
+							core.ui._buildFont(24, true)
+						);
+						core.setTextAlign(ctx4, "left");
+						posx += 80;
+					}
+				});
+			}
+			ctx4.restore();
+		}
+		async moveStatus() {
+			const animate = new Animation();
+			boss4.style.display = "block";
+			const fn = () => {
+				core.clearMap(ctx4);
+				if (core.domStyle.isVertical) {
+					ctx4.canvas.width = 1248;
+					ctx4.canvas.height = 2028;
+					ctx4.save(); //保存设置
+					ctx4.translate(1248, 0); //重新定位右上角为基准
+					ctx4.rotate(Math.PI / 2); //旋转90度
+				} else {
+					ctx4.canvas.width = 2028;
+					ctx4.canvas.height = 1248;
+				}
+				core.drawWindowSkin(
+					"winskin.webp",
+					ctx4,
+					600,
+					1320 - animate.y,
+					900,
+					300,
+					null,
+					null,
+					null,
+					3
+				);
+				core.fillBoldText1(
+					ctx4,
+					hero.name,
+					630,
+					1400 - animate.y,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"状态",
+					880,
+					1400 - animate.y,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"生命 " + this.hero.hp,
+					630,
+					1470 - animate.y,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"攻击 " + this.hero.atk,
+					630,
+					1520 - animate.y,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"防御 " + this.hero.def,
+					630,
+					1570 - animate.y,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"法强 " + this.hero.spell,
+					1080,
+					1470 - animate.y,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"法抗 " + this.hero.mdef + "%",
+					1080,
+					1520 - animate.y,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				core.fillBoldText1(
+					ctx4,
+					"速度 " + this.hero.speed,
+					1080,
+					1570 - animate.y,
+					"#FFFFFF",
+					"#000000",
+					6,
+					core.ui._buildFont(44, true)
+				);
+				let posx = 980;
+				this.herobuff.forEach((v) => {
+					if (v) {
+						core.drawIcon(ctx4, v.id, posx, 1350 - animate.y, 64, 64);
+						core.setTextAlign(ctx4, "right");
+						core.fillBoldText1(
+							ctx4,
+							v.count,
+							posx + 50,
+							1400 - animate.y,
+							"#FFFFFF",
+							"#000000",
+							6,
+							core.ui._buildFont(24, true)
+						);
+						core.setTextAlign(ctx4, "left");
+						posx += 80;
+					}
+				});
+				if (this.selection === "boss") {
+					core.drawWindowSkin(
+						"winskin.webp",
+						ctx4,
+						50,
+						-150 + animate.y / 2,
+						1900,
+						200,
+						null,
+						null,
+						null,
+						3
+					);
+					core.fillBoldText1(
+						ctx4,
+						this.boss.name,
+						100,
+						-80 + animate.y / 2,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(44, true)
+					);
+					core.fillBoldText1(
+						ctx4,
+						"状态",
+						500,
+						animate.y / 2 - 80,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(44, true)
+					);
+					core.fillBoldText1(
+						ctx4,
+						"生命 " + this.boss.hp,
+						100,
+						animate.y / 2 + 20,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(44, true)
+					);
+					core.fillBoldText1(
+						ctx4,
+						"攻击 " + this.boss.atk,
+						500,
+						animate.y / 2 + 20,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(44, true)
+					);
+					core.fillBoldText1(
+						ctx4,
+						"防御 " + this.boss.def,
+						900,
+						animate.y / 2 + 20,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(44, true)
+					);
+					core.fillBoldText1(
+						ctx4,
+						"法抗 " + this.boss.mdef + "%",
+						1300,
+						animate.y / 2 + 20,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(44, true)
+					);
+					core.fillBoldText1(
+						ctx4,
+						"速度 " + this.boss.speed,
+						1700,
+						animate.y / 2 + 20,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(44, true)
+					);
+					let posx = 600;
+					this.bossbuff.forEach((v) => {
+						if (v) {
+							core.drawIcon(ctx4, v.id, posx, animate.y / 2 - 120, 64, 64);
+							core.setTextAlign(ctx4, "right");
+							core.fillBoldText1(
+								ctx4,
+								v.count,
+								posx + 50,
+								animate.y / 2 - 70,
+								"#FFFFFF",
+								"#000000",
+								6,
+								core.ui._buildFont(24, true)
+							);
+							core.setTextAlign(ctx4, "left");
+							posx += 80;
+						}
+					});
+				} else if (this.selection === "") {} else {
+					core.drawWindowSkin(
+						"winskin.webp",
+						ctx4,
+						50,
+						animate.y / 2 - 150,
+						1900,
+						200,
+						null,
+						null,
+						null,
+						3
+					);
+					core.fillBoldText1(
+						ctx4,
+						this.enemy[this.selection].name,
+						100,
+						animate.y / 2 - 80,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(44, true)
+					);
+					core.fillBoldText1(
+						ctx4,
+						"状态",
+						500,
+						animate.y / 2 - 80,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(44, true)
+					);
+					core.fillBoldText1(
+						ctx4,
+						"生命 " + this.enemy[this.selection].hp,
+						100,
+						animate.y / 2 + 20,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(44, true)
+					);
+					core.fillBoldText1(
+						ctx4,
+						"攻击 " + this.enemy[this.selection].atk,
+						500,
+						animate.y / 2 + 20,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(44, true)
+					);
+					core.fillBoldText1(
+						ctx4,
+						"防御 " + this.enemy[this.selection].def,
+						900,
+						animate.y / 2 + 20,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(44, true)
+					);
+					core.fillBoldText1(
+						ctx4,
+						"法抗 " + this.enemy[this.selection].mdef + "%",
+						1300,
+						animate.y / 2 + 20,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(44, true)
+					);
+					core.fillBoldText1(
+						ctx4,
+						"速度 " + this.enemy[this.selection].speed,
+						1700,
+						animate.y / 2 + 20,
+						"#FFFFFF",
+						"#000000",
+						6,
+						core.ui._buildFont(44, true)
+					);
+					let posx = 600;
+					this.enemybuff[this.selection].forEach((v) => {
+						if (v) {
+							core.drawIcon(ctx4, v.id, posx, animate.y / 2 - 120, 64, 64);
+							core.setTextAlign(ctx4, "right");
+							core.fillBoldText1(
+								ctx4,
+								v.count,
+								posx + 50,
+								animate.y / 2 - 70,
+								"#FFFFFF",
+								"#000000",
+								6,
+								core.ui._buildFont(24, true)
+							);
+							core.setTextAlign(ctx4, "left");
+							posx += 80;
+						}
+					});
+				}
+				ctx4.restore();
+			}
+			animate.ticker.add(fn)
+
+			animate.mode(hyper('sin', 'out')).time(1000).move(0, 400)
+			await animate.all()
+
+			core.clearMap(ctx3);
+			animate.ticker.destroy()
+			this.drawStatus();
+
+		}
+		close() {
+			let globalAlpha = 0,
+				time = 0;
+			return new Promise((resolve) => {
+				core.registerAnimationFrame("closeblack", true, (temptime) => {
+					if (temptime - time > 1000 / 60) {
+						time = temptime;
+						core.clearMap(ctx);
+						if (core.domStyle.isVertical) {
+							ctx.canvas.width = 1248;
+							ctx.canvas.height = 2028;
+							ctx.save(); //保存设置
+							ctx.translate(1248, 0); //重新定位右上角为基准
+							ctx.rotate(Math.PI / 2); //旋转90度
+						} else {
+							ctx.canvas.width = 2028;
+							ctx.canvas.height = 1248;
+						}
+
+						ctx.globalAlpha = globalAlpha;
+
+						core.fillRect(ctx, 0, 0, 2028, 1248);
+						globalAlpha += 1 / 30;
+						ctx.restore();
+						if (globalAlpha > 1) {
+							time = 0;
+							globalAlpha = 1;
+							core.unregisterAnimationFrame("closeblack");
+							core.unregisterAnimationFrame("enemyanimate");
+							boss1.style.display = "none";
+							boss2.style.display = "none";
+							boss3.style.display = "none";
+							boss4.style.display = "none";
+							boss5.style.display = "none";
+							boss6.style.display = "none";
+							boss7.style.display = "none";
+							boss8.style.display = "none";
+
+							core.registerAnimationFrame("closeblack2", true, (temptime) => {
+								if (temptime - time > 1000 / 60) {
+									time = temptime;
+									core.clearMap(ctx);
+									if (core.domStyle.isVertical) {
+										ctx.canvas.width = 1248;
+										ctx.canvas.height = 2028;
+										ctx.save(); //保存设置
+										ctx.translate(1248, 0); //重新定位右上角为基准
+										ctx.rotate(Math.PI / 2); //旋转90度
+									} else {
+										ctx.canvas.width = 2028;
+										ctx.canvas.height = 1248;
+									}
+									ctx.globalAlpha = globalAlpha;
+									core.fillRect(ctx, 0, 0, 2028, 1248, "#000000");
+									ctx.restore();
+									globalAlpha -= 1 / 30;
+									if (globalAlpha < 0) {
+										core.unregisterAnimationFrame("closeblack2");
+
+										boss.style.display = "none";
+
+										resolve();
+									}
+								}
+							});
+						}
+					}
+				});
+			});
+		}
+
+		blackBg() {
+			let globalAlpha = 0,
+				time = 0,
+				img = core.material.images.images[this.bg];
+			boss1.style.display = "block";
+			return new Promise((resolve) => {
+				core.registerAnimationFrame("bossblack", true, (temptime) => {
+					if (temptime - time > 1000 / 60) {
+						time = temptime;
+						core.clearMap(ctx1);
+						if (core.domStyle.isVertical) {
+							ctx1.canvas.width = 1248;
+							ctx1.canvas.height = 2028;
+							ctx1.save(); //保存设置
+							ctx1.translate(1248, 0); //重新定位右上角为基准
+							ctx1.rotate(Math.PI / 2); //旋转90度
+						} else {
+							ctx1.canvas.width = 2028;
+							ctx1.canvas.height = 1248;
+						}
+
+						ctx1.globalAlpha = globalAlpha;
+
+						core.fillRect(ctx1, 0, 0, 2028, 1248);
+						globalAlpha += 1 / 30;
+						ctx1.restore();
+						if (globalAlpha > 1) {
+							time = 0;
+							globalAlpha = 0;
+							core.unregisterAnimationFrame("bossblack");
+							core.registerAnimationFrame("bossBg", true, (temptime) => {
+								if (temptime - time > 1000 / 60) {
+									time = temptime;
+									core.clearMap(ctx1);
+									if (core.domStyle.isVertical) {
+										ctx1.canvas.width = 1248;
+										ctx1.canvas.height = 2028;
+										ctx1.save(); //保存设置
+										ctx1.translate(1248, 0); //重新定位右上角为基准
+										ctx1.rotate(Math.PI / 2); //旋转90度
+									} else {
+										ctx1.canvas.width = 2028;
+										ctx1.canvas.height = 1248;
+									}
+
+									ctx1.globalAlpha = 1;
+									core.fillRect(ctx1, 0, 0, 2028, 1248);
+									ctx1.globalAlpha = globalAlpha;
+									if (img) ctx1.drawImage(img, 0, 0, 2028, 1248);
+									ctx1.restore();
+									globalAlpha += 1 / 30;
+									if (globalAlpha > 1) {
+										core.unregisterAnimationFrame("bossBg");
+										resolve();
+									}
+								}
+							});
+						}
+					}
+				});
+			});
+		}
+	}
+	core.ui.boss = new Boss();
+},
     "剧情视频引用": function () {
     // 在此增加新插件
     let a;
@@ -16070,7 +19498,6 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
         core.doAction();
         clearTimeout(a);
         core.playBgm(bgm);
-        core.resumeBgm();
       }, 2000); //这里设置定时器,定义长按500毫秒触发长按事件,时间可以自己改,个人感觉500毫秒非常合适
       return false;
     }
@@ -16243,1063 +19670,1286 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
     };
   },
     "帧动画/图片叠拼": function () {
+	// 在此增加新插件
+	this.animationDrawable = function (
+		allFarme,
+		color,
+		globalAlpha,
+		imageList,
+		soundList
+	) {
+		if (!core.isPlaying()) {
+			return core.doAction();
+		}
+		const over = main.dom.over;
+		const ctx = over.getContext("2d");
+		over.style.display = "block";
+
+
+		let now = 0;
+		let start = 0
+		core.registerAnimationFrame(
+
+			"animationDrawable",
+			true,
+			function (timestamp) {
+
+				let frametime = timestamp - now
+				now = timestamp;
+				if (!imageList || imageList.length == 0) return;
+				if (start === 0) start = now
+				now = timestamp;
+				let farme = Math.floor((now - start) / (1000 / 60))
+				if (farme > allFarme) {
+					core.unregisterAnimationFrame("animationDrawable");
+					core.doAction();
+					return
+				}
+				if (core.domStyle.isVertical) {
+					over.width = 1248;
+					over.height = 2028;
+					ctx.save(); //保存设置
+					ctx.translate(1248, 0); //重新定位右上角为基准
+					ctx.rotate(Math.PI / 2); //旋转90度
+				} else {
+					over.width = 2028;
+					over.height = 1248;
+				}
+
+				core.clearMap(ctx)
+				ctx.globalAlpha = (globalAlpha ?? 100) / 100;
+				core.fillRect(ctx, 0, 0, 2028, 1248, color);
+
+				imageList.forEach(function (one) {
+					if (
+						farme >= (one.beforefarme ?? 0) &&
+						farme <= (one.afterfarme ?? allFarme)
+					) {
+						const img = core.material.images.images?.[one.image];
+						if (img) {
+							const gla = one.globalAlpha ?? 100;
+							const agla = one.aglobalAlpha ?? gla,
+								beforefarme = one.beforefarme ?? 0;
+							const afterfarme = one.afterfarme ?? allFarme;
+
+							ctx.globalAlpha =
+								(gla +
+									((agla - gla) * (farme - beforefarme)) /
+									(afterfarme - beforefarme || 1)) /
+								100;
+
+							const cx =
+								(one.cx ?? 0) +
+								(((one.acx ?? 0) - (one.cx ?? 0)) *
+									(farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								cy =
+								(one.cy ?? 0) +
+								(((one.acy ?? 0) - (one.cy ?? 0)) *
+									(farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								cw =
+								(one.cw ?? img.width) +
+								(((one.acw ?? img.width) - (one.cw ?? img.width)) *
+									(farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								ch =
+								(one.ch ?? img.height) +
+								(((one.acw ?? img.height) - (one.cw ?? img.height)) *
+									(farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								x =
+								(one.x ?? 0) +
+								(((one.ax ?? 0) - (one.x ?? 0)) * (farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								y =
+								(one.y ?? 0) +
+								(((one.ay ?? 0) - (one.y ?? 0)) * (farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								w =
+								(one.w ?? 2028) +
+								(((one.aw ?? 2028) - (one.w ?? 2028)) *
+									(farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								h =
+								(one.h ?? 1248) +
+								(((one.ah ?? 1248) - (one.h ?? 1248)) *
+									(farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								angle =
+								(one.angle ?? 0) * Math.PI / 180 +
+								(((one.aangle ?? 0) * Math.PI / 180 - (one.angle ?? 0) * Math.PI / 180) *
+									(farme - beforefarme)) /
+								(afterfarme - beforefarme || 1);
+							core.drawImage(ctx, img, cx, cy, cw, ch, x, y, w, h, angle);
+						}
+					}
+				});
+				soundList.forEach(function (one) {
+					const lisen =
+						one.sound &&
+						core.sounds[one.sound] &&
+						core.musicStatus.soundStatus;
+					if (farme >= one.startfarme && lisen && !one.start) {
+						one.start = true
+						if (one.stopbefore) core.stopSound();
+						core.playSound(one.sound);
+					}
+				});
+				ctx.globalAlpha = 1;
+				ctx.restore();
+
+
+
+			}
+		);
+	};
+},
+    "musicMode": function () {
     // 在此增加新插件
-    this.animationDrawable = function (
-      allFarme,
-      color,
-      globalAlpha,
-      imageList,
-      soundList
-    ) {
-      if (!core.isPlaying()) {
-        return core.doAction();
+    const music = document.createElement("canvas");
+    music.style.position = "absolute";
+    music.style.zIndex = 300;
+    music.style.display = "none";
+    music.id = "music";
+    main.dom.gameGroup.insertAdjacentElement("afterend", music);
+    music.style.top = "50%";
+    music.style.left = "50%";
+    music.style.transform = "translate(-50%,-50%)";
+    const ctx = music.getContext("2d");
+    main.dom.music = music;
+
+    const audio = core.plugin.audioSystem.bgmController;
+
+    let page = 0; //初始页面
+
+    let isvolume = false;
+
+    function shuffle(arr) {
+      let n = arr.length,
+        random;
+      while (n) {
+        random = (Math.random() * n--) >>> 0;
+        [arr[n], arr[random]] = [arr[random], arr[n]];
       }
-      const over = main.dom.over;
-      const ctx = over.getContext("2d");
-      over.style.display = "block";
+      return arr;
+    }
+    music.addEventListener("mousedown", function (e) {
+      e.stopPropagation();
+      const left = core.dom.gameGroup.offsetLeft;
+      const top = core.dom.gameGroup.offsetTop;
+      const px = Math.floor((e.clientX - left) / core.domStyle.scale),
+        py = Math.floor((e.clientY - top) / core.domStyle.scale);
+      core.ui.music.mousedown(px * 3, py * 3);
+    });
+    music.addEventListener("mousemove", function (e) {
+      e.stopPropagation();
+      const left = core.dom.gameGroup.offsetLeft;
+      const top = core.dom.gameGroup.offsetTop;
+      const px = Math.floor((e.clientX - left) / core.domStyle.scale),
+        py = Math.floor((e.clientY - top) / core.domStyle.scale);
+      core.ui.music.mousemove(px * 3, py * 3);
+    });
+    music.addEventListener("mouseup", function (e) {
+      e.stopPropagation();
 
-      let farme = 0;
-      let now = 0;
-      core.registerAnimationFrame(
-        "animationDrawable",
-        true,
-        function (timestamp) {
-          if (timestamp - now > 1000 / 60) {
-            now = timestamp;
-            if (core.domStyle.isVertical) {
-              over.width = 1248;
-              over.height = 2028;
-              ctx.save(); //保存设置
-              ctx.translate(1248, 0); //重新定位右上角为基准
-              ctx.rotate(Math.PI / 2); //旋转90度
+      isvolume = false;
+    });
+    music.addEventListener("mouseleave", function (e) {
+      e.stopPropagation();
+
+      isvolume = false;
+    });
+    music.addEventListener("touchstart", function (e) {
+      e.preventDefault();
+      const left = core.dom.gameGroup.offsetLeft;
+      const top = core.dom.gameGroup.offsetTop;
+      const px = Math.floor(
+          (e.touches[0].clientX - left) / core.domStyle.scale
+        ),
+        py = Math.floor((e.touches[0].clientY - top) / core.domStyle.scale);
+      core.ui.music.mousedown(px * 3, py * 3);
+    });
+    music.addEventListener("touchmove", function (e) {
+      e.stopPropagation();
+      const left = core.dom.gameGroup.offsetLeft;
+      const top = core.dom.gameGroup.offsetTop;
+      const px = Math.floor(
+          (e.touches[0].clientX - left) / core.domStyle.scale
+        ),
+        py = Math.floor((e.touches[0].clientY - top) / core.domStyle.scale);
+      core.ui.music.mousemove(px * 3, py * 3);
+    });
+    music.addEventListener("touchend", function (e) {
+      e.stopPropagation();
+
+      isvolume = false;
+    });
+    music.addEventListener("touchcancel", function (e) {
+      e.stopPropagation();
+
+      isvolume = false;
+    });
+
+    class musicclass {
+      constructor() {
+        this.musics = ["theme.mp3"];
+        //music列表
+        //需全塔属性注册并保存在bgms文件夹,每个数组为显示的一页内容
+        this.musicMx = [
+          [
+            "Crawler.opus",
+            "Blood_Stain.opus",
+            "Blind_Alley.opus",
+            "Halbmond.opus",
+          ],
+          ["theme.mp3", "op.opus", "Asphodelus_Ceui.opus", "ed.opus"],
+        ];
+        //音乐别名(将在播放器内显示的音乐名,music列表内的都要有对应歌名)
+        this.musicname = {
+          "Asphodelus_Ceui.opus": "Asphodelus (Full.ver)",
+          "Blind_Alley.opus": "Blind Alley",
+          "Crawler.opus": "Crawler",
+          "op.opus": "Asphodelus",
+          "theme.mp3": "One of Episodes",
+          "ed.opus": "親愛なる世界へ",
+          "Blood_Stain.opus": "Blood Stain",
+          "Halbmond.opus": "Halbmond",
+        };
+        this.selection = [0, 0];
+        this.stop = false;
+        this.type = "xunhuan";
+        this.randomList = [];
+        this.random = 0;
+      }
+
+      //更新
+      update() {
+        this.background();
+        this.drawUI();
+      }
+      background() {
+        //画布大小设置
+        if (core.domStyle.isVertical) {
+          music.width = 1248;
+          music.height = 2028;
+        } else {
+          music.width = 2028;
+          music.height = 1248;
+        }
+      }
+
+      mousedown(px, py) {
+        //鼠标按下时
+
+        const makeBox = ([x, y], [w, h]) => {
+          return [
+            [x, y],
+            [x + w, y + h],
+          ];
+        };
+        const inRect = ([x, y], [[sx, sy], [dx, dy]]) => {
+          return sx <= x && x <= dx && sy <= y && y <= dy;
+        };
+        const pos = [px, py];
+        const backbox = makeBox([15, 35], [210, 90]);
+        if (inRect(pos, backbox)) {
+          //离开按钮是一致的,其余的记区分横竖屏
+          music.style.display = "none";
+          core.clearMap(ctx);
+
+          core.unregisterAnimationFrame("music");
+          core.restart();
+
+          return;
+        }
+        if (core.domStyle.isVertical) {
+          //竖屏
+
+          const pageupbox = makeBox([100, 1230], [200, 100]);
+          const pagedownbox = makeBox([950, 1230], [200, 100]);
+          const musicbox = makeBox(
+            [100, 200],
+            [1048, this.musicMx[page].length * 100]
+          );
+          const beforebox = makeBox([120, 1620], [100, 100]);
+          const afterbox = makeBox([780, 1620], [100, 100]);
+          const playbox = makeBox([420, 1580], [200, 200]);
+          const typebox = makeBox([1040, 1600], [120, 120]);
+
+          const volumebox = makeBox([250, 1940], [1050, 20]);
+          if (inRect(pos, pageupbox)) {
+            if (page !== 0) page -= 1;
+            return;
+          }
+          if (inRect(pos, pagedownbox)) {
+            if (page !== this.musicMx.length - 1) page += 1;
+            return;
+          }
+          if (inRect(pos, playbox)) {
+            if (this.stop) {
+              this.stop = !this.stop;
+
+              core.resumeBgm();
             } else {
-              over.width = 2028;
-              over.height = 1248;
+              this.stop = !this.stop;
+              core.pauseBgm();
             }
+            return;
+          }
+          if (inRect(pos, beforebox)) {
+            this.stop = false;
+            switch (this.type) {
+              case "danqu":
+                core.playBgm(
+                  main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                    main.core.ui.music.selection[1]
+                  ],
+                  0
+                );
 
-            ctx.globalAlpha = (globalAlpha ?? 100) / 100;
-            core.fillRect(ctx, 0, 0, 2028, 1248, color);
+                page = this.selection[0];
 
-            imageList.forEach(function (one) {
-              if (
-                farme >= (one.beforefarme ?? 0) &&
-                farme <= (one.afterfarme ?? allFarme)
-              ) {
-                const img = core.material.images.images?.[one.image];
-                if (img) {
-                  const gla = one.globalAlpha ?? 100;
-                  const agla = one.aglobalAlpha ?? gla,
-                    beforefarme = one.beforefarme ?? 0;
-                  const afterfarme = one.afterfarme ?? allFarme;
-
-                  ctx.globalAlpha =
-                    (gla +
-                      ((agla - gla) * (farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1)) /
-                    100;
-
-                  const cx =
-                      (one.cx ?? 0) +
-                      (((one.acx ?? 0) - (one.cx ?? 0)) *
-                        (farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    cy =
-                      (one.cy ?? 0) +
-                      (((one.acy ?? 0) - (one.cy ?? 0)) *
-                        (farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    cw =
-                      (one.cw ?? img.width) +
-                      (((one.acw ?? img.width) - (one.cw ?? img.width)) *
-                        (farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    ch =
-                      (one.ch ?? img.height) +
-                      (((one.acw ?? img.height) - (one.cw ?? img.height)) *
-                        (farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    x =
-                      (one.x ?? 0) +
-                      (((one.ax ?? 0) - (one.x ?? 0)) * (farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    y =
-                      (one.y ?? 0) +
-                      (((one.ay ?? 0) - (one.y ?? 0)) * (farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    w =
-                      (one.w ?? 2028) +
-                      (((one.aw ?? 2028) - (one.w ?? 2028)) *
-                        (farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    h =
-                      (one.h ?? 1248) +
-                      (((one.aw ?? 1248) - (one.w ?? 1248)) *
-                        (farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1);
-                  ctx.drawImage(img, cx, cy, cw, ch, x, y, w, h);
+                break;
+              case "xunhuan":
+                for (;;) {
+                  if (this.selection[1] === 0) {
+                    if (this.selection[0] === 0) {
+                      this.selection[0] = this.musicMx.length - 1;
+                      this.selection[1] =
+                        this.musicMx[this.selection[0]].length - 1;
+                    } else {
+                      this.selection[0] -= 1;
+                      this.selection[1] =
+                        this.musicMx[this.selection[0]].length - 1;
+                    }
+                  } else {
+                    this.selection[1] -= 1;
+                  }
+                  this.random = this.randomList.indexOf(
+                    this.musicMx[this.selection[0]][this.selection[1]]
+                  );
+                  page = this.selection[0];
+                  if (
+                    this.musics.includes(
+                      this.musicMx[this.selection[0]][this.selection[1]]
+                    ) ||
+                    page !== this.musicMx.length - 1
+                  )
+                    break;
                 }
-              }
-            });
-            soundList.forEach(function (one) {
-              const lisen =
-                one.sound &&
-                core.material.sounds[one.sound] &&
-                core.musicStatus.soundStatus;
-              if (farme == one.startfarme && lisen) {
-                if (one.stopbefore) core.stopSound();
-                core.playSound(one.sound);
-              }
-            });
-            farme++;
-            ctx.globalAlpha = 1;
-            ctx.restore();
+                core.playBgm(
+                  main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                    main.core.ui.music.selection[1]
+                  ],
+                  0
+                );
 
-            if (farme > allFarme) {
-              core.unregisterAnimationFrame("animationDrawable");
-              over.style.display = "none";
-              core.doAction();
+                break;
+              case "suiji":
+                for (;;) {
+                  if (this.random > 0) {
+                    this.random -= 1;
+                  } else {
+                    this.random = this.randomList.length - 1;
+                  }
+                  this.selection[0] = this.musicMx.findIndex((v) =>
+                    v.includes(this.randomList[this.random])
+                  );
+                  this.selection[1] = this.musicMx[this.selection[0]].indexOf(
+                    this.randomList[this.random]
+                  );
+
+                  page = this.selection[0];
+                  if (
+                    this.musics.includes(
+                      this.musicMx[this.selection[0]][this.selection[1]]
+                    ) ||
+                    page !== this.musicMx.length - 1
+                  )
+                    break;
+                }
+                core.playBgm(
+                  main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                    main.core.ui.music.selection[1]
+                  ],
+                  0
+                );
+
+                break;
+            }
+            return;
+          }
+          if (inRect(pos, afterbox)) {
+            this.stop = false;
+            switch (this.type) {
+              case "danqu":
+                core.playBgm(
+                  main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                    main.core.ui.music.selection[1]
+                  ],
+                  0
+                );
+
+                page = this.selection[0];
+                break;
+              case "xunhuan":
+                for (;;) {
+                  if (
+                    this.selection[1] ===
+                    this.musicMx[this.selection[0]].length - 1
+                  ) {
+                    if (this.selection[0] === this.musicMx.length - 1) {
+                      this.selection[0] = 0;
+                      this.selection[1] = 0;
+                    } else {
+                      this.selection[0] += 1;
+                      this.selection[1] = 0;
+                    }
+                  } else {
+                    this.selection[1] += 1;
+                  }
+                  this.random = this.randomList.indexOf(
+                    this.musicMx[this.selection[0]][this.selection[1]]
+                  );
+                  page = this.selection[0];
+                  if (
+                    this.musics.includes(
+                      this.musicMx[this.selection[0]][this.selection[1]]
+                    ) ||
+                    page !== this.musicMx.length - 1
+                  )
+                    break;
+                }
+                core.playBgm(
+                  main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                    main.core.ui.music.selection[1]
+                  ],
+                  0
+                );
+
+                break;
+              case "suiji":
+                for (;;) {
+                  if (this.random < this.randomList.length - 1) {
+                    this.random += 1;
+                  } else {
+                    this.random = 0;
+                  }
+                  this.selection[0] = this.musicMx.findIndex((v) =>
+                    v.includes(this.randomList[this.random])
+                  );
+                  this.selection[1] = this.musicMx[this.selection[0]].indexOf(
+                    this.randomList[this.random]
+                  );
+
+                  page = this.selection[0];
+                  if (
+                    this.musics.includes(
+                      this.musicMx[this.selection[0]][this.selection[1]]
+                    ) ||
+                    page !== this.musicMx.length - 1
+                  )
+                    break;
+                }
+                core.playBgm(
+                  main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                    main.core.ui.music.selection[1]
+                  ],
+                  0
+                );
+
+                break;
+            }
+            return;
+          }
+          if (inRect(pos, typebox)) {
+            switch (this.type) {
+              case "danqu":
+                this.type = "xunhuan";
+                break;
+              case "xunhuan":
+                this.type = "suiji";
+                break;
+              case "suiji":
+                this.type = "danqu";
+                break;
+            }
+            return;
+          }
+          if (inRect(pos, musicbox)) {
+            const index = Math.floor((py - 200) / 100);
+            if (page !== this.selection[0] || index !== this.selection[1]) {
+              if (
+                this.musics.includes(this.musicMx[page][index]) ||
+                page !== this.musicMx.length - 1
+              ) {
+                this.selection[0] = page;
+
+                this.selection[1] = index;
+                this.randomList.indexOf(
+                  this.musicMx[this.selection[0]][this.selection[1]]
+                );
+
+                core.playBgm(
+                  main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                    main.core.ui.music.selection[1]
+                  ],
+                  0
+                );
+
+                this.stop = false;
+              }
+            } else {
+              if (this.stop) {
+                this.stop = !this.stop;
+                core.resumeBgm();
+              } else {
+                this.stop = !this.stop;
+                core.pauseBgm();
+              }
+            }
+            return;
+          }
+
+          if (inRect(pos, volumebox)) {
+            const time = Math.min(Math.max((px - 250) / 800, 0), 1);
+            audio.setVolume(time);
+            core.plugin.audioSystem.soundPlayer.setVolume(time);
+            isvolume = true;
+          }
+        } else {
+          //横屏
+          const pageupbox = makeBox([1050, 1100], [200, 100]);
+          const pagedownbox = makeBox([1550, 1100], [200, 100]);
+          const musicbox = makeBox(
+            [900, 100],
+            [1000, this.musicMx[page].length * 100]
+          );
+          const beforebox = makeBox([60, 620], [100, 100]);
+          const afterbox = makeBox([450, 620], [100, 100]);
+          const playbox = makeBox([200, 570], [200, 200]);
+          const typebox = makeBox([620, 600], [120, 120]);
+
+          const volumebox = makeBox([100, 990], [600, 20]);
+          if (inRect(pos, pageupbox)) {
+            if (page !== 0) page -= 1;
+            return;
+          }
+          if (inRect(pos, pagedownbox)) {
+            if (page !== this.musicMx.length - 1) page += 1;
+            return;
+          }
+          if (inRect(pos, playbox)) {
+            if (this.stop) {
+              this.stop = !this.stop;
+              core.resumeBgm();
+            } else {
+              this.stop = !this.stop;
+              core.pauseBgm();
+            }
+            return;
+          }
+          if (inRect(pos, beforebox)) {
+            this.stop = false;
+            switch (this.type) {
+              case "danqu":
+                core.playBgm(
+                  main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                    main.core.ui.music.selection[1]
+                  ],
+                  0
+                );
+
+                page = this.selection[0];
+
+                break;
+              case "xunhuan":
+                for (;;) {
+                  if (this.selection[1] === 0) {
+                    if (this.selection[0] === 0) {
+                      this.selection[0] = this.musicMx.length - 1;
+                      this.selection[1] =
+                        this.musicMx[this.selection[0]].length - 1;
+                    } else {
+                      this.selection[0] -= 1;
+                      this.selection[1] =
+                        this.musicMx[this.selection[0]].length - 1;
+                    }
+                  } else {
+                    this.selection[1] -= 1;
+                  }
+                  this.random = this.randomList.indexOf(
+                    this.musicMx[this.selection[0]][this.selection[1]]
+                  );
+                  page = this.selection[0];
+
+                  if (
+                    this.musics.includes(
+                      this.musicMx[this.selection[0]][this.selection[1]]
+                    ) ||
+                    page !== this.musicMx.length - 1
+                  )
+                    break;
+                }
+                core.playBgm(
+                  main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                    main.core.ui.music.selection[1]
+                  ],
+                  0
+                );
+
+                break;
+              case "suiji":
+                for (;;) {
+                  if (this.random > 0) {
+                    this.random -= 1;
+                  } else {
+                    this.random = this.randomList.length - 1;
+                  }
+                  this.selection[0] = this.musicMx.findIndex((v) =>
+                    v.includes(this.randomList[this.random])
+                  );
+                  this.selection[1] = this.musicMx[this.selection[0]].indexOf(
+                    this.randomList[this.random]
+                  );
+
+                  page = this.selection[0];
+
+                  if (
+                    this.musics.includes(
+                      this.musicMx[this.selection[0]][this.selection[1]]
+                    ) ||
+                    page !== this.musicMx.length - 1
+                  )
+                    break;
+                }
+                core.playBgm(
+                  main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                    main.core.ui.music.selection[1]
+                  ],
+                  0
+                );
+
+                break;
+            }
+            return;
+          }
+          if (inRect(pos, afterbox)) {
+            this.stop = false;
+            switch (this.type) {
+              case "danqu":
+                core.playBgm(
+                  main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                    main.core.ui.music.selection[1]
+                  ],
+                  0
+                );
+
+                page = this.selection[0];
+                break;
+              case "xunhuan":
+                for (;;) {
+                  if (
+                    this.selection[1] ===
+                    this.musicMx[this.selection[0]].length - 1
+                  ) {
+                    if (this.selection[0] === this.musicMx.length - 1) {
+                      this.selection[0] = 0;
+                      this.selection[1] = 0;
+                    } else {
+                      this.selection[0] += 1;
+                      this.selection[1] = 0;
+                    }
+                  } else {
+                    this.selection[1] += 1;
+                  }
+                  this.randomList.findIndex(
+                    (v) =>
+                      v === this.musicMx[this.selection[0]][this.selection[1]]
+                  );
+                  page = this.selection[0];
+
+                  if (
+                    this.musics.includes(
+                      this.musicMx[this.selection[0]][this.selection[1]]
+                    ) ||
+                    page !== this.musicMx.length - 1
+                  )
+                    break;
+                }
+                core.playBgm(
+                  main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                    main.core.ui.music.selection[1]
+                  ],
+                  0
+                );
+
+                break;
+              case "suiji":
+                for (;;) {
+                  if (this.random < this.randomList.length - 1) {
+                    this.random += 1;
+                  } else {
+                    this.random = 0;
+                  }
+                  this.selection[0] = this.musicMx.findIndex((v) =>
+                    v.includes(this.randomList[this.random])
+                  );
+                  this.selection[1] = this.musicMx[this.selection[0]].indexOf(
+                    main.core.ui.music.randomList[main.core.ui.music.random]
+                  );
+
+                  page = this.selection[0];
+                  if (
+                    this.musics.includes(
+                      this.musicMx[this.selection[0]][this.selection[1]]
+                    ) ||
+                    page !== this.musicMx.length - 1
+                  )
+                    break;
+                }
+                core.playBgm(
+                  main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                    main.core.ui.music.selection[1]
+                  ],
+                  0
+                );
+
+                break;
+            }
+            return;
+          }
+          if (inRect(pos, typebox)) {
+            switch (this.type) {
+              case "danqu":
+                this.type = "xunhuan";
+                break;
+              case "xunhuan":
+                this.type = "suiji";
+                break;
+              case "suiji":
+                this.type = "danqu";
+                break;
+            }
+            return;
+          }
+          if (inRect(pos, musicbox)) {
+            const index = Math.floor((py - 100) / 100);
+            if (page !== this.selection[0] || index !== this.selection[1]) {
+              if (
+                this.musics.includes(this.musicMx[page][index]) ||
+                page !== this.musicMx.length - 1
+              ) {
+                this.selection[0] = page;
+                this.selection[1] = index;
+                this.randomList.indexOf(
+                  (v) =>
+                    v === this.musicMx[this.selection[0]][this.selection[1]]
+                );
+
+                core.playBgm(
+                  main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                    main.core.ui.music.selection[1]
+                  ],
+                  0
+                );
+                this.stop = false;
+              }
+            } else {
+              if (this.stop) {
+                this.stop = !this.stop;
+                core.resumeBgm();
+              } else {
+                this.stop = !this.stop;
+                core.pauseBgm();
+              }
+            }
+            return;
+          }
+
+          if (inRect(pos, volumebox)) {
+            const time = Math.min(Math.max((px - 100) / 600, 0), 1);
+            audio.setVolume(time);
+            core.plugin.audioSystem.soundPlayer.setVolume(time);
+            isvolume = true;
+          }
+        }
+      }
+      mousemove(px, py) {
+        if (isvolume) {
+          if (core.domStyle.isVertical) {
+            const time = Math.min(Math.max((px - 250) / 800, 0), 1);
+            audio.setVolume(time);
+            core.plugin.audioSystem.soundPlayer.setVolume(time);
+          } else {
+            const time = Math.min(Math.max((px - 100) / 600, 0), 1);
+            audio.setVolume(time);
+            core.plugin.audioSystem.soundPlayer.setVolume(time);
+          }
+        }
+      }
+
+      drawUI() {
+        //绘制页面
+        core.clearMap(music);
+        const bgVertical = core.material.images.images["bg_2010.webp"]; //竖屏背景
+        const bg = core.material.images.images["bg_5043.webp"]; //竖屏背景
+        if (core.domStyle.isVertical) {
+          //竖屏
+
+          core.fillRect(ctx, 0, 0, 1248, 2028, "#000000"); //黑色背景
+          ctx.globalAlpha = 0.3; //透明度
+          if (bgVertical)
+            ctx.drawImage(bgVertical, 0, 0, 1280, 1500, 0, 0, 1248, 2028); //绘制半透明背景图片
+          ctx.globalAlpha = 1; //恢复为不透明
+
+          core.setTextAlign(ctx, "center");
+          core.fillBoldText1(
+            ctx,
+            "◀离开",
+            110,
+            100,
+            "#FFFFFF",
+            "#000000",
+            6,
+            core.ui._buildFont(66, true)
+          );
+
+          ctx.strokeStyle = "#FFFFFF";
+          ctx.lineWidth = 3;
+          ctx.beginPath();
+          ctx.moveTo(100, 200);
+          ctx.lineTo(1148, 200);
+
+          ctx.stroke();
+          let posy = 300;
+          const indexList = this.musicMx[page];
+          core.setTextAlign(ctx, "left");
+          for (let i = 0; i < indexList.length; i++) {
+            const text = this.musicname[indexList[i]];
+            if (
+              this.musics.includes(this.musicMx[page][i]) ||
+              page !== this.musicMx.length - 1
+            ) {
+              core.fillBoldText1(
+                ctx,
+                text,
+                150,
+                posy - 30,
+                page === this.selection[0] && i === this.selection[1]
+                  ? "#FFFFFF"
+                  : "#444444",
+                "#000000",
+                6,
+                core.ui._buildFont(66, true)
+              );
+
+              ctx.strokeStyle = "#FFFFFF";
+              ctx.lineWidth = 3;
+              ctx.beginPath();
+              ctx.moveTo(100, posy);
+              ctx.lineTo(1148, posy);
+              ctx.stroke();
+            }
+            posy += 100;
+          }
+          ctx.beginPath();
+          ctx.moveTo(100, 1210);
+          ctx.lineTo(1148, 1210);
+          ctx.moveTo(100, 1200);
+          ctx.lineTo(1148, 1200);
+          ctx.stroke();
+
+          core.fillBoldText1(
+            ctx,
+            "上一页",
+            100,
+            1300,
+            page === 0 ? "#444444" : "#FFFFFF",
+            "#000000",
+            6,
+            core.ui._buildFont(66, true)
+          );
+
+          core.fillBoldText1(
+            ctx,
+            page + 1 + "/" + this.musicMx.length,
+            580,
+            1300,
+            "#FFFFFF",
+            "#000000",
+            6,
+            core.ui._buildFont(66, true)
+          );
+          core.fillBoldText1(
+            ctx,
+            "下一页",
+            950,
+            1300,
+            page === this.musicMx.length - 1 ? "#444444" : "#FFFFFF",
+            "#000000",
+            6,
+            core.ui._buildFont(66, true)
+          );
+
+          ctx.strokeStyle = "#ffffff";
+          ctx.lineWidth = 3;
+
+          core.fillBoldText(
+            ctx,
+            "|",
+            100,
+            1697,
+            "#FFFFFF",
+            6,
+            core.ui._buildFont(96, true)
+          );
+          core.fillBoldText(
+            ctx,
+            "◀",
+            115,
+            1700,
+            "#FFFFFF",
+            6,
+            core.ui._buildFont(96, true)
+          );
+
+          ctx.beginPath();
+          ctx.arc(505, 1670, 80, 0, 3 * Math.PI);
+          ctx.stroke();
+          core.fillText(
+            ctx,
+            "|",
+            835,
+            1697,
+            "#FFFFFF",
+            core.ui._buildFont(96, true)
+          );
+          core.fillText(
+            ctx,
+            "▶",
+            785,
+            1700,
+            "#FFFFFF",
+            core.ui._buildFont(96, true)
+          );
+
+          if (this.stop) {
+            core.fillText(
+              ctx,
+              "▶",
+              473,
+              1700,
+              "#FFFFFF",
+              core.ui._buildFont(96, true)
+            );
+          } else {
+            core.fillText(
+              ctx,
+              "||",
+              453,
+              1700,
+              "#FFFFFF",
+              core.ui._buildFont(96, true)
+            );
+          }
+
+          const img = core.material.images.images[this.type + ".webp"];
+          if (img) ctx.drawImage(img, 1000, 1555, 200, 200);
+          core.setTextAlign(ctx, "center");
+          ctx.font = "bold 52px Verdana";
+          ctx.fillText("当前歌曲", 625, 1397);
+          ctx.fillText(
+            this.musicname[this.musicMx[this.selection[0]][this.selection[1]]],
+            625,
+            1507
+          );
+
+          ctx.fillStyle = "#ffffff";
+          ctx.font = "bold 48px Verdana";
+          ctx.fillText("音量", 150, 1970);
+          ctx.lineWidth = 3;
+          ctx.beginPath();
+          ctx.moveTo(250, 1950);
+          ctx.lineTo(1050, 1950);
+          ctx.stroke();
+          ctx.strokeStyle = "#ffffff";
+          ctx.lineWidth = 9;
+          ctx.fillStyle = "rgba(255,255,255,0.5)";
+
+          ctx.beginPath();
+          ctx.moveTo(250, 1950);
+          ctx.lineTo(800 * audio.getVolume() + 250, 1950);
+          ctx.stroke();
+          ctx.beginPath();
+          ctx.arc(800 * audio.getVolume() + 250, 1950, 10, 0, 2 * Math.PI);
+          ctx.fill();
+          core.fillBoldText1(
+            ctx,
+            Math.floor(100 * audio.getVolume()),
+            1120,
+            1970,
+            "#FFFFFF",
+            "#000000",
+            6,
+            core.ui._buildFont(56, true)
+          );
+        } else {
+          //横屏
+
+          core.fillRect(ctx, 0, 0, 2028, 1248, "#000000"); //黑色背景
+          ctx.globalAlpha = 0.5; //透明度
+          if (bg) ctx.drawImage(bg, 0, 0, 1280, 720, 0, 0, 2028, 1248); //绘制半透明背景图片
+          ctx.globalAlpha = 1; //恢复为不透明
+          core.setTextAlign(ctx, "center");
+
+          core.fillBoldText1(
+            ctx,
+            "◀离开",
+            110,
+            100,
+            "#FFFFFF",
+            "#000000",
+            6,
+            core.ui._buildFont(66, true)
+          );
+
+          ctx.strokeStyle = "#FFFFFF";
+          ctx.lineWidth = 3;
+          ctx.beginPath();
+          ctx.moveTo(800, 100);
+          ctx.lineTo(800, 1148);
+          ctx.moveTo(900, 100);
+          ctx.lineTo(1900, 100);
+          ctx.stroke();
+          let posy = 200;
+          const indexList = this.musicMx[page];
+          core.setTextAlign(ctx, "left");
+          for (let i = 0; i < indexList.length; i++) {
+            const text = this.musicname[indexList[i]];
+            if (
+              this.musics.includes(this.musicMx[page][i]) ||
+              page !== this.musicMx.length - 1
+            ) {
+              core.fillBoldText1(
+                ctx,
+                text,
+                950,
+                posy - 30,
+                page === this.selection[0] && i === this.selection[1]
+                  ? "#FFFFFF"
+                  : "#444444",
+                "#000000",
+                6,
+                core.ui._buildFont(66, true)
+              );
+
+              ctx.strokeStyle = "#FFFFFF";
+              ctx.lineWidth = 3;
+              ctx.beginPath();
+              ctx.moveTo(900, posy);
+              ctx.lineTo(1900, posy);
+              ctx.stroke();
+            }
+            posy += 100;
+          }
+          core.fillBoldText1(
+            ctx,
+            "上一页",
+            1050,
+            1200 - 30,
+            page === 0 ? "#444444" : "#FFFFFF",
+            "#000000",
+            6,
+            core.ui._buildFont(66, true)
+          );
+
+          core.fillBoldText1(
+            ctx,
+            page + 1 + "/" + this.musicMx.length,
+            1350,
+            1200 - 30,
+            "#FFFFFF",
+            "#000000",
+            6,
+            core.ui._buildFont(66, true)
+          );
+          core.fillBoldText1(
+            ctx,
+            "下一页",
+            1550,
+            1200 - 30,
+            page === this.musicMx.length - 1 ? "#444444" : "#FFFFFF",
+            "#000000",
+            6,
+            core.ui._buildFont(66, true)
+          );
+          ctx.strokeStyle = "#ffffff";
+          ctx.lineWidth = 3;
+
+          core.fillText(
+            ctx,
+            "|",
+            55,
+            697,
+            "#FFFFFF",
+            core.ui._buildFont(96, true)
+          );
+          core.fillText(
+            ctx,
+            "◀",
+            70,
+            700,
+            "#FFFFFF",
+            core.ui._buildFont(96, true)
+          );
+
+          ctx.beginPath();
+          ctx.arc(295, 670, 80, 0, 2 * Math.PI);
+          ctx.stroke();
+          if (this.stop) {
+            core.fillText(
+              ctx,
+              "▶",
+              265,
+              700,
+              "#FFFFFF",
+              core.ui._buildFont(96, true)
+            );
+          } else {
+            core.fillText(
+              ctx,
+              "||",
+              245,
+              700,
+              "#FFFFFF",
+              core.ui._buildFont(96, true)
+            );
+          }
+          core.fillText(
+            ctx,
+            "|",
+            495,
+            697,
+            "#FFFFFF",
+            core.ui._buildFont(96, true)
+          );
+          core.fillText(
+            ctx,
+            "▶",
+            450,
+            700,
+            "#FFFFFF",
+            core.ui._buildFont(96, true)
+          );
+
+          ctx.font = "bold 48px Verdana";
+          ctx.fillText("音量", 350, 900);
+          ctx.beginPath();
+          ctx.moveTo(100, 1000);
+          ctx.lineTo(700, 1000);
+          ctx.stroke();
+          ctx.strokeStyle = "#ffffff";
+          ctx.lineWidth = 9;
+          ctx.fillStyle = "rgba(255,255,255,0.5)";
+
+          ctx.beginPath();
+          ctx.moveTo(100, 1000);
+          ctx.lineTo(600 * audio.getVolume() + 100, 1000);
+          ctx.stroke();
+          ctx.beginPath();
+          ctx.arc(600 * audio.getVolume() + 100, 1000, 10, 0, 2 * Math.PI);
+          ctx.fill();
+          core.fillBoldText1(
+            ctx,
+            Math.floor(100 * audio.getVolume()),
+            720,
+            1010,
+            "#FFFFFF",
+            "#000000",
+            6,
+            core.ui._buildFont(56, true)
+          );
+          const img = core.material.images.images[this.type + ".webp"];
+          if (img) ctx.drawImage(img, 580, 560, 200, 200);
+          core.setTextAlign(ctx, "center");
+          ctx.font = "bold 48px Verdana";
+          ctx.fillText("当前歌曲", 400, 297);
+          ctx.fillText(
+            this.musicname[this.musicMx[this.selection[0]][this.selection[1]]],
+            400,
+            397
+          );
+        }
+      }
+    }
+    core.ui.music = new musicclass();
+    main.dom.musicMode.onclick = function () {
+      //点击开始页面的CG MODE进入cg回廊
+      if (
+        (core.getLocalStorage("musics") &&
+          core.getLocalStorage("musics").length === 0) ||
+        !core.getLocalStorage("musics")
+      )
+        core.setLocalStorage("musics", ["theme.mp3"]);
+      core.ui.music.musics = core.getLocalStorage("musics");
+      core.playBgm(
+        main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+          main.core.ui.music.selection[1]
+        ],
+        0
+      );
+
+      const arr = main.core.ui.music.musicMx.flat(Infinity);
+      main.core.ui.music.randomList = shuffle(arr);
+      main.core.ui.music.random = main.core.ui.music.randomList.indexOf(
+        main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+          main.core.ui.music.selection[1]
+        ]
+      );
+      page = 0;
+      music.style.display = "block";
+      let time = 0;
+      core.registerAnimationFrame("music", null, (temptime) => {
+        if (temptime > time + 1000 / 60) {
+          time = temptime;
+          main.core.ui.music.update();
+          const duration =
+            core.plugin.audioSystem.bgmController.player.getRoute(
+              "bgms." +
+                main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                  main.core.ui.music.selection[1]
+                ]
+            ).duration;
+
+          const currentTime =
+            core.plugin.audioSystem.bgmController.player.getRoute(
+              "bgms." +
+                main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+                  main.core.ui.music.selection[1]
+                ]
+            ).currentTime;
+          if (currentTime && duration && duration - currentTime < 0.05) {
+            if (core.domStyle.isVertical) {
+              core.ui.music.mousedown(830, 1770);
+            } else {
+              core.ui.music.mousedown(475, 765);
             }
           }
         }
-      );
+      });
+    };
+    loader.prototype.loadOneMusic = function (name) {
+      /* var music = new Audio();
+		music.preload = "none";
+		if (main.bgmRemote)
+		  music.src = main.bgmRemoteRoot + core.firstData.name + "/" + name;
+		else music.src = "project/bgms/" + name;
+		music.loop = "loop";
+		core.material.bgms[name] = music;*/
     };
   },
-    "musicMode": function () {
-	// 在此增加新插件
-	const music = document.createElement("canvas");
-	music.style.position = "absolute";
-	music.style.zIndex = 300;
-	music.style.display = "none";
-	music.id = "music";
-	main.dom.gameGroup.insertAdjacentElement("afterend", music);
-	music.style.top = "50%";
-	music.style.left = "50%";
-	music.style.transform = "translate(-50%,-50%)";
-	const ctx = music.getContext("2d");
-	main.dom.music = music;
-
-	const audio = core.plugin.audioSystem.bgmController;
-
-	let page = 0; //初始页面
-
-	let isvolume = false;
-
-	function shuffle(arr) {
-		let n = arr.length,
-			random;
-		while (n) {
-			random = (Math.random() * n--) >>> 0;
-			[arr[n], arr[random]] = [arr[random], arr[n]];
-		}
-		return arr;
-	}
-	music.addEventListener("mousedown", function (e) {
-		e.stopPropagation();
-		const left = core.dom.gameGroup.offsetLeft;
-		const top = core.dom.gameGroup.offsetTop;
-		const px = Math.floor((e.clientX - left) / core.domStyle.scale),
-			py = Math.floor((e.clientY - top) / core.domStyle.scale);
-		core.ui.music.mousedown(px * 3, py * 3);
-	});
-	music.addEventListener("mousemove", function (e) {
-		e.stopPropagation();
-		const left = core.dom.gameGroup.offsetLeft;
-		const top = core.dom.gameGroup.offsetTop;
-		const px = Math.floor((e.clientX - left) / core.domStyle.scale),
-			py = Math.floor((e.clientY - top) / core.domStyle.scale);
-		core.ui.music.mousemove(px * 3, py * 3);
-	});
-	music.addEventListener("mouseup", function (e) {
-		e.stopPropagation();
-
-		isvolume = false;
-	});
-	music.addEventListener("mouseleave", function (e) {
-		e.stopPropagation();
-
-		isvolume = false;
-	});
-	music.addEventListener("touchstart", function (e) {
-		e.preventDefault();
-		const left = core.dom.gameGroup.offsetLeft;
-		const top = core.dom.gameGroup.offsetTop;
-		const px = Math.floor(
-				(e.touches[0].clientX - left) / core.domStyle.scale
-			),
-			py = Math.floor((e.touches[0].clientY - top) / core.domStyle.scale);
-		core.ui.music.mousedown(px * 3, py * 3);
-	});
-	music.addEventListener("touchmove", function (e) {
-		e.stopPropagation();
-		const left = core.dom.gameGroup.offsetLeft;
-		const top = core.dom.gameGroup.offsetTop;
-		const px = Math.floor(
-				(e.touches[0].clientX - left) / core.domStyle.scale
-			),
-			py = Math.floor((e.touches[0].clientY - top) / core.domStyle.scale);
-		core.ui.music.mousemove(px * 3, py * 3);
-	});
-	music.addEventListener("touchend", function (e) {
-		e.stopPropagation();
-
-		isvolume = false;
-	});
-	music.addEventListener("touchcancel", function (e) {
-		e.stopPropagation();
-
-		isvolume = false;
-	});
-
-	class musicclass {
-		constructor() {
-			//music列表
-			//需全塔属性注册并保存在bgms文件夹,每个数组为显示的一页内容
-			this.musicMx = [
-				["Asphodelus_Ceui.opus", "Blind_Alley.opus"],
-				["Crawler.opus", "op.opus", "theme.opus"],
-			];
-			//音乐别名(将在播放器内显示的音乐名,music列表内的都要有对应歌名)
-			this.musicname = {
-				"Asphodelus_Ceui.opus": "Asphodelus",
-				"Blind_Alley.opus": "Blind",
-				"Crawler.opus": "Crawler",
-				"op.opus": "op",
-				"theme.opus": "theme",
-			};
-			this.selection = [0, 0];
-			this.stop = false;
-			this.type = "xunhuan";
-			this.randomList = [];
-			this.random = 0;
-		}
-
-		//更新
-		update() {
-			this.background();
-			this.drawUI();
-		}
-		background() {
-			//画布大小设置
-			if (core.domStyle.isVertical) {
-				music.width = 1248;
-				music.height = 2028;
-			} else {
-				music.width = 2028;
-				music.height = 1248;
-			}
-		}
-		mousedown(px, py) {
-			//鼠标按下时
-
-			const makeBox = ([x, y], [w, h]) => {
-				return [
-					[x, y],
-					[x + w, y + h],
-				];
-			};
-			const inRect = ([x, y], [
-				[sx, sy],
-				[dx, dy]
-			]) => {
-				return sx <= x && x <= dx && sy <= y && y <= dy;
-			};
-			const pos = [px, py];
-			const backbox = makeBox([15, 35], [210, 90]);
-			if (inRect(pos, backbox)) {
-				//离开按钮是一致的,其余的记区分横竖屏
-				music.style.display = "none";
-				core.clearMap(ctx);
-
-				core.unregisterAnimationFrame("music");
-				core.restart();
-
-				return;
-			}
-			if (core.domStyle.isVertical) {
-				//竖屏
-
-				const pageupbox = makeBox([100, 1230], [200, 100]);
-				const pagedownbox = makeBox([950, 1230], [200, 100]);
-				const musicbox = makeBox(
-					[100, 200],
-					[1048, this.musicMx[page].length * 100]
-				);
-				const beforebox = makeBox([120, 1620], [100, 100]);
-				const afterbox = makeBox([780, 1620], [100, 100]);
-				const playbox = makeBox([420, 1580], [200, 200]);
-				const typebox = makeBox([1040, 1600], [120, 120]);
-
-				const volumebox = makeBox([250, 1940], [1050, 20]);
-				if (inRect(pos, pageupbox)) {
-					if (page !== 0) page -= 1;
-					return;
-				}
-				if (inRect(pos, pagedownbox)) {
-					if (page !== this.musicMx.length - 1) page += 1;
-					return;
-				}
-				if (inRect(pos, playbox)) {
-					if (this.stop) {
-						this.stop = !this.stop;
-
-						core.resumeBgm();
-					} else {
-						this.stop = !this.stop;
-						core.pauseBgm();
-					}
-					return;
-				}
-				if (inRect(pos, beforebox)) {
-					this.stop = false;
-					switch (this.type) {
-					case "danqu":
-						core.playBgm(
-							main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-								main.core.ui.music.selection[1]
-							]
-						);
-
-						page = this.selection[0];
-
-						break;
-					case "xunhuan":
-						if (this.selection[1] === 0) {
-							if (this.selection[0] === 0) {
-								this.selection[0] = this.musicMx.length - 1;
-								this.selection[1] =
-									this.musicMx[this.selection[0]].length - 1;
-							} else {
-								this.selection[0] -= 1;
-								this.selection[1] =
-									this.musicMx[this.selection[0]].length - 1;
-							}
-						} else {
-							this.selection[1] -= 1;
-						}
-						this.randomList.indexOf(
-							this.musicMx[this.selection[0]][this.selection[1]]
-						);
-						page = this.selection[0];
-
-						core.playBgm(
-							main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-								main.core.ui.music.selection[1]
-							]
-						);
-
-						break;
-					case "suiji":
-						if (this.random > 0) {
-							this.random -= 1;
-						} else {
-							this.random = this.randomList.length - 1;
-						}
-						this.selection[0] = this.musicMx.findIndex((v) =>
-							v.includes(this.randomList[this.random])
-						);
-						this.selection[1] = this.musicMx[this.selection[0]].indexOf(
-							this.randomList[this.random]
-						);
-
-						page = this.selection[0];
-
-						core.playBgm(
-							main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-								main.core.ui.music.selection[1]
-							]
-						);
-
-						break;
-					}
-					return;
-				}
-				if (inRect(pos, afterbox)) {
-					this.stop = false;
-					switch (this.type) {
-					case "danqu":
-						core.playBgm(
-							main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-								main.core.ui.music.selection[1]
-							]
-						);
-
-						page = this.selection[0];
-						break;
-					case "xunhuan":
-						if (
-							this.selection[1] ===
-							this.musicMx[this.selection[0]].length - 1
-						) {
-							if (this.selection[0] === this.musicMx.length - 1) {
-								this.selection[0] = 0;
-								this.selection[1] = 0;
-							} else {
-								this.selection[0] += 1;
-								this.selection[1] = 0;
-							}
-						} else {
-							this.selection[1] += 1;
-						}
-						this.random = this.randomList.indexOf(
-							this.musicMx[this.selection[0]][this.selection[1]]
-						);
-						page = this.selection[0];
-
-						core.playBgm(
-							main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-								main.core.ui.music.selection[1]
-							]
-						);
-
-						break;
-					case "suiji":
-						if (this.random < this.randomList.length - 1) {
-							this.random += 1;
-						} else {
-							this.random = 0;
-						}
-						this.selection[0] = this.musicMx.findIndex((v) =>
-							v.includes(this.randomList[this.random])
-						);
-						this.selection[1] = this.musicMx[this.selection[0]].indexOf(
-							this.randomList[this.random]
-						);
-
-						page = this.selection[0];
-						core.playBgm(
-							main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-								main.core.ui.music.selection[1]
-							]
-						);
-
-						break;
-					}
-					return;
-				}
-				if (inRect(pos, typebox)) {
-					switch (this.type) {
-					case "danqu":
-						this.type = "xunhuan";
-						break;
-					case "xunhuan":
-						this.type = "suiji";
-						break;
-					case "suiji":
-						this.type = "danqu";
-						break;
-					}
-					return;
-				}
-				if (inRect(pos, musicbox)) {
-					const index = Math.floor((py - 200) / 100);
-					if (page !== this.selection[0] || index !== this.selection[1]) {
-						this.selection[0] = page;
-						this.selection[1] = index;
-						this.randomList.indexOf(
-							this.musicMx[this.selection[0]][this.selection[1]]
-						);
-
-						core.playBgm(
-							main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-								main.core.ui.music.selection[1]
-							]
-						);
-
-						this.stop = false;
-					} else {
-						if (this.stop) {
-							this.stop = !this.stop;
-							core.resumeBgm();
-						} else {
-							this.stop = !this.stop;
-							core.pauseBgm();
-						}
-					}
-					return;
-				}
-
-				if (inRect(pos, volumebox)) {
-					const time = Math.min(Math.max((px - 250) / 800, 0), 1);
-					audio.setVolume(time);
-					core.plugin.audioSystem.soundPlayer.setVolume(time);
-					isvolume = true;
-				}
-			} else {
-				//横屏
-				const pageupbox = makeBox([1050, 1100], [200, 100]);
-				const pagedownbox = makeBox([1550, 1100], [200, 100]);
-				const musicbox = makeBox(
-					[900, 100],
-					[1000, this.musicMx[page].length * 100]
-				);
-				const beforebox = makeBox([60, 620], [100, 100]);
-				const afterbox = makeBox([450, 620], [100, 100]);
-				const playbox = makeBox([200, 570], [200, 200]);
-				const typebox = makeBox([620, 600], [120, 120]);
-
-				const volumebox = makeBox([100, 990], [600, 20]);
-				if (inRect(pos, pageupbox)) {
-					if (page !== 0) page -= 1;
-					return;
-				}
-				if (inRect(pos, pagedownbox)) {
-					if (page !== this.musicMx.length - 1) page += 1;
-					return;
-				}
-				if (inRect(pos, playbox)) {
-					if (this.stop) {
-						this.stop = !this.stop;
-						core.resumeBgm();
-					} else {
-						this.stop = !this.stop;
-						core.pauseBgm();
-					}
-					return;
-				}
-				if (inRect(pos, beforebox)) {
-					this.stop = false;
-					switch (this.type) {
-					case "danqu":
-						if (!this.stop)
-							core.playBgm(
-								main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-									main.core.ui.music.selection[1]
-								]
-							);
-
-						page = this.selection[0];
-
-						break;
-					case "xunhuan":
-						if (this.selection[1] === 0) {
-							if (this.selection[0] === 0) {
-								this.selection[0] = this.musicMx.length - 1;
-								this.selection[1] =
-									this.musicMx[this.selection[0]].length - 1;
-							} else {
-								this.selection[0] -= 1;
-								this.selection[1] =
-									this.musicMx[this.selection[0]].length - 1;
-							}
-						} else {
-							this.selection[1] -= 1;
-						}
-						this.random = this.randomList.indexOf(
-							this.musicMx[this.selection[0]][this.selection[1]]
-						);
-						page = this.selection[0];
-
-						if (!this.stop)
-							core.playBgm(
-								main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-									main.core.ui.music.selection[1]
-								]
-							);
-
-						break;
-					case "suiji":
-						if (this.random > 0) {
-							this.random -= 1;
-						} else {
-							this.random = this.randomList.length - 1;
-						}
-						this.selection[0] = this.musicMx.findIndex((v) =>
-							v.includes(this.randomList[this.random])
-						);
-						this.selection[1] = this.musicMx[this.selection[0]].indexOf(
-							this.randomList[this.random]
-						);
-
-						page = this.selection[0];
-
-						if (!this.stop)
-							core.playBgm(
-								main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-									main.core.ui.music.selection[1]
-								]
-							);
-
-						break;
-					}
-					return;
-				}
-				if (inRect(pos, afterbox)) {
-					this.stop = false;
-					switch (this.type) {
-					case "danqu":
-						if (!this.stop)
-							core.playBgm(
-								main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-									main.core.ui.music.selection[1]
-								]
-							);
-
-						page = this.selection[0];
-						break;
-					case "xunhuan":
-						if (
-							this.selection[1] ===
-							this.musicMx[this.selection[0]].length - 1
-						) {
-							if (this.selection[0] === this.musicMx.length - 1) {
-								this.selection[0] = 0;
-								this.selection[1] = 0;
-							} else {
-								this.selection[0] += 1;
-								this.selection[1] = 0;
-							}
-						} else {
-							this.selection[1] += 1;
-						}
-						this.randomList.findIndex(
-							(v) =>
-							v === this.musicMx[this.selection[0]][this.selection[1]]
-						);
-						page = this.selection[0];
-
-						if (!this.stop)
-							core.playBgm(
-								main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-									main.core.ui.music.selection[1]
-								]
-							);
-
-						break;
-					case "suiji":
-						if (this.random < this.randomList.length - 1) {
-							this.random += 1;
-						} else {
-							this.random = 0;
-						}
-						this.selection[0] = this.musicMx.findIndex((v) =>
-							v.includes(this.randomList[this.random])
-						);
-						this.selection[1] = this.musicMx[this.selection[0]].indexOf(
-							main.core.ui.music.randomList[main.core.ui.music.random]
-						);
-
-						page = this.selection[0];
-						if (!this.stop)
-							core.playBgm(
-								main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-									main.core.ui.music.selection[1]
-								]
-							);
-
-						break;
-					}
-					return;
-				}
-				if (inRect(pos, typebox)) {
-					switch (this.type) {
-					case "danqu":
-						this.type = "xunhuan";
-						break;
-					case "xunhuan":
-						this.type = "suiji";
-						break;
-					case "suiji":
-						this.type = "danqu";
-						break;
-					}
-					return;
-				}
-				if (inRect(pos, musicbox)) {
-					const index = Math.floor((py - 100) / 100);
-					if (page !== this.selection[0] || index !== this.selection[1]) {
-						this.selection[0] = page;
-						this.selection[1] = index;
-						this.randomList.indexOf(
-							(v) => v === this.musicMx[this.selection[0]][this.selection[1]]
-						);
-
-						core.playBgm(
-							main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-								main.core.ui.music.selection[1]
-							]
-						);
-						this.stop = false;
-					} else {
-						if (this.stop) {
-							this.stop = !this.stop;
-							core.resumeBgm();
-						} else {
-							this.stop = !this.stop;
-							core.pauseBgm();
-						}
-					}
-					return;
-				}
-
-				if (inRect(pos, volumebox)) {
-					const time = Math.min(Math.max((px - 100) / 600, 0), 1);
-					audio.setVolume(time);
-					core.plugin.audioSystem.soundPlayer.setVolume(time);
-					isvolume = true;
-				}
-			}
-		}
-		mousemove(px, py) {
-			if (isvolume) {
-				if (core.domStyle.isVertical) {
-					const time = Math.min(Math.max((px - 250) / 800, 0), 1);
-					audio.setVolume(time);
-					core.plugin.audioSystem.soundPlayer.setVolume(time);
-				} else {
-					const time = Math.min(Math.max((px - 100) / 600, 0), 1);
-					audio.setVolume(time);
-					core.plugin.audioSystem.soundPlayer.setVolume(time);
-				}
-			}
-		}
-
-		drawUI() {
-			//绘制页面
-			core.clearMap(music);
-			const bgVertical = core.material.images.images["bg_2010.webp"]; //竖屏背景
-			const bg = core.material.images.images["bg_5043.webp"]; //竖屏背景
-			if (core.domStyle.isVertical) {
-				//竖屏
-
-				core.fillRect(ctx, 0, 0, 1248, 2028, "#000000"); //黑色背景
-				ctx.globalAlpha = 0.3; //透明度
-				if (bgVertical)
-					ctx.drawImage(bgVertical, 0, 0, 1280, 1500, 0, 0, 1248, 2028); //绘制半透明背景图片
-				ctx.globalAlpha = 1; //恢复为不透明
-
-				core.setTextAlign(ctx, "center");
-				core.fillBoldText1(
-					ctx,
-					"◀离开",
-					110,
-					100,
-					"#FFFFFF",
-					"#000000",
-					6,
-					core.ui._buildFont(66, true)
-				);
-
-				ctx.strokeStyle = "#FFFFFF";
-				ctx.lineWidth = 3;
-				ctx.beginPath();
-				ctx.moveTo(100, 200);
-				ctx.lineTo(1148, 200);
-
-				ctx.stroke();
-				let posy = 300;
-				const indexList = this.musicMx[page];
-				core.setTextAlign(ctx, "left");
-				for (let i = 0; i < indexList.length; i++) {
-					const text = this.musicname[indexList[i]];
-					core.fillBoldText1(
-						ctx,
-						text,
-						150,
-						posy - 30,
-						page === this.selection[0] && i === this.selection[1] ?
-						"#FFFFFF" :
-						"#444444",
-						"#000000",
-						6,
-						core.ui._buildFont(66, true)
-					);
-					ctx.strokeStyle = "#FFFFFF";
-					ctx.lineWidth = 3;
-					ctx.beginPath();
-					ctx.moveTo(100, posy);
-					ctx.lineTo(1148, posy);
-					ctx.stroke();
-					posy += 100;
-				}
-				ctx.beginPath();
-				ctx.moveTo(100, 1210);
-				ctx.lineTo(1148, 1210);
-				ctx.moveTo(100, 1200);
-				ctx.lineTo(1148, 1200);
-				ctx.stroke();
-
-				core.fillBoldText1(
-					ctx,
-					"上一页",
-					100,
-					1300,
-					page === 0 ? "#444444" : "#FFFFFF",
-					"#000000",
-					6,
-					core.ui._buildFont(66, true)
-				);
-
-				core.fillBoldText1(
-					ctx,
-					page + 1 + "/" + this.musicMx.length,
-					580,
-					1300,
-					"#FFFFFF",
-					"#000000",
-					6,
-					core.ui._buildFont(66, true)
-				);
-				core.fillBoldText1(
-					ctx,
-					"下一页",
-					950,
-					1300,
-					page === this.musicMx.length - 1 ? "#444444" : "#FFFFFF",
-					"#000000",
-					6,
-					core.ui._buildFont(66, true)
-				);
-
-				ctx.strokeStyle = "#ffffff";
-				ctx.lineWidth = 3;
-
-				ctx.fillStyle = "#ffffff";
-				ctx.font = "bold 96px Verdana";
-				ctx.fillText("|", 100, 1697);
-				ctx.fillText("◀", 115, 1700);
-				ctx.beginPath();
-				ctx.arc(505, 1670, 80, 0, 3 * Math.PI);
-				ctx.stroke();
-				ctx.fillText("|", 835, 1697);
-				ctx.fillText("▶", 785, 1700);
-				if (this.stop) {
-					ctx.fillText("▶", 473, 1697);
-				} else {
-					ctx.fillText("||", 453, 1694);
-				}
-
-				const img = core.material.images.images[this.type + ".webp"];
-				if (img) ctx.drawImage(img, 1000, 1555, 200, 200);
-				core.setTextAlign(ctx, "center");
-				ctx.font = "bold 52px Verdana";
-				ctx.fillText("当前歌曲", 625, 1397);
-				ctx.fillText(
-					this.musicname[this.musicMx[this.selection[0]][this.selection[1]]],
-					625,
-					1507
-				);
-
-				ctx.fillStyle = "#ffffff";
-				ctx.font = "bold 48px Verdana";
-				ctx.fillText("音量", 150, 1970);
-				ctx.lineWidth = 3;
-				ctx.beginPath();
-				ctx.moveTo(250, 1950);
-				ctx.lineTo(1050, 1950);
-				ctx.stroke();
-				ctx.strokeStyle = "#ffffff";
-				ctx.lineWidth = 9;
-				ctx.fillStyle = "rgba(255,255,255,0.5)";
-
-				ctx.beginPath();
-				ctx.moveTo(250, 1950);
-				ctx.lineTo(800 * audio.getVolume() + 250, 1950);
-				ctx.stroke();
-				ctx.beginPath();
-				ctx.arc(800 * audio.getVolume() + 250, 1950, 10, 0, 2 * Math.PI);
-				ctx.fill();
-				core.fillBoldText1(
-					ctx,
-					Math.floor(100 * audio.getVolume()),
-					1120,
-					1970,
-					"#FFFFFF",
-					"#000000",
-					6,
-					core.ui._buildFont(56, true)
-				);
-			} else {
-				//横屏
-
-				core.fillRect(ctx, 0, 0, 2028, 1248, "#000000"); //黑色背景
-				ctx.globalAlpha = 0.5; //透明度
-				if (bg) ctx.drawImage(bg, 0, 0, 1280, 720, 0, 0, 2028, 1248); //绘制半透明背景图片
-				ctx.globalAlpha = 1; //恢复为不透明
-				core.setTextAlign(ctx, "center");
-
-				core.fillBoldText1(
-					ctx,
-					"◀离开",
-					110,
-					100,
-					"#FFFFFF",
-					"#000000",
-					6,
-					core.ui._buildFont(66, true)
-				);
-
-				ctx.strokeStyle = "#FFFFFF";
-				ctx.lineWidth = 3;
-				ctx.beginPath();
-				ctx.moveTo(800, 100);
-				ctx.lineTo(800, 1148);
-				ctx.moveTo(900, 100);
-				ctx.lineTo(1900, 100);
-				ctx.stroke();
-				let posy = 200;
-				const indexList = this.musicMx[page];
-				core.setTextAlign(ctx, "left");
-				for (let i = 0; i < indexList.length; i++) {
-					const text = this.musicname[indexList[i]];
-					core.fillBoldText1(
-						ctx,
-						text,
-						950,
-						posy - 30,
-						page === this.selection[0] && i === this.selection[1] ?
-						"#FFFFFF" :
-						"#444444",
-						"#000000",
-						6,
-						core.ui._buildFont(66, true)
-					);
-					ctx.strokeStyle = "#FFFFFF";
-					ctx.lineWidth = 3;
-					ctx.beginPath();
-					ctx.moveTo(900, posy);
-					ctx.lineTo(1900, posy);
-					ctx.stroke();
-					posy += 100;
-				}
-				core.fillBoldText1(
-					ctx,
-					"上一页",
-					1050,
-					1200 - 30,
-					page === 0 ? "#444444" : "#FFFFFF",
-					"#000000",
-					6,
-					core.ui._buildFont(66, true)
-				);
-
-				core.fillBoldText1(
-					ctx,
-					page + 1 + "/" + this.musicMx.length,
-					1350,
-					1200 - 30,
-					"#FFFFFF",
-					"#000000",
-					6,
-					core.ui._buildFont(66, true)
-				);
-				core.fillBoldText1(
-					ctx,
-					"下一页",
-					1550,
-					1200 - 30,
-					page === this.musicMx.length - 1 ? "#444444" : "#FFFFFF",
-					"#000000",
-					6,
-					core.ui._buildFont(66, true)
-				);
-				ctx.strokeStyle = "#ffffff";
-				ctx.lineWidth = 3;
-
-				ctx.fillStyle = "#ffffff";
-				ctx.font = "bold 96px Verdana";
-				ctx.fillText("|", 60, 697);
-				ctx.fillText("◀", 70, 700);
-				ctx.beginPath();
-				ctx.arc(295, 670, 80, 0, 2 * Math.PI);
-				ctx.stroke();
-				if (this.stop) {
-					ctx.fillText("▶", 245, 697);
-				} else {
-					ctx.fillText("||", 245, 694);
-				}
-
-				ctx.fillText("|", 490, 697);
-				ctx.fillText("▶", 450, 700);
-				ctx.font = "bold 48px Verdana";
-				ctx.fillText("音量", 350, 900);
-				ctx.beginPath();
-				ctx.moveTo(100, 1000);
-				ctx.lineTo(700, 1000);
-				ctx.stroke();
-				ctx.strokeStyle = "#ffffff";
-				ctx.lineWidth = 9;
-				ctx.fillStyle = "rgba(255,255,255,0.5)";
-
-				ctx.beginPath();
-				ctx.moveTo(100, 1000);
-				ctx.lineTo(600 * audio.getVolume() + 100, 1000);
-				ctx.stroke();
-				ctx.beginPath();
-				ctx.arc(600 * audio.getVolume() + 100, 1000, 10, 0, 2 * Math.PI);
-				ctx.fill();
-				core.fillBoldText1(
-					ctx,
-					Math.floor(100 * audio.getVolume()),
-					720,
-					1010,
-					"#FFFFFF",
-					"#000000",
-					6,
-					core.ui._buildFont(56, true)
-				);
-				const img = core.material.images.images[this.type + ".webp"];
-				if (img) ctx.drawImage(img, 580, 560, 200, 200);
-				core.setTextAlign(ctx, "center");
-				ctx.font = "bold 48px Verdana";
-				ctx.fillText("当前歌曲", 400, 297);
-				ctx.fillText(
-					this.musicname[this.musicMx[this.selection[0]][this.selection[1]]],
-					400,
-					397
-				);
-			}
-		}
-	}
-	core.ui.music = new musicclass();
-	main.dom.musicMode.onclick = function () {
-		//点击开始页面的CG MODE进入cg回廊
-
-		core.playBgm(
-			main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-				main.core.ui.music.selection[1]
-			]
-		);
-
-		const arr = main.core.ui.music.musicMx.flat(Infinity);
-		main.core.ui.music.randomList = shuffle(arr);
-		main.core.ui.music.random = main.core.ui.music.randomList.indexOf(
-			main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-				main.core.ui.music.selection[1]
-			]
-		);
-		page = 0;
-		music.style.display = "block";
-		let time = 0;
-		core.registerAnimationFrame("music", null, (temptime) => {
-			if (temptime > time + 1000 / 60) {
-				time = temptime;
-				main.core.ui.music.update();
-				const duration =
-					core.plugin.audioSystem.bgmController.player.getRoute(
-						"bgms." +
-						main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-							main.core.ui.music.selection[1]
-						]
-					).duration;
-
-				const currentTime =
-					core.plugin.audioSystem.bgmController.player.getRoute(
-						"bgms." +
-						main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
-							main.core.ui.music.selection[1]
-						]
-					).currentTime;
-				if (currentTime && duration && duration - currentTime < 0.05) {
-					if (core.domStyle.isVertical) {
-						core.ui.music.mousedown(830, 1770);
-					} else {
-						core.ui.music.mousedown(475, 765);
-					}
-				}
-			}
-		});
-	};
-},
     "横屏切换": function () {
     // 在此增加新插件
     this.triggerFullscreen = async function (full) {
@@ -17369,200 +21019,5219 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
       });
     };
   },
-    "帧动画特效(游戏界面)": function () {
+    "intro&loop": function () {
     // 在此增加新插件
-    const animate2 = document.createElement("canvas"); //画布设置
-    animate2.style.zIndex = 71;
-    animate2.id = "animate2";
-    animate2.classList.add("gameCanvas", "anti-aliasing");
-    animate2.style.display = "block";
-    animate2.width = 416;
-    animate2.height = 416;
-    animate2.style.width = core.__PIXELS__ * core.domStyle.scale + "px";
-    animate2.style.height = core.__PIXELS__ * core.domStyle.scale + "px";
-    main.dom.animate2 = animate2;
-    const anctx = animate2.getContext("2d");
+    this.introAndLoop = function (intro, time, loop) {
+      core.playBgm(intro);
+      setTimeout(() => {
+        core.playBgm(loop);
+      }, time * 1000);
+    };
+  },
+    "开局选项悬停": function () {
+	// 在此增加新插件
+	main.dom.playGame.addEventListener("mouseenter", () => {
+		core.dom.playGame.style.backgroundColor = "#808080";
+	});
+	main.dom.playGame.addEventListener("mouseleave", () => {
+		core.dom.playGame.style.backgroundColor = "transparent";
+	});
+	main.dom.playGame.addEventListener("touchmove", () => {
+		core.dom.playGame.style.backgroundColor = "#808080";
+	});
+	main.dom.playGame.addEventListener("touchend", () => {
+		core.dom.playGame.style.backgroundColor = "transparent";
+	});
+	main.dom.playGame.addEventListener("touchcancel", () => {
+		core.dom.playGame.style.backgroundColor = "transparent";
+	});
 
-    main.dom.gameDraw.appendChild(animate2);
+	main.dom.loadGame.addEventListener("mouseenter", () => {
+		core.dom.loadGame.style.backgroundColor = "#808080";
+	});
+	main.dom.loadGame.addEventListener("mouseleave", () => {
+		core.dom.loadGame.style.backgroundColor = "transparent";
+	});
+	main.dom.loadGame.addEventListener("touchmove", () => {
+		core.dom.loadGame.style.backgroundColor = "#808080";
+	});
+	main.dom.loadGame.addEventListener("touchend", () => {
+		core.dom.loadGame.style.backgroundColor = "transparent";
+	});
+	main.dom.loadGame.addEventListener("touchcancel", () => {
+		core.dom.loadGame.style.backgroundColor = "transparent";
+	});
 
-    core.plugin.playing = new Set();
+	main.dom.CGMode.addEventListener("mouseenter", () => {
+		core.dom.CGMode.style.backgroundColor = "#808080";
+	});
+	main.dom.CGMode.addEventListener("mouseleave", () => {
+		core.dom.CGMode.style.backgroundColor = "transparent";
+	});
+	main.dom.CGMode.addEventListener("touchmove", () => {
+		core.dom.CGMode.style.backgroundColor = "#808080";
+	});
+	main.dom.CGMode.addEventListener("touchend", () => {
+		core.dom.CGMode.style.backgroundColor = "transparent";
+	});
+	main.dom.CGMode.addEventListener("touchcancel", () => {
+		core.dom.CGMode.style.backgroundColor = "transparent";
+	});
 
-    this.setanimate = function (
-      name,
-      px,
-      py,
-      width,
-      height,
-      allFarme,
-      imageList,
-      soundList
+	main.dom.musicMode.addEventListener("mouseenter", () => {
+		core.dom.musicMode.style.backgroundColor = "#808080";
+	});
+	main.dom.musicMode.addEventListener("mouseleave", () => {
+		core.dom.musicMode.style.backgroundColor = "transparent";
+	});
+	main.dom.musicMode.addEventListener("touchmove", () => {
+		core.dom.musicMode.style.backgroundColor = "#808080";
+	});
+	main.dom.musicMode.addEventListener("touchend", () => {
+		core.dom.musicMode.style.backgroundColor = "transparent";
+	});
+	main.dom.musicMode.addEventListener("touchcancel", () => {
+		core.dom.musicMode.style.backgroundColor = "transparent";
+	});
+
+	main.dom.replayGame.addEventListener("mouseenter", () => {
+		core.dom.replayGame.style.backgroundColor = "#808080";
+	});
+	main.dom.replayGame.addEventListener("mouseleave", () => {
+		core.dom.replayGame.style.backgroundColor = "transparent";
+	});
+	main.dom.replayGame.addEventListener("touchmove", () => {
+		core.dom.replayGame.style.backgroundColor = "#808080";
+	});
+	main.dom.replayGame.addEventListener("touchend", () => {
+		core.dom.replayGame.style.backgroundColor = "transparent";
+	});
+	main.dom.replayGame.addEventListener("touchcancel", () => {
+		core.dom.replayGame.style.backgroundColor = "transparent";
+	});
+},
+    "天气叠加": function () {
+	//使用方法:使用core.setWeather(天气,等级)来增加天气,使用core.setWeather()来清空天气
+	// 天气叠加功能
+
+	////// 更改天气效果 //////
+	control.prototype.setWeather = function (type, level) {
+		// 非雨雪
+		if (type == null) {
+			Object.keys(core.control.weathers).forEach(function (one) {
+				core.deleteCanvas("weather" + one);
+			});
+			core.animateFrame.weather.type = [];
+			core.animateFrame.weather.nodes = {};
+			core.animateFrame.weather.level = {};
+			core.animateFrame.weather.time = {};
+			return;
+		}
+		if (!core.animateFrame.weather.level || level == null)
+			core.animateFrame.weather.level = {};
+		if (!core.animateFrame.weather.type) core.animateFrame.weather.type = [];
+		level = core.clamp(parseInt(level) || 5, 1, 10);
+		// 当前天气:则忽略
+		if (
+			core.animateFrame.weather.type.includes(type) &&
+			level == core.animateFrame.weather.level[type]
+		)
+			return;
+		if (core.animateFrame.weather.nodes[type]) return;
+		// 计算当前的宽高
+		core.createCanvas(
+			"weather" + type,
+			0,
+			0,
+			core.__PIXELS__,
+			core.__PIXELS__,
+			80
+		);
+		core.animateFrame.weather.type.push(type);
+		core.animateFrame.weather.level[type] = level;
+		this._setWeather_createNodes(type, level);
+	};
+	control.prototype._setWeather_createNodes = function (type, level) {
+		var number =
+			level *
+			parseInt(
+				(20 * core.bigmap.width * core.bigmap.height) /
+				(core.__SIZE__ * core.__SIZE__)
+			);
+		if (!core.animateFrame.weather.nodes[type])
+			core.animateFrame.weather.nodes[type] = [];
+		switch (type) {
+		case "rain":
+			for (var a = 0; a < number; a++) {
+				core.animateFrame.weather.nodes.rain.push({
+					x: Math.random() * core.bigmap.width * 32,
+					y: Math.random() * core.bigmap.height * 32,
+					l: Math.random() * 2.5,
+					xs: -4 + Math.random() * 4 + 2,
+					ys: Math.random() * 10 + 10,
+				});
+			}
+			break;
+		case "snow":
+			for (var a = 0; a < number; a++) {
+				core.animateFrame.weather.nodes.snow.push({
+					x: Math.random() * core.bigmap.width * 32,
+					y: Math.random() * core.bigmap.height * 32,
+					r: Math.random() * 5 + 1,
+					d: Math.random() * Math.min(level, 200),
+				});
+			}
+			break;
+		case "fog":
+			if (core.animateFrame.weather.fog) {
+				core.animateFrame.weather.nodes[type] = [{
+					level: number,
+					x: 0,
+					y: -core.__PIXELS__ / 2,
+					dx: -Math.random() * 1.5,
+					dy: Math.random(),
+					delta: 0.001,
+				}, ];
+			}
+			break;
+		case "cloud":
+			if (core.animateFrame.weather.cloud) {
+				core.animateFrame.weather.nodes[type] = [{
+					level: number,
+					x: 0,
+					y: -core.__PIXELS__ / 2,
+					dx: -Math.random() * 1.5,
+					dy: Math.random(),
+					delta: 0.001,
+				}, ];
+			}
+			break;
+		case "sun":
+			if (core.animateFrame.weather.sun) {
+				// 直接绘制
+				core.clearMap("weather" + type);
+
+				core.drawImage(
+					"weather" + type,
+					core.animateFrame.weather.sun,
+					0,
+					0,
+					core.animateFrame.weather.sun.width,
+					core.animateFrame.weather.sun.height,
+					0,
+					0,
+					core.__PIXELS__,
+					core.__PIXELS__
+				);
+				core.setAlpha("weather" + type, level / 10);
+				core.animateFrame.weather.nodes.sun = [{ level: level, opacity: level / 10, delta: 0.01 }]
+			}
+			break;
+		}
+	};
+	core.registerAnimationFrame("weather", true, function (timestamp) {
+		var weather = core.animateFrame.weather;
+		if (!weather.type) return;
+		weather.type.forEach(function (one) {
+			if (
+				timestamp - weather.time[one] <= 30 ||
+				!core.dymCanvas["weather" + one]
+			)
+				return;
+			core.control["_animationFrame_weather_" + one]();
+			weather.time[one] = timestamp;
+		});
+	});
+	// 晴
+	control.prototype._animationFrame_weather_sun = function () {
+
+		var node = core.animateFrame.weather.nodes.sun[0]
+		var opacity = node.opacity + node.delta;
+
+		if (opacity > node.level / 11 + 0.3 || opacity < node.level / 11 - 0.3)
+			node.delta = -node.delta;
+		node.opacity = opacity;
+		core.setOpacity("weathersun", core.clamp(opacity, 0, 1));
+
+	};
+	// 雨
+	control.prototype._animationFrame_weather_rain = function () {
+		var ctx = core.dymCanvas.weatherrain,
+			ox = core.bigmap.offsetX,
+			oy = core.bigmap.offsetY;
+		core.clearMap("weatherrain");
+		ctx.strokeStyle = "rgba(174,194,224,0.8)";
+		ctx.lineWidth = 1;
+		ctx.lineCap = "round";
+		core.animateFrame.weather.nodes.rain.forEach(function (p) {
+			ctx.beginPath();
+			ctx.moveTo(p.x - ox, p.y - oy);
+			ctx.lineTo(p.x + p.l * p.xs - ox, p.y + p.l * p.ys - oy);
+			ctx.stroke();
+			p.x += p.xs;
+			p.y += p.ys;
+			if (p.x > core.bigmap.width * 32 || p.y > core.bigmap.height * 32) {
+				p.x = Math.random() * core.bigmap.width * 32;
+				p.y = -10;
+			}
+		});
+		ctx.fill();
+	};
+	// 雪
+	control.prototype._animationFrame_weather_snow = function () {
+		var ctx = core.dymCanvas.weathersnow,
+			ox = core.bigmap.offsetX,
+			oy = core.bigmap.offsetY;
+		core.clearMap("weathersnow");
+		ctx.fillStyle = "rgba(255, 255, 255, 0.8)";
+		ctx.beginPath();
+		if (!core.animateFrame.weather.data) core.animateFrame.weather.data = {};
+		core.animateFrame.weather.data.snow =
+			core.animateFrame.weather.data.snow || 0;
+		core.animateFrame.weather.data.snow += 0.01;
+		var angle = core.animateFrame.weather.data.snow;
+		core.animateFrame.weather.nodes.snow.forEach(function (p) {
+			ctx.moveTo(p.x - ox, p.y - oy);
+			ctx.arc(p.x - ox, p.y - oy, p.r, 0, Math.PI * 2, true);
+			// update
+			p.x += Math.sin(angle) * core.animateFrame.weather.level.snow;
+			p.y += Math.cos(angle + p.d) + 1 + p.r / 2;
+			if (
+				p.x > core.bigmap.width * 32 + 5 ||
+				p.x < -5 ||
+				p.y > core.bigmap.height * 32
+			) {
+				if (Math.random() > 1 / 3) {
+					p.x = Math.random() * core.bigmap.width * 32;
+					p.y = -10;
+				} else {
+					if (Math.sin(angle) > 0) p.x = -5;
+					else p.x = core.bigmap.width * 32 + 5;
+					p.y = Math.random() * core.bigmap.height * 32;
+				}
+			}
+		});
+		ctx.fill();
+	};
+	// 图片天气
+	control.prototype.__animateFrame_weather_image = function (image, type) {
+		if (!image) return;
+		var node = core.animateFrame.weather.nodes[type][0];
+		core.setAlpha("weather" + type, node.level / 500);
+		var wind = 1.5;
+		var width = image.width,
+			height = image.height;
+		node.x += node.dx * wind;
+		node.y += (2 * node.dy - 1) * wind;
+		if (node.x + 3 * width <= core.__PIXELS__) {
+			node.x += 4 * width;
+			while (node.x > 0) node.x -= width;
+		}
+		node.dy += node.delta;
+		if (node.dy >= 1) {
+			node.delta = -0.001;
+		} else if (node.dy <= 0) {
+			node.delta = 0.001;
+		}
+		if (node.y + 3 * height <= core.__PIXELS__) {
+			node.y += 4 * height;
+			while (node.y > 0) node.y -= height;
+		} else if (node.y >= 0) {
+			node.y -= height;
+		}
+		for (var i = 0; i < 3; ++i) {
+			for (var j = 0; j < 3; ++j) {
+				if (
+					node.x + (i + 1) * width <= 0 ||
+					node.x + i * width >= core.__PIXELS__ ||
+					node.y + (j + 1) * height <= 0 ||
+					node.y + j * height >= core.__PIXELS__
+				)
+					continue;
+				core.drawImage(
+					"weather" + type,
+					image,
+					node.x + i * width,
+					node.y + j * height
+				);
+			}
+		}
+		core.setAlpha("weather" + type, 1);
+	};
+	// 雾
+	control.prototype._animationFrame_weather_fog = function () {
+		core.clearMap("weatherfog");
+		this.__animateFrame_weather_image(core.animateFrame.weather.fog, "fog");
+	};
+	// 云
+	control.prototype._animationFrame_weather_cloud = function () {
+		core.clearMap("weathercloud");
+		this.__animateFrame_weather_image(
+			core.animateFrame.weather.cloud,
+			"cloud"
+		);
+	}
+
+},
+    "回合战斗动画": function () {
+	// 在此增加新插件
+	const animateAttack = document.createElement("canvas"); //画布设置
+	animateAttack.style.zIndex = 80;
+	animateAttack.id = "animateAttack";
+	animateAttack.classList.add("gameCanvas", "anti-aliasing");
+	animateAttack.style.display = "block";
+	animateAttack.width = 416;
+	animateAttack.height = 416;
+	animateAttack.style.width = core.__PIXELS__ * core.domStyle.scale + "px";
+	animateAttack.style.height = core.__PIXELS__ * core.domStyle.scale + "px";
+	main.dom.animateAttack = animateAttack;
+	const ctx = animateAttack.getContext("2d");
+	const changeY = -30
+	let easy = false;
+	const { imagelighter } = core.plugin.utils;
+	main.dom.gameDraw.appendChild(animateAttack);
+	const { lcm, gcd } = core.plugin.utils;
+	const animate2 = document.createElement("canvas"); //画布设置
+	animate2.style.zIndex = 91;
+	animate2.id = "animate2";
+	animate2.classList.add("gameCanvas", "anti-aliasing");
+	animate2.style.display = "block";
+	animate2.width = 416;
+	animate2.height = 416;
+	animate2.style.width = core.__PIXELS__ * core.domStyle.scale + "px";
+	animate2.style.height = core.__PIXELS__ * core.domStyle.scale + "px";
+	main.dom.animate2 = animate2;
+	const anctx = animate2.getContext("2d");
+
+	main.dom.gameDraw.appendChild(animate2);
+	let a = []
+
+	function drawAnimate(name, centerX, centerY) {
+		name = core.getMappedName(name);
+
+		// 正在播放录像:不显示动画
+		if (core.isReplaying() || !core.material.animates[name] || centerX == null || centerY == null) {
+			return -1;
+		}
+
+		// 开始绘制
+		var animate = core.material.animates[name];
+		animate.se = animate.se || {};
+		if (typeof animate.se == 'string') animate.se = { 1: animate.se };
+
+		var id = setTimeout(null);
+		a.push({
+			"name": name,
+			"id": id,
+			"animate": animate,
+			"centerX": centerX,
+			"centerY": centerY,
+			"start": 0,
+			"pause": false,
+			"pausetime": 0,
+			"index": 0,
+		});
+
+		return id;
+	}
+
+	function animationFrame(callback1) {
+		let time = 0
+		core.registerAnimationFrame("animate2", true, function (timestamp) {
+			let frametime = timestamp - time
+			time = timestamp;
+			if (
+				!a ||
+				a.length == 0
+			)
+				return;
+			core.clearMap(anctx);
+			// 更新帧
+
+			for (var i = 0; i < a.length; i++) {
+				var obj = a[i];
+				if (obj.start === 0) obj.start = time
+				obj.index = Math.floor((time - obj.start) / (1000 / 60))
+				if (obj.index >= obj.animate.frames.length) {
+					(function (callback) {
+						setTimeout(function () {
+							if (callback) callback();
+						});
+					})(obj.callback);
+				}
+			}
+			a = a.filter(function (obj) {
+				return obj.index < obj.animate.frames.length;
+			});
+
+			if (a.length === 0) {
+				core.clearMap(anctx);
+				core.unregisterAnimationFrame("animate2")
+				callback1()
+			}
+			a.forEach(function (obj) {
+				if (obj.hero) {
+					core.maps._drawAnimateFrame(
+						anctx,
+						obj.animate,
+						core.status.heroCenter.px,
+						core.status.heroCenter.py,
+						obj.index
+					);
+				} else {
+					core.maps._drawAnimateFrame(
+						anctx,
+						obj.animate,
+						obj.centerX,
+						obj.centerY,
+						obj.index
+					);
+				}
+			});
+			core.animateFrame.animateTime = timestamp;
+		});
+	}
+
+	function animateonAttack(name, onenemy, callback) {
+		if (onenemy) {
+			drawAnimate(name, 290, 180 + changeY);
+		} else {
+			drawAnimate(name, 130, 180 + changeY);
+		}
+	}
+
+	this.attackAnimate = function (
+		enemyId,
+		heroInfo,
+		enemyInfo,
+		equipInfo,
+		oneTurn,
+		heroDiffList,
+		enemyDiffList,
+		heroanimateList,
+		enemyanimateList
+	) {
+		//参数分别为怪物id、真实属性,战斗信息,特殊装备(如火焰风衣)属性特殊装备属性为以元组{equipId,oneDamage,speed,now:0}构成的数组(列出每个需要计算的特殊装备,没有则为空数组或不填)
+		core.lockControl();
+		core.clearMap(ctx);
+		core.status.event.id = "attackAnimate";
+		let turn = 0;
+		enemyInfo.id = enemyId;
+		enemyInfo.cls = core.getClsFromId(enemyId);
+		enemyInfo.name = core.material.enemys[enemyId].name;
+		let max = heroInfo.speed
+		if (enemyInfo.speed > max) max = enemyInfo.speed
+		equipInfo.forEach(v => { if (v.speed > max) max = v.speed })
+		let i = 1
+		while (oneTurn * i / max < 15) {
+			i++
+		}
+		if (heroInfo.onAttack) heroInfo.now *= i
+		if (enemyInfo.onAttack) enemyInfo.now *= i
+		equipInfo.forEach(v => { if (v.onAttack) v.now *= i })
+		oneTurn *= i
+		let time = 0,
+			farme = 0;
+		return new Promise((res) => {
+			core.plugin.battle_onclick = function (x, y, px, py) {
+				const makeBox = ([x, y], [w, h]) => {
+					return [
+						[x, y],
+						[x + w, y + h],
+					];
+				};
+				const inRect = ([x, y], [
+					[sx, sy],
+					[dx, dy]
+				]) => {
+					return sx <= x && x <= dx && sy <= y && y <= dy;
+				};
+				const pos = [px, py];
+				const easybox = makeBox([90, 232 + changeY], [80, 22]),
+					easyspeedbox = makeBox([290, 232 + changeY], [40, 22]),
+					uneasybox = makeBox([265, 330 + changeY], [65, 20]),
+					uneasyspeedbox = makeBox([290, 350 + changeY], [40, 20]),
+					uneasyClosebox = makeBox([265, 370 + changeY], [65, 20]),
+					easyClosebox = makeBox([290, 255 + changeY], [40, 20]);
+				if (inRect(pos, easybox) && easy) {
+					easy = false;
+				} else if (inRect(pos, uneasybox) && !easy) {
+					easy = true;
+				} else if (
+					(inRect(pos, easyspeedbox) && easy) ||
+					(inRect(pos, uneasyspeedbox) && !easy)
+				) {
+					flags.qukly = !flags.qukly
+
+				} else if ((inRect(pos, easyClosebox) && easy) ||
+					(inRect(pos, uneasyClosebox) && !easy)
+				) {
+					core.status.event.id = "";
+					core.unregisterAnimationFrame("attackAnimate");
+					core.clearMap(ctx);
+					core.closePanel();
+					res();
+				}
+			};
+			async function drawAttackAnimate(
+				heroInfo,
+				oneTurn,
+				enemyInfo,
+				equipInfo,
+				farme,
+				heroDiffList,
+				enemyDiffList,
+				heroanimateList,
+				enemyanimateList
+			) {
+				core.lockControl();
+				core.status.event.id = "battle";
+
+				let attack = false;
+				if (heroInfo.isAttack) attack = true;
+				if (enemyInfo.isAttack) attack = true;
+				equipInfo.forEach(function (v) {
+					if (v.isAttack) attack = true;
+				});
+				let onAttack = false;
+				if (heroInfo.onAttack) onAttack = true;
+				if (enemyInfo.onAttack) onAttack = true;
+				equipInfo.forEach(function (v) {
+					if (v.onAttack) onAttack = true;
+				});
+				core.clearMap(ctx);
+				let animate = Math.floor(farme / 15);
+
+				if (flags.qukly) {
+					while (true) {
+						let goattack = false
+						equipInfo.forEach(v => {
+							if (v.now >= oneTurn) goattack = true
+
+						});
+						if (enemyInfo.now >= oneTurn) goattack = true
+						if (heroInfo.now >= oneTurn) goattack = true
+
+						if (goattack) break;
+						enemyInfo.now += enemyInfo.speed
+						heroInfo.now += heroInfo.speed
+						equipInfo.forEach(function (v) {
+							v.now += v.speed
+
+						});
+
+					}
+				}
+				if (easy) {
+					core.fillRect(ctx, 64, 52, 288, 212, "rgba(0,0,0,0.5)");
+					core.strokeRect(ctx, 64, 52, 288, 212, "rgba(255,255,255,0.5)", 4);
+					core.setTextAlign(ctx, "center");
+					core.fillBoldText(
+						ctx,
+						hero.name,
+						127,
+						148 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Verdana"
+					);
+					core.setTextAlign(ctx, "left");
+					core.drawIcon(ctx, "hp", 70, 210 + changeY, 16, 16);
+					core.fillBoldText(
+						ctx,
+						"生命  " + core.formatBigNumber(heroInfo.hp, true),
+						90,
+						225 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+
+					core.fillBoldText(
+						ctx,
+						"详细模式",
+						90,
+						250 + changeY,
+						"#FFFF60",
+						"#000000",
+						"bold 18px Verdana"
+					);
+
+					core.strokeRect(ctx, 112, 159 + changeY, 32, 48, "rgba(255,255,255,1)", 1);
+					let img =
+						attack && heroDiffList[turn].hp < 0 ?
+						imagelighter(core.material.images.images["hero.webp"]) :
+						attack && heroDiffList[turn].hp > 0 ?
+						imagelighter(
+							core.material.images.images["hero.webp"],
+							"rgba(0, 255, 0, 0.5)"
+						) :
+						core.material.images.images["hero.webp"];
+					core.drawImage(
+						ctx,
+						img,
+						32 * (animate % 4),
+						0,
+						32,
+						48,
+						112,
+						159 + changeY,
+						32,
+						48
+					);
+
+					core.setTextAlign(ctx, "center");
+					core.fillBoldText(
+						ctx,
+						enemyInfo.name,
+						289,
+						148 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Verdana"
+					);
+
+					core.setTextAlign(ctx, "right");
+					if (enemyInfo.cls === "enemys") {
+						core.strokeRect(ctx, 272, 175 + changeY, 32, 32, "rgba(255,255,255,1)", 1);
+						let img =
+							attack && enemyDiffList[turn].hp < 0 ?
+							imagelighter(core.getBlockInfo(enemyInfo.id).image) :
+							attack && enemyDiffList[turn].hp > 0 ?
+							imagelighter(
+								core.getBlockInfo(enemyInfo.id).image,
+								"rgba(0, 255, 0, 0.5)"
+							) :
+							core.getBlockInfo(enemyInfo.id).image;
+						core.drawImage(
+							ctx,
+							img,
+							32 * (animate % 2),
+							core.getBlockInfo(enemyInfo.id).posY * 32,
+							32,
+							32,
+							272,
+							175 + changeY,
+							32,
+							32
+						);
+					} else {
+						core.strokeRect(ctx, 272, 159 + changeY, 32, 48, "rgba(255,255,255,1)", 1);
+						let img =
+							attack && enemyDiffList[turn].hp < 0 ?
+							imagelighter(core.getBlockInfo(enemyInfo.id).image) :
+							attack && enemyDiffList[turn].hp > 0 ?
+							imagelighter(
+								core.getBlockInfo(enemyInfo.id).image,
+								"rgba(0, 255, 0, 0.5)"
+							) :
+							core.getBlockInfo(enemyInfo.id).image;
+						core.drawImage(
+							ctx,
+							img,
+							32 * (animate % 4),
+							core.getBlockInfo(enemyInfo.id).posY * 48,
+							32,
+							48,
+							272,
+							159 + changeY,
+							32,
+							48
+						);
+					}
+					core.drawIcon(ctx, "hp", 330, 210 + changeY, 16, 16);
+
+					core.fillBoldText(
+						ctx,
+						core.formatBigNumber(enemyInfo.hp, true) + "  生命",
+						330,
+						225 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Verdana"
+					);
+					core.fillBoldText(
+						ctx,
+						flags.qukly ? "正常" : "极速",
+						330,
+						250 + changeY,
+						"#FFFF60",
+						"#000000",
+						"bold 18px Verdana"
+					);
+					core.fillBoldText(
+						ctx,
+						"跳过",
+						330,
+						273 + changeY,
+						"#FFFF60",
+						"#000000",
+						"bold 18px Verdana"
+					);
+					core.fillBoldText(
+						ctx,
+						"V",
+						219,
+						183 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 48px pala"
+					);
+					core.fillBoldText(
+						ctx,
+						"s",
+						231,
+						183 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 36px pala"
+					);
+
+					if (!attack && !onAttack && !flags.qukly) enemyInfo.now += enemyInfo.speed;
+					let enemynow = Math.min(100 + (enemyInfo.now / oneTurn) * 215, 315);
+					ctx.fillStyle = "#FFFFFF";
+					ctx.beginPath();
+					ctx.moveTo(enemynow, 120 + changeY);
+					ctx.lineTo(enemynow + 5, 110 + changeY);
+					ctx.lineTo(enemynow - 5, 110 + changeY);
+					ctx.closePath();
+					ctx.fill();
+					core.drawIcon(ctx, 'T397', enemynow - 16, 84 + changeY, 32, 32)
+
+					core.drawLine(ctx, 100, 125 + changeY, 315, 125 + changeY, "#FFFFFF", 5);
+					equipInfo.forEach(function (v) {
+						if (!attack && !onAttack) v.now += v.speed;
+						let vnow = Math.min(100 + (v.now / oneTurn) * 215, 315);
+						ctx.beginPath();
+						ctx.moveTo(vnow, 120 + changeY);
+						ctx.lineTo(vnow + 5, 110 + changeY);
+						ctx.lineTo(vnow - 5, 110 + changeY);
+						ctx.closePath();
+
+						ctx.fill();
+
+						core.drawIcon(ctx, v.id, vnow - 16, 84 + changeY, 32, 32);
+					});
+					if (!attack && !onAttack && !flags.qukly) heroInfo.now += hero.speed;
+					let heronow = Math.min(100 + (heroInfo.now / oneTurn) * 215, 315);
+					ctx.beginPath();
+					ctx.moveTo(heronow, 120);
+					ctx.lineTo(heronow + 5, 110);
+					ctx.lineTo(heronow - 5, 110);
+					ctx.closePath();
+
+					ctx.fill();
+					core.drawIcon(ctx, 'T399', heronow - 16 - 4, 84 - 4 + changeY, 40, 40)
+
+				} else {
+					core.fillRect(ctx, 64, 52, 288, 320, "rgba(0,0,0,0.5)");
+					core.strokeRect(ctx, 64, 52, 288, 320, "rgba(255,255,255,0.5)", 4);
+					core.setTextAlign(ctx, "center");
+					core.fillBoldText(
+						ctx,
+						hero.name,
+						127,
+						148 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Verdana"
+					);
+					core.setTextAlign(ctx, "left");
+					core.drawIcon(ctx, "hp", 70, 210 + changeY, 16, 16);
+					core.drawIcon(ctx, "atk", 70, 230 + changeY, 16, 16);
+					core.drawIcon(ctx, "def", 70, 250 + changeY, 16, 16);
+					core.drawIcon(ctx, "I374", 70, 270 + changeY, 16, 16);
+					core.drawIcon(ctx, "I375", 70, 290 + changeY, 16, 16);
+					core.drawIcon(ctx, "mdef", 70, 310 + changeY, 16, 16);
+					core.drawIcon(ctx, "amulet", 70, 330 + changeY, 16, 16);
+					core.drawIcon(ctx, "jumpShoes", 70, 350 + changeY, 16, 16);
+					core.fillBoldText(
+						ctx,
+						"生命  " + core.formatBigNumber(heroInfo.hp, true),
+						90,
+						225 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+
+					core.fillBoldText(
+						ctx,
+						"攻击  " + core.formatBigNumber(heroInfo.atk),
+						90,
+						245 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+					core.fillBoldText(
+						ctx,
+						"防御  " + core.formatBigNumber(heroInfo.def),
+						90,
+						265 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+					core.fillBoldText(
+						ctx,
+						"法强  " + core.formatBigNumber(heroInfo.spell),
+						90,
+						285 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+					core.fillBoldText(
+						ctx,
+						"法攻  " + core.formatBigNumber(heroInfo.matk),
+						90,
+						305 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+					core.fillBoldText(
+						ctx,
+						"护盾  " + core.formatBigNumber(heroInfo.mhp),
+						90,
+						325 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+					core.fillBoldText(
+						ctx,
+						"法抗  " + heroInfo.mdef + "%",
+						90,
+						345 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+					core.fillBoldText(
+						ctx,
+						"速度  " + core.formatBigNumber(heroInfo.speed),
+						90,
+						365 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+
+					core.strokeRect(ctx, 112, 159 + changeY, 32, 48, "rgba(255,255,255,1)", 1);
+					let img =
+						attack && heroDiffList[turn].hp < 0 ?
+						imagelighter(core.material.images.images["hero.webp"]) :
+						attack && heroDiffList[turn].hp > 0 ?
+						imagelighter(
+							core.material.images.images["hero.webp"],
+							"rgba(0, 255, 0, 0.5)"
+						) :
+						core.material.images.images["hero.webp"];
+					core.drawImage(
+						ctx,
+						img,
+						32 * (animate % 4),
+						0,
+						32,
+						48,
+						112,
+						159 + changeY,
+						32,
+						48
+					);
+
+					core.setTextAlign(ctx, "center");
+					core.fillBoldText(
+						ctx,
+						enemyInfo.name,
+						289,
+						148 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Verdana"
+					);
+
+					core.setTextAlign(ctx, "right");
+					if (enemyInfo.cls === "enemys") {
+						core.strokeRect(ctx, 272, 175 + changeY, 32, 32, "rgba(255,255,255,1)", 1);
+						let img =
+							attack && enemyDiffList[turn].hp < 0 ?
+							imagelighter(core.getBlockInfo(enemyInfo.id).image) :
+							attack && enemyDiffList[turn].hp > 0 ?
+							imagelighter(
+								core.getBlockInfo(enemyInfo.id).image,
+								"rgba(0, 255, 0, 0.5)"
+							) :
+							core.getBlockInfo(enemyInfo.id).image;
+						core.drawImage(
+							ctx,
+							img,
+							32 * (animate % 2),
+							core.getBlockInfo(enemyInfo.id).posY * 32,
+							32,
+							32,
+							272,
+							175 + changeY,
+							32,
+							32
+						);
+					} else {
+						core.strokeRect(ctx, 272, 159 + changeY, 32, 48, "rgba(255,255,255,1)", 1);
+						let img =
+							attack && enemyDiffList[turn].hp < 0 ?
+							imagelighter(core.getBlockInfo(enemyInfo.id).image) :
+							attack && enemyDiffList[turn].hp > 0 ?
+							imagelighter(
+								core.getBlockInfo(enemyInfo.id).image,
+								"rgba(0, 255, 0, 0.5)"
+							) :
+							core.getBlockInfo(enemyInfo.id).image;
+						core.drawImage(
+							ctx,
+							img,
+							32 * (animate % 4),
+							core.getBlockInfo(enemyInfo.id).posY * 48,
+							32,
+							48,
+							272,
+							159 + changeY,
+							32,
+							48
+						);
+					}
+					core.drawIcon(ctx, "hp", 330, 210 + changeY, 16, 16);
+					core.drawIcon(ctx, "atk", 330, 230 + changeY, 16, 16);
+					core.drawIcon(ctx, "def", 330, 250 + changeY, 16, 16);
+					core.drawIcon(ctx, "I374", 330, 270 + changeY, 16, 16);
+					core.drawIcon(ctx, "amulet", 330, 290 + changeY, 16, 16);
+					core.drawIcon(ctx, "jumpShoes", 330, 310 + changeY, 16, 16);
+					core.fillBoldText(
+						ctx,
+						core.formatBigNumber(enemyInfo.hp, true) + "  生命",
+						330,
+						225 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+					core.fillBoldText(
+						ctx,
+						core.formatBigNumber(enemyInfo.atk) + "  攻击",
+						330,
+						245 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+					core.fillBoldText(
+						ctx,
+						core.formatBigNumber(enemyInfo.def) + "  防御",
+						330,
+						265 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+					core.fillBoldText(
+						ctx,
+						(enemyInfo.spell ?? 0) + "  法强",
+						330,
+						285 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+					core.fillBoldText(
+						ctx,
+						(enemyInfo.mdef ?? 0) * 100 + "%  法抗",
+						330,
+						305 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+					core.fillBoldText(
+						ctx,
+						core.formatBigNumber(enemyInfo.speed) + "  速度",
+						330,
+						325 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 14px Arial"
+					);
+					core.fillBoldText(
+						ctx,
+						"简易模式",
+						330,
+						345 + changeY,
+						"#FFFF60",
+						"#000000",
+						"bold 16px Verdana"
+					);
+					core.fillBoldText(
+						ctx,
+						flags.qukly ? "正常" : "极速",
+						330,
+						365 + changeY,
+						"#FFFF60",
+						"#000000",
+						"bold 16px Verdana"
+					);
+					core.fillBoldText(
+						ctx,
+						"跳过",
+						330,
+						385 + changeY,
+						"#FFFF60",
+						"#000000",
+						"bold 16px Verdana"
+					);
+					core.fillBoldText(
+						ctx,
+						"V",
+						219,
+						183 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 48px pala"
+					);
+					core.fillBoldText(
+						ctx,
+						"s",
+						231,
+						183 + changeY,
+						"#FFFFFF",
+						"#000000",
+						"bold 36px pala"
+					);
+
+					if (!attack && !onAttack & !flags.qukly) enemyInfo.now += enemyInfo.speed;
+					let enemynow = Math.min(100 + (enemyInfo.now / oneTurn) * 215, 315);
+					ctx.fillStyle = "#FFFFFF";
+					ctx.beginPath();
+					ctx.moveTo(enemynow, 120 + changeY);
+					ctx.lineTo(enemynow + 5, 110 + changeY);
+					ctx.lineTo(enemynow - 5, 110 + changeY);
+					ctx.closePath();
+					ctx.fill();
+					core.drawIcon(ctx, 'T397', enemynow - 16, 84 + changeY, 32, 32)
+
+					core.drawLine(ctx, 100, 125 + changeY, 315, 125 + changeY, "#FFFFFF", 5);
+					equipInfo.forEach(function (v) {
+						if (!attack && !onAttack) v.now += v.speed;
+						let vnow = Math.min(100 + (v.now / oneTurn) * 215, 315);
+						ctx.beginPath();
+						ctx.moveTo(vnow, 120 + changeY);
+						ctx.lineTo(vnow + 5, 110 + changeY);
+						ctx.lineTo(vnow - 5, 110 + changeY);
+						ctx.closePath();
+
+						ctx.fill();
+
+						core.drawIcon(ctx, v.id, vnow - 16, 84 + changeY, 32, 32);
+					});
+					if (!attack && !onAttack && !flags.qukly) heroInfo.now += hero.speed;
+					let heronow = Math.min(100 + (heroInfo.now / oneTurn) * 215, 315);
+					ctx.beginPath();
+					ctx.moveTo(heronow, 120 + changeY);
+					ctx.lineTo(heronow + 5, 110 + changeY);
+					ctx.lineTo(heronow - 5, 110 + changeY);
+					ctx.closePath();
+
+					ctx.fill();
+					core.drawIcon(ctx, 'T399', heronow - 16 - 4, 84 - 4 + changeY, 40, 40)
+				}
+				let nowattacking = false;
+				if (heroInfo.now >= oneTurn && !heroInfo.isAttack) {
+					heroInfo.onAttack = false;
+					heroInfo.isAttack = true;
+					nowattacking = true;
+				}
+				if (enemyInfo.now >= oneTurn && !enemyInfo.isAttack) {
+					enemyInfo.onAttack = false;
+					enemyInfo.isAttack = true;
+					nowattacking = true;
+				}
+				const equipanimate = [];
+				equipInfo.forEach((v) => {
+					if (v.now >= oneTurn && !v.isAttack) {
+						v.isAttack = true;
+						v.onAttack = false;
+						nowattacking = true;
+						equipanimate.push(v);
+					}
+				});
+				if (!attack && nowattacking) {
+					let herodamage = enemyDiffList[turn].hp;
+					if (herodamage > 0) herodamage = "+" + herodamage;
+					let text = herodamage === 0 ? "抵抗" : herodamage;
+
+					Dove.MorePerform.ShowDamagePop.PopDamage(
+						ctx, // 默认画布名称
+						270, // 英雄位置 x
+						160 + changeY, // 英雄位置 y
+						text, // 伤害值
+						18, // 默认字体大小
+						"Arial", //默认字体
+						typeof text === "string" && text.startsWith("+") ?
+						"#22FF44" :
+						typeof text === "string" ?
+						"#FFFFFF" :
+						null, // 默认颜色
+						text === "抵抗" ? "#000000" : null, // 默认描边颜色
+						0, // 默认水平速度
+						-1, // 默认垂直速度
+						0, // 默认重力
+						90 // 默认显示时长(帧数)
+					);
+					for (const v in enemyDiffList[turn]) {
+						enemyInfo[v] += enemyDiffList[turn][v];
+					}
+					enemyanimateList[turn].forEach((v) => animateonAttack(v, true));
+					let enemydamage = heroDiffList[turn].hp;
+					if (enemydamage > 0) enemydamage = "+" + enemydamage;
+					text = enemydamage === 0 ? "抵抗" : enemydamage;
+					Dove.MorePerform.ShowDamagePop.PopDamage(
+						ctx, // 默认画布名称
+						110, // 英雄位置 x
+						160 + changeY, // 英雄位置 y
+						text, // 伤害值
+						18, // 默认字体大小
+						"Arial", //默认字体
+						typeof text === "string" && text.startsWith("+") ?
+						"#22FF44" :
+						typeof text === "string" ?
+						"#FFFFFF" :
+						null, // 默认颜色
+						text === "抵抗" ? "#000000" : null, // 默认描边颜色
+						0, // 默认水平速度
+						-1, // 默认垂直速度
+						0, // 默认重力
+						90 // 默认显示时长(帧数)
+					);
+					for (const v in heroDiffList[turn]) {
+						heroInfo[v] += heroDiffList[turn][v];
+					}
+					heroanimateList[turn].forEach((v) => animateonAttack(v, false));
+
+					if (enemyDiffList[turn] < 0) enemyInfo.inAttack = true;
+					if (heroDiffList[turn] < 0) heroInfo.inAttack = true;
+					if (heroInfo.hp < 0) heroInfo.hp = 0;
+					if (enemyInfo.hp < 0) enemyInfo.hp = 0;
+					await Promise.all([
+
+						await new Promise((resolve) => animationFrame(resolve)),
+						new Promise((resolve) => {
+							if (heroInfo.isAttack) {
+								heroInfo.now = 0;
+								heroInfo.isAttack = false;
+							}
+							resolve();
+						}),
+						new Promise((resolve) => {
+							if (enemyInfo.isAttack) {
+								enemyInfo.now = 0;
+								enemyInfo.isAttack = false;
+							}
+							resolve();
+						}),
+						new Promise((resolve) => {
+							if (equipanimate.length > 0) {
+								equipanimate.forEach((v) => {
+									v.now = 0;
+									v.isAttack = false;
+								});
+							}
+							resolve();
+						}),
+						new Promise((resolve) => {
+							turn++;
+							resolve();
+						}),
+					]);
+
+					if (heroInfo.hp <= 0 || enemyInfo.hp <= 0) {
+						core.status.event.id = "";
+						core.unregisterAnimationFrame("attackAnimate");
+						core.clearMap(ctx);
+						core.closePanel();
+						res();
+					}
+				}
+			}
+
+			core.registerAnimationFrame("attackAnimate", true, (temptime) => {
+				if (!time) time = temptime
+				farme = Math.floor((temptime - time) / (1000 / 60))
+				time = temptime;
+				drawAttackAnimate(
+					heroInfo,
+					oneTurn,
+					enemyInfo,
+					equipInfo,
+					farme,
+					heroDiffList,
+					enemyDiffList,
+					heroanimateList,
+					enemyanimateList
+				);
+
+
+			});
+		});
+	};
+},
+    "剧情内容": function () {
+	// 每项为一个数组,第一项是名字,第二项是对话内容,第三项为音频文件名(没有则不需要第三项)
+	// 回放只会在同一个this下回放,进入剧情前请以事件块声明进入哪个剧情数组
+	this.chapter000 = [
+		["", "这些天,街道不曾下雨。"],
+		["", "所以,那浸湿地面的,定是那些女孩们流落的鲜血无疑。"],
+		["", "我蹲在充斥着铁锈味般恶臭的小巷中,悠闲地如是想着。"],
+		["", "扑哧。"],
+		["", "耳旁再次响起象征着某个女孩子死去的声音。"],
+		["", "再一次——"],
+		["", "再一次。"],
+		["", "女子们被肢解成单纯的肉块。"],
+		["", "我任由流下的血浸满全身,屏住自己的呼吸。"],
+		["", "祈求自己能拥有从猎人手中逃脱的幸运。"],
+		["", "扑哧。"],
+		["", "直到刚才,我们还坐在去往娼馆的马车的路上。"],
+		["", "而在这之中的某些人,已经不在这个世上了。"],
+		["", "不,应该把“某些”换成“几乎所有”才更为恰当吧。"],
+		["", "恐怕,不久之后我也会变成小巷中血腥的装饰品。"],
+		["", "我是为了得到这种死法,才辛苦苟活至今的吗?"],
+		["", "来个人告诉我啊——"],
+		["", "谁都好。"],
+		["", "来人啊!!"],
+		["少女", "「呃······!?」", "aiy010000010.opus"], //小动物01
+		["", "漆黑的物体充斥了我的整个视野"],
+		["", "我很快意识到,那是只很大的脚。"],
+		["", "必须要出声求救。"],
+		["", "可是,耳中却只能听到自己的牙关不停交战的声音。"],
+		["", "我是如此的无助。"],
+		["", "逃跑也好,道歉也罢。"],
+		["", "就连抬头看一眼将要杀掉我的人的面孔都做不到。"],
+		["少女", "「······被杀」", "aiy010000020.opus"], //小动物02
+		["", "会被杀。"],
+		["", "会被杀!!"],
+		["", "来自内心深处的冰冷预感,渐渐地在体内蔓延开来。"],
+		["少女", "「不,不要······」", "aiy010000030.opus"], //小动物03
+	]
+	this.chapter001 = [
+		["", "浮游都市,《诺瓦斯·艾蒂尔》。"],
+		["", "《特别受灾地区》——"],
+		["", "通称,《牢狱》"],
+		["", "是被险峻的峭壁环绕,与世隔绝的,都市的最底部。"],
+	]
+	this.chapter002 = [
+		["年轻人", "「放开我!」", "aiy710000010.opus"], //龙套1-01
+		["年轻人", "「我只是在帮那个女人而已!」", "aiy710000020.opus"], //龙套1-02
+		["年轻人", "「你们没听到吗!?」", "aiy710000030.opus"], //龙套1-03
+		["年轻人", "「她是被受骗才会被卖到娼馆来的」", "aiy710000040.opus"], //龙套1-04
+		[
+			"年轻人",
+			"「用肮脏的手段把钱借给她父母的,就是你们这些家伙吧!?」",
+			"aiy710000050.opus",
+		], //龙套1-05
+		["年轻人", "「给我说些什么啊」", "aiy710000060.opus"], //龙套1-06
+		["凯伊姆", "「这些话等到了娼馆再说吧」", "aiy310000010.opus"], //男主01
+		["凯伊姆", "「我来抓你,只是受雇于人而已」", "aiy310000020.opus"], //男主02
+		["", "我走进娼馆《莉莉乌姆》的接待室。"],
+		["", "正在桌旁整理账簿的奥兹停下手头的工作,抬起头向我看来。"],
+		["奥兹", "「这不是凯伊姆先生吗,辛苦了」", "aiy350000010.opus"], //金锁高官01
+		["奥兹", "「委托已经完成了吗?」", "aiy350000020.opus"], //金锁高官02
+		["凯伊姆", "「啊啊,是这家伙没错吧」", "aiy310000030.opus"], //男主03
+		["", "奥兹用只要接触到就能杀人般的眼神在男人脸上搜过。"],
+		["奥兹", "「没错,就是这个人」", "aiy350000030.opus"], //金锁高官03
+		["凯伊姆", "「是么」", "aiy310000040.opus"], //男主04
+		["年轻人", "「你,你们要对我做什么」", "aiy710000070.opus"], //龙套1-07
+		["奥兹", "「······」", "aiy350000040.opus"], //金锁高官04
+		["", "奥兹用一个眼神,就让男人闭上了嘴。"],
+		["", "然后,向我这边转过身来。"],
+		["奥兹", "「抱歉啊,总是麻烦你去做这些无聊的事」", "aiy350000050.opus"], //金锁高官05
+		["奥兹", "「都怪我们这边的年轻人太没用」", "aiy350000060.opus"], //金锁高官06
+		["凯伊姆", "「客套话就免了」", "aiy310000050.opus"], //男主05
+		["奥兹", "「这还真是失礼了」", "aiy350000070.opus"], //金锁高官07
+		["奥兹", "「喂,来个人」", "aiy350000080.opus"], //金锁高官08
+		["光头男人", "「是」", "aiy820000010.opus"], //龙套2-01
+		["奥兹", "「凯伊姆先生做完工作回来了」", "aiy350000090.opus"], //金锁高官09
+		["光头男人", "「是,是,那个······」", "aiy820000020.opus"], //龙套2-02
+		["奥兹", "「我是要你拿些酒来,这个蠢材!」", "aiy350000100.opus"], //金锁高官10
+		["", "喀!"],
+		["", "奥兹扔出的烟灰缸砸中了手下的额头。"],
+		["", "鲜血四溅。"],
+		["凯伊姆", "「不用这么麻烦」", "aiy310000060.opus"], //男主06
+		["凯伊姆", "「我接下来要去《菲诺列塔》」", "aiy310000070.opus"], //男主07
+		["奥兹", "「喔唷」", "aiy350000110.opus"], //金锁高官11
+		[
+			"奥兹",
+			"「既然如此,我就不留您在这里喝难饮的劣质酒了」",
+			"aiy350000120.opus",
+		], //金锁高官12
+		["", "奥兹斜眼看着正捂住额头呻吟的手下,轻描淡写地说道。"],
+		["凯伊姆", "「用这些钱去买药」", "aiy310000080.opus"], //男主08
+		["", "我将几枚铜钱仍在那个手下的身前。"],
+		["奥兹", "「凯伊姆先生,不用对他们这么好」", "aiy350000130.opus"], //金锁高官13
+		["凯伊姆", "「无妨」", "aiy310000090.opus"], //男主09
+		["凯伊姆", "「话说回来,那个要落跑的女人呢?」", "aiy310000100.opus"], //男主10
+		[
+			"奥兹",
+			"「我把她交给那些年轻人了,现在应该正在体会人生的严苛吧」",
+			"aiy350000140.opus",
+		], //金锁高官14
+		[
+			"奥兹",
+			"「正好,趁此机会凯伊姆先生也来享受一番如何?」",
+			"aiy350000150.opus",
+		], //金锁高官15
+		["年轻人", "「你,你们这些家伙,要对她做什么!?」", "aiy710000080.opus"], //龙套1-08
+		["", "咣!"],
+		["", "奥兹给了他一拳。"],
+		["", "一击即倒。"],
+		["", "喀,咚,咯!"],
+		["", "奥兹毫不留情地向男人的脸上踩去。"],
+		["年轻人", "「咕······呃咳······」", "aiy710000090.opus"], //龙套1-09
+		["", "折断的牙齿伴着血泡被吐出。"],
+		["", "这份白色在鲜红色的液体中格外显眼。"],
+		[
+			"年轻人",
+			"「你们以为做出这种事······卫兵会坐视不理吗······」",
+			"aiy710000100.opus",
+		], //龙套1-10
+		["奥兹", "「啊啊,不会坐视不理的」", "aiy350000160.opus"], //金锁高官16
+		[
+			"奥兹",
+			"「应该会拿出你的钱包,和我们商量如何瓜分吧」",
+			"aiy350000170.opus",
+		], //金锁高官17
+		["年轻人", "「那,那种事······」", "aiy710000110.opus"], //龙套1-11
+		["", "这在牢狱是理所当然的事。"],
+		["奥兹", "「怎么,头一回来牢狱么?」", "aiy350000180.opus"], //金锁高官18
+		["", "男人点了点头。"],
+		[
+			"奥兹",
+			"「为了被骗的女人而来到牢狱,真是个规矩人啊」",
+			"aiy350000190.opus",
+		], //金锁高官19
+		["奥兹", "「······前提是,被骗的人不是你」", "aiy350000200.opus"], //金锁高官20
+		["年轻人", "「你说······我被骗了?」", "aiy710000120.opus"], //龙套1-12
+		["年轻人", "「那,那是怎么回事!?」", "aiy710000130.opus"], //龙套1-13
+		["奥兹", "「不用急,今天晚上会好好告诉你的」", "aiy350000210.opus"], //金锁高官21
+		["", "奥兹抓起男人的脸。"],
+		["", "为引诱客人的怜悯之心而装纯,是娼妇的惯用手段。"],
+		["", "双亲被骗而借钱,结果作为抵押而将自己卖到这里,这是典型的说法。"],
+		[
+			"",
+			"如果只是头脑发热而成为常客也就罢了,这次的男人热血过头,居然想出了要带女人私奔的计划。",
+		],
+		[
+			"",
+			"虽然女人半开玩笑地予以拒绝,但不知天高地厚的这家伙还是拉着她逃跑了。",
+		],
+		["", "不过,想要逃脱追击本来就是不可能的任务。"],
+		["", "但即便如此,这种事情还是会一再的出现。"],
+		["", "说谎的女人和被骗的男人。"],
+		["", "在娼馆街,这是令人看到生厌的日常的风景。"],
+		["凯伊姆", "「我要走了」", "aiy310000110.opus"], //男主11
+		["奥兹", "「好的,下次再麻烦您」", "aiy350000220.opus"], //金锁高官22
+		["奥兹", "「之后吉克先生会将谢礼交给您的」", "aiy350000230.opus"], //金锁高官23
+		["凯伊姆", "「啊啊」", "aiy310000120.opus"], //男主12
+		["", "我背向奥兹走出娼馆。"],
+		["凯伊姆", "「······?」", "aiy310000130.opus"], //男主13
+		["", "从远方传来微弱的歌声。"],
+		["", "是关卡广场的方向。"],
+		["", "对了。"],
+		["", "今天有觐见圣女的仪式。"],
+		["", "当代的圣女伊莲——"],
+		["", "俗称《盲眼之圣女》,据说即使在历代的圣女中,人气也是数一数二的。"],
+		["", "广场上的人估计相当多吧。"],
+		["", "虽然我也想去看看她长什么样,不过要在人潮中挤来挤去就免了。"],
+		["", "还是老老实实去菲诺列塔喝烧酒吧。"],
+		["", "正当我这样想着的时候,一个身影自小巷的那头走来。"],
+		["凯伊姆", "「艾莉斯」", "aiy310000140.opus"], //男主14
+	];
+	this.chapter01 = [
+		["艾莉斯", "「啊,凯伊姆」", "aiy020000005.opus"], //医生00.5
+		["艾莉斯", "「正好,我还想要去找你呢」", "aiy020000010.opus"], //医生01
+		[
+			"艾莉斯",
+			"「没想到凯伊姆会主动出现······这是命运吗?」",
+			"aiy020000020.opus",
+		], //医生02
+		["凯伊姆", "「显然不是吧」", "aiy310000150.opus"], //男主15
+		["艾莉斯", "「啊,是么」", "aiy020000030.opus"], //医生03
+		["", "艾莉斯挑了挑整齐的双眉,微微地哼了一声。"],
+		[
+			"",
+			"虽然是个相当引人注目的美人,但她这个将亲切儿子丢入无底深渊的性格,为自己扣了不少的分",
+		],
+		["", "给人印象最深的,就是那潭水般的双瞳。"],
+		["", "在漆黑的瞳孔中,完全看不出感情的波动。"],
+		["艾莉斯", "「喜欢我的眼睛吗?」", "aiy020000040.opus"], //医生04
+		["艾莉斯", "「如果想要的话就给你吧?」", "aiy020000050.opus"], //医生05
+		["凯伊姆", "「用不着」", "aiy310000160.opus"], //男主16
+		["艾莉斯", "「阿拉,可惜」", "aiy020000060.opus"], //医生06
+		["凯伊姆", "「那么,找我有什么事」", "aiy310000170.opus"], //男主17
+		["艾莉斯", "「梅尔特的钱好像被偷了」", "aiy020000070.opus"], //医生07
+		["凯伊姆", "「钱被偷了?都几岁了还这么没用」", "aiy310000180.opus"], //男主18
+		["艾莉斯", "「不要对我说啊」", "aiy020000080.opus"], //医生08
+		[
+			"凯伊姆",
+			"「那家伙,该不会说要让我去抓那个小偷吧?」",
+			"aiy310000190.opus",
+		], //男主19
+		["艾莉斯", "「就是这样」", "aiy020000090.opus"], //医生09
+		["凯伊姆", "「笨蛋吗」", "aiy310000200.opus"], //男主20
+		["凯伊姆", "「如果是小钱的话,就当做是买个教训吧」", "aiy310000210.opus"], //男主21
+		["艾莉斯", "「说起来,被盗的是这个月的上纳金」", "aiy020000100.opus"], //医生10
+		["凯伊姆", "「你说什么?」", "aiy310000220.opus"], //男主22
+		["艾莉斯", "「用这些钱买教训,也太过奢侈了呢」", "aiy020000110.opus"], //医生11
+		["凯伊姆", "「知道了,我去找」", "aiy310000230.opus"], //男主23
+		["凯伊姆", "「小偷的特征呢」", "aiy310000240.opus"], //男主24
+		["艾莉斯", "「男孩子」", "aiy020000120.opus"], //医生12
+		["艾莉斯", "「······而且,背后有翅膀」", "aiy020000130.opus"], //医生13
+		[
+			"艾莉斯",
+			"「虽然姑且是藏在身后,但是仔细观察的话是很明显的」",
+			"aiy020000140.opus",
+		], //医生14
+		["凯伊姆", "「羽化病吗」", "aiy310000250.opus"], //男主25
+		[
+			"艾莉斯",
+			"「那些人可是毫不留情的,所以即使是为了那个孩子,也要赶快抓到他」",
+			"aiy020000150.opus",
+		], //医生15
+		["凯伊姆", "「注意到他逃窜的方向了吗?」", "aiy310000260.opus"], //男主26
+		["艾莉斯", "「广场那边」", "aiy020000160.opus"], //医生16
+		[
+			"艾莉斯",
+			"「虽然刚才《不蚀金锁》的人去追了,不过多半是······」",
+			"aiy020000170.opus",
+		], //医生17
+		["凯伊姆", "「偏偏还是广场吗」", "aiy310000280.opus"], //男主28
+		["艾莉斯", "「今天是觐见圣女大人的日子」", "aiy020000180.opus"], //医生18
+		["凯伊姆", "「我知道」", "aiy310000290.opus"], //男主29
+		["凯伊姆", "「尽量找找看就好」", "aiy310000300.opus"], //男主30
+	];
+	this.chapter02 = [
+		["不蚀金锁成员", "「凯伊姆先生,凯伊姆先生」", "aiy860000010.ogg"],
+		[
+			"不蚀金锁成员",
+			"「您已经和艾莉斯大夫见过面了吗?」",
+			"aiy860000020.ogg",
+		],
+		["凯伊姆", "「啊啊,所以才会追过来的」", "aiy310000310.ogg"], //男主31
+		["凯伊姆", "「看到小偷了吗?」", "aiy310000320.ogg"], //男主32
+		[
+			"不蚀金锁成员",
+			"「没有,他向广场那边逃了过去,今天这么拥挤,我们也只能放弃了」",
+			"aiy860000030.ogg",
+		],
+		[
+			"不蚀金锁成员",
+			"「不过,我也只是刚好在店里所以才追了过去,并不是受人所托」",
+			"aiy860000040.ogg",
+		],
+		["不蚀金锁成员", "「我已经准备撤退了」", "aiy860000050.ogg"],
+		["不蚀金锁成员", "「凯伊姆先生还要继续追吗?」", "aiy860000060.ogg"],
+		["凯伊姆", "「啊啊」", "aiy310000330.ogg"], //男主33
+		["", "做完情报交换之后,我跟男人道别。"],
+		["凯伊姆", "「和我想的一样啊······」", "aiy310000340.ogg"], //男主34
+		["", "在牢狱中最大的广场上,聚集着看不到尽头的人群。"],
+		["", "就算是来参见圣女祈祷,这人数也太多了点吧。"],
+		["", "自然,我也找不到逃跑的孩子。"],
+		["", "是混杂到人群中了吧。"],
+		["", "如果已经从广场上脱身了的话,就更难发现了。"],
+		["", "只好赌他还在这里了。"],
+		["", "我先移动到了一个视野良好的地方。"],
+		["", "从这里,一眼就可以看到人群的变化。"],
+		["", "广场还是沸腾起来。"],
+		["", "抬头望去,原来是在天台之上出现了一个人影"],
+		["", "但是,与周围的期待不同,现身的是一名中年的神官。"],
+		["", "骂声四溢。"],
+		["", "神官则是笑着摆正衣领"],
+		["神官", "「从现在开始,举行谒见的仪式」", "aiy440000010.ogg"], //神官01
+		[
+			"神官",
+			"「在参见那位大人之前,我希望牢狱的诸位再次思考这个《诺瓦斯·艾蒂尔》存在的意义······」",
+			"aiy440000020.ogg",
+		], //神官02
+		[
+			"神官",
+			"「初代圣女伊莲大人,便是也难怪这崇高的祈祷之力,令《诺瓦斯·艾蒂尔》浮在空中,拯救了我们的祖先」",
+			"aiy440000030.ogg",
+		], //神官03
+		[
+			"神官",
+			"「这之后的几百年来,传承了初代大人力量的历代圣女伊莲大人,让这里留在了空中」",
+			"aiy440000040.ogg",
+		], //神官04
+		[
+			"神官",
+			"「这座都市是被圣女大人守护的人类最后的圣域,而我们则是被选召的虔诚的信徒」",
+			"aiy440000050.ogg",
+		], //神官05
+		[
+			"神官",
+			"「怀着对圣女的感激祈祷吧,感谢圣女伊莲吧!并献上祈祷!」",
+			"aiy440000060.ogg",
+		], //神官06
+		["圣女", "「不忘感谢与祈祷,神才会拯救我们」", "aiy030000010.ogg"], //圣女01
+		["圣女", "「与我一起,向神虔诚地祈祷吧」", "aiy030000020.ogg"], //圣女02
+		["", "广场上欢声雷动。"],
+		["", "圣女没有回应喧嚣的人声,而是静静地合上双眼面向广场。"],
+		["", "虽然感觉有些冷淡,但总比像个傻瓜似的笑着向这群人挥手要强。"],
+		["", "她掌握着这条街道,还有在这条街上生活的人的命运。"],
+		["", "比起揽得人气,她更想要为了街道的继续存在而献出全力。"],
+		["", "也是为了不让《大崩落》的惨剧再度发生。"],
+		["", "十几年前的那场悲剧。"],
+		[
+			"",
+			"虽然在我脑海中的记忆已经相当模糊,但哪怕只是稍有触及,不快的感觉都会在胸口蔓延开。",
+		],
+		["凯伊姆", "「······」", "aiy310000350.ogg"], //男主35
+		["", "这时我才想起,现在不是我在这里看圣女的时候。"],
+		["女声", "「——っ!?」", "aiy510000010.ogg"],
+		["围观的女人", "「羽,羽化病人!?」", "aiy510000020.ogg"],
+		["围观的中年人", "「喂,谁去叫下羽狩」", "aiy720000010.ogg"],
+		[
+			"惊慌的观众",
+			"「你这家伙不要靠近我,要是传染了可怎么办」",
+			"aiy730000010.ogg",
+		],
+		["粗鲁的观众", "「你这小鬼赶快滚开」", "aiy740000010.ogg"],
+		["凯伊姆", "「接下来」", "aiy310000360.ogg"], //男主36
+		["圣女", "「发生什么事了?看上去似乎很嘈杂」", "aiy030000030.ogg"], //圣女03
+		[
+			"随从",
+			"「似乎是某个人逃跑了······具体的我也不是很清楚」",
+			"aiy130000010.ogg",
+		], //侍从01
+		[
+			"神官",
+			"「圣女大人,继续待在天台上可能会出事,请您先回到室内吧」",
+			"aiy440000070.ogg",
+		], //神官07
+		[
+			"圣女",
+			"「不用在意我,比起那个,我更关心究竟发生了什么事」",
+			"aiy030000050.ogg",
+		], //圣女05
+		["神官", "「对不起,我真的不知道」", "aiy440000080.ogg"], //神官08
+		["圣女", "「······是吗」", "aiy030000060.ogg"], //圣女06
+		["男", "「恕我僭越,请准许我说明情况」", "aiy320000010.ogg"], //男主他哥01
+		["男", "「在来觐见的人群中出现了《羽化病》的患者」", "aiy320000020.ogg"], //男主他哥02
+		["男", "「围观的人群因而产生了骚动」", "aiy320000030.ogg"], //男主他哥03
+		[
+			"男",
+			"「现在,《防疫局》已经派遣了部队。我想不久之后,他们就会安静下来了」",
+			"aiy320000040.ogg",
+		], //男主他哥04
+		["圣女", "「羽化病······」", "aiy030000070.ogg"], //圣女07
+		["男", "「怎么了?」", "aiy320000050.ogg"], //男主他哥05
+		["圣女", "「没什么」", "aiy030000080.ogg"], //圣女08
+		["圣女", "「辛苦了,你的名字是?」", "aiy030000090.ogg"], //圣女09
+		[
+			"男",
+			"「属下是在防疫局任职的,鲁基乌斯· 迪斯·米利尤」",
+			"aiy320000060.ogg",
+		], //男主他哥06
+		[
+			"神官",
+			"「噢噢,阁下就是鲁基乌斯卿吗,我听说过你的传闻」",
+			"aiy440000090.ogg",
+		], //神官09
+		["神官", "「阁下是在工作上相当出色的人呢」", "aiy440000100.ogg"], //神官10
+		["鲁基乌斯", "「不敢当」", "aiy320000070.ogg"], //男主他哥07
+		[
+			"鲁基乌斯",
+			"「话说回来,这次是属下警备工作的失职。让圣女大人见到这不成体统的一面,请您见谅」",
+			"aiy320000080.ogg",
+		], //男主他哥08
+		[
+			"圣女",
+			"「即使是目不见物的我,也能感受到聚集于此的民众数量之多。警备工作难以展开也在情理之中」",
+			"aiy030000100.ogg",
+		], //圣女10
+		["鲁基乌斯", "「属下不胜惶恐」", "aiy320000090.ogg"], //男主他哥09
+		[
+			"鲁基乌斯",
+			"「接下来属下还要回到工作岗位上,在这里就先告退了」",
+			"aiy320000100.ogg",
+		], //男主他哥10
+		["圣女", "「鲁基乌斯先生」", "aiy030000110.ogg"], //圣女11
+		["鲁基乌斯", "「属下在」", "aiy320000110.ogg"], //男主他哥11
+		["圣女", "「你是怎样看待羽狩的工作的呢?」", "aiy030000120.ogg"], //圣女12
+		["神官", "「圣,圣女大人」", "aiy440000110.ogg"], //神官11
+		[
+			"鲁基乌斯",
+			"「防疫局的工作是国王陛下赐予的重要职务。属下非常荣幸能够为这个都市的繁荣尽一份微薄之力」",
+			"aiy320000120.ogg",
+		], //男主他哥12
+		["神官", "「不,不亏是鲁基乌斯卿,相当优秀的想法」", "aiy440000120.ogg"], //神官12
+		["圣女", "「是吗。辛苦你了」", "aiy030000130.ogg"], //圣女13
+		["随从", "「圣女大人······」", "aiy130000020.ogg"], //侍从02
+		["鲁基乌斯", "「······」", "aiy320000135.ogg"], //男主他哥13
+		["鲁基乌斯", "「那么,属下就回岗位去了」", "aiy320000140.ogg"], //男主他哥14
+	];
+	this.chapter03 = [
+		["", "从羽化病的少年纷乱的足音中,可以听得出相当的疲劳。"],
+		["", "显然,他并没有想到我会捷足先登吧。"],
+		["", "少年惶恐地回头看了一眼后,微微露出安心的表情,双手拄在膝盖上。。"],
+		["凯伊姆", "「辛苦你了」", "aiy310000370.ogg"], //男主37
+		["羽化病患少年", "「稀!?」", "aiy750000010.ogg"],
+		["凯伊姆", "「逃到贫民区是个不错的想法」", "aiy310000380.ogg"], //男主38
+		["羽化病患少年", "「你,你是,羽狩吗?」", "aiy750000020.ogg"],
+		["凯伊姆", "「不是」", "aiy310000390.ogg"], //男主39
+		[
+			"羽化病患少年",
+			"「什,什么啊······混蛋,不要吓我啊」",
+			"aiy750000030.ogg",
+		],
+		["凯伊姆", "「我对令你受惊这件事致以歉意」", "aiy310000400.ogg"], //男主40
+		["凯伊姆", "「作为回报,麻烦你把从店里偷的钱交出来吧」", "aiy310000410.ogg"], //男主41
+		["羽化病患少年", "「钱?你在说什么」", "aiy750000040.ogg"],
+		["凯伊姆", "「你要找的腰上的东西,掉在你身后了」", "aiy310000420.ogg"], //男主42
+		["羽化病患少年", "「哎?」", "aiy750000050.ogg"],
+		["羽化病患少年", "「呃呀」", "aiy750000060.ogg"],
+		["羽化病患少年", "「你······你这混蛋」", "aiy750000070.ogg"],
+		["凯伊姆", "「······」", "aiy310000430.ogg"], //男主43
+		["凯伊姆", "「把偷的钱交出来」", "aiy310000440.ogg"], //男主44
+		["羽化病患少年", "「我不知道你在······咕」", "aiy750000080.ogg"],
+		[
+			"羽化病患少年",
+			"「你,你说是我偷的······有什么证据吗」",
+			"aiy750000090.ogg",
+		],
+		["凯伊姆", "「你还挺倔的啊」", "aiy310000450.ogg"], //男主45
+		["凯伊姆", "「不过,给我听好了」", "aiy310000460.ogg"], //男主46
+		["凯伊姆", "「你偷的那些钱,是要上缴给《不蚀金锁》的上纳金」", "aiy310000470.ogg"], //男主47
+		["凯伊姆", "「而且,钱的主人是从前和吉克颇有渊源的女人」", "aiy310000480.ogg"], //男主48
+		["羽化病患少年", "「吉克?」", "aiy750000100.ogg"],
+		["凯伊姆", "「他是《不蚀金锁》的主人,这么说你就明白了吧」", "aiy310000490.ogg"], //男主49
+		["羽化病患少年", "「哎?哎?怎么会······」", "aiy750000110.ogg"],
+		["凯伊姆", "「再问你一遍,钱在哪里?」", "aiy310000510.ogg"], //男主51
+		["羽化病患少年", "「是,是,是,在我的怀里」", "aiy750000120.ogg"],
+		["凯伊姆", "「你没有擅自拿掉一部分吧」", "aiy310000520.ogg"], //男主52
+		["羽化病患少年", "「是,是的」", "aiy7500000130.ogg"],
+		[
+			"羽化病患少年",
+			"「那,那个,您是《不蚀金锁》的人吗?」",
+			"aiy750000140.ogg",
+		],
+		["凯伊姆", "「算是吧」", "aiy310000530.ogg"], //男主53
+		[
+			"羽化病患少年",
+			"「我什么都可以做,请您一定要帮帮我」",
+			"aiy750000150.ogg",
+		],
+		["凯伊姆", "「抱歉,我并没有兴趣去帮助他人」", "aiy310000540.ogg"], //男主54
+		[
+			"羽化病患少年",
+			"「我什么······什么,都会做的······」",
+			"aiy750000160.ogg",
+		],
+		["羽化病患少年", "「我一直都是生活在下层的」", "aiy750000170.ogg"],
+		[
+			"羽化病患少年",
+			"「可是,不知何时染上了羽化病······背后长出了翅膀······」",
+			"aiy750000180.ogg",
+		],
+		[
+			"羽化病患少年",
+			"「被寄宿工作的店赶了出来,只得流落到牢狱这里」",
+			"aiy750000190.ogg",
+		],
+		[
+			"羽化病患少年",
+			"「因为独自实在是饿的不行了,所以才会偷这些钱的」",
+			"aiy750000200.ogg",
+		],
+		[
+			"羽化病患少年",
+			"「我明明没有做任何坏事······为什么······会遇到这种事······」",
+			"aiy750000210.ogg",
+		],
+		["凯伊姆", "「谁知道」", "aiy310000550.ogg"], //男主55
+		[
+			"羽化病患少年",
+			"「呜······呜呜······接下来,要对我做什么?」",
+			"aiy750000220.ogg",
+		],
+		["凯伊姆", "「我要把你带到组织那里」", "aiy310000560.ogg"], //男主56
+		["羽化病患少年", "「怎,怎么这样」", "aiy750000230.ogg"],
+		["凯伊姆", "「不过,那样做的前提是你不是羽化病人」", "aiy310000570.ogg"], //男主57
+		["凯伊姆", "「组织也没有笨到把羽化病人招待到家里的程度」", "aiy310000580.ogg"], //男主58
+		["羽化病患少年", "「那么,是要放我逃走吗?」", "aiy750000240.ogg"],
+		["凯伊姆", "「我要让你学到教训」", "aiy310000590.ogg"], //男主59
+		["凯伊姆", "「如果换做是组织的制裁,至少要有断条胳膊的觉悟」", "aiy310000600.ogg"], //男主60
+		["凯伊姆", "「你的运气不错」", "aiy310000610.ogg"], //男主61
+		["羽化病患少年", "「唔······啊,是的······」", "aiy750000250.ogg"],
+		["凯伊姆", "「滚」", "aiy310000620.ogg"], //男主62
+		["羽化病患少年", "「非常感谢」", "aiy750000260.ogg"],
+		["羽化病患少年", "「唔啊!?」", "aiy750000270.ogg"],
+		["男", "「到这里就结束了,羽化病人」", "aiy430000010.ogg"], //兰格01
+		["男", "「确认他的翅膀」", "aiy430000020.ogg"], //兰格02
+		["", "趁还没有被卷入麻烦的事情之前,赶快离开这里吧"],
+		["羽狩的指挥者", "「那边的那个人」", "aiy430000030.ogg"], //兰格03
+		["凯伊姆", "「······有什么事?」", "aiy310000630.ogg"], //男主63
+		["羽狩的指挥者", "「可以稍微让我问几句话吗」", "aiy430000040.ogg"], //兰格04
+		["凯伊姆", "「······」", "aiy310000640.ogg"], //男主64
+		["凯伊姆", "「啊啊,无妨」", "aiy310000650.ogg"], //男主65
+		["羽狩的指挥者", "「感谢您的合作」", "aiy430000050.ogg"], //兰格05
+		["", "队长殷勤地致以谢礼。"],
+		["", "而在他的眼前,少年的衣服已经被他的补下们扯破。"],
+		["", "在瘦骨嶙峋的裸露后背上,长有纯白的羽翼。"],
+		["红发的羽狩", "「副队长,确认翅膀的持有了」"],
+		["羽狩的副队长", "「保护他」", "aiy430000060.ogg"], //兰格06
+		["羽化病患少年", "「不要······请原谅,我······」", "aiy750000280.ogg"],
+		[
+			"羽狩的副队长",
+			"「我们只是要带你去治愈院治疗羽化病,不是什么应该感到害怕的事情」",
+			"aiy430000070.ogg",
+		], //兰格07
+		["羽化病患少年", "「可是,可是」", "aiy750000290.ogg"],
+		["羽狩的副队长", "「没关系的」", "aiy430000080.ogg"], //兰格08
+		["羽化病患少年", "「······哥,哥哥」", "aiy750000300.ogg"],
+		["羽狩的副队长", "「你是羽化病人的亲属吗?」", "aiy430000090.ogg"], //兰格09
+		["凯伊姆", "「只是路人而已」", "aiy310000660.ogg"], //男主66
+		["凯伊姆", "「顺带一提,我也没有打算找你们的麻烦」", "aiy310000670.ogg"], //男主67
+		[
+			"羽狩的副队长",
+			"「前几天,有个和你说了同样的话的人,在我们背向他的瞬间对我们发动了袭击」",
+			"aiy430000100.ogg",
+		], //兰格10
+		["羽狩的副队长", "「我的一个部下就此永久失去了半截胳膊」", "aiy430000110.ogg"], //兰格11
+		["凯伊姆", "「我表示同情」", "aiy310000680.ogg"], //男主68
+		["凯伊姆", "「我马上就会消失的,这样就没问题了吧?」", "aiy310000690.ogg"], //男主69
+		["羽狩的副队长", "「嘛,不要这么慌张」", "aiy430000120.ogg"], //兰格12
+		["", "副队长看着羽化的少年。"],
+		["羽狩的副队长", "「你与这个人是什么关系?没有被他殴打吗?」", "aiy430000130.ogg"], //兰格13
+		["羽化病患少年", "「没,没有」", "aiy750000310.ogg"],
+		[
+			"羽狩的副队长",
+			"「如何对我们保持合作,你就可以在治愈院得到优先的治疗」",
+			"aiy430000140.ogg",
+		], //兰格14
+		["羽化病患少年", "「······」", "aiy750000320.ogg"],
+		[
+			"羽化病患少年",
+			"「那个人,是《不蚀金锁》的组织成员······」",
+			"aiy750000330.ogg",
+		],
+		[
+			"羽化病患少年",
+			"「突然说让我拿出钱来,我刚一拒绝他就打我」",
+			"aiy750000340.ogg",
+		],
+		["羽狩的副队长", "「原来如此······」", "aiy430000150.ogg"], //兰格15
+		[
+			"羽狩的副队长",
+			"「那位少年说你是《不蚀金锁》的一员,不知此事是否属实?」",
+			"aiy430000160.ogg",
+		], //兰格16
+		["凯伊姆", "「当然不是」", "aiy310000700.ogg"], //男主70
+		["凯伊姆", "「我只是从那里接受工作而已,并不是他们的成员」", "aiy310000710.ogg"], //男主71
+		["羽狩的副队长", "「你的意思是说,少年在说谎吗?」", "aiy430000170.ogg"], //兰格17
+		["凯伊姆", "「啊啊」", "aiy310000720.ogg"], //男主72
+		[
+			"凯伊姆",
+			"「如果你们和组织有关系的话,只要问问我是不是那里的成员就能明白事实了吧」",
+			"aiy310000730.ogg",
+		], //男主73
+		["羽狩的副队长", "「就算我去询问,也无法从他们那里得到事实」", "aiy430000180.ogg"], //兰格18
+		[
+			"羽狩的副队长",
+			"「《不蚀金锁》的那些人一向都不对我们合作,我对此深感困扰」",
+			"aiy430000190.ogg",
+		], //兰格19
+		["凯伊姆", "「真是辛苦啊」", "aiy310000740.ogg"], //男主74
+		["羽狩的副队长", "「说的是啊」", "aiy430000200.ogg"], //兰格20
+		["羽狩的副队长", "「其实,砍下我部下胳膊的似乎也是组织的成员呢」", "aiy430000210.ogg"], //兰格21
+		[
+			"羽狩的副队长",
+			"「无需如此警戒,我只是想在看守所向你咨询一些事情而已」",
+			"aiy430000220.ogg",
+		], //兰格22
+		[
+			"羽狩的副队长",
+			"「如果能够知晓牢狱与组织的事情,我们也可以尽可能地对更多的羽化病人进行保护」",
+			"aiy430000230.ogg",
+		], //兰格23
+		["羽狩的副队长", "「那和整条街道的和平也是紧密相关的吧?」", "aiy430000240.ogg"], //兰格24
+		["凯伊姆", "「我知道,你们有逮捕干扰狩猎羽化病人的权力」", "aiy310000750.ogg"], //男主75
+		[
+			"凯伊姆",
+			"「但是,我没有对你们做出任何干扰,为什么要对我如此纠缠不休呢」",
+			"aiy310000760.ogg",
+		], //男主76
+		["羽狩的副队长", "「那些话,我们会在看守所对你详细说明的」", "aiy430000250.ogg"], //兰格25
+		["凯伊姆", "「······」", "aiy310000770.ogg"], //男主77
+		["", "在这里起争执的话,就会被羽狩加害。"],
+		["", "就算能从这里脱身,今后只要碰面就会产生纠纷也是摆明的事情。"],
+		["", "就算逃跑,也没有好的结果。"],
+		["", "正当我想要打圆场的时候,刚才的气氛一瞬间产生了转变。"],
+		["", "发生了什么事······"],
+		["???", "「我认为,那位先生是正确的」", "aiy050000010.ogg"], //菲奥奈01
+		["", "羽狩们一起回头。"],
+		["", "而在他们视线的焦点处,"],
+		["", "伫立着一位女性。"],
+		["", "在端正的容颜下,代表着强烈意志的双眉十分显眼。"],
+		["", "身体的柔软与紧紧包裹在其身上的羽狩制服,两者显得十分的不搭配。"],
+		["", "我还是第一次看到女性的羽狩。"],
+		["羽狩的副队长", "「队长,这是获得《不蚀金锁》情报的好机会」", "aiy430000260.ogg"], //兰格26
+		[
+			"羽狩的队长",
+			"「兰格副队长,就算是为了获得情报,也不能做出恫吓的发言啊」",
+			"aiy050000020.ogg",
+		], //菲奥奈02
+		["兰格副队长", "「我并没有打算去恫吓他······」", "aiy430000270.ogg"], //兰格27
+		["羽狩的队长", "「告诉我那个被砍掉胳膊的队员的名字」", "aiy050000030.ogg"], //菲奥奈03
+		["羽狩的队长", "「我会去探望他的」", "aiy050000040.ogg"], //菲奥奈04
+		["兰格副队长", "「那个是······」", "aiy430000280.ogg"], //兰格28
+		["羽狩的队长", "「我知道,你一直在为有所收获而努力工作」", "aiy050000050.ogg"], //菲奥奈05
+		["羽狩的队长", "「但是,正因为我们的工作是为民众提供帮助」", "aiy050000060.ogg"], //菲奥奈06
+		["羽狩的队长", "「所以就更不能损害人与人之间的信赖」", "aiy050000070.ogg"], //菲奥奈07
+		["兰格副队长", "「我会铭记在心」", "aiy430000290.ogg"], //兰格29
+		["羽狩的队长", "「这位先生,我的部下失礼了」", "aiy050000080.ogg"], //菲奥奈08
+		["凯伊姆", "「只要不对我再来一次就好」", "aiy310000780.ogg"], //男主78
+		["羽狩的队长", "「请稍等」", "aiy050000090.ogg"], //菲奥奈09
+		["凯伊姆", "「有什么事?」", "aiy310000790.ogg"], //男主79
+		["羽狩的队长", "「我想确认一件事」", "aiy050000100.ogg"], //菲奥奈10
+		["羽狩的队长", "「你真的不是《不蚀金锁》的成员吗?」", "aiy050000110.ogg"], //菲奥奈11
+		["凯伊姆", "「真的」", "aiy310000800.ogg"], //男主80
+		["凯伊姆", "「如果我说是的话,你有什么打算?」", "aiy310000810.ogg"], //男主81
+		["羽狩的队长", "「我听过传闻,说他们是用依靠暴力而得的钱在生活」", "aiy050000120.ogg"], //菲奥奈12
+		["凯伊姆", "「······这样啊」", "aiy310000820.ogg"], //男主82
+		["凯伊姆", "「如果能有收获就好了啊」", "aiy310000830.ogg"], //男主83
+	];
+	this.chapter04 = [
+		["梅尔特", "「欢迎光临」", "aiy120000020.ogg"], //老板娘01,文件序号是以2开始,后续全部加1
+		["梅尔特", "「辛苦了」", "aiy120000030.ogg"], //老板娘02
+		["梅尔特", "「抱歉,又拜托给你了个这么麻烦的工作」", "aiy120000040.ogg"], //老板娘03
+		["凯伊姆", "「没什么,比想象中完成的更容易」", "aiy310000840.ogg"], //男主84
+		["梅尔特", "「那就好」", "aiy120000050.ogg"], //老板娘04
+		["梅尔特", "「这是我的一点谢意」", "aiy120000060.ogg"], //老板娘05
+		["凯伊姆", "「味道有些变化啊」", "aiy310000850.ogg"], //男主85
+		["梅尔特", "「啊,被发现了?」", "aiy120000070.ogg"], //老板娘06
+		["梅尔特", "「最近,没能到手什么好的原料呢」", "aiy120000080.ogg"], //老板娘07
+		["凯伊姆", "「去拜托吉克如何?」", "aiy310000860.ogg"], //男主86
+		[
+			"梅尔特",
+			"「话是这么说,但是总不能用店里采购的这种小事去麻烦他吧······」",
+			"aiy120000090.ogg"
+		], //老板娘08
+		["凯伊姆", "「那希望你也不要来麻烦我」", "aiy310000870.ogg"], //男主87
+		["梅尔特", "「那 是 两 码 事」", "aiy120000100.ogg"], //老板娘09
+		["梅尔特", "「再说,凯伊姆是靠着工作来生活的吧」", "aiy120000110.ogg"], //老板娘10
+		[
+			"梅尔特",
+			"「而且,自己的钱被偷了这么害羞的事,向凯伊姆以外的其他人都说不出口」",
+			"aiy120000120.ogg"
+		], //老板娘11
+		["凯伊姆", "「反正,也已经传到吉克的耳朵里了」", "aiy310000880.ogg"], //男主88
+		["梅尔特", "「这是面子问题啊,面子问题」", "aiy120000130.ogg"], //老板娘12
+		["凯伊姆", "「嘛,算了」", "aiy310000890.ogg"], //男主89
+		["凯伊姆", "「这样就好了吧?」", "aiy310000900.ogg"], //男主90
+		["梅尔特", "「这是钱包呢」", "aiy120000140.ogg"], //老板娘13
+		["梅尔特", "「嗯,东西没少」", "aiy120000150.ogg"], //老板娘14
+		["梅尔特", "「太好啦—这个月的上纳金,我可全部都放在里面了呢」", "aiy120000160.ogg"], //老板娘15
+		["梅尔特", "「如果没有找到的话,说不定就又会被送到娼馆里了呢」", "aiy120000170.ogg"], //老板娘16
+		["凯伊姆", "「在那边不是来钱更快吗?」", "aiy310000910.ogg"], //男主91
+		["梅尔特", "「阿拉,你是在说我还能有魅力吗?」", "aiy120000180.ogg"], //老板娘17
+		["凯伊姆", "「这是客套话而已」", "aiy310000920.ogg"], //男主92
+		["梅尔特", "「欺负人」", "aiy120000190.ogg"], //老板娘18
+		["梅尔特", "「总而言之,今天帮大忙了」", "aiy120000200.ogg"], //老板娘19
+		["梅尔特", "「谢礼嘛······」", "aiy120000210.ogg"], //老板娘20
+		["凯伊姆", "「就记在账单上吧」", "aiy310000930.ogg"], //男主93
+		["梅尔特", "「了解—盛谢惠顾了哦?」", "aiy120000220.ogg"], //老板娘21
+		["", "喀啷喀啷"],
+		["", "门铃响起"],
+		["", "喧哗瞬间安静下来。"],
+		["", "进来的人是吉克。"],
+		["", "是掌控着牢狱的组织之一,《不蚀金锁》的头目。"],
+		["", "不仅组织的成员,就连店内一般的客人也对他以注目礼表示敬意。"],
+		["吉克", "「各位继续吧」", "aiy340000010.ogg"], //吉克01
+		["", "仿佛停滞的时钟重新转动了一般,店内恢复了热闹的气氛。"],
+		["吉克", "「抱歉,今天拜托你去做了无聊的工作」。", "aiy340000020.ogg"], //吉克02
+		["凯伊姆", "「不用介意」", "aiy310000940.ogg"], //男主94
+		["", "吉克轻轻点了点头,在我右边坐了下来"],
+		["凯伊姆", "「逃跑的男人怎么样了?」", "aiy310000950.ogg"], //男主95
+		["吉克", "「嗯?已经不在这个世上了」。", "aiy340000030.ogg"], //吉克03
+		["吉克", "「有什么想要知道的事吗?」", "aiy340000040.ogg"], //吉克04
+		["凯伊姆", "「不,没什么」", "aiy310000960.ogg"], //男主96
+		["吉克", "「那个无聊的家伙,完全没有趣味呢」", "aiy340000050.ogg"], //吉克05
+		["吉克", "「真希望他也替我负责清扫的部下也考虑考虑」", "aiy340000060.ogg"], //吉克06
+		["凯伊姆", "「真是灾难啊」", "aiy310000970.ogg"], //男主97
+		["吉克", "「比起那个,我听说了哦。你去追羽化病人了啊」", "aiy340000070.ogg"], //吉克07
+		["凯伊姆", "「消息真灵通」", "aiy310000980.ogg"], //男主98
+		["吉克", "「梅尔特也注意点」", "aiy340000080.ogg"], //吉克08
+		["吉克", "「你丢钱已经不是一回两回了」", "aiy340000090.ogg"], //吉克09
+		["梅尔特", "「好的—我会注意的。」", "aiy120000230.ogg"], //老板娘22
+		["梅尔特", "「吉克还是平常的点单吧」", "aiy120000240.ogg"], //老板娘23
+		["梅尔特", "「凯伊姆要再来一杯吗?」", "aiy120000250.ogg"], //老板娘24
+		["", "我们用眼神点头示意后,梅尔特开始准备起酒来。"],
+		["", "悠然地吐出眼圈后,吉克取出一个纸包放在柜台上。"],
+		["吉克", "「这是抓捕逃跑男人的报酬」", "aiy340000100.ogg"], //吉克10
+		["凯伊姆", "「下次有什么事再告诉我」", "aiy310000990.ogg"], //男主99
+		["梅尔特", "「来,久等了」", "aiy120000260.ogg"], //老板娘25
+		["凯伊姆", "「话说回来梅尔特,为什么会被那种孩子偷到钱?」", "aiy310001000.ogg"], //男主100
+		["吉克", "「让我猜猜看」", "aiy340000110.ogg"], //吉克11
+		["吉克", "「是那个吧,看某个特立独行的男人入迷了,所以就有了空隙?」", "aiy340000120.ogg"], //吉克12
+		["梅尔特", "「可惜—」", "aiy120000270.ogg"], //老板娘26
+		["梅尔特", "「事实恰恰相反,是那家伙一直在纠缠我」", "aiy120000280.ogg"], //老板娘27
+		["凯伊姆", "「完全把你当成新进的女佣了么」", "aiy310001010.ogg"], //男主101
+		["梅尔特", "「我从前可是很有名的,不会被当成这种下人吧」", "aiy120000290.ogg"], //老板娘28
+		["梅尔特", "「······而且,我没法对对我这么钟情的人发火啊」", "aiy120000300.ogg"], //老板娘29
+		["凯伊姆&吉克", "「你傻啊」", "aiy310001027.ogg"], //男主102.7,吉克13.5
+		["梅尔特", "「异口同声呢,不亏是兄弟」", "aiy120000310.ogg"], //老板娘30
+		["凯伊姆", "「别用这种称呼,怪恶心的」", "aiy310001030.ogg"], //男主103
+		["吉克", "「说得没错」", "aiy340000140.ogg"], //吉克14
+		["吉克", "「······说起来······」", "aiy340000150.ogg"], //吉克15
+		["梅尔特", "「怎么了?」", "aiy120000320.ogg"], //老板娘31
+		["吉克", "「有件事我一直很在意,我和凯伊姆,哪个是哥哥啊?」", "aiy340000160.ogg"], //吉克16
+		["凯伊姆", "「你也说这么无聊的话题」", "aiy310001040.ogg"], //男主104
+		["吉克", "「不,这是很重要的事情」", "aiy340000170.ogg"], //吉克17
+		["吉克", "「梅尔特,事实是怎么样的?」", "aiy340000180.ogg"], //吉克18
+		["梅尔特", "「啊~是怎么样的呢~」", "aiy120000330.ogg"], //老板娘32
+		["梅尔特", "「我忘记了」", "aiy120000340.ogg"], //老板娘33
+		["吉克", "「骗人」", "aiy340000190.ogg"], //吉克19
+		["梅尔特", "「我说真的」", "aiy120000350.ogg"], //老板娘34
+		["梅尔特", "「嘛,如果想起来了的话,就算是卸载艺术上我也会公诸于众的」", "aiy120000360.ogg"], //老板娘35
+		["吉克", "「喔唷」", "aiy340000200.ogg"], //吉克20
+		["吉克", "「那么,我就不能比你先死了啊」", "aiy340000210.ogg"], //吉克21
+		["梅尔特", "「蒙你费心」", "aiy120000370.ogg"], //老板娘36
+		["梅尔特", "「顺带一提,有传言说吃过我们这里的料理后可以长生不老哦?」", "aiy120000380.ogg"], //老板娘37
+		["吉克", "「好,来两份炖菜,记得加腊肠」", "aiy340000220.ogg"], //吉克22
+		["梅尔特", "「多谢惠顾」", "aiy120000390.ogg"], //老板娘38
+		["", "微微一笑后,梅尔特去厨房传达点单。"],
+		["凯伊姆", "「吉克······」", "aiy310001050.ogg"], //男主105
+		["吉克", "「啊,不好了」", "aiy340000230.ogg"], //吉克23
+		["凯伊姆", "「话题扯远了」", "aiy310001060.ogg"], //男主106
+		["梅尔特", "「什么话题来着?」", "aiy120000400.ogg"], //老板娘39
+		["凯伊姆", "「关于为什么你的钱会被偷这件事」", "aiy310001070.ogg"], //男主107
+		["凯伊姆", "「丢钱的时候以你来说,应该不会全无察觉吧?」", "aiy310001080.ogg"], //男主108
+		["梅尔特", "「算是吧,被偷的时候确实也想过要抓住他」", "aiy120000410.ogg"], //老板娘40
+		["梅尔特", "「但是,我注意到了那个孩子背后的鼓起呢」", "aiy120000420.ogg"], //老板娘41
+		["凯伊姆", "「所以就不由自主地放他逃跑了?」", "aiy310001090.ogg"], //男主109
+		["吉克", "「就算你想羽化病人施恩,也不会得到任何回报哦」", "aiy340000240.ogg"], //吉克24
+		["梅尔特", "「我知道」", "aiy120000430.ogg"], //老板娘42
+		["梅尔特", "「正因为知道,所以之后才会拜托凯伊姆去将钱取回的」", "aiy120000440.ogg"], //老板娘43
+		["梅尔特", "「可是,呢······」", "aiy120000450.ogg"], //老板娘44
+		["梅尔特", "「果然还是很矛盾呢」", "aiy120000460.ogg"], //老板娘45
+		["梅尔特", "「明明是自己放他逃跑的,之后又拜托别人去抓他」", "aiy120000470.ogg"], //老板娘46
+		["梅尔特", "「但是,在那一刹那······应该说是,突然露出了真心吧」", "aiy120000480.ogg"], //老板娘47
+		["梅尔特", "「真的,只是自我满足而已」", "aiy120000490.ogg"], //老板娘48
+		["凯伊姆", "「对于那个孩子来说不是很幸运么」", "aiy310001100.ogg"], //男主110
+		["凯伊姆", "「在被《不蚀金锁》抓到之前,就被羽狩保护了」", "aiy310001110.ogg"], //男主111
+		["凯伊姆", "「现在应该已经躺在治愈院的床上了」", "aiy310001120.ogg"], //男主112
+		["吉克", "「如果被我们抓到的话,嘛,至少也会断掉一根胳膊吧」", "aiy340000250.ogg"], //吉克25
+		["凯伊姆", "「比起失去胳膊,这不是个很好地结局吗」", "aiy310001130.ogg"], //男主113
+		["吉克", "「多亏梅尔特的一念之善,那个小子的胳膊被救下来了」", "aiy340000260.ogg"], //吉克26
+		["吉克", "「对我来说,不能去管教他稍微有点可惜就是了」", "aiy340000270.ogg"], //吉克27
+		["凯伊姆", "「我姑且是给了他两三拳」", "aiy310001140.ogg"], //男主114
+		["吉克", "「你这不是很善解人意么」", "aiy340000280.ogg"], //吉克28
+		["梅尔特", "「没有帮他的忙啊」", "aiy120000500.ogg"], //老板娘49
+		["凯伊姆", "「你给我用常识考虑考虑」", "aiy310001150.ogg"], //男主115
+		["梅尔特", "「本来,就算羽化病人不被羽狩带走而导致羽化病扩散,在牢狱里死亡的理由也要多少就有多少」", "aiy120000510.ogg"], //老板娘50
+		["梅尔特", "「没事到如今多一个病人,也不会有什么改变的吧」", "aiy120000520.ogg"], //老板娘51
+		["梅尔特", "「那么,那么些羽化病人为什么就不能和我们一起开心地生活呢」", "aiy120000530.ogg"], //老板娘52
+		["吉克", "「像梅尔特这样思考的人少之又少」", "aiy340000290.ogg"], //吉克29
+		["凯伊姆", "「就算早晚都会死去,为了今日的苟活而努力拼搏也是人之常情」", "aiy310001160.ogg"], //男主116
+		["梅尔特", "「我知道」", "aiy120000540.ogg"], //老板娘53
+		["梅尔特", "「别介意,我刚才只是顺口说说」", "aiy120000550.ogg"], //老板娘54
+		["", "喀啷喀啷"],
+		["梅尔特", "「辛苦了,艾莉斯」", "aiy120000560.ogg"], //老板娘55
+		["艾莉斯", "「嗯」", "aiy020000190.ogg"], //医生19
+		["", "用不可爱的声音随口回应后,艾莉斯理所当然般地在我左边的座位坐下"],
+		["", "梅尔特什么都没有问,就开始准备起茶来"],
+		["梅尔特", "「多亏你去帮忙叫凯伊姆了呢」", "aiy120000570.ogg"], //老板娘56
+		["艾莉斯", "「不客气」", "aiy020000200.ogg"], //医生20
+		["艾莉斯", "「我从店里出去以后不久就看到他了,这是我们被命运之绳紧紧相连的证明呢」", "aiy020000210.ogg"], //医生21
+		["凯伊姆", "「那还真是糟糕」", "aiy310001170.ogg"], //男主117
+		["艾莉斯", "「用不着这么害羞的」", "aiy020000220.ogg"], //医生22
+		["凯伊姆", "「用茶堵上你的嘴吧」", "aiy310001180.ogg"], //男主118
+		["艾莉斯", "「好」", "aiy020000230.ogg"], //医生23
+		["梅尔特", "「司空见惯的风景呢」", "aiy120000580.ogg"], //老板娘57
+		["凯伊姆", "「你在那之后去做什么了?」", "aiy310001190.ogg"], //男主119
+		["艾莉斯", "「去莉莉乌姆照顾患病的女孩子了」", "aiy020000240.ogg"], //医生24
+		["艾莉斯", "「好像是毒品上瘾,费了很大劲才止住她的胡闹」", "aiy020000250.ogg"], //医生25
+		["艾莉斯", "「希望你能好好管理下自己店里的娼妇呢」", "aiy020000260.ogg"], //医生26
+		["吉克", "「抱歉啊」", "aiy340000300.ogg"], //吉克30
+		["吉克", "「为表歉意,就让我来给艾莉斯诊疗一下吧」", "aiy340000310.ogg"], //吉克31
+		["艾莉斯", "「去死吧」", "aiy020000270.ogg"], //医生27
+		["梅尔特", "「是什么药?」", "aiy120000590.ogg"], //老板娘58
+		["吉克", "「是最近上市的一种药」", "aiy340000320.ogg"], //吉克32
+		["吉克", "「虽然中毒的可能性很低,但只要中毒便会一发而不可收拾」", "aiy340000330.ogg"], //吉克33
+		["艾莉斯", "「知道了」", "aiy020000280.ogg"], //医生28
+		["吉克", "「虽然我也许没有时间去管教她,不过我还是会注意的」", "aiy340000340.ogg"], //吉克34
+		["艾莉斯", "「毒药的主人是吉克吗?」", "aiy020000290.ogg"], //医生29
+		["吉克", "「《不蚀金锁》不卖药,这是从先代定下的规矩」", "aiy340000350.ogg"], //吉克35
+		["艾莉斯", "「抱歉,开玩笑的」", "aiy020000300.ogg"], //医生30
+		["吉克", "「关于药的出处,这边也会调查的」", "aiy340000360.ogg"], //吉克36
+		["吉克", "「如果有什么传闻的话记得告诉我」", "aiy340000370.ogg"], //吉克37
+		["艾莉斯", "「知道了」", "aiy020000310.ogg"], //医生31
+		["艾莉斯", "「麻药中毒的人真麻烦呢,又不能完全治好」", "aiy020000320.ogg"], //医生32
+		["艾莉斯", "「既然要悄悄的打,那就也悄悄地去死不就好了」", "aiy020000330.ogg"], //医生33
+		["", "喀啷喀啷"],
+		["奥兹", "「吉克大人,抱歉打扰你开心的时光」", "aiy350000240.ogg"], //金锁高官24
+		["吉克", "「怎么了」", "aiy340000380.ogg"], //吉克38
+		["奥兹", "「请将耳朵凑过来」", "aiy350000250.ogg"], //金锁高官25
+		["吉克", "「······知道了」", "aiy340000390.ogg"], //吉克39
+		["吉克", "「凯伊姆,一会到娼馆来一趟」", "aiy340000400.ogg"], //吉克40
+		["凯伊姆", "「啊啊」", "aiy310001200.ogg"], //男主120
+		["吉克", "「噢,我都给忘了」", "aiy340000410.ogg"], //吉克41
+		["吉克", "「让这里的大家都开心一下」", "aiy340000420.ogg"], //吉克42
+		["梅尔特", "「收到」", "aiy120000600.ogg"], //老板娘59
+		["吉克", "「我走了」", "aiy340000430.ogg"], //吉克43
+		["奥兹", "「好」", "aiy350000260.ogg"], //金锁高官26
+		["", "梆梆"],
+		["梅尔特", "「大家静静,有个好消息」", "aiy120000610.ogg"], //老板娘60
+		["梅尔特", "「今天有个『大人物』要请客哦」", "aiy120000620.ogg"], //老板娘61
+		["艾莉斯", "「吉克还是一如既往的大方」", "aiy020000340.ogg"], //医生34
+		["梅尔特", "「果然,头目就应该像这样呢」", "aiy120000630.ogg"], //老板娘62
+		["凯伊姆", "「他的做法是继承先代的」", "aiy310001210.ogg"], //男主121
+		["梅尔特", "「又来了又来了」", "aiy120000640.ogg"], //老板娘63
+		["梅尔特", "「他想要赶上先代还早了十年呢」", "aiy120000650.ogg"], //老板娘64
+		["凯伊姆", "「有些太严厉了吧」", "aiy310001220.ogg"], //男主122
+		["艾莉斯", "「说起来,吉克有什么事」", "aiy020000350.ogg"], //医生35
+		["梅尔特", "「既然要叫上凯伊姆,再怎么说也不是什么小事吧?」", "aiy120000670.ogg"], //老板娘66
+		["凯伊姆", "「说的也是」", "aiy310001230.ogg"], //男主123
+		["艾莉斯", "「我期待看到你光荣负伤的样子」", "aiy020000360.ogg"], //医生36
+		["凯伊姆", "「不要为人的不幸祈求啊」", "aiy310001240.ogg"], //男主124
+		["梅尔特", "「来,喝完这杯就去加油工作吧」", "aiy120000680.ogg"], //老板娘67
+		["凯伊姆", "「啊啊」", "aiy310001250.ogg"], //男主125
+		["凯伊姆", "「我走了」", "aiy310001260.ogg"], //男主126
+		["艾莉斯", "「加油(受伤)吧」", "aiy020000370.ogg"], //医生37
+		["梅尔特", "「一路走好」", "aiy120000690.ogg"], //老板娘68
+	];
+	this.chapter05 = [
+		["", "今晚的娼馆街比平常来得更加热闹"],
+		["", "视线中可以看到很多生客。"],
+		["莉莎", "「呀——!」", "aiy150000010.ogg"], //三小只C01
+		["莉莎", "「呐,凯伊姆凯伊姆凯伊姆」", "aiy150000020.ogg"], //三小只C02
+		["莉莎", "「我难道没有魅力吗?」", "aiy150000030.ogg"], //三小只C03
+		["凯伊姆", "「突然之间怎么了」", "aiy310001270.ogg"], //男主127
+		["莉莎", "「因为因为因为,明明这么热闹,却只有我没有接到客人」", "aiy150000040.ogg"], //三小只C04
+		["莉莎", "「亏我还对他们说,我会用超绝的技巧让他们舒服得如同化作夜明的流星般呢」", "aiy150000050.ogg"], //三小只C05
+		["凯伊姆", "「那个台词太糟糕了」", "aiy310001280.ogg"], //男主128
+		["莉莎", "「哎—什么啊,这可是我昨天花了一晚上考虑出来的呢」", "aiy150000060.ogg"], //三小只C06
+		["凯伊姆", "「去睡觉,不要用你那空空如也的脑袋去考虑这种无聊事」", "aiy310001290.ogg"], //男主129
+		["莉莎", "「好过分!?」", "aiy150000070.ogg"], //三小只C07
+		["凯伊姆", "「你看看周围,今天有很多新客人吧?」", "aiy310001300.ogg"], //男主130
+		["莉莎", "「嗯~~」", "aiy150000080.ogg"], //三小只C08
+		["莉莎", "「啊,你这么一说还真是」", "aiy150000090.ogg"], //三小只C09
+		["凯伊姆", "「他们心里都很紧张,不可能会被你这种强拉的手法钓上钩吧」", "aiy310001310.ogg"], //男主131
+		["莉莎", "「这样啊,是不想欲仙欲死吗?」", "aiy150000100.ogg"], //三小只C10
+		["凯伊姆", "「不,没有男人不会希望那样的」", "aiy310001320.ogg"], //男主132
+		["凯伊姆", "「不过,强来是不行的。去让他们被温柔地包容着化作流星吧」", "aiy310001330.ogg"], //男主133
+		["莉莎", "「原—来如此」", "aiy150000110.ogg"], //三小只C11
+		["莉莎", "「凯伊姆肯定很有娼妇的才能哦」", "aiy150000120.ogg"], //三小只C12
+		["凯伊姆", "「没有」", "aiy310001340.ogg"], //男主134
+		["凯伊姆", "「好了,你赶紧去赚钱吧」", "aiy310001350.ogg"], //男主135
+		["莉莎", "「收到—」", "aiy150000130.ogg"], //三小只C13
+		["", "莉莎精神满满地回答后,就啪嗒啪嗒地跑开了。"],
+		["莉莎", "「呐—那边的大哥哥,和我一起化作星光吧—」", "aiy150000140.ogg"], //三小只C14
+		["", "这家伙"],
+		["", "非要用这么麻烦的说法么。"],
+		["", "咚"],
+		["莉莎", "「呀」", "aiy150000150.ogg"], //三小只C15
+		["大胡子醉汉", "「好疼」", "aiy800000010.ogg"],
+		["", "突然,莉莎与一个男人相撞。"],
+		["", "虽然男人可以摆出派头,但从那虚浮的脚步可以看出他相当的醉意。"],
+		["莉莎", "「好疼疼,对不起」", "aiy150000160.ogg"], //三小只C16
+		["大胡子醉汉", "「这不是道歉就能了事的事吧,大姐—」", "aiy800000020.ogg"],
+		["大胡子醉汉", "「哟,穿得相当清凉啊,喂」", "aiy800000030.ogg"],
+		["大肚子的醉汉", "「喂—怎么了?」", "aiy810000010.ogg"],
+		["大胡子醉汉", "「这位小姐特意往我身上撞呢」", "aiy800000040.ogg"],
+		["大肚子的醉汉", "「喂喂喂喂,你是要做什么」", "aiy810000020.ogg"],
+		["莉莎", "「呜哎—所以我都说对不起了啊」", "aiy150000170.ogg"], //三小只C17
+		["莉莎", "「对,对了。作为冲撞的补偿,我会给您提供很好的服务的,怎么样?」", "aiy150000180.ogg"], //三小只C18
+		["大胡子醉汉", "「是免费的吧?」", "aiy800000050.ogg"],
+		["莉莎", "「那个······这,这姑且也是工作······免费就太」", "aiy150000190.ogg"], //三小只C19
+		["大肚子的醉汉", "「真是的,娼妇就是这种人。钱,钱,钱,完全没有做人的诚意」", "aiy810000030.ogg"],
+		["大胡子醉汉", "「好—你这家伙。我给你钱,你现在就在这里给我服务」", "aiy800000060.ogg"],
+		["莉莎", "「这,这该怎么说呢,稍微有些过了吧,在这里做很害羞的」", "aiy150000200.ogg"], //三小只C20
+		["大胡子醉汉", "「你除了晃腰以外还有用得着脑子的地方吗?别说这种像个人说的话啊」", "aiy800000070.ogg"],
+		["大肚子的醉汉", "「啊啊?这些钱不够吗?」", "aiy810000040.ogg"],
+		["大胡子醉汉", "「来,赶快把脚张开让我O,你们最喜欢这种事了吧?」", "aiy800000080.ogg"],
+		["莉莎", "「是,是认真的吗······这些人」", "aiy150000210.ogg"], //三小只C21
+		["大肚子的醉汉", "「赶快做」", "aiy810000050.ogg"],
+		["莉莎", "「呃······」", "aiy150000220.ogg"], //三小只C22
+		["凯伊姆", "「喂」", "aiy310001360.ogg"], //男主136
+		["大肚子的醉汉", "「啊?」", "aiy810000060.ogg"],
+		["凯伊姆", "「即便是娼妇,也有不能出售的东西」", "aiy310001370.ogg"], //男主137
+		["", "喀"],
+		["", "我一拳击中男人被酒精染红的脸,"],
+		["大胡子醉汉", "「咦」", "aiy800000090.ogg"],
+		["", "嘎"],
+		["", "再一拳击中另一个人的腹部。"],
+		["大肚子的醉汉", "「咕······」", "aiy810000070.ogg"],
+		["大胡子醉汉", "「唔······」", "aiy800000100.ogg"],
+		["", "两人像两只毛虫般躺在地上蠕动着挣扎"],
+		["", "一时半会应该起不来了吧"],
+		["莉莎", "「凯伊姆先生,太迟了太迟了太迟了」", "aiy150000230.ogg"], //三小只C23
+		["凯伊姆", "「都是你闯出的祸吧」", "aiy310001380.ogg"], //男主138
+		["莉莎", "「话是,那么说,可是」", "aiy150000240.ogg"], //三小只C24
+		["凯伊姆", "「赶快回莉莉乌姆去」", "aiy310001390.ogg"], //男主139
+		["莉莎", "「唔,嗯。谢了,凯伊姆。再见」", "aiy150000250.ogg"], //三小只C25
+		["", "久留无用"],
+	];
+	this.chapter06 = [
+		["", "漂浮的紫烟与甜美香醇的空气。"],
+
+
+	];
+},
+    "动画及周期装备映射": function () {
+	// 在此增加新插件
+	this.equip = {
+		//所有回合中的装备及速度
+		sword1: { id: "jianji", speed: 10 },
+	};
+	this.heroanimate = {
+		//勇士武器对应的动画(key为主手武器ID,value为帧动画名)
+		sword1: "jianji2",
+	};
+	this.enemyanimate = {
+		//怪物对应的动画(key为怪物ID,value为帧动画名)
+		bat: "jianji2",
+	};
+	this.equipanimate = {
+		//勇士周期性装备对应的动画(key为装备Id,value为帧动画名)
+		shield0: "jianji2",
+	};
+},
+    "勇士法抗乘算叠加": function () {
+    // 在此增加新插件
+    items.prototype.compareEquipment = function (
+      compareEquipId,
+      beComparedEquipId
     ) {
-      const data = {
-        px: px,
-        py: py,
-        width: width,
-        height: height,
-        allFarme: allFarme,
-        imageList: imageList,
-        soundList: soundList,
-      };
-      core.setFlag("animate_" + name, data);
-    };
-    this.deleteanimate = function (name) {
-      core.setFlag("animate_" + name);
-    };
-    let thistime = 0;
-    this.playanimate = function (name, x, y, hero, scalex, scaley) {
-      const data = {
-        name: name,
-        x: x,
-        y: y,
-        hero: hero,
-        scalex: scalex,
-        scaley: scaley,
-        farme: 0,
-      };
+      var result = { value: {}, percentage: {} };
+      var first = core.material.items[compareEquipId],
+        second = core.material.items[beComparedEquipId];
+      for (var one in result) {
+        for (var name in core.status.hero) {
+          if (name === "mdef" && one === "percentage") {
+            var ans = 1;
+            if (first?.equip?.[one]?.[name])
+              ans *= 1 - (first.equip[one][name] || 0) / 100;
 
-      core.plugin.playing.add(data);
-    };
-    core.registerAnimationFrame("animateonmap", true, function (timestamp) {
-      if (timestamp - thistime > 1000 / 60) {
-        thistime = timestamp;
-        core.clearMap(anctx);
-        core.plugin.playing.forEach((one) => {
-          const data = flags["animate_" + one.name];
-          if (!data) {
-            core.plugin.playing.delete(one);
+            if (second?.equip?.[one]?.[name])
+              ans /= 1 - (second.equip[one][name] || 0) / 100;
+
+            if (ans != 1) result[one][name] = ans;
+          } else if (name === "mdef" && one === "value") {
+            var ans = 0;
+            if (first) ans -= ((first.equip || {})[one] || {})[name] || 0;
+            if (second) ans += ((second.equip || {})[one] || {})[name] || 0;
+            if (ans != 0) result[one][name] = ans;
           } else {
-            data.imageList.forEach(function (image) {
-              if (
-                one.farme >= (image.beforefarme ?? 0) &&
-                one.farme <= (image.afterfarme ?? data.allFarme)
-              ) {
-                const img = core.material.images.images?.[image.image];
-                if (img) {
-                  const gla = image.globalAlpha ?? 100;
-                  const agla = image.aglobalAlpha ?? gla,
-                    beforefarme = image.beforefarme ?? 0;
-                  const afterfarme = image.afterfarme ?? data.allFarme;
-
-                  anctx.globalAlpha =
-                    (gla +
-                      ((agla - gla) * (one.farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1)) /
-                    100;
-
-                  const cx =
-                      (image.cx ?? 0) +
-                      (((image.acx ?? 0) - (image.cx ?? 0)) *
-                        (one.farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    cy =
-                      (image.cy ?? 0) +
-                      (((image.acy ?? 0) - (image.cy ?? 0)) *
-                        (one.farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    cw =
-                      (image.cw ?? img.width) +
-                      (((image.acw ?? img.width) - (image.cw ?? img.width)) *
-                        (one.farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    ch =
-                      (image.ch ?? img.height) +
-                      (((image.acw ?? img.height) - (image.cw ?? img.height)) *
-                        (one.farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    x =
-                      (image.x ?? 0) +
-                      (((image.ax ?? 0) - (image.x ?? 0)) *
-                        (one.farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    y =
-                      (image.y ?? 0) +
-                      (((image.ay ?? 0) - (image.y ?? 0)) *
-                        (one.farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    w =
-                      (image.w ?? one.width) +
-                      (((image.aw ?? one.width) - (image.w ?? one.width)) *
-                        (one.farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    h =
-                      (image.h ?? one.height) +
-                      (((image.aw ?? one.height) - (image.w ?? one.height)) *
-                        (one.farme - beforefarme)) /
-                        (afterfarme - beforefarme || 1),
-                    angle =
-                      (Math.PI *
-                        ((image.image.angle ?? 0) +
-                          (((image.aangle ?? 0) - (image.image.angle ?? 0)) *
-                            (one.farme - beforefarme)) /
-                            (afterfarme - beforefarme || 1))) /
-                      180;
-
-                  if (one.hero) {
-                    let sx, sy;
-                    if (core.status.heroMoving < 0) {
-                      sx = 0;
-                      sy = 0;
-                    } else {
-                      sx =
-                        core.utils.scan[core.status.hero.loc.direction].x *
-                        4 *
-                        core.status.heroMoving;
-                      sy =
-                        core.utils.scan[core.status.hero.loc.direction].y *
-                        4 *
-                        core.status.heroMoving;
-                    }
-                    const herox = core.status.hero.loc.x * 32 + 16 + sx;
-                    const heroy = core.status.hero.loc.y * 32 + 16 + sy;
-                    core.drawImage(
-                      anctx,
-                      img,
-                      cx,
-                      cy,
-                      cw,
-                      ch,
-                      herox + (x - data.px) * one.scalex,
-                      heroy + (y - data.py) * one.scaley,
-                      w * one.scalex,
-                      h * one.scaley,
-                      angle
-                    );
-                  } else {
-                    core.drawImage(
-                      anctx,
-                      img,
-                      cx,
-                      cy,
-                      cw,
-                      ch,
-                      one.x + (x - data.px) * one.scalex,
-                      one.y + (y - data.py) * one.scaley,
-                      w * one.scalex,
-                      h * one.scaley,
-                      angle
-                    );
-                  }
-                }
-              }
-            });
-            data.soundList.forEach(function (sound) {
-              const lisen =
-                sound.sound &&
-                core.material.sounds[sound.sound] &&
-                core.musicStatus.soundStatus;
-              if (one.farme == sound.startfarme && lisen) {
-                if (sound.stopbefore) core.stopSound();
-                core.playSound(sound.sound);
-              }
-            });
-            one.farme++;
-            if (one.farme > data.allFarme) core.plugin.playing.delete(one);
+            if (typeof core.status.hero[name] == "number") {
+              var ans = 0;
+              if (first) ans += ((first.equip || {})[one] || {})[name] || 0;
+              if (second) ans -= ((second.equip || {})[one] || {})[name] || 0;
+              if (ans != 0) result[one][name] = ans;
+            }
           }
-        });
+        }
       }
-    });
-  }
+      return result;
+    };
+    let a = 1;
+    items.prototype._loadEquipEffect = function (equipId, unloadEquipId) {
+      // 比较能力值
+      var result = core.compareEquipment(equipId, unloadEquipId);
+
+      for (var name in result.percentage) {
+        if (name === "mdef") {
+          a *= result.percentage[name];
+          core.setBuff(name, 1 - a);
+        } else {
+          core.addBuff(name, result.percentage[name] / 100);
+        }
+      }
+      for (var name in result.value)
+        core.status.hero[name] += result.value[name];
+    };
+  },
+    "攻速临界": function () {
+	// 在此增加新插件
+	//临界表
+	core.ui._drawBookDetail_turnAndCriticals = function (enemy, floorId, texts) {
+		// 临界表
+		var criticals = core.enemys.nextCriticals(enemy.id, 8, enemy.x, enemy.y, floorId).map(function (v) {
+			return core.formatBigNumber(v[0]) + ":" + core.formatBigNumber(v[1]);
+		});
+		while (criticals[0] == '0:0') criticals.shift();
+		texts.push("\r[#FF6A6A]\\d攻击临界表:\\d\r[]" + JSON.stringify(criticals));
+		var criticals_spell = core.nextCriticals_spell(enemy.id, 8, enemy.x, enemy.y, floorId).map(function (v) {
+			return core.formatBigNumber(v[0]) + ":" + core.formatBigNumber(v[1]);
+		});
+		while (criticals_spell[0] == '0:0') criticals_spell.shift();
+		texts.push("\r[#FF6A6A]\\d法强临界表:\\d\r[]" + JSON.stringify(criticals_spell));
+		var criticals_speed = core.nextCriticals_speed(enemy.id, 8, enemy.x, enemy.y, floorId).map(function (v) {
+			return core.formatBigNumber(v[0]) + ":" + core.formatBigNumber(v[1]);
+		});
+		while (criticals_speed[0] == '0:0') criticals_speed.shift();
+		texts.push("\r[#FF6A6A]\\d速度临界表:\\d\r[]" + JSON.stringify(criticals_speed));
+
+	}
+	//攻速临界计算
+	core.nextCriticals_speed = function (enemy, number, x, y, floorId) {
+		if (typeof enemy == 'string') enemy = core.material.enemys[enemy];
+		number = number || 1;
+
+		var info = core.getDamageInfo(enemy, null, x, y, floorId);
+		if (info == null) { // 如果未破防...
+			return [
+				['?', '?']
+			];
+		}
+
+		if (typeof info == 'number') {
+			return [
+				[0, 0]
+			];
+		}
+		return core.enemys._nextSpeedCriticals_useBinarySearch(enemy, info, number, x, y, floorId);
+	}
+	enemys.prototype._nextSpeedCriticals_useBinarySearch = function (enemy, info, number, x, y, floorId) {
+		var mon_hp = info.mon_hp,
+			hero_speed = core.status.hero.speed,
+			mon_def = info.mon_def,
+			pre = info.damage;
+		var list = [];
+		var start_speed = hero_speed;
+
+		var calNext = function (currSpeed, maxSpeed) {
+			var start = Math.floor(currSpeed),
+				end = Math.floor(maxSpeed);
+			if (start > end) return null;
+
+			while (start < end) {
+				var mid = Math.floor((start + end) / 2);
+				if (mid - start > end - mid) mid--;
+				var nextInfo = core.enemys.getDamageInfo(enemy, { "speed": mid }, x, y, floorId);
+				if (nextInfo == null || (typeof nextInfo == 'number')) return null;
+				if (pre > nextInfo.damage) end = mid;
+				else start = mid + 1;
+			}
+			var nextInfo = core.enemys.getDamageInfo(enemy, { "speed": start }, x, y, floorId);
+			return nextInfo == null || (typeof nextInfo == 'number') || nextInfo.damage >= pre ? null : [start, nextInfo.damage];
+		}
+		var currSpeed = start_speed;
+		while (true) {
+			var next = calNext(currSpeed + 1, Number.MAX_SAFE_INTEGER, pre);
+			if (next == null) break;
+			currSpeed = next[0];
+			pre = next[1];
+			list.push([currSpeed - hero_speed, info.damage - pre]);
+			if (pre <= 0 && !core.flags.enableNegativeDamage) break;
+			if (list.length >= number) break;
+		}
+		if (list.length == 0) list.push([0, 0]);
+		return list;
+	}
+	//法强临界计算
+	core.nextCriticals_spell = function (enemy, number, x, y, floorId) {
+		if (typeof enemy == 'string') enemy = core.material.enemys[enemy];
+		number = number || 1;
+
+		var info = core.getDamageInfo(enemy, null, x, y, floorId);
+		if (info == null) { // 如果未破防...
+			return [
+				['?', '?']
+			];
+		}
+
+		if (typeof info == 'number') {
+			return [
+				[0, 0]
+			];
+		}
+		return core.enemys._nextSpellCriticals_useBinarySearch(enemy, info, number, x, y, floorId);
+	}
+	enemys.prototype._nextSpellCriticals_useBinarySearch = function (enemy, info, number, x, y, floorId) {
+		var mon_hp = info.mon_hp,
+			hero_spell = core.status.hero.spell,
+			mon_def = info.mon_def,
+			turn = info.mon_turn,
+			pre = info.damage;
+		var list = [];
+		var start_spell = hero_spell;
+
+		var calNext = function (currSpell, maxSpell) {
+			var start = Math.floor(currSpell),
+				end = Math.floor(maxSpell);
+			if (start > end) return null;
+
+			while (start < end) {
+				var mid = Math.floor((start + end) / 2);
+				if (mid - start > end - mid) mid--;
+				var nextInfo = core.enemys.getDamageInfo(enemy, { "spell": mid }, x, y, floorId);
+				if (nextInfo == null || (typeof nextInfo == 'number')) return null;
+				if (turn > nextInfo.mon_turn) end = mid;
+				else start = mid + 1;
+			}
+			var nextInfo = core.enemys.getDamageInfo(enemy, { "spell": start }, x, y, floorId);
+			return nextInfo == null || (typeof nextInfo == 'number') || nextInfo.mon_turn >= turn ? null : [start, nextInfo.damage];
+		}
+		var currSpell = start_spell;
+		while (true) {
+			var next = calNext(currSpell + 1, Number.MAX_SAFE_INTEGER, pre, turn);
+			if (next == null) break;
+			currSpell = next[0];
+			pre = next[1];
+			list.push([currSpell - hero_spell, info.damage - pre]);
+			if (pre <= 0 && !core.flags.enableNegativeDamage) break;
+			if (list.length >= number) break;
+		}
+		if (list.length == 0) list.push([0, 0]);
+		return list;
+	}
+},
+    "手册(临时)": function () {
+	// 在此增加新插件
+	ui.prototype._drawBook_drawContent = function (index, enemy, top, left) {
+		var width = core._PX_ - left; // 9 : 8 : 8 划分三列
+		this._drawBook_drawRow1(index, enemy, top, left, width, top + 20);
+		this._drawBook_drawRow4(index, enemy, top, left, width, top + 38);
+		this._drawBook_drawRow2(index, enemy, top, left, width, top + 56);
+		this._drawBook_drawRow3(index, enemy, top, left, width, top + 74);
+		this._drawBook_drawRow5(index, enemy, top, left, width, top + 90);
+	}
+
+	ui.prototype._drawBook_drawRow4 = function (index, enemy, top, left, width, position) {
+		// 绘制第一行
+		core.setTextAlign('ui', 'left');
+		var b13 = this._buildFont(13, true),
+			f13 = this._buildFont(13, false);
+		var col1 = left,
+			col2 = left + width * 9 / 25,
+			col3 = left + width * 17 / 25;
+		core.fillText('ui', core.getStatusLabel('speed'), col1, position, '#DDDDDD', f13);
+		core.fillText('ui', core.formatBigNumber(enemy.speed || 0), col1 + 30, position, null, b13);
+		core.fillText('ui', core.getStatusLabel('spell'), col2, position, null, f13);
+		core.fillText('ui', core.formatBigNumber(enemy.spell || 0), col2 + 30, position, null, b13);
+		core.fillText('ui', core.getStatusLabel('mdef'), col3, position, null, f13);
+		core.fillText('ui', core.formatBigNumber(enemy.mdef || 0) + "%", col3 + 30, position, null, b13);
+	}
+	ui.prototype._drawBook_drawRow5 = function (index, enemy, top, left, width, position) {
+		// 绘制第一行
+		core.setTextAlign('ui', 'left');
+		var b13 = this._buildFont(13, true),
+			f13 = this._buildFont(13, false);
+		var col1 = left,
+			col2 = left + width * 13 / 25;
+		core.fillText('ui', '速度临界', col1 - 120, position, '#DDDDDD', f13);
+		core.fillText('ui', `[${core.formatBigNumber(enemy.criticalSpeed?.[0] || 0)},${core.formatBigNumber(enemy.criticalSpeed?.[1] || 0)}]`, col1 - 60, position, null, b13);
+
+		core.fillText('ui', "勇士出手次数", col1, position, '#DDDDDD', f13);
+		core.fillText('ui', core.getDamageInfo(enemy, null) ? core.getDamageInfo(enemy, null).hero_turn : '???', col1 + 80, position, null, b13);
+		core.fillText('ui', "怪物出手次数", col2, position, null, f13);
+		core.fillText('ui', core.getDamageInfo(enemy, null) ? core.getDamageInfo(enemy, null).mon_turn : '???', col2 + 80, position, null, b13);
+
+	}
+	ui.prototype._drawBook_pageinfo = function () {
+		var per_page = 4;
+		var padding_top = 12; // 距离顶端像素
+		var per_height = (core._PY_ - 32 - padding_top) / per_page;
+		return { per_page: per_page, padding_top: padding_top, per_height: per_height };
+	}
+},
+    "新怪物手册": function () {
+	// 在此增加新插件
+	const book = document.createElement("canvas"); //创建怪物手册画布
+	book.style.position = "absolute";
+	book.style.zIndex = 400;
+	book.style.display = "none";
+	book.id = "book";
+	main.dom.gameGroup.insertAdjacentElement("afterend", book);
+	book.style.top = "50%";
+	book.style.left = "50%";
+	book.style.transform = "translate(-50%,-50%)";
+	const ctx = book.getContext("2d");
+	main.dom.book = book
+
+	book.onclick = function (e) { //画布点击监听
+		try {
+			e.preventDefault();
+			const left = core.dom.gameGroup.offsetLeft;
+			const top = core.dom.gameGroup.offsetTop;
+			const px = Math.floor((e.clientX - left) / core.domStyle.scale),
+				py = Math.floor((e.clientY - top) / core.domStyle.scale);
+
+			let x, y;
+			if (core.domStyle.isVertical) { //对竖屏进行坐标转换
+				x = py * 3;
+				y = 1248 - px * 3;
+			} else {
+				x = px * 3;
+				y = py * 3;
+			}
+			bookclick(x, y)
+		} catch (ee) {
+			main.log(ee);
+		}
+	}
+
+	function bookclick(x, y) { //点击画布(x,y)触发的效果
+		const makeBox = ([x, y], [w, h]) => { //创建点击检测区域
+			return [
+				[x, y],
+				[x + w, y + h],
+			];
+		};
+		const pos = [x, y]; //创建点击坐标pos
+		const inRect = ([x, y], [ //检测点击坐标是否在检测区域中
+			[sx, sy],
+			[dx, dy]
+		]) => {
+			return sx <= x && x <= dx && sy <= y && y <= dy;
+		};
+		/**
+		 * 使用范例
+		 *const backbox = makeBox([15, 35], [210, 90]);
+		 *if(inRect(pos,backbox)){}
+		 */
+	}
+	this.drawBook = function (floorId = core.status.floorId) {
+		if (core.domStyle.isVertical) { //对竖屏进行绘制坐标变换,只需要考虑横屏绘制,竖屏将自适应转置
+			ctx.canvas.width = 1248;
+			ctx.canvas.height = 2028;
+			ctx.save(); //保存设置
+			ctx.translate(1248, 0); //重新定位右上角为基准
+			ctx.rotate(Math.PI / 2); //旋转90度
+		} else {
+			ctx.canvas.width = 2028;
+			ctx.canvas.height = 1248;
+		}
+		//在这里写绘制内容,只写横屏就行
+
+		ctx.restore(); //恢复变换前的坐标,否则将连续转置
+	}
+},
+    "存读档": function () {
+	// 在此增加新插件
+	const saveLoad = document.createElement("canvas"); //创建存读档画布
+	saveLoad.style.position = "absolute";
+	saveLoad.style.zIndex = 390;
+	saveLoad.style.display = "none";
+	saveLoad.id = "saveLoad";
+	main.dom.gameGroup.insertAdjacentElement("afterend", saveLoad);
+	saveLoad.style.top = "50%";
+	saveLoad.style.left = "50%";
+	saveLoad.style.transform = "translate(-50%,-50%)";
+	const ctx = saveLoad.getContext("2d");
+	main.dom.saveLoad = saveLoad
+	let cg = false
+	let choose = false
+	//////存读档界面更新
+	class SL {
+		constructor() {
+			this.index = 0;
+			this.refresh = false;
+			this.page = 0;
+			this.max_page = 1000
+			this.id = ""
+
+		}
+		update() {
+			core.clearMap(ctx)
+			core.ui._drawSLPanel_draw(this.page, this.max_page)
+		}
+		setIndex(index = this.index, refresh = this.refresh) {
+			this.index = index
+			core.saves.saveIndex = index
+			this.refresh = refresh
+		}
+		setPage(page = this.page) {
+			this.page = page
+		}
+		setOffset(offset = this.offset) {
+			this.offset = offset
+		}
+		setMax_page(max_page = this.max_page) {
+			this.max_page = max_page
+		}
+		setId(id) {
+			this.id = id
+		}
+	}
+	core.saveLoad = new SL()
+	saveLoad.onclick = function (e) { //画布点击监听
+		try {
+			e.preventDefault();
+			const left = core.dom.gameGroup.offsetLeft;
+			const top = core.dom.gameGroup.offsetTop;
+			const px = Math.floor((e.clientX - left) / core.domStyle.scale),
+				py = Math.floor((e.clientY - top) / core.domStyle.scale);
+
+			let x, y;
+			if (core.domStyle.isVertical) { //对竖屏进行坐标转换
+				x = py * 3;
+				y = 1248 - px * 3;
+			} else {
+				x = px * 3;
+				y = py * 3;
+			}
+			saveLoadclick(x, y)
+		} catch (ee) {
+			main.log(ee);
+		}
+	}
+	////// 删除某个存档
+	control.prototype.removeSave = function (index, callback) {
+		if (index == 0 || index == "autoSave") {
+			index = "autoSave";
+			core.removeLocalForage(index, function () {
+				core.saves.autosave.data = null;
+				core.saves.autosave.updated = false;
+				if (callback) callback();
+			});
+			return;
+		}
+		core.removeLocalForage(
+			"save" + index,
+			function () {
+				core.saves.favorite = core.saves.favorite.filter(function (i) {
+					return core.hasSave(i);
+				});
+				delete core.saves.favoriteName[index];
+				core.setLocalStorage("_slText" + index)
+				core.control._updateFavoriteSaves();
+				if (callback) callback();
+			},
+			function () {
+				core.playSound("操作失败");
+				core.drawTip("无法删除存档!");
+				if (callback) callback();
+			}
+		);
+	};
+	control.prototype._doSL_save = function (id) {
+		if (id == "autoSave") {
+			core.playSound("操作失败");
+			return core.drawTip("不能覆盖自动存档!");
+		}
+		// 在事件中的存档
+		if (core.status.event.interval != null)
+			core.setFlag("__events__", core.status.event.interval);
+		var data = core.saveData();
+		if (core.isReplaying() && core.status.replay.toReplay.length > 0) {
+			data.__toReplay__ = core.encodeRoute(core.status.replay.toReplay);
+		}
+		core.setLocalStorage("_slText" + id)
+		core.setLocalForage(
+			"save" + id,
+			data,
+			function () {
+				core.saves.saveIndex = id;
+				core.setLocalStorage("saveIndex", core.saves.saveIndex);
+				// 恢复事件
+				if (!core.events.recoverEvents(core.status.event.interval))
+					core.ui.closePanel();
+				core.playSound("存档");
+				core.drawTip("存档成功!");
+			},
+			function (err) {
+				console.error(err);
+				alert("存档失败,错误信息:\n" + err);
+			}
+		);
+		core.removeFlag("__events__");
+		return;
+	};
+
+	function saveLoadclick(x, y) { //点击画布(x,y)触发的效果
+		const makeBox = ([x, y], [w, h]) => { //创建点击检测区域
+			return [
+				[x, y],
+				[x + w, y + h],
+			];
+		};
+		const pos = [x, y]; //创建点击坐标pos
+		const inRect = ([x, y], [ //检测点击坐标是否在检测区域中
+			[sx, sy],
+			[dx, dy]
+		]) => {
+			return sx <= x && x <= dx && sy <= y && y <= dy;
+		};
+		let page = core.status.event.data.page,
+			offset = core.status.event.data.offset;
+		let index = page * 10 + offset;
+
+		const upbox = makeBox([675, 370], [100, 100]);
+		const upupbox = makeBox([675, 260], [100, 110]);
+		const upupupbox = makeBox([675, 150], [100, 120]);
+		const downbox = makeBox([675, 660], [100, 100]);
+		const downdownbox = makeBox([675, 760], [100, 110]);
+		const downdowndownbox = makeBox([675, 870], [100, 120]);
+		const addbox = makeBox([650, 1010], [150, 100]);
+		const modebox = makeBox([30, 124], [270, 1000]);
+		const save0box = makeBox([300, 100], [350, 124]);
+		const savebox = makeBox([300, 224], [350, 800]);
+		const save9box = makeBox([300, 1024], [350, 124]);
+		const backbox = makeBox([1750, 1150], [200, 100]);
+		const savenamebox = makeBox([800, 970], [250, 70]);
+		const classnamebox = makeBox([800, 1070], [250, 70]);
+		const savetextbox = makeBox([1050, 982], [640, 150]);
+		const cgbox = makeBox([1200, 1150], [300, 100])
+		const changebox = makeBox([1700, 970], [200, 70])
+		const deletebox = makeBox([1700, 1070], [200, 70])
+		const gobox = makeBox([800, 100], [1050, 870])
+		const favbox = makeBox([900, 300], [500, 110])
+		const class1box = makeBox([900, 410], [500, 110])
+		const class2box = makeBox([900, 520], [500, 110])
+		const class3box = makeBox([900, 630], [500, 110])
+		const class4box = makeBox([900, 740], [500, 110])
+		const class5box = makeBox([1400, 300], [500, 110])
+		const class6box = makeBox([1400, 410], [500, 110])
+		const class7box = makeBox([1400, 520], [500, 110])
+		const class8box = makeBox([1400, 630], [500, 110])
+		const changebackbox = makeBox([1700, 740], [130, 110])
+
+		if (inRect(pos, upbox)) {
+			choose = false
+			core.playSound('光标移动');
+			core.ui._drawSLPanel(10 * (page - 1) + offset);
+			return;
+		}
+		if (inRect(pos, upupbox)) {
+			choose = false
+			core.playSound('光标移动');
+			core.ui._drawSLPanel(10 * (page - 10) + offset);
+			return;
+		}
+		if (inRect(pos, upupupbox)) {
+			choose = false
+			core.playSound('光标移动');
+			core.ui._drawSLPanel(10 * (page - 100) + offset);
+			return;
+		}
+		if (inRect(pos, downbox)) {
+			choose = false
+			core.playSound('光标移动');
+			core.ui._drawSLPanel(10 * (page + 1) + offset);
+			return;
+		}
+		if (inRect(pos, downdownbox)) {
+			choose = false
+			core.playSound('光标移动');
+			core.ui._drawSLPanel(10 * (page + 10) + offset);
+			return;
+		}
+		if (inRect(pos, downdowndownbox)) {
+			choose = false
+			core.playSound('光标移动');
+			core.ui._drawSLPanel(10 * (page + 100) + offset);
+			return;
+		}
+		if (inRect(pos, backbox)) {
+			choose = false
+			if (core.events.recoverEvents(core.status.event.interval))
+				return;
+			core.ui.closePanel();
+			delete core.status.tempRoute;
+			if (!core.isPlaying())
+				core.showStartAnimate(true);
+			return;
+		}
+		if (inRect(pos, gobox) && !choose) {
+			if (offset == 0)
+				core.doSL("autoSave", core.status.event.id);
+			else {
+				var id = 9 * page + offset;
+				if (core.status.event.data.mode == 'fav') id = core.saves.favorite[id - 1];
+				if (core.status.event.data.mode !== 'fav' && core.status.event.data.mode !== 'all') id = core.saves[core.status.event.data.mode][id - 1];
+				core.doSL(id, core.status.event.id);
+			}
+			return;
+		}
+		if (inRect(pos, addbox) && core.status.event.data.mode === "all" && core.getLocalStorage("save_page", 0) !== 8000) {
+			core.playSound('确定');
+			core.setLocalStorage("save_page", core.getLocalStorage("save_page", 0) + 1000)
+			core.ui._drawSLPanel(10 * page + offset, true);
+			return;
+		}
+		if (inRect(pos, modebox)) {
+			choose = false
+			let mode = Math.floor((y - 124) / 100) - 1
+			if (mode < 0 && core.status.event.data.mode !== "all") {
+				core.status.event.data.mode = "all"
+				page = parseInt((core.saves.saveIndex - 1) / 9);
+				offset = core.saves.saveIndex - 9 * page;
+				core.ui._drawSLPanel(0, true);
+				return;
+			}
+			if (mode === 0 && core.status.event.data.mode !== "fav") {
+				core.status.event.data.mode = "fav"
+				core.ui._drawSLPanel(0, true);
+				return;
+			}
+			if (mode > 0 && core.status.event.data.mode !== `class_${mode}`) {
+				core.status.event.data.mode = `class_${mode}`
+				core.ui._drawSLPanel(0, true);
+				return;
+			}
+			return;
+		}
+
+		if (inRect(pos, save0box)) {
+			choose = false
+			core.saveLoad.setId("autoSave")
+			if (offset === 0) {
+				core.doSL("autoSave", core.status.event.id)
+				return
+			}
+			core.ui._drawSLPanel(10 * page)
+			return;
+		}
+		if (inRect(pos, savebox)) {
+			choose = false
+			let a = Math.ceil((y - 224) / 100)
+			let real_id = 9 * page + a
+			if (real_id == index) {
+				if (core.status.event.data.mode === "fav") {
+					real_id = core.saves.favorite[a - 1]
+				}
+				if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+					real_id = core.saves[core.status.event.data.mode][a - 1]
+				}
+				core.saveLoad.setId(real_id)
+				core.doSL(real_id, core.status.event.id)
+				return
+			} else {
+				if (core.status.event.data.mode === "fav") {
+					real_id = core.saves.favorite[a - 1]
+				}
+				if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+					real_id = core.saves[core.status.event.data.mode][a - 1]
+				}
+				core.saveLoad.setId(real_id)
+			}
+			core.ui._drawSLPanel(10 * page + a)
+			return;
+		}
+		if (inRect(pos, save9box)) {
+			choose = false
+			let real_id = 9 * page + 9
+			if (real_id == index) {
+				if (core.status.event.data.mode === "fav") {
+					real_id = core.saves.favorite[9 * page + 8]
+				}
+				if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+					real_id = core.saves[core.status.event.data.mode][9 * page + 8]
+				}
+				core.saveLoad.setId(real_id)
+				core.doSL(real_id, core.status.event.id)
+				return
+			} else {
+				real_id = core.saves.favorite[9 * page + 8]
+
+				if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+					real_id = core.saves[core.status.event.data.mode][9 * page + 8]
+				}
+				core.saveLoad.setId(real_id)
+
+			}
+			core.ui._drawSLPanel(10 * page + 9)
+			return;
+		}
+		if (inRect(pos, changebox)) {
+			choose = !choose
+			core.ui._drawSLPanel(index)
+			return;
+		}
+		if (inRect(pos, deletebox)) {
+			choose = false
+			let real_id = 9 * page + offset
+			if (core.status.event.data.mode === "fav") {
+				real_id = core.saves.favorite[9 * page + offset - 1]
+			}
+			if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+				real_id = core.saves[core.status.event.data.mode][9 * page + offset - 1]
+			}
+			core.removeSave(real_id, function () {
+				core.ui._drawSLPanel(index, true);
+			});
+			return;
+		}
+		if (inRect(pos, cgbox)) {
+			choose = false
+			cg = !cg
+			core.ui._drawSLPanel(10 * page + offset, true)
+			return;
+		}
+		if (inRect(pos, savenamebox) && offset !== 0) {
+			choose = false
+
+			let real_id = 9 * page + offset
+			if (core.status.event.data.mode === "fav") {
+				real_id = core.saves.favorite[9 * page + offset - 1]
+			}
+			if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+				real_id = core.saves[core.status.event.data.mode][9 * page + offset - 1]
+			}
+
+
+			core.myprompt("请输入想要显示的存档名(长度不超过5字符)", null, function (value) {
+				if (value && value.length <= 5) {
+					core.saves.favoriteName[real_id] = value;
+					core.control._updateFavoriteSaves();
+					core.ui._drawSLPanel(10 * page + offset);
+				} else if (value) {
+					alert("无效的输入!");
+				} else if (value === "") {
+					delete core.saves.favoriteName[real_id];
+					core.control._updateFavoriteSaves();
+					core.ui._drawSLPanel(10 * page + offset);
+				}
+			});
+
+			return;
+		}
+		if (inRect(pos, savetextbox) && offset !== 0) {
+			choose = false
+
+			let real_id = 9 * page + offset
+			if (core.status.event.data.mode === "fav") {
+				real_id = core.saves.favorite[9 * page + offset - 1]
+			}
+			if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+				real_id = core.saves[core.status.event.data.mode][9 * page + offset - 1]
+			}
+
+
+			core.myprompt("请输入存档笔记(长度不超过60字符)", null, function (value) {
+				if (value && value.length <= 60) {
+					core.setLocalStorage("_slText" + real_id, value)
+					core.ui._drawSLPanel(10 * page + offset);
+				} else if (value) {
+					alert("无效的输入!");
+				} else if (value === "") {
+					core.setLocalStorage("_slText" + real_id)
+					core.ui._drawSLPanel(10 * page + offset);
+				}
+			});
+
+			return;
+		}
+		if (inRect(pos, classnamebox) && core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+			choose = false
+
+			core.myprompt("请输入想要显示的存档分类(长度不超过5字符)", null, function (value) {
+				if (value && value.length <= 5) {
+					core.setLocalStorage("slClass_" + core.status.event.data.mode[6], value)
+					core.ui._drawSLPanel(10 * page + offset);
+				} else if (value) {
+					alert("无效的输入!");
+				} else if (value === "") {
+					core.setLocalStorage("slClass_" + core.status.event.data.mode[6])
+					core.ui._drawSLPanel(10 * page + offset);
+				}
+			});
+
+			return;
+		}
+		if (choose) {
+			if (inRect(pos, changebackbox)) {
+				choose = false
+				core.ui._drawSLPanel(index);
+				return
+			}
+			if (inRect(pos, favbox)) {
+				let real_id = 9 * page + offset
+				if (core.status.event.data.mode === "fav") {
+					real_id = core.saves.favorite[9 * page + offset - 1]
+				}
+				if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+					real_id = core.saves[core.status.event.data.mode][9 * page + offset - 1]
+				}
+
+				let v = core.saves.favorite.indexOf(real_id)
+				if (v >= 0) { // 已经处于收藏状态:取消收藏
+					core.saves.favorite.splice(v, 1);
+					if (core.status.event.data.mode === "fav") choose = false
+				} else if (core.hasSave(real_id)) { // 存在存档则进行收藏
+
+					core.saves.favorite.push(real_id);
+
+					core.saves.favorite = core.saves.favorite.sort(function (a, b) { return a - b; }); // 保证有序
+
+				}
+				core.control._updateFavoriteSaves()
+				core.ui._drawSLPanel(index);
+				return
+			}
+			if (inRect(pos, class1box)) {
+				let real_id = 9 * page + offset
+				if (core.status.event.data.mode === "fav") {
+					real_id = core.saves.favorite[9 * page + offset - 1]
+				}
+				if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+					real_id = core.saves[core.status.event.data.mode][9 * page + offset - 1]
+				}
+				let v = core.saves.class_1.indexOf(real_id)
+				if (v >= 0) {
+					core.saves.class_1.splice(v, 1);
+					if (core.status.event.data.mode === "class_1") choose = false
+				} else if (core.hasSave(real_id)) {
+					core.saves.class_1.push(real_id);
+					core.saves.class_1 = core.saves.class_1.sort(function (a, b) { return a - b; }); // 保证有序
+				}
+				core.control._updateFavoriteSaves()
+				core.ui._drawSLPanel(index);
+				return
+			}
+			if (inRect(pos, class2box)) {
+				let real_id = 9 * page + offset
+				if (core.status.event.data.mode === "fav") {
+					real_id = core.saves.favorite[9 * page + offset - 1]
+				}
+				if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+					real_id = core.saves[core.status.event.data.mode][9 * page + offset - 1]
+				}
+				let v = core.saves.class_2.indexOf(real_id)
+				if (v >= 0) {
+					core.saves.class_2.splice(v, 1);
+					if (core.status.event.data.mode === "class_2") choose = false
+				} else if (core.hasSave(real_id)) {
+					core.saves.class_2.push(real_id);
+					core.saves.class_2 = core.saves.class_2.sort(function (a, b) { return a - b; }); // 保证有序
+				}
+				core.control._updateFavoriteSaves()
+				core.ui._drawSLPanel(index);
+				return
+			}
+			if (inRect(pos, class3box)) {
+				let real_id = 9 * page + offset
+				if (core.status.event.data.mode === "fav") {
+					real_id = core.saves.favorite[9 * page + offset - 1]
+				}
+				if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+					real_id = core.saves[core.status.event.data.mode][9 * page + offset - 1]
+				}
+				let v = core.saves.class_3.indexOf(real_id)
+				if (v >= 0) {
+					core.saves.class_3.splice(v, 1);
+					if (core.status.event.data.mode === "class_3") choose = false
+				} else if (core.hasSave(real_id)) {
+					core.saves.class_3.push(real_id);
+					core.saves.class_3 = core.saves.class_3.sort(function (a, b) { return a - b; }); // 保证有序
+				}
+				core.control._updateFavoriteSaves()
+				core.ui._drawSLPanel(index);
+				return
+			}
+			if (inRect(pos, class4box)) {
+				let real_id = 9 * page + offset
+				if (core.status.event.data.mode === "fav") {
+					real_id = core.saves.favorite[9 * page + offset - 1]
+				}
+				if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+					real_id = core.saves[core.status.event.data.mode][9 * page + offset - 1]
+				}
+				let v = core.saves.class_4.indexOf(real_id)
+				if (v >= 0) {
+					core.saves.class_4.splice(v, 1);
+					if (core.status.event.data.mode === "class_4") choose = false
+				} else if (core.hasSave(real_id)) {
+					core.saves.class_4.push(real_id);
+					core.saves.class_4 = core.saves.class_4.sort(function (a, b) { return a - b; }); // 保证有序
+				}
+				core.control._updateFavoriteSaves()
+				core.ui._drawSLPanel(index);
+				return
+			}
+			if (inRect(pos, class5box)) {
+				let real_id = 9 * page + offset
+				if (core.status.event.data.mode === "fav") {
+					real_id = core.saves.favorite[9 * page + offset - 1]
+				}
+				if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+					real_id = core.saves[core.status.event.data.mode][9 * page + offset - 1]
+				}
+				let v = core.saves.class_5.indexOf(real_id)
+				if (v >= 0) {
+					core.saves.class_5.splice(v, 1);
+					if (core.status.event.data.mode === "class_5") choose = false
+				} else if (core.hasSave(real_id)) {
+					core.saves.class_5.push(real_id);
+					core.saves.class_5 = core.saves.class_5.sort(function (a, b) { return a - b; }); // 保证有序
+				}
+				core.control._updateFavoriteSaves()
+				core.ui._drawSLPanel(index);
+				return
+			}
+			if (inRect(pos, class6box)) {
+				let real_id = 9 * page + offset
+				if (core.status.event.data.mode === "fav") {
+					real_id = core.saves.favorite[9 * page + offset - 1]
+				}
+				if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+					real_id = core.saves[core.status.event.data.mode][9 * page + offset - 1]
+				}
+				let v = core.saves.class_6.indexOf(real_id)
+				if (v >= 0) {
+					core.saves.class_6.splice(v, 1);
+					if (core.status.event.data.mode === "class_6") choose = false
+				} else if (core.hasSave(real_id)) {
+					core.saves.class_6.push(real_id);
+					core.saves.class_6 = core.saves.class_6.sort(function (a, b) { return a - b; }); // 保证有序
+				}
+				core.control._updateFavoriteSaves()
+				core.ui._drawSLPanel(index);
+				return
+			}
+			if (inRect(pos, class7box)) {
+				let real_id = 9 * page + offset
+				if (core.status.event.data.mode === "fav") {
+					real_id = core.saves.favorite[9 * page + offset - 1]
+				}
+				if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+					real_id = core.saves[core.status.event.data.mode][9 * page + offset - 1]
+				}
+				let v = core.saves.class_7.indexOf(real_id)
+				if (v >= 0) {
+					core.saves.class_7.splice(v, 1);
+					if (core.status.event.data.mode === "class_7") choose = false
+				} else if (core.hasSave(real_id)) {
+					core.saves.class_7.push(real_id);
+					core.saves.class_7 = core.saves.class_7.sort(function (a, b) { return a - b; }); // 保证有序
+				}
+				core.control._updateFavoriteSaves()
+				core.ui._drawSLPanel(index);
+				return
+			}
+			if (inRect(pos, class8box)) {
+				let real_id = 9 * page + offset
+				if (core.status.event.data.mode === "fav") {
+					real_id = core.saves.favorite[9 * page + offset - 1]
+				}
+				if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+					real_id = core.saves[core.status.event.data.mode][9 * page + offset - 1]
+				}
+				let v = core.saves.class_8.indexOf(real_id)
+				if (v >= 0) {
+					core.saves.class_8.splice(v, 1);
+					if (core.status.event.data.mode === "class_8") choose = false
+				} else if (core.hasSave(real_id)) {
+					core.saves.class_8.push(real_id);
+					core.saves.class_8 = core.saves.class_8.sort(function (a, b) { return a - b; }); // 保证有序
+				}
+				core.control._updateFavoriteSaves()
+				core.ui._drawSLPanel(index);
+				return
+			}
+		}
+	}
+	///// 读取收藏信息
+	control.prototype._loadFavoriteSaves = function () {
+		core.saves.favorite = core.getLocalStorage("favorite", []);
+		// --- 移除不存在的收藏
+		core.saves.favorite = core.saves.favorite.filter(function (i) {
+			return core.hasSave(i);
+		});
+		core.saves.favoriteName = core.getLocalStorage("favoriteName", {});
+	};
+
+
+	///// 读取分类信息
+	control.prototype._loadClassSaves = function () {
+		for (let i = 1; i < 9; i++) {
+			core.saves["class_" + i] = core.getLocalStorage("class_" + i, [])
+			core.saves["class_" + i] = core.saves["class_" + i].filter(function (i) {
+				return core.hasSave(i);
+			})
+		}
+
+	};
+
+	control.prototype._updateFavoriteSaves = function () {
+		core.setLocalStorage("favorite", core.saves.favorite);
+		for (let i = 1; i < 9; i++) {
+			core.setLocalStorage("class_" + i, core.saves["class_" + i])
+		}
+		core.setLocalStorage("favoriteName", core.saves.favoriteName);
+	};
+	////// 绘制存档/读档界面 //////
+	ui.prototype._drawSLPanel = function (index, refresh) {
+		core.control._updateFavoriteSaves()
+		core.control._loadClassSaves();
+		core.control._loadFavoriteSaves();
+
+		if (index == null) index = 1;
+		if (index < 0) index = 0;
+
+		var page = parseInt(index / 10),
+			offset = index % 10;
+		var max_page = (main.savePages + core.getLocalStorage("save_page", 0)) || 30;
+		if (core.status.event.data && core.status.event.data.mode == 'fav')
+			max_page = Math.ceil((core.saves.favorite || []).length / 9);
+		if (page >= max_page) page = max_page - 1;
+		if (core.status.event.data && core.status.event.data.mode == 'fav' && page == max_page - 1) {
+			offset = Math.min(offset, (core.saves.favorite || []).length - 9 * page);
+		}
+		if (core.status.event.data && (core.status.event.data.mode !== 'fav' && core.status.event.data.mode !== 'all'))
+			max_page = Math.ceil((core.saves[core.status.event.data.mode] || []).length / 9);
+		if (page >= max_page) page = max_page - 1;
+		if (core.status.event.data && (core.status.event.data.mode !== 'fav' && core.status.event.data.mode !== 'all') && page == max_page - 1) {
+			offset = Math.min(offset, (core.saves[core.status.event.data.mode] || []).length - 9 * page);
+		}
+
+		var last_page = -1;
+		var mode = 'all';
+		if (core.status.event.data) {
+			last_page = core.status.event.data.page;
+			mode = core.status.event.data.mode;
+		}
+		core.saveLoad.setIndex(index, refresh)
+		core.saveLoad.setPage(page)
+		core.saveLoad.setOffset(offset)
+		core.saveLoad.setMax_page(max_page)
+		core.status.event.data = { 'page': page, 'offset': offset, 'mode': mode };
+		core.status.event.ui = core.status.event.ui || [];
+		saveLoad.style.display = "block"
+		if (refresh || page != last_page) {
+			core.status.event.ui = [];
+			this._drawSLPanel_loadSave(page, function () {
+				core.ui._drawSLPanel_draw(page, max_page);
+			});
+		} else this._drawSLPanel_draw(page, max_page);
+	}
+
+	ui.prototype._drawSLPanel_draw = function (page, max_page) {
+		if (core.domStyle.isVertical) {
+			ctx.canvas.width = 1248;
+			ctx.canvas.height = 2028;
+			ctx.save(); //保存设置
+			ctx.translate(1248, 0); //重新定位右上角为基准
+			ctx.rotate(Math.PI / 2); //旋转90度
+		} else {
+			ctx.canvas.width = 2028;
+			ctx.canvas.height = 1248;
+		}
+		// --- 绘制背景
+		this._drawSLPanel_drawBackground();
+
+		// --- 绘制文字
+		core.setTextAlign(ctx, 'center');
+
+		var bottom = 1248 - 39;
+		core.fillBoldText1(
+			ctx,
+			"返回游戏",
+			1850,
+			bottom,
+			'#DDDDDD',
+			"#000000",
+			6,
+			this._buildFont(45, true)
+		);
+
+		if (core.status.event.selection)
+			core.setFillStyle(ctx, '#FF6A6A');
+		ctx.strokeStyle = "#DDDDDD";
+		ctx.fillStyle = "#BBBB44"
+		ctx.lineWidth = 6
+		ctx.beginPath();
+
+		ctx.moveTo(300, 124)
+		ctx.lineTo(60, 124)
+		ctx.arcTo(30, 124, 30, 224, 30)
+		ctx.lineTo(30, 194)
+		ctx.arcTo(30, 224, 300, 224, 30)
+		ctx.lineTo(300, 224)
+		ctx.stroke()
+		if (core.status.event.data.mode === "all") ctx.fill()
+		ctx.beginPath();
+
+		ctx.moveTo(300, 224)
+		ctx.lineTo(60, 224)
+		ctx.arcTo(30, 224, 30, 324, 30)
+		ctx.lineTo(30, 294)
+		ctx.arcTo(30, 324, 300, 324, 30)
+		ctx.lineTo(300, 324)
+		ctx.stroke()
+		if (core.status.event.data.mode === "fav") ctx.fill()
+		ctx.beginPath();
+
+		ctx.moveTo(300, 324)
+		ctx.lineTo(60, 324)
+		ctx.arcTo(30, 324, 30, 424, 30)
+		ctx.lineTo(30, 394)
+		ctx.arcTo(30, 424, 300, 424, 30)
+		ctx.lineTo(300, 424)
+		ctx.stroke()
+		if (core.status.event.data.mode === "class_1") ctx.fill()
+		ctx.beginPath();
+
+		ctx.moveTo(300, 424)
+		ctx.lineTo(60, 424)
+		ctx.arcTo(30, 424, 30, 524, 30)
+		ctx.lineTo(30, 494)
+		ctx.arcTo(30, 524, 300, 524, 30)
+		ctx.lineTo(300, 524)
+		ctx.stroke()
+		if (core.status.event.data.mode === "class_2") ctx.fill()
+		ctx.beginPath();
+
+		ctx.moveTo(300, 524)
+		ctx.lineTo(60, 524)
+		ctx.arcTo(30, 524, 30, 624, 30)
+		ctx.lineTo(30, 594)
+		ctx.arcTo(30, 624, 300, 624, 30)
+		ctx.lineTo(300, 624)
+		ctx.stroke()
+		if (core.status.event.data.mode === "class_3") ctx.fill()
+		ctx.beginPath();
+
+		ctx.moveTo(300, 624)
+		ctx.lineTo(60, 624)
+		ctx.arcTo(30, 624, 30, 724, 30)
+		ctx.lineTo(30, 694)
+		ctx.arcTo(30, 724, 300, 724, 30)
+		ctx.lineTo(300, 724)
+		ctx.stroke()
+		if (core.status.event.data.mode === "class_4") ctx.fill()
+		ctx.beginPath();
+
+		ctx.moveTo(300, 724)
+		ctx.lineTo(60, 724)
+		ctx.arcTo(30, 724, 30, 824, 30)
+		ctx.lineTo(30, 794)
+		ctx.arcTo(30, 824, 300, 824, 30)
+		ctx.lineTo(300, 824)
+		ctx.stroke()
+		if (core.status.event.data.mode === "class_5") ctx.fill()
+		ctx.beginPath();
+
+		ctx.moveTo(300, 824)
+		ctx.lineTo(60, 824)
+		ctx.arcTo(30, 824, 30, 924, 30)
+		ctx.lineTo(30, 894)
+		ctx.arcTo(30, 924, 300, 924, 30)
+		ctx.lineTo(300, 924)
+		ctx.stroke()
+		if (core.status.event.data.mode === "class_6") ctx.fill()
+		ctx.beginPath();
+
+		ctx.moveTo(300, 924)
+		ctx.lineTo(60, 924)
+		ctx.arcTo(30, 924, 30, 1024, 30)
+		ctx.lineTo(30, 994)
+		ctx.arcTo(30, 1024, 300, 1024, 30)
+		ctx.lineTo(300, 1024)
+		ctx.stroke()
+		if (core.status.event.data.mode === "class_7") ctx.fill()
+		ctx.beginPath()
+		ctx.moveTo(300, 1024)
+		ctx.lineTo(60, 1024)
+		ctx.arcTo(30, 1024, 30, 1124, 30)
+		ctx.lineTo(30, 1094)
+		ctx.arcTo(30, 1124, 300, 1124, 30)
+		ctx.lineTo(300, 1124)
+		ctx.stroke()
+		if (core.status.event.data.mode === "class_8") ctx.fill()
+		core.fillBoldText1(
+			ctx,
+			'全部',
+			170,
+			190,
+			'#DDDDDD',
+			"#000000",
+			6,
+			this._buildFont(45, true)
+		);
+		core.fillBoldText1(
+			ctx,
+			'收藏★',
+			170,
+			290,
+			'#DDDDDD',
+			"#000000",
+			6,
+			this._buildFont(45, true)
+		);
+		core.fillBoldText1(
+			ctx,
+			core.getLocalStorage("slClass_1", "默认分类1"),
+			170,
+			390,
+			'#DDDDDD',
+			"#000000",
+			6,
+			this._buildFont(45, true)
+		);
+		core.fillBoldText1(
+			ctx,
+			core.getLocalStorage("slClass_2", "默认分类2"),
+			170,
+			490,
+			'#DDDDDD',
+			"#000000",
+			6,
+			this._buildFont(45, true)
+		);
+		core.fillBoldText1(
+			ctx,
+			core.getLocalStorage("slClass_3", "默认分类3"),
+			170,
+			590,
+			'#DDDDDD',
+			"#000000",
+			6,
+			this._buildFont(45, true)
+		);
+		core.fillBoldText1(
+			ctx,
+			core.getLocalStorage("slClass_4", "默认分类4"),
+			170,
+			690,
+			'#DDDDDD',
+			"#000000",
+			6,
+			this._buildFont(45, true)
+		);
+		core.fillBoldText1(
+			ctx,
+			core.getLocalStorage("slClass_5", "默认分类5"),
+			170,
+			790,
+			'#DDDDDD',
+			"#000000",
+			6,
+			this._buildFont(45, true)
+		);
+		core.fillBoldText1(
+			ctx,
+			core.getLocalStorage("slClass_6", "默认分类6"),
+			170,
+			890,
+			'#DDDDDD',
+			"#000000",
+			6,
+			this._buildFont(45, true)
+		);
+		core.fillBoldText1(
+			ctx,
+			core.getLocalStorage("slClass_7", "默认分类7"),
+			170,
+			990,
+			'#DDDDDD',
+			"#000000",
+			6,
+			this._buildFont(45, true)
+		);
+		core.fillBoldText1(
+			ctx,
+			core.getLocalStorage("slClass_8", "默认分类8"),
+			170,
+			1090,
+			'#DDDDDD',
+			"#000000",
+			6,
+			this._buildFont(45, true)
+		);
+		core.strokeRoundRect(ctx, 300, 100, 1648, 1048, 30, "#DDDDDD")
+		// --- 绘制记录
+		this._drawSLPanel_drawRecords();
+		ctx.restore();
+
+
+	}
+
+
+	ui.prototype._drawSLPanel_drawBackground = function () {
+
+		const bg = core.material.images.images["eve_011101.webp"]; //背景
+		core.fillRect(ctx, 0, 0, 2028, 1248, "#000000"); //黑色背景
+		ctx.globalAlpha = 0.5; //透明度
+		if (bg) ctx.drawImage(bg, 0, 0, 1280, 720, 0, 0, 2028, 1248); //绘制半透明背景图片
+		ctx.globalAlpha = 1; //恢复为不透明
+
+	}
+
+	ui.prototype._drawSLPanel_loadSave = function (page, callback) {
+		var ids = [0];
+		for (var i = 1; i <= 10; ++i) {
+			var id = 10 * page + i;
+			if (core.status.event.data.mode == 'fav')
+				id = core.saves.favorite[id - 1]; // 因为favorite第一个不是自动存档 所以要偏移1
+			if (core.status.event.data.mode !== 'fav' && core.status.event.data.mode !== "all")
+				id = core.saves[core.status.event.data.mode][id - 1]
+			ids.push(id);
+		}
+		core.getSaves(ids, function (data) {
+			for (var i = 1; i < ids.length; ++i)
+				core.status.event.ui[i] = data[i];
+			core.status.event.ui[0] = data[0] == null ? null : data[0][core.saves.autosave.now - 1];
+			callback();
+		});
+	}
+
+	// 在以x为中心轴 y为顶坐标 的位置绘制一条宽为size的记录 cho表示是否被选中 选中会加粗 highlight表示高亮标题 ✐
+	ui.prototype._drawSLPanel_drawRecord = function (page, offset) {
+		var data = core.status.event.ui[offset]
+		var id = 9 * page + offset
+		core.drawWindowSkin(
+			"winskin.webp",
+			ctx, 1032,
+			252,
+			660,
+			660,
+			null,
+			null,
+			null,
+			3
+		);
+		if (data && data.floorId) {
+			core.setTextAlign('ui', "center");
+			var map = core.maps.loadMap(data.maps, data.floorId);
+			core.extractBlocksForUI(map, data.hero.flags);
+
+			core.drawThumbnail(data.floorId, map.blocks, {
+				heroLoc: data.hero.loc,
+				heroIcon: data.hero.image,
+				flags: data.hero.flags,
+				ctx: ctx,
+				x: 1050,
+				y: 270,
+				size: 1.5,
+				centerX: data.hero.loc.x,
+				centerY: data.hero.loc.y,
+				noHD: true
+			});
+			if (core.isPlaying() && core.getFlag("hard") != data.hero.flags.hard) {
+				core.fillRect(ctx, 1050, 270, 624, 624, [0, 0, 0, 0.4]);
+				core.fillText(ctx, data.hard, 1362, 620, data.hero.flags.__hardColor__ || 'white', this._buildFont(180, true));
+			}
+			core.drawIcon(ctx, "hp", 800, 260, 96, 96);
+			core.drawIcon(ctx, "atk", 800, 370, 96, 96);
+			core.drawIcon(ctx, "def", 800, 470, 96, 96);
+			core.drawIcon(ctx, "I374", 800, 580, 96, 96);
+			core.drawIcon(ctx, "jumpShoes", 800, 690, 96, 96);
+			core.drawIcon(ctx, "money", 800, 810, 96, 96);
+			core.setTextAlign(ctx, 'left');
+			core.fillBoldText1(
+				ctx,
+				core.formatBigNumber(data.hero.hp, true),
+				900,
+				320,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			core.fillBoldText1(
+				ctx,
+				core.formatBigNumber(data.hero.atk, true),
+				900,
+				430,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			core.fillBoldText1(
+				ctx,
+				core.formatBigNumber(data.hero.def, true),
+				900,
+				540,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			core.fillBoldText1(
+				ctx,
+				core.formatBigNumber(data.hero.spell, true),
+				900,
+				650,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			core.fillBoldText1(
+				ctx,
+				core.formatBigNumber(data.hero.speed, true),
+				900,
+				760,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			core.fillBoldText1(
+				ctx,
+				core.formatBigNumber(data.hero.money, true),
+				900,
+				880,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			core.setTextAlign(ctx, 'center');
+			core.fillBoldText1(
+				ctx,
+				core.floors[data.floorId].title,
+				1350,
+				150,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			core.fillBoldText1(
+				ctx,
+				`[${core.floors[data.floorId].areas}]`,
+				1350,
+				220,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			core.drawWindowSkin(
+				"winskin.webp",
+				ctx, 1700,
+				260,
+				96,
+				96,
+				null,
+				null,
+				null,
+				1
+			);
+			core.drawWindowSkin(
+				"winskin.webp",
+				ctx, 1700,
+				400,
+				96,
+				96,
+				null,
+				null,
+				null,
+				1
+			);
+			core.drawWindowSkin(
+				"winskin.webp",
+				ctx, 1700,
+				540,
+				96,
+				96,
+				null,
+				null,
+				null,
+				1
+			);
+			core.drawWindowSkin(
+				"winskin.webp",
+				ctx, 1700,
+				680,
+				96,
+				96,
+				null,
+				null,
+				null,
+				1
+			);
+			core.drawWindowSkin(
+				"winskin.webp",
+				ctx, 1700,
+				810,
+				96,
+				96,
+				null,
+				null,
+				null,
+				1
+			);
+			if (data.hero.equipment[0]) core.drawIcon(ctx, data.hero.equipment[0], 1700, 260, 96, 96)
+			else core.fillBoldText1(
+				ctx,
+				"无",
+				1750,
+				320,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+
+			if (data.hero.equipment[1]) core.drawIcon(ctx, data.hero.equipment[1], 1700, 400, 96, 96)
+			else core.fillBoldText1(
+				ctx,
+				"无",
+				1750,
+				460,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+
+			if (data.hero.equipment[2]) core.drawIcon(ctx, data.hero.equipment[2], 1700, 540, 96, 96)
+			else core.fillBoldText1(
+				ctx,
+				"无",
+				1750,
+				600,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+
+			if (data.hero.equipment[3]) core.drawIcon(ctx, data.hero.equipment[3], 1700, 680, 96, 96)
+			else core.fillBoldText1(
+				ctx,
+				"无",
+				1750,
+				740,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			if (data.hero.equipment[3]) core.drawIcon(ctx, data.hero.equipment[3], 1700, 810, 96, 96)
+			else core.fillBoldText1(
+				ctx,
+				"无",
+				1750,
+				870,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			core.drawIcon(ctx, "yellowKey", 1800, 260, 96, 96)
+			core.drawIcon(ctx, "blueKey", 1800, 420, 96, 96)
+			core.drawIcon(ctx, "redKey", 1800, 580, 96, 96)
+			core.drawIcon(ctx, "greenKey", 1800, 740, 96, 96)
+			core.fillBoldText1(
+				ctx,
+				data.hero.items.tools.yellowKey ?? 0,
+				1850,
+				390,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			core.fillBoldText1(
+				ctx,
+				data.hero.items.tools.blueKey ?? 0,
+				1850,
+				550,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			core.fillBoldText1(
+				ctx,
+				data.hero.items.tools.redKey ?? 0,
+				1850,
+				710,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			core.fillBoldText1(
+				ctx,
+				data.hero.items.tools.greenKey ?? 0,
+				1850,
+				870,
+				'#DDDDDD',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			core.fillBoldText1(
+				ctx,
+				`存档时间${core.formatDate(new Date(data.time))}`,
+				1350, 960, data.hero.flags.debug ? '#FF6A6A' : '#FFFFFF',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			if (offset !== 0) core.fillBoldText1(
+				ctx,
+				"修改存档名",
+				920, 1020, '#FFFFFF',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			if (offset !== 0) core.fillBoldText1(
+				ctx,
+				"存档分类",
+				1800, 1020, '#FFFFFF',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			if (offset !== 0) core.fillBoldText1(
+				ctx,
+				"删除存档",
+				1800, 1120, '#FFFFFF',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+
+			if (core.status.event.data.mode !== "all" && core.status.event.data.mode !== "fav") core.fillBoldText1(
+				ctx,
+				"修改分类名",
+				920, 1120, '#FFFFFF',
+				"#000000",
+				6,
+				this._buildFont(45, true)
+			);
+			if (data.hero.flags._cgText) {
+				core.fillBoldText1(
+					ctx,
+					cg ? "剧情CG模式" : "缩略图模式",
+					1350, 1220, '#FFFFFF',
+					"#000000",
+					6,
+					this._buildFont(45, true)
+				);
+				if (!cg) {
+					core.drawWindowSkin(
+						"winskin.webp",
+						ctx, 805,
+						252,
+						1140,
+						660,
+						null,
+						null,
+						null,
+						3
+					);
+					core.drawImage(ctx, data.cg.image, 823, 270, 1104, 624)
+					let s = 0.5
+					data.cg.bodyList.forEach((v) => {
+						//绘制立绘
+						const body = core.material.images.images?.[v.name];
+						if (v.filter) ctx.filter = "brightness(50%)";
+
+						if (body) {
+							if (!v.w && !v.h && !v.scale) v.scale = 1.7;
+
+							if (!v.w && !v.h) {
+								ctx.drawImage(
+									body,
+									0,
+									0,
+									body.width,
+									body.height,
+									823 + v.px * s,
+									894 - body.height * v.scale * s,
+									body.width * v.scale * s,
+									body.height * v.scale * s
+								);
+							} else {
+								ctx.drawImage(
+									body,
+									0,
+									0,
+									body.width,
+									body.height,
+									823 + v.px * s,
+									894 - (v.h ?? body.height) * s,
+									v.w ?? body.width * s,
+									v.h ?? body.height * s
+								);
+							}
+						}
+						ctx.filter = "none";
+					});
+					core.fillRect(ctx, 823, 694, 1104, 200, "rgba(0,0,0,0.3)")
+					const head = core.material.images.images?.[data.cg.head.name];
+					if (head) {
+						//绘制头像
+						ctx.drawImage(
+							head,
+							0,
+							0,
+							head.width,
+							head.height,
+							823 + data.cg.head.px * s,
+							894 - head.height * 2.2 * s,
+							head.width * 2.2 * s,
+							head.height * 2.2 * s
+						);
+
+
+					}
+					core.setTextAlign(ctx, "left")
+					if (data.cg.name) core.fillBoldText1(
+						ctx,
+						`【${data.cg.name}】`,
+						1143, 720, '#FFFFFF',
+						"#000000",
+						2,
+						this._buildFont(30, true)
+					);
+					if (data.cg.text) core.drawTextContent(ctx, data.cg.text, {
+						left: 1143,
+						top: 750,
+						bold: true,
+						color: "#FFFFFF",
+						align: "left",
+						fontSize: 30,
+						time: 0,
+						font: "Verdana",
+						maxWidth: 800,
+					});
+				}
+			}
+			if (offset !== 0) core.drawWindowSkin(
+				"winskin.webp",
+				ctx, 1050,
+				982,
+				640,
+				150,
+				null,
+				null,
+				null,
+				1
+			);
+			let real_id = id
+			if (core.status.event.data.mode === "fav") {
+				real_id = core.saves.favorite[id - 1]
+			}
+			if (core.status.event.data.mode !== "fav" && core.status.event.data.mode !== "all") {
+				real_id = core.saves[core.status.event.data.mode][id - 1]
+			}
+			if (offset !== 0) core.drawTextContent(ctx, core.getLocalStorage("_slText" + real_id, "点击填写存档笔记"), {
+				left: 1070,
+				top: 1000,
+				bold: true,
+				color: "#FFFFFF",
+				align: "left",
+				fontSize: 30,
+				time: 0,
+				font: "HATTEN",
+				maxWidth: 620,
+			});
+			if (choose) {
+				core.drawWindowSkin(
+					"winskin.webp",
+					ctx, 805,
+					252,
+					1140,
+					660,
+					null,
+					null,
+					null,
+					3
+				);
+				core.fillRect(ctx, 823, 270, 1104, 624, "#000000")
+
+				core.setTextAlign(ctx, 'left')
+				core.fillBoldText1(
+					ctx,
+					`${core.saves.favorite.indexOf(real_id)>=0?"☑":"□"}收藏★`,
+					920, 370, core.saves.favorite.indexOf(real_id) >= 0 ? '#FFFF44' : '#FFFFFF',
+					"#000000",
+					6,
+					this._buildFont(60, true)
+				);
+				core.fillBoldText1(
+					ctx,
+					`${core.saves.class_1.indexOf(real_id)>=0?"☑":"□"}${core.getLocalStorage("slClass_1", "默认分类1")}`,
+					920, 480, core.saves.class_1.indexOf(real_id) >= 0 ? '#FFFF44' : '#FFFFFF',
+					"#000000",
+					6,
+					this._buildFont(60, true)
+				);
+				core.fillBoldText1(
+					ctx,
+					`${core.saves.class_2.indexOf(real_id)>=0?"☑":"□"}${core.getLocalStorage("slClass_2", "默认分类2")}`,
+					920, 590, core.saves.class_2.indexOf(real_id) >= 0 ? "#FFFF44" : '#FFFFFF',
+					"#000000",
+					6,
+					this._buildFont(60, true)
+				);
+				core.fillBoldText1(
+					ctx,
+					`${core.saves.class_3.indexOf(real_id)>=0?"☑":"□"}${core.getLocalStorage("slClass_3", "默认分类3")}`,
+					920, 700, core.saves.class_3.indexOf(real_id) >= 0 ? "#FFFF44" : '#FFFFFF',
+					"#000000",
+					6,
+					this._buildFont(60, true)
+				);
+				core.fillBoldText1(
+					ctx,
+					`${core.saves.class_4.indexOf(real_id)>=0?"☑":"□"}${core.getLocalStorage("slClass_4", "默认分类4")}`,
+					920, 810, core.saves.class_4.indexOf(real_id) >= 0 ? "#FFFF44" : '#FFFFFF',
+					"#000000",
+					6,
+					this._buildFont(60, true)
+				);
+				core.fillBoldText1(
+					ctx,
+					`${core.saves.class_5.indexOf(real_id)>=0?"☑":"□"}${core.getLocalStorage("slClass_5", "默认分类5")}`,
+					1400, 370, core.saves.class_5.indexOf(real_id) >= 0 ? "#FFFF44" : '#FFFFFF',
+					"#000000",
+					6,
+					this._buildFont(60, true)
+				);
+				core.fillBoldText1(
+					ctx,
+					`${core.saves.class_6.indexOf(real_id)>=0?"☑":"□"}${core.getLocalStorage("slClass_6", "默认分类6")}`,
+					1400, 480, core.saves.class_6.indexOf(real_id) >= 0 ? "#FFFF44" : '#FFFFFF',
+					"#000000",
+					6,
+					this._buildFont(60, true)
+				);
+				core.fillBoldText1(
+					ctx,
+					`${core.saves.class_7.indexOf(real_id)>=0?"☑":"□"}${core.getLocalStorage("slClass_7", "默认分类7")}`,
+					1400, 590, core.saves.class_7.indexOf(real_id) >= 0 ? "#FFFF44" : '#FFFFFF',
+					"#000000",
+					6,
+					this._buildFont(60, true)
+				);
+				core.fillBoldText1(
+					ctx,
+					`${core.saves.class_8.indexOf(real_id)>=0?"☑":"□"}${core.getLocalStorage("slClass_8", "默认分类8")}`,
+					1400, 700, core.saves.class_8.indexOf(real_id) >= 0 ? "#FFFF44" : '#FFFFFF',
+					"#000000",
+					6,
+					this._buildFont(60, true)
+				);
+				core.fillBoldText1(
+					ctx,
+					"返回",
+					1700, 810, '#FFFFFF',
+					"#000000",
+					6,
+					this._buildFont(60, true)
+				);
+
+			}
+			ctx.lineWidth = 6
+			core.setTextAlign(ctx, "center")
+		} else {
+
+			core.fillRect(ctx, 1050, 270, 624, 624, '#333333');
+			core.fillText(ctx, '无存档', 1362, 620, "#444444", this._buildFont(180, true));
+		}
+	}
+
+	ui.prototype._drawSLPanel_drawRecords = function (n) {
+		var page = core.status.event.data.page;
+		var offset = core.status.event.data.offset;
+		var name = core.status.event.id == 'save' ? "存档" : core.status.event.id == 'load' ? "读档" : "回放";
+		core.drawLine(ctx, 650, 100, 650, 1148)
+		core.drawLine(ctx, 800, 100, 800, 1148)
+		let liney = 0
+		core.fillText(
+			ctx,
+			"自动存档",
+			470,
+			190,
+			offset === 0 ? '#DDDD44' : core.status.event.ui[0] ? "#FFFFFF" : "#BBBBBB",
+			this._buildFont(45, true)
+		);
+		core.setStrokeStyle(ctx, "#DDDDDD")
+		core.drawLine(ctx, 300, 224, 650, 224)
+		core.fillText(
+			ctx,
+			"▲",
+			725,
+			240,
+			"#DDDDDD",
+			this._buildFont(60, true)
+		);
+		core.fillText(
+			ctx,
+			"▲",
+			725,
+			220,
+			"#DDDDDD",
+			this._buildFont(60, true)
+		);
+		core.fillText(
+			ctx,
+			"▲",
+			725,
+			200,
+			"#DDDDDD",
+			this._buildFont(60, true)
+		);
+		core.fillText(
+			ctx,
+			"▲",
+			725,
+			320,
+			"#DDDDDD",
+			this._buildFont(60, true)
+		);
+		core.fillText(
+			ctx,
+			"▲",
+			725,
+			340,
+			"#DDDDDD",
+			this._buildFont(60, true)
+		);
+		core.fillText(
+			ctx,
+			"▲",
+			725,
+			440,
+			"#DDDDDD",
+			this._buildFont(60, true)
+		);
+		core.fillText(
+			ctx,
+			page + 1,
+			725,
+			540,
+			"#DDDD44",
+			this._buildFont(45, true)
+		);
+		core.fillText(
+			ctx,
+			"/",
+			725,
+			590,
+			"#DDDDDD",
+			this._buildFont(45, true)
+		);
+		core.fillText(
+			ctx,
+			core.saveLoad.max_page,
+			725,
+			640,
+			"#DDDDDD",
+			this._buildFont(45, true)
+		);
+		core.fillText(
+			ctx,
+			"▼",
+			725,
+			740,
+			"#DDDDDD",
+			this._buildFont(60, true)
+		);
+		core.fillText(
+			ctx,
+			"▼",
+			725,
+			820,
+			"#DDDDDD",
+			this._buildFont(60, true)
+		);
+		core.fillText(
+			ctx,
+			"▼",
+			725,
+			840,
+			"#DDDDDD",
+			this._buildFont(60, true)
+		);
+		core.fillText(
+			ctx,
+			"▼",
+			725,
+			940,
+			"#DDDDDD",
+			this._buildFont(60, true)
+		);
+		core.fillText(
+			ctx,
+			"▼",
+			725,
+			960,
+			"#DDDDDD",
+			this._buildFont(60, true)
+		);
+		core.fillText(
+			ctx,
+			"▼",
+			725,
+			980,
+			"#DDDDDD",
+			this._buildFont(60, true)
+		);
+		if (core.status.event.data.mode === 'all' && core.getLocalStorage("save_page", 0) !== 8000) core.fillText(
+			ctx,
+			"扩容",
+			725,
+			1090,
+			"#DDDDDD",
+			this._buildFont(60, true)
+		);
+
+		this._drawSLPanel_drawRecord(page, offset)
+		for (var i = 1; i < (n || 10); i++) {
+			var data = core.status.event.ui[i];
+			var id = 9 * page + i;
+			var highLight = (core.status.event.data.mode !== 'fav' && core.saves.favorite.indexOf(id) >= 0) || core.status.event.data.mode == 'fav';
+			var title = (highLight ? '★ ' : '☆ ') + (core.saves.favoriteName[id] || (name + id));
+			if (i != 0 && core.status.event.data.mode !== 'all') {
+				if (!data) break;
+				var real_id = core.saves.favorite[id - 1];
+				for (let a = 1; a < 9; a++) {
+					if (core.status.event.data.mode === ("class_" + a))
+						real_id = core.saves["class_" + a][id - 1]
+				}
+				title = (core.saves.favoriteName[real_id] || (name + real_id));
+
+			}
+			if (data && data.__toReplay__) title = '[R]' + title;
+			liney += 100
+			core.fillText(
+				ctx,
+				title,
+				470,
+				190 + liney,
+				offset === i ? '#DDDD44' : data ? "#FFFFFF" : "#BBBBBB",
+				this._buildFont(45, true)
+			);
+			core.setStrokeStyle(ctx, "#DDDDDD")
+			if (i != 9) core.drawLine(ctx, 300, 224 + liney, 650, 224 + liney)
+
+		}
+	};
+	////// 点击保存按钮时的打开操作 //////
+	events.prototype.save = function (fromUserAction) {
+		if (core.isReplaying()) return;
+		if (core.hasFlag("__forbidSave__")) {
+			core.playSound("操作失败");
+			core.drawTip("当前禁止存档");
+			return;
+		}
+		if (
+			core.status.event.id == "save" &&
+			core.events.recoverEvents(core.status.event.interval)
+		)
+			return;
+		if (!this._checkStatus("save", fromUserAction)) return;
+		var saveIndex = core.saves.saveIndex;
+		var page = parseInt((saveIndex - 1) / 9),
+			offset = saveIndex - 9 * page;
+		core.playSound("打开界面");
+		core.ui._drawSLPanel(10 * page + offset);
+	};
+
+	////// 点击读取按钮时的打开操作 //////
+	events.prototype.load = function (fromUserAction) {
+		if (core.isReplaying()) return;
+		var saveIndex = core.saves.saveIndex;
+		var page = parseInt((saveIndex - 1) / 9),
+			offset = saveIndex - 9 * page;
+		// 游戏开始前读档
+		if (!core.isPlaying()) {
+			core.dom.startPanel.style.display = "none";
+			core.clearStatus();
+			core.clearMap("all");
+			core.status.event = { id: "load", data: null };
+			core.status.lockControl = true;
+			core.playSound("打开界面");
+			core.ui._drawSLPanel(10 * page + offset);
+			return;
+		}
+		if (
+			core.status.event.id == "load" &&
+			core.events.recoverEvents(core.status.event.interval)
+		)
+			return;
+		if (!this._checkStatus("load", fromUserAction)) return;
+		core.playSound("打开界面");
+		core.ui._drawSLPanel(10 * page + offset);
+	};
+	////// 回放时存档 //////
+	control.prototype._replay_SL = function () {
+		if (!core.isPlaying() || !core.isReplaying()) return;
+		if (!core.status.replay.pausing) {
+			core.playSound("操作失败");
+			return core.drawTip("请先暂停录像");
+		}
+		if (core.isMoving() || core.status.replay.animate || core.status.event.id) {
+			core.playSound("操作失败");
+			return core.drawTip("请等待当前事件的处理结束");
+		}
+		if (core.hasFlag("__forbidSave__")) {
+			core.playSound("操作失败");
+			return core.drawTip("当前禁止存档");
+		}
+		this._replay_hideProgress();
+
+		core.lockControl();
+		core.status.event.id = "save";
+		var saveIndex = core.saves.saveIndex;
+		var page = parseInt((saveIndex - 1) / 9),
+			offset = saveIndex - 9 * page;
+
+		core.ui._drawSLPanel(10 * page + offset);
+	};
+
+
+
+	////// 存读档界面时,按下某个键的操作 //////
+	actions.prototype._keyDownSL = function (keycode) {
+
+		var page = core.status.event.data.page,
+			offset = core.status.event.data.offset;
+		var index = page * 10 + offset;
+
+		if (keycode == 37) { // left
+			core.playSound('光标移动');
+
+			core.ui._drawSLPanel(10 * (page - 1) + offset);
+			return;
+		}
+		if (keycode == 38) { // up
+			core.playSound('光标移动');
+			if (offset > 1) {
+				core.ui._drawSLPanel(10 * page + offset - 1);
+			} else {
+				core.ui._drawSLPanel(10 * (page - 1) + 9);
+			}
+			return;
+		}
+		if (keycode == 39) { // right
+			core.playSound('光标移动');
+
+			core.ui._drawSLPanel(10 * (page + 1) + offset);
+
+			return;
+		}
+		if (keycode == 40) { // down
+			core.playSound('光标移动');
+			if (offset < 9) {
+				core.ui._drawSLPanel(10 * page + offset + 1);
+			} else {
+				core.ui._drawSLPanel(10 * (page + 1));
+			}
+			return;
+		}
+		if (keycode == 33) { // PAGEUP
+			core.playSound('光标移动');
+			core.ui._drawSLPanel(10 * (page - 10) + offset);
+			return;
+		}
+		if (keycode == 34) { // PAGEDOWN
+			core.playSound('光标移动');
+			core.ui._drawSLPanel(10 * (page + 10) + offset);
+			return;
+		}
+	}
+
+	////// 存读档界面时,放开某个键的操作 //////
+	actions.prototype._keyUpSL = function (keycode) {
+		var page = core.status.event.data.page,
+			offset = core.status.event.data.offset;
+		var index = page * 10 + offset;
+
+		if (keycode == 27 || keycode == 88 || (core.status.event.id == 'save' && keycode == 83) || (core.status.event.id == 'load' && keycode == 68)) { //退出
+			saveLoadclick(1800, 1200);
+			return;
+		}
+		if (keycode >= 48 && keycode <= 57) {
+			if (keycode == 48) keycode = 58;
+			core.ui._drawSLPanel((keycode - 49) * 1000 + 1);
+			return;
+		}
+		if (keycode == 13 || keycode == 32 || keycode == 67) {
+			if (offset == 0)
+				core.doSL("autoSave", core.status.event.id);
+			else {
+				var id = 9 * page + offset;
+				if (core.status.event.data.mode == 'fav') id = core.saves.favorite[id - 1];
+				if (core.status.event.data.mode !== 'fav' && core.status.event.data.mode !== 'all') id = core.saves[core.status.event.data.mode][id - 1];
+				core.doSL(id, core.status.event.id);
+			}
+			return;
+		}
+		if (keycode == 69) { //e
+			switch (core.status.event.data.mode) {
+			case "all":
+				core.status.event.data.mode = 'fav'
+				break;
+			case "fav":
+				core.status.event.data.mode = 'class_1'
+				break;
+			case "class_1":
+				core.status.event.data.mode = 'class_2'
+				break;
+			case "class_2":
+				core.status.event.data.mode = 'class_3'
+				break;
+			case "class_3":
+				core.status.event.data.mode = 'class_4'
+				break;
+			case "class_4":
+				core.status.event.data.mode = 'class_5'
+				break;
+			case "class_5":
+				core.status.event.data.mode = 'class_6'
+				break;
+			case "class_6":
+				core.status.event.data.mode = 'class_7'
+				break;
+			case "class_7":
+				core.status.event.data.mode = 'class_8'
+				break;
+			case "class_8":
+				core.status.event.data.mode = 'all'
+				break;
+			}
+
+			core.ui._drawSLPanel(0)
+		}
+		if (keycode == 46) {
+			if (offset == 0) {
+				core.playSound('操作失败');
+				core.drawTip("无法删除自动存档!");
+			} else {
+				var id = 9 * page + offset;
+				if (core.status.event.data.mode == 'fav') id = core.saves.favorite[id - 1];
+				if (core.status.event.data.mode !== 'fav' && core.status.event.data.mode !== 'all') id = core.saves[core.status.event.data.mode][id - 1];
+				core.removeSave(id, function () {
+					core.ui._drawSLPanel(index, true);
+				});
+			}
+		}
+
+	}
+},
+    "scrollingText": function () {
+	// 本插件用于绘制在线留言
+	// 说明:https://h5mota.com/bbs/thread/?tid=1017
+	// 目前使用core.http代替帖子中提到的axios
+	////// 绘制提示同时播放成功音效 //////
+	ui.prototype.drawSuccessTip = function (text, id, frame) {
+		this.drawTip(text, id, frame);
+		core.playSound('gem.mp3');
+	}
+	core.plugin.aniMap = new Map()
+	////// 绘制提示同时播放错误音效 //////
+	ui.prototype.drawFailTip = function (text, id, frame) {
+		this.drawTip(text, id, frame);
+		core.playSound('error.mp3');
+	}
+	/** 塔的英文名 */
+	const towerName = core.firstData.name;
+
+	let [W, H] = [core.__SIZE__, core.__SIZE__];
+	let [WIDTH, HEIGHT] = [core.__PIXELS__, core.__PIXELS__];
+
+	//#region 弹幕的收发
+	this.getComment = function () {
+		if (core.isReplaying()) return;
+		let form = new FormData();
+		form.append('type', 1);
+		form.append('towername', towerName);
+		utils.prototype.http(
+			'POST',
+			'https://h5mota.com/backend/tower/barrage.php',
+			form,
+			function (res) {
+				try {
+					res = JSON.parse(res);
+					console.log(res);
+					core.drawTip('接收成功!')
+					core.playSound('item.mp3');
+					let commentCollection = {};
+					const commentList = res?.list;
+					const isEmpty = /^\s*$/;
+					for (let i = 0, l = commentList.length; i <= l - 1; i++) {
+						if (isEmpty.test(commentList[i]?.comment)) continue;
+						const commentTagsList = commentList[i].tags.split(',');
+						const [cFloorId, cX, cY] = commentTagsList;
+						if (0 <= cX && cX <= W - 1 && 0 <= cY && cY <= H - 1 && core.floorIds.includes(cFloorId)) {
+							if (!commentCollection.hasOwnProperty(cFloorId)) { commentCollection[cFloorId] = {}; }
+							const str = cX + ',' + cY;
+							if (!commentCollection[cFloorId].hasOwnProperty(str)) { commentCollection[cFloorId][str] = []; }
+							commentCollection[cFloorId][str].push(commentList[i]?.comment);
+						}
+					}
+					core.setFlag('commentCollection', commentCollection);
+				} catch (err) {
+					core.drawFailTip('接收失败!' + err.message);
+				}
+			},
+			function (err) {
+				err = JSON.parse(err);
+				console.error(err);
+				core.drawFailTip('接收失败' + err?.message);
+			},
+			null, null, null, 1000
+		);
+	}
+
+	this.postComment = function (comment, tags) {
+		if (core.isReplaying()) return;
+		const isEmpty = /^\s*$/;
+		if (isEmpty.test(comment)) {
+			core.drawFailTip('您输入的消息为空,请重发!');
+			return;
+		}
+		let form = new FormData();
+		form.append('type', 2);
+		form.append('towername', towerName);
+		form.append('comment', comment);
+		form.append('tags', tags);
+		form.append('userid', 2324);
+		form.append('password', '77c8fd5ff49c370342e4472ebdda5903');
+		utils.prototype.http(
+			'POST',
+			'https://h5mota.com/backend/tower/barrage.php',
+			form,
+			function (res) {
+				try {
+					res = JSON.parse(res);
+					console.log(res);
+					if (res?.code === 0) {
+						core.drawTip('提交成功!')
+					} else {
+						core.drawTip('提交失败!' + res?.message);
+					}
+				} catch (err) {
+					core.drawFailTip('提交失败!' + err.message);
+				}
+			},
+			function (err) {
+				err = JSON.parse(err);
+				console.error(err);
+				core.drawFailTip('提交失败!' + err?.message);
+			},
+			null, null, null, 1000
+		);
+	}
+	//#endregion
+
+	/** 若变量comment为真,在每层切换时在地上有弹幕的地方显示相应图标。 */
+	this.drawCommentSign = function () {
+		if (!core.hasFlag('comment') || core.isReplaying()) return;
+		let commentCollection = core.getFlag('commentCollection', {}),
+			floorId = core.status.floorId;
+		core.createCanvas('sign', 0, 0, WIDTH, HEIGHT, 61);
+		core.setOpacity('sign', 0.6);
+		if (commentCollection.hasOwnProperty(floorId)) {
+			for (let pos in commentCollection[floorId]) {
+				const l = commentCollection[floorId][pos].length;
+				for (let i = 0; i <= l - 1; i++) {
+					const [x, y] = pos.split(',');
+					core.drawIcon('sign', 'postman', 32 * x, 32 * y);
+					break;
+				}
+			}
+		}
+	}
+
+	/** 立即清除楼层的弹幕图标。关闭弹幕相关设置时调用。 */
+	this.clearCommentSign = function () {
+		core.deleteCanvas('sign');
+	}
+
+	/** 默认一次显示的弹幕数 */
+	const showNum = 5;
+
+	// 每走一步或瞬移,调用该函数,若目标点有弹幕,显示之
+	this.showComment = function (x, y) {
+		if (!core.getFlag('comment') || core.isReplaying()) return;
+		const commentCollection = core.getFlag('commentCollection', {});
+		const floorId = core.status.floorId,
+			str = x + ',' + y;
+		if (commentCollection.hasOwnProperty(floorId) &&
+			commentCollection[floorId].hasOwnProperty(str)) {
+			let commentArr = commentCollection[floorId][str].concat();
+			const commentArrPicked = pickComment(commentArr, showNum);
+			drawComment(commentArrPicked);
+		}
+	}
+
+	/** 返回从commentArr中挑选showNum个comment组成的数组*/
+	function pickComment(commentArr, showNum) {
+		let showList = [];
+		if (commentArr.length <= showNum) {
+			showList = commentArr;
+		} else {
+			for (let i = 0; i <= showNum - 1; i++) {
+				const l = commentArr.length,
+					n = core.plugin.dice(l - 1);
+				showList.push(commentArr[n]);
+				commentArr.splice(n, 1);
+			}
+		}
+		return showList;
+	}
+
+	function drawComment(commentArr) {
+		const l = commentArr.length;
+		let yList = generateCommentYList(20, HEIGHT - 20, showNum);
+		if (l < showNum) yList = getRandomElements(yList, l);
+		for (let i = 0; i <= l - 1; i++) {
+			drawCommentStr(commentArr[i], WIDTH + 20 * Math.random(),
+				yList[i], Math.random() * 0.1 + 0.1);
+		}
+	}
+
+	/** 生成count个随机数,范围从min到max,作为弹幕的y坐标*/
+	function generateCommentYList(min, max, count) {
+		let yList = Array(count).fill(0);
+		const distance = (max - min) / (count + 1);
+		for (let i = 0; i < count; i++) {
+			yList[i] = min + distance * (i + 1) + (Math.random() - 0.5) * (distance / 2);
+		}
+		return yList;
+	}
+
+	function getRandomElements(arr, count) {
+		let result = [...arr];
+		let len = result.length;
+		count = Math.min(len, count);
+
+		for (let i = len - 1; i > len - 1 - count; i--) {
+			let j = Math.floor(Math.random() * (i + 1));
+			[result[i], result[j]] = [result[j], result[i]];
+		}
+
+		return result.slice(len - count);
+	}
+
+	//#region 弹幕绘制部分
+	const { Animation, linear, Ticker } = core.plugin.animate ?? {};
+	const ctxName = 'scrollingText';
+
+	if (Ticker) {
+		const ticker = new Ticker();
+		ticker.add(() => {
+			if (core.isReplaying()) return;
+			core.createCanvas(ctxName, 0, 0, core.__PIXELS__, core.__PIXELS__, 136); //每帧重绘该画布
+		});
+	}
+
+	/**
+	 * 绘制弹幕 
+	 * @example  
+	 * drawCommentStr('OK', 450, 200, 0.1);
+	 * @param {string} content 弹幕的内容
+	 * @param {number} x 弹幕的初始x坐标
+	 * @param {number} y 弹幕的初始y坐标
+	 * @param {number} vx 弹幕的横向滚动速度
+	 */
+	function drawCommentStr(content, x, y, vx) {
+		if (core.isReplaying() || !Animation) return;
+		const ani = new Animation();
+		core.plugin.aniMap.set(ani, (ani) => ani.ticker.destroy());
+		ani.ticker.add(() => {
+			core.fillText(ctxName, content, x + ani.x, y, 'white', '16px Verdana');
+		})
+		// 弹幕的最大长度5600,再长属于异常数据
+		const aim = 600 + Math.min(core.calWidth(ctxName, content, '16px Verdana'), 5000);
+		ani.mode(linear())
+			.time(aim / vx)
+			.absolute()
+			.move(-aim, 0)
+		ani.all().then(() => {
+			ani.ticker.destroy();
+		});
+	}
+	//#endregion 
+
+},
+    "动画": function () {
+	// 在此增加新插件
+	const { Transition, linear, bezier, circle, hyper, trigo, power, inverseTrigo, shake, sleep } = core.plugin.animate;
+	//////移动动画//////
+	const tran = new Transition();
+	maps.prototype.moveAnimate = function (id, px, py, relative, time, style) {
+		if (!id) return
+		core.status.animateObjs.forEach(v => {
+			if (v.id === id) {
+				if (v.hero) return
+				if (!style) tran.mode(linear())
+				else if (style === "in") {
+					tran.mode(trigo('sin', "in"))
+				} else if (style === "out") {
+					tran.mode(trigo('sin', "out"))
+				} else if (style === "in-out") {
+					tran.mode(trigo('sin', "in-out"))
+				} else if (style === "center") {
+					tran.mode(trigo('sin', "center"))
+				}
+				if (relative) { tran.relative() } else { tran.absolute() }
+				tran.time(time)
+				tran.value[v.id + v.name + "x"] = px
+				tran.value[v.id + v.name + "y"] = py
+
+			}
+		})
+	}
+
+	control.prototype._animationFrame_animate = function (timestamp) {
+		let frametime = timestamp - core.animateFrame.animateTime
+		core.animateFrame.animateTime = timestamp;
+		if (!core.status.animateObjs || core.status.animateObjs.length == 0) return;
+
+		core.clearMap('animate');
+		// 更新帧
+		for (var i = 0; i < core.status.animateObjs.length; i++) {
+			var obj = core.status.animateObjs[i];
+			if (obj.pause) obj.pausetime += frametime
+			if (obj.start === 0) obj.start = core.animateFrame.animateTime
+			obj.index = Math.floor((core.animateFrame.animateTime - obj.start - obj.pausetime) / (1000 / 60))
+			if (obj.reverse) obj.index = obj.animate.frames.length - obj.index
+			if ((!obj.reverse && obj.index >= obj.animate.frames.length) || (obj.reverse && obj.index <= 0)) {
+				if (obj.loop) {
+					if (obj.reverse) {
+						obj.index = obj.animate.frames.length
+						obj.start = core.animateFrame.animateTime
+						obj.pausetime = 0
+					} else {
+						obj.start = core.animateFrame.animateTime
+						obj.index = 0
+						obj.pausetime = 0
+					}
+				} else
+					(function (callback) {
+						setTimeout(function () {
+							if (callback) callback();
+						});
+					})(obj.callback);
+			}
+		}
+		core.status.animateObjs = core.status.animateObjs.filter(function (obj) {
+			return (!obj.reverse && obj.index < obj.animate.frames.length) || (obj.reverse && obj.index > 0);
+		});
+		let sx, sy;
+		if (core.status.heroMoving < 0) {
+			sx = 0;
+			sy = 0;
+		} else {
+			sx =
+				core.utils.scan[core.status.hero.loc.direction].x *
+				4 *
+				core.status.heroMoving;
+			sy =
+				core.utils.scan[core.status.hero.loc.direction].y *
+				4 *
+				core.status.heroMoving;
+		}
+		const herox = core.status.hero.loc.x * 32 + 16 + sx;
+		const heroy = core.status.hero.loc.y * 32 + 32 + sy - core.material.icons.hero.height / 2;
+
+		core.status.animateObjs.forEach(function (obj) {
+			if (obj.hero) {
+
+				core.maps._drawAnimateFrame('animate', obj.animate, herox, heroy, obj.index);
+			} else {
+
+				core.maps._drawAnimateFrame('animate', obj.animate, tran.value[obj.id + obj.name + "x"], tran.value[obj.id + obj.name + "y"], obj.index);
+			}
+		});
+	}
+	core.registerAnimationFrame("animate", true, core.control._animationFrame_animate);
+
+	////// 绘制动画 //////
+	maps.prototype.drawAnimate = function (name, x, y, alignWindow, callback) {
+		name = core.getMappedName(name);
+
+		// 正在播放录像:不显示动画
+		if (core.isReplaying() || !core.material.animates[name] || x == null || y == null) {
+			if (callback) callback();
+			return -1;
+		}
+
+		// 开始绘制
+		var animate = core.material.animates[name],
+			centerX = 32 * x + 16,
+			centerY = 32 * y + 16;
+		if (alignWindow) {
+			centerX += core.bigmap.offsetX;
+			centerY += core.bigmap.offsetY;
+		}
+		animate.se = animate.se || {};
+		if (typeof animate.se == 'string') animate.se = { 1: animate.se };
+		tran.mode(linear()).time(1).absolute()
+		tran.value[id + name + "x"] = centerX
+		tran.value[id + name + "y"] = centerY
+		var id = setTimeout(null);
+		core.status.animateObjs.push({
+			"name": name,
+			"id": id,
+			"animate": animate,
+			"centerX": centerX,
+			"centerY": centerY,
+			"start": 0,
+			"pause": false,
+			"pausetime": 0,
+			"index": 0,
+			"callback": callback
+		});
+
+		return id;
+	}
+
+	////// 绘制反转动画 //////
+	maps.prototype.drawResizeAnimate = function (name, id, centerX, centerY, hero, reverse, loop, callback) {
+		name = core.getMappedName(name);
+
+		// 正在播放录像:不显示动画
+		if (core.isReplaying() || !core.material.animates[name]) {
+			if (callback) callback();
+			return -1;
+		}
+
+		// 开始绘制
+		var animate = core.material.animates[name],
+			centerX = core.calValue(centerX)
+		centerY = core.calValue(centerY)
+
+		animate.se = animate.se || {};
+		if (typeof animate.se == 'string') animate.se = { 1: animate.se };
+
+		var id = id || setTimeout(null);
+		tran.mode(linear()).time(1).absolute()
+		if (!hero) tran.value[id + name + "x"] = centerX
+		if (!hero) tran.value[id + name + "y"] = centerY
+		if (hero) core.status.animateObjs.push({
+			"name": name,
+			"id": id,
+			"animate": animate,
+			"hero": true,
+			"reverse": reverse,
+			"start": 0,
+			"pause": false,
+			"loop": loop,
+			"pausetime": 0,
+			"index": 0,
+			"callback": callback
+		})
+		else core.status.animateObjs.push({
+			"name": name,
+			"id": id,
+			"animate": animate,
+			"centerX": centerX,
+			"centerY": centerY,
+			"reverse": reverse,
+			"start": 0,
+			"pause": false,
+			"loop": loop,
+			"pausetime": 0,
+			"index": 0,
+			"callback": callback
+		});
+
+		return id;
+	}
+	events.prototype._action_animateResize = function (data, x, y, prefix) {
+		core.events.__action_doAsyncFunc(data.async, core.maps.drawResizeAnimate, data.name, data.id, data.centerX, data.centerY, data.hero, data.reverse, data.loop);
+	};
+	////// 绘制一个跟随勇士的动画 //////
+	maps.prototype.drawHeroAnimate = function (name, callback) {
+		name = core.getMappedName(name);
+
+		// 正在播放录像或动画不存在:不显示动画
+		if (core.isReplaying() || !core.material.animates[name]) {
+			if (callback) callback();
+			return -1;
+		}
+
+		// 开始绘制
+		var animate = core.material.animates[name];
+		animate.se = animate.se || {};
+		if (typeof animate.se == 'string') animate.se = { 1: animate.se };
+
+		var id = setTimeout(null);
+		core.status.animateObjs.push({
+			"name": name,
+			"id": id,
+			"animate": animate,
+			"hero": true,
+			"start": 0,
+			"pause": false,
+			"pausetime": 0,
+			"index": 0,
+			"callback": callback
+		});
+
+		return id;
+	}
+
+	////// 获得当前正在播放的所有(指定)动画的id列表 //////
+	maps.prototype.getPlayingAnimates = function (name) {
+		return (core.status.animateObjs || []).filter(function (one) {
+			return name == null || one.name == name;
+		}).map(function (one) { return one.id });
+	}
+
+
+	////// 绘制动画的某一帧 //////
+	maps.prototype._drawAnimateFrame = function (name, animate, centerX, centerY, index) {
+		var ctx = core.getContextByName(name);
+		if (!ctx) return;
+		var frame = animate.frames[index % animate.frame];
+		core.playSound((animate.se || {})[index % animate.frame + 1], (animate.pitch || {})[index % animate.frame + 1]);
+		var ratio = animate.ratio;
+		frame.forEach(function (t) {
+			var image = animate.images[t.index];
+			if (!image) return;
+
+			var realWidth = image.width * ratio * t.zoom / 100;
+			var realHeight = image.height * ratio * t.zoom / 100;
+			core.setAlpha(ctx, t.opacity / 255);
+
+			var cx = centerX + t.x,
+				cy = centerY + t.y;
+
+			var ix = cx - realWidth / 2 - core.bigmap.offsetX,
+				iy = cy - realHeight / 2 - core.bigmap.offsetY;
+
+			var mirror = t.mirror ? 'x' : null;
+			var angle = t.angle ? -t.angle * Math.PI / 180 : null;
+			core.drawImage(ctx, image, ix, iy, realWidth, realHeight, null, null, null, null, angle, mirror);
+
+			core.setAlpha(ctx, 1);
+		})
+	}
+	////// 暂停动画 //////
+	maps.prototype.pauseAnimate = function (id) {
+		for (var i = 0; i < core.status.animateObjs.length; i++) {
+			var obj = core.status.animateObjs[i];
+			if (id == null || obj.id == id) {
+				obj.pause = true
+
+			}
+		}
+
+	}
+	////// 继续动画 //////
+	maps.prototype.remuseAnimate = function (id) {
+		for (var i = 0; i < core.status.animateObjs.length; i++) {
+			var obj = core.status.animateObjs[i];
+			if (id == null || obj.id == id) {
+				obj.pause = false
+			}
+
+		}
+
+	}
+	////// 停止动画 //////
+	maps.prototype.stopAnimate = function (id, doCallback) {
+		for (var i = 0; i < core.status.animateObjs.length; i++) {
+			var obj = core.status.animateObjs[i];
+			if (id == null || obj.id == id) {
+				if (doCallback) {
+					(function (callback) {
+						setTimeout(function () {
+							if (callback) callback();
+						});
+					})(obj.callback);
+				}
+			}
+		}
+		core.status.animateObjs = core.status.animateObjs.filter(function (x) { return id != null && x.id != id });
+		if (core.status.animateObjs.length == 0)
+			core.clearMap('animate');
+	}
+},
+    "帧动画(游戏画面)": function () {
+	// 在此增加新插件
+	// 在此增加新插件
+	const animate3 = document.createElement("canvas"); //画布设置
+	animate3.style.zIndex = 71;
+	animate3.id = "animate3";
+	animate3.classList.add("gameCanvas", "anti-aliasing");
+	animate3.style.display = "block";
+	animate3.width = 416;
+	animate3.height = 416;
+	animate3.style.width = core.__PIXELS__ * core.domStyle.scale + "px";
+	animate3.style.height = core.__PIXELS__ * core.domStyle.scale + "px";
+	main.dom.animate3 = animate3;
+	const anctx = animate3.getContext("2d");
+
+	main.dom.gameDraw.appendChild(animate3);
+
+	core.plugin.playing = new Set();
+	const { Transition, linear, bezier, circle, hyper, trigo, power, inverseTrigo, shake, sleep } = core.plugin.animate;
+	const tran = new Transition();
+	this.animatemove = function (id, px, py, relative, time, style) {
+		if (!id) return
+		core.plugin.playing.forEach(v => {
+			if (v.id === id) {
+				if (v.hero) return
+				if (!style) tran.mode(linear())
+				else if (style === "in") {
+					tran.mode(trigo('sin', "in"))
+				} else if (style === "out") {
+					tran.mode(trigo('sin', "out"))
+				} else if (style === "in-out") {
+					tran.mode(trigo('sin', "in-out"))
+				} else if (style === "center") {
+					tran.mode(trigo('sin', "center"))
+				}
+				if (relative) { tran.relative() } else { tran.absolute() }
+				tran.time(time)
+				tran.value[v.id + v.name + "x"] = px
+				tran.value[v.id + v.name + "y"] = py
+
+			}
+		})
+	}
+	this.setanimate = function (
+		name,
+		px,
+		py,
+		width,
+		height,
+		allFarme,
+		imageList,
+		soundList
+	) {
+		const data = {
+			px: px,
+			py: py,
+			width: width,
+			height: height,
+			allFarme: allFarme,
+			imageList: imageList,
+			soundList: soundList,
+		};
+		core.setFlag("animate_" + name, data);
+	};
+	this.deleteanimate = function (name) {
+		core.setFlag("animate_" + name);
+	};
+	let thistime = 0;
+	this.playanimate = function (name, id, x, y, hero, scalex, scaley, loop, reverse) {
+		if (!id) id = setTimeout(null)
+		tran.mode(linear()).time(1).absolute()
+		if (!hero) tran.value[id + name + "x"] = x
+		if (!hero) tran.value[id + name + "y"] = y
+
+		const data = {
+			id: id,
+			name: name,
+			x: x,
+			y: y,
+			hero: hero,
+			scalex: scalex,
+			scaley: scaley,
+			start: 0,
+			pause: false,
+			loop: loop,
+			reverse: reverse,
+			pausetime: 0,
+			farme: 0,
+		};
+
+		core.plugin.playing.add(data);
+		return id
+	};
+	this.animateloop = function (id, loop) {
+		core.plugin.playing.forEach(v => {
+			if (!id || v.id === id) v.loop = loop
+		})
+	}
+	this.animatereverse = function (id, reverse) {
+		core.plugin.playing.forEach(v => {
+			if (!id || v.id === id) {
+				const data = flags["animate_" + v.name]
+				if (reverse && !v.reverse) v.start -= (data.allFarme - v.farme * 2) * (1000 / 60)
+				if (!reverse && v.reverse) v.start -= (v.farme * 2 - data.allFarme) * (1000 / 60)
+				v.reverse = reverse
+			}
+		})
+	}
+	this.animatepause = function (id, pause) {
+		core.plugin.playing.forEach(v => {
+			if (!id || v.id === id) v.pause = pause
+		})
+	}
+	this.animateclear = function (id) {
+		core.plugin.playing.forEach(v => {
+			if (!id || v.id === id) core.plugin.playing.delete(v)
+		})
+	}
+	core.registerAnimationFrame("animateonmap", true, function (timestamp) {
+		let frametime = timestamp - thistime
+		thistime = timestamp;
+
+
+		core.clearMap(anctx);
+		core.plugin.playing.forEach((one) => {
+			const data = flags["animate_" + one.name];
+			if (!data) {
+				core.plugin.playing.delete(one);
+			} else {
+				if (one.start === 0) one.start = thistime
+				if (one.pause) one.pausetime += frametime
+				one.farme = Math.floor((thistime - one.start - one.pausetime) / (1000 / 60))
+
+				if (one.reverse) one.farme = data.allFarme - one.farme
+				if ((!one.reverse && one.farme > data.allFarme) || (one.reverse && one.farme < 0)) {
+					if (one.loop) {
+						if (one.reverse) {
+							one.farme = data.allFarme
+							one.start = thistime
+							one.pausetime = 0
+						} else {
+							one.start = thistime
+							one.farme = 0
+							one.pausetime = 0
+						}
+					}
+				}
+				if ((!one.reverse && one.farme > data.allFarme) || (one.reverse && one.farme < 0)) {
+					delete tran.value[one.id + one.name + "x"]
+					delete tran.value[one.id + one.name + "y"]
+					core.plugin.playing.delete(one)
+
+					return
+				}
+
+				data.imageList.forEach(function (image) {
+					if (
+						one.farme >= (image.beforefarme ?? 0) &&
+						one.farme <= (image.afterfarme ?? data.allFarme)
+					) {
+
+						const img = core.material.images.images?.[image.image];
+						if (img) {
+							const gla = image.globalAlpha ?? 100;
+							const agla = image.aglobalAlpha ?? gla,
+								beforefarme = image.beforefarme ?? 0;
+							const afterfarme = image.afterfarme ?? data.allFarme;
+
+							anctx.globalAlpha =
+								(gla +
+									((agla - gla) * (one.farme - beforefarme)) /
+									(afterfarme - beforefarme || 1)) /
+								100;
+
+							const cx =
+								(image.cx ?? 0) +
+								(((image.acx ?? 0) - (image.cx ?? 0)) *
+									(one.farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								cy =
+								(image.cy ?? 0) +
+								(((image.acy ?? 0) - (image.cy ?? 0)) *
+									(one.farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								cw =
+								(image.cw ?? img.width) +
+								(((image.acw ?? img.width) - (image.cw ?? img.width)) *
+									(one.farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								ch =
+								(image.ch ?? img.height) +
+								(((image.acw ?? img.height) - (image.cw ?? img.height)) *
+									(one.farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								x =
+								(image.x ?? 0) +
+								(((image.ax ?? 0) - (image.x ?? 0)) *
+									(one.farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								y =
+								(image.y ?? 0) +
+								(((image.ay ?? 0) - (image.y ?? 0)) *
+									(one.farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								w =
+								(image.w ?? img.width) +
+								(((image.aw ?? img.width) - (image.w ?? img.width)) *
+									(one.farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								h =
+								(image.h ?? img.height) +
+								(((image.aw ?? img.height) - (image.w ?? img.height)) *
+									(one.farme - beforefarme)) /
+								(afterfarme - beforefarme || 1),
+								angle =
+								(Math.PI *
+									((image.angle ?? 0) +
+										(((image.aangle ?? 0) - (image.angle ?? 0)) *
+											(one.farme - beforefarme)) /
+										(afterfarme - beforefarme || 1))) /
+								180;
+
+							if (one.hero) {
+								let sx, sy;
+								if (core.status.heroMoving < 0) {
+									sx = 0;
+									sy = 0;
+								} else {
+									sx =
+										core.utils.scan[core.status.hero.loc.direction].x *
+										4 *
+										core.status.heroMoving;
+									sy =
+										core.utils.scan[core.status.hero.loc.direction].y *
+										4 *
+										core.status.heroMoving;
+								}
+								const herox = core.status.hero.loc.x * 32 + 16 + sx;
+								const heroy = core.status.hero.loc.y * 32 + 16 + sy;
+								core.drawImage(
+									anctx,
+									img,
+									cx,
+									cy,
+									cw,
+									ch,
+									herox + (x - data.px) * one.scalex,
+									heroy + (y - data.py) * one.scaley,
+									w * one.scalex,
+									h * one.scaley,
+									angle
+								);
+
+
+							} else {
+
+								core.drawImage(
+									anctx,
+									img,
+									cx,
+									cy,
+									cw,
+									ch,
+									tran.value[one.id + one.name + "x"] + (x - data.px) * one.scalex,
+									tran.value[one.id + one.name + "y"] + (y - data.py) * one.scaley,
+									w * one.scalex,
+									h * one.scaley,
+									angle
+								);
+							}
+						}
+					}
+				});
+				data.soundList.forEach(function (sound) {
+					const lisen =
+						sound.sound &&
+						core.material.sounds[sound.sound] &&
+						core.musicStatus.soundStatus;
+					if (one.farme == sound.startfarme && lisen) {
+						if (sound.stopbefore) core.stopSound();
+						core.playSound(sound.sound);
+					}
+				});
+
+			}
+		});
+
+	});
+}
 }
\ No newline at end of file
diff --git a/project/sounds/aiy020000190.ogg b/project/sounds/aiy020000190.ogg
new file mode 100644
index 0000000..8212ba6
Binary files /dev/null and b/project/sounds/aiy020000190.ogg differ
diff --git a/project/sounds/aiy020000200.ogg b/project/sounds/aiy020000200.ogg
new file mode 100644
index 0000000..8f710f0
Binary files /dev/null and b/project/sounds/aiy020000200.ogg differ
diff --git a/project/sounds/aiy020000210.ogg b/project/sounds/aiy020000210.ogg
new file mode 100644
index 0000000..e4f719f
Binary files /dev/null and b/project/sounds/aiy020000210.ogg differ
diff --git a/project/sounds/aiy020000220.ogg b/project/sounds/aiy020000220.ogg
new file mode 100644
index 0000000..cf59706
Binary files /dev/null and b/project/sounds/aiy020000220.ogg differ
diff --git a/project/sounds/aiy020000230.ogg b/project/sounds/aiy020000230.ogg
new file mode 100644
index 0000000..c7469e0
Binary files /dev/null and b/project/sounds/aiy020000230.ogg differ
diff --git a/project/sounds/aiy020000240.ogg b/project/sounds/aiy020000240.ogg
new file mode 100644
index 0000000..dc062c2
Binary files /dev/null and b/project/sounds/aiy020000240.ogg differ
diff --git a/project/sounds/aiy020000250.ogg b/project/sounds/aiy020000250.ogg
new file mode 100644
index 0000000..19608c4
Binary files /dev/null and b/project/sounds/aiy020000250.ogg differ
diff --git a/project/sounds/aiy020000260.ogg b/project/sounds/aiy020000260.ogg
new file mode 100644
index 0000000..fc86122
Binary files /dev/null and b/project/sounds/aiy020000260.ogg differ
diff --git a/project/sounds/aiy020000270.ogg b/project/sounds/aiy020000270.ogg
new file mode 100644
index 0000000..8a9e875
Binary files /dev/null and b/project/sounds/aiy020000270.ogg differ
diff --git a/project/sounds/aiy020000280.ogg b/project/sounds/aiy020000280.ogg
new file mode 100644
index 0000000..804c47b
Binary files /dev/null and b/project/sounds/aiy020000280.ogg differ
diff --git a/project/sounds/aiy020000290.ogg b/project/sounds/aiy020000290.ogg
new file mode 100644
index 0000000..46e1502
Binary files /dev/null and b/project/sounds/aiy020000290.ogg differ
diff --git a/project/sounds/aiy020000300.ogg b/project/sounds/aiy020000300.ogg
new file mode 100644
index 0000000..d5445c7
Binary files /dev/null and b/project/sounds/aiy020000300.ogg differ
diff --git a/project/sounds/aiy020000310.ogg b/project/sounds/aiy020000310.ogg
new file mode 100644
index 0000000..e197805
Binary files /dev/null and b/project/sounds/aiy020000310.ogg differ
diff --git a/project/sounds/aiy020000320.ogg b/project/sounds/aiy020000320.ogg
new file mode 100644
index 0000000..eadca46
Binary files /dev/null and b/project/sounds/aiy020000320.ogg differ
diff --git a/project/sounds/aiy020000330.ogg b/project/sounds/aiy020000330.ogg
new file mode 100644
index 0000000..24af673
Binary files /dev/null and b/project/sounds/aiy020000330.ogg differ
diff --git a/project/sounds/aiy020000340.ogg b/project/sounds/aiy020000340.ogg
new file mode 100644
index 0000000..34d7e41
Binary files /dev/null and b/project/sounds/aiy020000340.ogg differ
diff --git a/project/sounds/aiy020000350.ogg b/project/sounds/aiy020000350.ogg
new file mode 100644
index 0000000..25d0572
Binary files /dev/null and b/project/sounds/aiy020000350.ogg differ
diff --git a/project/sounds/aiy020000360.ogg b/project/sounds/aiy020000360.ogg
new file mode 100644
index 0000000..e46bc3e
Binary files /dev/null and b/project/sounds/aiy020000360.ogg differ
diff --git a/project/sounds/aiy020000370.ogg b/project/sounds/aiy020000370.ogg
new file mode 100644
index 0000000..f929ecb
Binary files /dev/null and b/project/sounds/aiy020000370.ogg differ
diff --git a/project/sounds/aiy030000010.ogg b/project/sounds/aiy030000010.ogg
new file mode 100644
index 0000000..9b9d46d
Binary files /dev/null and b/project/sounds/aiy030000010.ogg differ
diff --git a/project/sounds/aiy030000020.ogg b/project/sounds/aiy030000020.ogg
new file mode 100644
index 0000000..a0f4ebb
Binary files /dev/null and b/project/sounds/aiy030000020.ogg differ
diff --git a/project/sounds/aiy030000030.ogg b/project/sounds/aiy030000030.ogg
new file mode 100644
index 0000000..14a2ca8
Binary files /dev/null and b/project/sounds/aiy030000030.ogg differ
diff --git a/project/sounds/aiy030000050.ogg b/project/sounds/aiy030000050.ogg
new file mode 100644
index 0000000..9bc3077
Binary files /dev/null and b/project/sounds/aiy030000050.ogg differ
diff --git a/project/sounds/aiy030000060.ogg b/project/sounds/aiy030000060.ogg
new file mode 100644
index 0000000..ff055c2
Binary files /dev/null and b/project/sounds/aiy030000060.ogg differ
diff --git a/project/sounds/aiy030000070.ogg b/project/sounds/aiy030000070.ogg
new file mode 100644
index 0000000..2e7dcba
Binary files /dev/null and b/project/sounds/aiy030000070.ogg differ
diff --git a/project/sounds/aiy030000080.ogg b/project/sounds/aiy030000080.ogg
new file mode 100644
index 0000000..efc3d38
Binary files /dev/null and b/project/sounds/aiy030000080.ogg differ
diff --git a/project/sounds/aiy030000090.ogg b/project/sounds/aiy030000090.ogg
new file mode 100644
index 0000000..8f9fb91
Binary files /dev/null and b/project/sounds/aiy030000090.ogg differ
diff --git a/project/sounds/aiy030000100.ogg b/project/sounds/aiy030000100.ogg
new file mode 100644
index 0000000..0dbf5bc
Binary files /dev/null and b/project/sounds/aiy030000100.ogg differ
diff --git a/project/sounds/aiy030000110.ogg b/project/sounds/aiy030000110.ogg
new file mode 100644
index 0000000..f722e49
Binary files /dev/null and b/project/sounds/aiy030000110.ogg differ
diff --git a/project/sounds/aiy030000120.ogg b/project/sounds/aiy030000120.ogg
new file mode 100644
index 0000000..53ac3bf
Binary files /dev/null and b/project/sounds/aiy030000120.ogg differ
diff --git a/project/sounds/aiy030000130.ogg b/project/sounds/aiy030000130.ogg
new file mode 100644
index 0000000..aa157af
Binary files /dev/null and b/project/sounds/aiy030000130.ogg differ
diff --git a/project/sounds/aiy050000010.ogg b/project/sounds/aiy050000010.ogg
new file mode 100644
index 0000000..6a9a4a2
Binary files /dev/null and b/project/sounds/aiy050000010.ogg differ
diff --git a/project/sounds/aiy050000020.ogg b/project/sounds/aiy050000020.ogg
new file mode 100644
index 0000000..9b9cdf8
Binary files /dev/null and b/project/sounds/aiy050000020.ogg differ
diff --git a/project/sounds/aiy050000030.ogg b/project/sounds/aiy050000030.ogg
new file mode 100644
index 0000000..d328ca8
Binary files /dev/null and b/project/sounds/aiy050000030.ogg differ
diff --git a/project/sounds/aiy050000040.ogg b/project/sounds/aiy050000040.ogg
new file mode 100644
index 0000000..cc11d60
Binary files /dev/null and b/project/sounds/aiy050000040.ogg differ
diff --git a/project/sounds/aiy050000050.ogg b/project/sounds/aiy050000050.ogg
new file mode 100644
index 0000000..590349f
Binary files /dev/null and b/project/sounds/aiy050000050.ogg differ
diff --git a/project/sounds/aiy050000060.ogg b/project/sounds/aiy050000060.ogg
new file mode 100644
index 0000000..a77d3ba
Binary files /dev/null and b/project/sounds/aiy050000060.ogg differ
diff --git a/project/sounds/aiy050000070.ogg b/project/sounds/aiy050000070.ogg
new file mode 100644
index 0000000..9213193
Binary files /dev/null and b/project/sounds/aiy050000070.ogg differ
diff --git a/project/sounds/aiy050000080.ogg b/project/sounds/aiy050000080.ogg
new file mode 100644
index 0000000..29a2c70
Binary files /dev/null and b/project/sounds/aiy050000080.ogg differ
diff --git a/project/sounds/aiy050000090.ogg b/project/sounds/aiy050000090.ogg
new file mode 100644
index 0000000..b0e5931
Binary files /dev/null and b/project/sounds/aiy050000090.ogg differ
diff --git a/project/sounds/aiy050000100.ogg b/project/sounds/aiy050000100.ogg
new file mode 100644
index 0000000..59e7ebc
Binary files /dev/null and b/project/sounds/aiy050000100.ogg differ
diff --git a/project/sounds/aiy050000110.ogg b/project/sounds/aiy050000110.ogg
new file mode 100644
index 0000000..e198a48
Binary files /dev/null and b/project/sounds/aiy050000110.ogg differ
diff --git a/project/sounds/aiy050000120.ogg b/project/sounds/aiy050000120.ogg
new file mode 100644
index 0000000..ac4bf72
Binary files /dev/null and b/project/sounds/aiy050000120.ogg differ
diff --git a/project/sounds/aiy120000020.ogg b/project/sounds/aiy120000020.ogg
new file mode 100644
index 0000000..10d2ae0
Binary files /dev/null and b/project/sounds/aiy120000020.ogg differ
diff --git a/project/sounds/aiy120000030.ogg b/project/sounds/aiy120000030.ogg
new file mode 100644
index 0000000..2a0dc02
Binary files /dev/null and b/project/sounds/aiy120000030.ogg differ
diff --git a/project/sounds/aiy120000040.ogg b/project/sounds/aiy120000040.ogg
new file mode 100644
index 0000000..f9f0f66
Binary files /dev/null and b/project/sounds/aiy120000040.ogg differ
diff --git a/project/sounds/aiy120000050.ogg b/project/sounds/aiy120000050.ogg
new file mode 100644
index 0000000..0cb03e6
Binary files /dev/null and b/project/sounds/aiy120000050.ogg differ
diff --git a/project/sounds/aiy120000060.ogg b/project/sounds/aiy120000060.ogg
new file mode 100644
index 0000000..bdf482e
Binary files /dev/null and b/project/sounds/aiy120000060.ogg differ
diff --git a/project/sounds/aiy120000070.ogg b/project/sounds/aiy120000070.ogg
new file mode 100644
index 0000000..c8822ac
Binary files /dev/null and b/project/sounds/aiy120000070.ogg differ
diff --git a/project/sounds/aiy120000080.ogg b/project/sounds/aiy120000080.ogg
new file mode 100644
index 0000000..3cd1ff4
Binary files /dev/null and b/project/sounds/aiy120000080.ogg differ
diff --git a/project/sounds/aiy120000090.ogg b/project/sounds/aiy120000090.ogg
new file mode 100644
index 0000000..306c3d4
Binary files /dev/null and b/project/sounds/aiy120000090.ogg differ
diff --git a/project/sounds/aiy120000100.ogg b/project/sounds/aiy120000100.ogg
new file mode 100644
index 0000000..d6597f6
Binary files /dev/null and b/project/sounds/aiy120000100.ogg differ
diff --git a/project/sounds/aiy120000110.ogg b/project/sounds/aiy120000110.ogg
new file mode 100644
index 0000000..a322097
Binary files /dev/null and b/project/sounds/aiy120000110.ogg differ
diff --git a/project/sounds/aiy120000120.ogg b/project/sounds/aiy120000120.ogg
new file mode 100644
index 0000000..acb82fb
Binary files /dev/null and b/project/sounds/aiy120000120.ogg differ
diff --git a/project/sounds/aiy120000130.ogg b/project/sounds/aiy120000130.ogg
new file mode 100644
index 0000000..8f231aa
Binary files /dev/null and b/project/sounds/aiy120000130.ogg differ
diff --git a/project/sounds/aiy120000140.ogg b/project/sounds/aiy120000140.ogg
new file mode 100644
index 0000000..d3bbbb2
Binary files /dev/null and b/project/sounds/aiy120000140.ogg differ
diff --git a/project/sounds/aiy120000150.ogg b/project/sounds/aiy120000150.ogg
new file mode 100644
index 0000000..47f6a04
Binary files /dev/null and b/project/sounds/aiy120000150.ogg differ
diff --git a/project/sounds/aiy120000160.ogg b/project/sounds/aiy120000160.ogg
new file mode 100644
index 0000000..214c63b
Binary files /dev/null and b/project/sounds/aiy120000160.ogg differ
diff --git a/project/sounds/aiy120000170.ogg b/project/sounds/aiy120000170.ogg
new file mode 100644
index 0000000..35d2f1b
Binary files /dev/null and b/project/sounds/aiy120000170.ogg differ
diff --git a/project/sounds/aiy120000180.ogg b/project/sounds/aiy120000180.ogg
new file mode 100644
index 0000000..3417af8
Binary files /dev/null and b/project/sounds/aiy120000180.ogg differ
diff --git a/project/sounds/aiy120000190.ogg b/project/sounds/aiy120000190.ogg
new file mode 100644
index 0000000..37a6a52
Binary files /dev/null and b/project/sounds/aiy120000190.ogg differ
diff --git a/project/sounds/aiy120000200.ogg b/project/sounds/aiy120000200.ogg
new file mode 100644
index 0000000..18eefb3
Binary files /dev/null and b/project/sounds/aiy120000200.ogg differ
diff --git a/project/sounds/aiy120000210.ogg b/project/sounds/aiy120000210.ogg
new file mode 100644
index 0000000..67784d0
Binary files /dev/null and b/project/sounds/aiy120000210.ogg differ
diff --git a/project/sounds/aiy120000220.ogg b/project/sounds/aiy120000220.ogg
new file mode 100644
index 0000000..1e9d440
Binary files /dev/null and b/project/sounds/aiy120000220.ogg differ
diff --git a/project/sounds/aiy120000230.ogg b/project/sounds/aiy120000230.ogg
new file mode 100644
index 0000000..dc4d494
Binary files /dev/null and b/project/sounds/aiy120000230.ogg differ
diff --git a/project/sounds/aiy120000240.ogg b/project/sounds/aiy120000240.ogg
new file mode 100644
index 0000000..88a9404
Binary files /dev/null and b/project/sounds/aiy120000240.ogg differ
diff --git a/project/sounds/aiy120000250.ogg b/project/sounds/aiy120000250.ogg
new file mode 100644
index 0000000..44e9970
Binary files /dev/null and b/project/sounds/aiy120000250.ogg differ
diff --git a/project/sounds/aiy120000260.ogg b/project/sounds/aiy120000260.ogg
new file mode 100644
index 0000000..c93d37b
Binary files /dev/null and b/project/sounds/aiy120000260.ogg differ
diff --git a/project/sounds/aiy120000270.ogg b/project/sounds/aiy120000270.ogg
new file mode 100644
index 0000000..97235e0
Binary files /dev/null and b/project/sounds/aiy120000270.ogg differ
diff --git a/project/sounds/aiy120000280.ogg b/project/sounds/aiy120000280.ogg
new file mode 100644
index 0000000..7153660
Binary files /dev/null and b/project/sounds/aiy120000280.ogg differ
diff --git a/project/sounds/aiy120000290.ogg b/project/sounds/aiy120000290.ogg
new file mode 100644
index 0000000..8c4db5b
Binary files /dev/null and b/project/sounds/aiy120000290.ogg differ
diff --git a/project/sounds/aiy120000300.ogg b/project/sounds/aiy120000300.ogg
new file mode 100644
index 0000000..875d1f7
Binary files /dev/null and b/project/sounds/aiy120000300.ogg differ
diff --git a/project/sounds/aiy120000310.ogg b/project/sounds/aiy120000310.ogg
new file mode 100644
index 0000000..8720a02
Binary files /dev/null and b/project/sounds/aiy120000310.ogg differ
diff --git a/project/sounds/aiy120000320.ogg b/project/sounds/aiy120000320.ogg
new file mode 100644
index 0000000..c86806b
Binary files /dev/null and b/project/sounds/aiy120000320.ogg differ
diff --git a/project/sounds/aiy120000330.ogg b/project/sounds/aiy120000330.ogg
new file mode 100644
index 0000000..0f21adc
Binary files /dev/null and b/project/sounds/aiy120000330.ogg differ
diff --git a/project/sounds/aiy120000340.ogg b/project/sounds/aiy120000340.ogg
new file mode 100644
index 0000000..a055a78
Binary files /dev/null and b/project/sounds/aiy120000340.ogg differ
diff --git a/project/sounds/aiy120000350.ogg b/project/sounds/aiy120000350.ogg
new file mode 100644
index 0000000..0711a4f
Binary files /dev/null and b/project/sounds/aiy120000350.ogg differ
diff --git a/project/sounds/aiy120000360.ogg b/project/sounds/aiy120000360.ogg
new file mode 100644
index 0000000..358c450
Binary files /dev/null and b/project/sounds/aiy120000360.ogg differ
diff --git a/project/sounds/aiy120000370.ogg b/project/sounds/aiy120000370.ogg
new file mode 100644
index 0000000..6381050
Binary files /dev/null and b/project/sounds/aiy120000370.ogg differ
diff --git a/project/sounds/aiy120000380.ogg b/project/sounds/aiy120000380.ogg
new file mode 100644
index 0000000..b80c4f0
Binary files /dev/null and b/project/sounds/aiy120000380.ogg differ
diff --git a/project/sounds/aiy120000390.ogg b/project/sounds/aiy120000390.ogg
new file mode 100644
index 0000000..c608bba
Binary files /dev/null and b/project/sounds/aiy120000390.ogg differ
diff --git a/project/sounds/aiy120000400.ogg b/project/sounds/aiy120000400.ogg
new file mode 100644
index 0000000..656ae27
Binary files /dev/null and b/project/sounds/aiy120000400.ogg differ
diff --git a/project/sounds/aiy120000410.ogg b/project/sounds/aiy120000410.ogg
new file mode 100644
index 0000000..5f04e20
Binary files /dev/null and b/project/sounds/aiy120000410.ogg differ
diff --git a/project/sounds/aiy120000420.ogg b/project/sounds/aiy120000420.ogg
new file mode 100644
index 0000000..86e91fa
Binary files /dev/null and b/project/sounds/aiy120000420.ogg differ
diff --git a/project/sounds/aiy120000430.ogg b/project/sounds/aiy120000430.ogg
new file mode 100644
index 0000000..957e986
Binary files /dev/null and b/project/sounds/aiy120000430.ogg differ
diff --git a/project/sounds/aiy120000440.ogg b/project/sounds/aiy120000440.ogg
new file mode 100644
index 0000000..45231db
Binary files /dev/null and b/project/sounds/aiy120000440.ogg differ
diff --git a/project/sounds/aiy120000450.ogg b/project/sounds/aiy120000450.ogg
new file mode 100644
index 0000000..ad04858
Binary files /dev/null and b/project/sounds/aiy120000450.ogg differ
diff --git a/project/sounds/aiy120000460.ogg b/project/sounds/aiy120000460.ogg
new file mode 100644
index 0000000..d35ded8
Binary files /dev/null and b/project/sounds/aiy120000460.ogg differ
diff --git a/project/sounds/aiy120000470.ogg b/project/sounds/aiy120000470.ogg
new file mode 100644
index 0000000..546a039
Binary files /dev/null and b/project/sounds/aiy120000470.ogg differ
diff --git a/project/sounds/aiy120000480.ogg b/project/sounds/aiy120000480.ogg
new file mode 100644
index 0000000..65f673a
Binary files /dev/null and b/project/sounds/aiy120000480.ogg differ
diff --git a/project/sounds/aiy120000490.ogg b/project/sounds/aiy120000490.ogg
new file mode 100644
index 0000000..36a5df2
Binary files /dev/null and b/project/sounds/aiy120000490.ogg differ
diff --git a/project/sounds/aiy120000500.ogg b/project/sounds/aiy120000500.ogg
new file mode 100644
index 0000000..db40172
Binary files /dev/null and b/project/sounds/aiy120000500.ogg differ
diff --git a/project/sounds/aiy120000510.ogg b/project/sounds/aiy120000510.ogg
new file mode 100644
index 0000000..0da2bbd
Binary files /dev/null and b/project/sounds/aiy120000510.ogg differ
diff --git a/project/sounds/aiy120000520.ogg b/project/sounds/aiy120000520.ogg
new file mode 100644
index 0000000..30618ea
Binary files /dev/null and b/project/sounds/aiy120000520.ogg differ
diff --git a/project/sounds/aiy120000530.ogg b/project/sounds/aiy120000530.ogg
new file mode 100644
index 0000000..63424e5
Binary files /dev/null and b/project/sounds/aiy120000530.ogg differ
diff --git a/project/sounds/aiy120000540.ogg b/project/sounds/aiy120000540.ogg
new file mode 100644
index 0000000..a491c40
Binary files /dev/null and b/project/sounds/aiy120000540.ogg differ
diff --git a/project/sounds/aiy120000550.ogg b/project/sounds/aiy120000550.ogg
new file mode 100644
index 0000000..1adb571
Binary files /dev/null and b/project/sounds/aiy120000550.ogg differ
diff --git a/project/sounds/aiy120000560.ogg b/project/sounds/aiy120000560.ogg
new file mode 100644
index 0000000..eafe149
Binary files /dev/null and b/project/sounds/aiy120000560.ogg differ
diff --git a/project/sounds/aiy120000570.ogg b/project/sounds/aiy120000570.ogg
new file mode 100644
index 0000000..f25d9d2
Binary files /dev/null and b/project/sounds/aiy120000570.ogg differ
diff --git a/project/sounds/aiy120000580.ogg b/project/sounds/aiy120000580.ogg
new file mode 100644
index 0000000..503d4e0
Binary files /dev/null and b/project/sounds/aiy120000580.ogg differ
diff --git a/project/sounds/aiy120000590.ogg b/project/sounds/aiy120000590.ogg
new file mode 100644
index 0000000..0fa071e
Binary files /dev/null and b/project/sounds/aiy120000590.ogg differ
diff --git a/project/sounds/aiy120000600.ogg b/project/sounds/aiy120000600.ogg
new file mode 100644
index 0000000..6d22156
Binary files /dev/null and b/project/sounds/aiy120000600.ogg differ
diff --git a/project/sounds/aiy120000610.ogg b/project/sounds/aiy120000610.ogg
new file mode 100644
index 0000000..95b2a7d
Binary files /dev/null and b/project/sounds/aiy120000610.ogg differ
diff --git a/project/sounds/aiy120000620.ogg b/project/sounds/aiy120000620.ogg
new file mode 100644
index 0000000..f03cf8f
Binary files /dev/null and b/project/sounds/aiy120000620.ogg differ
diff --git a/project/sounds/aiy120000630.ogg b/project/sounds/aiy120000630.ogg
new file mode 100644
index 0000000..5420074
Binary files /dev/null and b/project/sounds/aiy120000630.ogg differ
diff --git a/project/sounds/aiy120000640.ogg b/project/sounds/aiy120000640.ogg
new file mode 100644
index 0000000..a204879
Binary files /dev/null and b/project/sounds/aiy120000640.ogg differ
diff --git a/project/sounds/aiy120000650.ogg b/project/sounds/aiy120000650.ogg
new file mode 100644
index 0000000..257b817
Binary files /dev/null and b/project/sounds/aiy120000650.ogg differ
diff --git a/project/sounds/aiy120000670.ogg b/project/sounds/aiy120000670.ogg
new file mode 100644
index 0000000..b603efe
Binary files /dev/null and b/project/sounds/aiy120000670.ogg differ
diff --git a/project/sounds/aiy120000680.ogg b/project/sounds/aiy120000680.ogg
new file mode 100644
index 0000000..32f2bdd
Binary files /dev/null and b/project/sounds/aiy120000680.ogg differ
diff --git a/project/sounds/aiy120000690.ogg b/project/sounds/aiy120000690.ogg
new file mode 100644
index 0000000..89a831c
Binary files /dev/null and b/project/sounds/aiy120000690.ogg differ
diff --git a/project/sounds/aiy130000010.ogg b/project/sounds/aiy130000010.ogg
new file mode 100644
index 0000000..fe0e4e2
Binary files /dev/null and b/project/sounds/aiy130000010.ogg differ
diff --git a/project/sounds/aiy130000020.ogg b/project/sounds/aiy130000020.ogg
new file mode 100644
index 0000000..6e13850
Binary files /dev/null and b/project/sounds/aiy130000020.ogg differ
diff --git a/project/sounds/aiy150000010.ogg b/project/sounds/aiy150000010.ogg
new file mode 100644
index 0000000..0659452
Binary files /dev/null and b/project/sounds/aiy150000010.ogg differ
diff --git a/project/sounds/aiy150000020.ogg b/project/sounds/aiy150000020.ogg
new file mode 100644
index 0000000..798a9fc
Binary files /dev/null and b/project/sounds/aiy150000020.ogg differ
diff --git a/project/sounds/aiy150000030.ogg b/project/sounds/aiy150000030.ogg
new file mode 100644
index 0000000..9022052
Binary files /dev/null and b/project/sounds/aiy150000030.ogg differ
diff --git a/project/sounds/aiy150000040.ogg b/project/sounds/aiy150000040.ogg
new file mode 100644
index 0000000..c6e6233
Binary files /dev/null and b/project/sounds/aiy150000040.ogg differ
diff --git a/project/sounds/aiy150000050.ogg b/project/sounds/aiy150000050.ogg
new file mode 100644
index 0000000..8764aee
Binary files /dev/null and b/project/sounds/aiy150000050.ogg differ
diff --git a/project/sounds/aiy150000060.ogg b/project/sounds/aiy150000060.ogg
new file mode 100644
index 0000000..e305004
Binary files /dev/null and b/project/sounds/aiy150000060.ogg differ
diff --git a/project/sounds/aiy150000070.ogg b/project/sounds/aiy150000070.ogg
new file mode 100644
index 0000000..e2d173a
Binary files /dev/null and b/project/sounds/aiy150000070.ogg differ
diff --git a/project/sounds/aiy150000080.ogg b/project/sounds/aiy150000080.ogg
new file mode 100644
index 0000000..8bed0cf
Binary files /dev/null and b/project/sounds/aiy150000080.ogg differ
diff --git a/project/sounds/aiy150000090.ogg b/project/sounds/aiy150000090.ogg
new file mode 100644
index 0000000..8c35672
Binary files /dev/null and b/project/sounds/aiy150000090.ogg differ
diff --git a/project/sounds/aiy150000100.ogg b/project/sounds/aiy150000100.ogg
new file mode 100644
index 0000000..0fda997
Binary files /dev/null and b/project/sounds/aiy150000100.ogg differ
diff --git a/project/sounds/aiy150000110.ogg b/project/sounds/aiy150000110.ogg
new file mode 100644
index 0000000..2e7da86
Binary files /dev/null and b/project/sounds/aiy150000110.ogg differ
diff --git a/project/sounds/aiy150000120.ogg b/project/sounds/aiy150000120.ogg
new file mode 100644
index 0000000..1e6adc7
Binary files /dev/null and b/project/sounds/aiy150000120.ogg differ
diff --git a/project/sounds/aiy150000130.ogg b/project/sounds/aiy150000130.ogg
new file mode 100644
index 0000000..bdbefb9
Binary files /dev/null and b/project/sounds/aiy150000130.ogg differ
diff --git a/project/sounds/aiy150000140.ogg b/project/sounds/aiy150000140.ogg
new file mode 100644
index 0000000..5ec6eda
Binary files /dev/null and b/project/sounds/aiy150000140.ogg differ
diff --git a/project/sounds/aiy150000150.ogg b/project/sounds/aiy150000150.ogg
new file mode 100644
index 0000000..28fad01
Binary files /dev/null and b/project/sounds/aiy150000150.ogg differ
diff --git a/project/sounds/aiy150000160.ogg b/project/sounds/aiy150000160.ogg
new file mode 100644
index 0000000..54bb342
Binary files /dev/null and b/project/sounds/aiy150000160.ogg differ
diff --git a/project/sounds/aiy150000170.ogg b/project/sounds/aiy150000170.ogg
new file mode 100644
index 0000000..44543c4
Binary files /dev/null and b/project/sounds/aiy150000170.ogg differ
diff --git a/project/sounds/aiy150000180.ogg b/project/sounds/aiy150000180.ogg
new file mode 100644
index 0000000..16682cc
Binary files /dev/null and b/project/sounds/aiy150000180.ogg differ
diff --git a/project/sounds/aiy150000190.ogg b/project/sounds/aiy150000190.ogg
new file mode 100644
index 0000000..74b719a
Binary files /dev/null and b/project/sounds/aiy150000190.ogg differ
diff --git a/project/sounds/aiy150000200.ogg b/project/sounds/aiy150000200.ogg
new file mode 100644
index 0000000..c6c73df
Binary files /dev/null and b/project/sounds/aiy150000200.ogg differ
diff --git a/project/sounds/aiy150000210.ogg b/project/sounds/aiy150000210.ogg
new file mode 100644
index 0000000..bb1182b
Binary files /dev/null and b/project/sounds/aiy150000210.ogg differ
diff --git a/project/sounds/aiy150000220.ogg b/project/sounds/aiy150000220.ogg
new file mode 100644
index 0000000..3babde5
Binary files /dev/null and b/project/sounds/aiy150000220.ogg differ
diff --git a/project/sounds/aiy150000230.ogg b/project/sounds/aiy150000230.ogg
new file mode 100644
index 0000000..a51169e
Binary files /dev/null and b/project/sounds/aiy150000230.ogg differ
diff --git a/project/sounds/aiy150000240.ogg b/project/sounds/aiy150000240.ogg
new file mode 100644
index 0000000..6ff7544
Binary files /dev/null and b/project/sounds/aiy150000240.ogg differ
diff --git a/project/sounds/aiy150000250.ogg b/project/sounds/aiy150000250.ogg
new file mode 100644
index 0000000..1b3acf8
Binary files /dev/null and b/project/sounds/aiy150000250.ogg differ
diff --git a/project/sounds/aiy310000310.ogg b/project/sounds/aiy310000310.ogg
new file mode 100644
index 0000000..7d1eda9
Binary files /dev/null and b/project/sounds/aiy310000310.ogg differ
diff --git a/project/sounds/aiy310000320.ogg b/project/sounds/aiy310000320.ogg
new file mode 100644
index 0000000..2793e41
Binary files /dev/null and b/project/sounds/aiy310000320.ogg differ
diff --git a/project/sounds/aiy310000330.ogg b/project/sounds/aiy310000330.ogg
new file mode 100644
index 0000000..f3806c3
Binary files /dev/null and b/project/sounds/aiy310000330.ogg differ
diff --git a/project/sounds/aiy310000340.ogg b/project/sounds/aiy310000340.ogg
new file mode 100644
index 0000000..a640644
Binary files /dev/null and b/project/sounds/aiy310000340.ogg differ
diff --git a/project/sounds/aiy310000350.ogg b/project/sounds/aiy310000350.ogg
new file mode 100644
index 0000000..ea5352e
Binary files /dev/null and b/project/sounds/aiy310000350.ogg differ
diff --git a/project/sounds/aiy310000360.ogg b/project/sounds/aiy310000360.ogg
new file mode 100644
index 0000000..5eefa11
Binary files /dev/null and b/project/sounds/aiy310000360.ogg differ
diff --git a/project/sounds/aiy310000370.ogg b/project/sounds/aiy310000370.ogg
new file mode 100644
index 0000000..91a7a46
Binary files /dev/null and b/project/sounds/aiy310000370.ogg differ
diff --git a/project/sounds/aiy310000380.ogg b/project/sounds/aiy310000380.ogg
new file mode 100644
index 0000000..7ba0311
Binary files /dev/null and b/project/sounds/aiy310000380.ogg differ
diff --git a/project/sounds/aiy310000390.ogg b/project/sounds/aiy310000390.ogg
new file mode 100644
index 0000000..3c877e9
Binary files /dev/null and b/project/sounds/aiy310000390.ogg differ
diff --git a/project/sounds/aiy310000400.ogg b/project/sounds/aiy310000400.ogg
new file mode 100644
index 0000000..df3e50c
Binary files /dev/null and b/project/sounds/aiy310000400.ogg differ
diff --git a/project/sounds/aiy310000410.ogg b/project/sounds/aiy310000410.ogg
new file mode 100644
index 0000000..69ad557
Binary files /dev/null and b/project/sounds/aiy310000410.ogg differ
diff --git a/project/sounds/aiy310000420.ogg b/project/sounds/aiy310000420.ogg
new file mode 100644
index 0000000..1a50529
Binary files /dev/null and b/project/sounds/aiy310000420.ogg differ
diff --git a/project/sounds/aiy310000430.ogg b/project/sounds/aiy310000430.ogg
new file mode 100644
index 0000000..980b7af
Binary files /dev/null and b/project/sounds/aiy310000430.ogg differ
diff --git a/project/sounds/aiy310000440.ogg b/project/sounds/aiy310000440.ogg
new file mode 100644
index 0000000..68e063a
Binary files /dev/null and b/project/sounds/aiy310000440.ogg differ
diff --git a/project/sounds/aiy310000450.ogg b/project/sounds/aiy310000450.ogg
new file mode 100644
index 0000000..991e23c
Binary files /dev/null and b/project/sounds/aiy310000450.ogg differ
diff --git a/project/sounds/aiy310000460.ogg b/project/sounds/aiy310000460.ogg
new file mode 100644
index 0000000..7208098
Binary files /dev/null and b/project/sounds/aiy310000460.ogg differ
diff --git a/project/sounds/aiy310000470.ogg b/project/sounds/aiy310000470.ogg
new file mode 100644
index 0000000..fe71d8f
Binary files /dev/null and b/project/sounds/aiy310000470.ogg differ
diff --git a/project/sounds/aiy310000480.ogg b/project/sounds/aiy310000480.ogg
new file mode 100644
index 0000000..11bc4fe
Binary files /dev/null and b/project/sounds/aiy310000480.ogg differ
diff --git a/project/sounds/aiy310000490.ogg b/project/sounds/aiy310000490.ogg
new file mode 100644
index 0000000..4a8c1a5
Binary files /dev/null and b/project/sounds/aiy310000490.ogg differ
diff --git a/project/sounds/aiy310000510.ogg b/project/sounds/aiy310000510.ogg
new file mode 100644
index 0000000..5f98abb
Binary files /dev/null and b/project/sounds/aiy310000510.ogg differ
diff --git a/project/sounds/aiy310000520.ogg b/project/sounds/aiy310000520.ogg
new file mode 100644
index 0000000..5dbe058
Binary files /dev/null and b/project/sounds/aiy310000520.ogg differ
diff --git a/project/sounds/aiy310000530.ogg b/project/sounds/aiy310000530.ogg
new file mode 100644
index 0000000..317a75e
Binary files /dev/null and b/project/sounds/aiy310000530.ogg differ
diff --git a/project/sounds/aiy310000540.ogg b/project/sounds/aiy310000540.ogg
new file mode 100644
index 0000000..ebdceab
Binary files /dev/null and b/project/sounds/aiy310000540.ogg differ
diff --git a/project/sounds/aiy310000550.ogg b/project/sounds/aiy310000550.ogg
new file mode 100644
index 0000000..735881c
Binary files /dev/null and b/project/sounds/aiy310000550.ogg differ
diff --git a/project/sounds/aiy310000560.ogg b/project/sounds/aiy310000560.ogg
new file mode 100644
index 0000000..a631836
Binary files /dev/null and b/project/sounds/aiy310000560.ogg differ
diff --git a/project/sounds/aiy310000570.ogg b/project/sounds/aiy310000570.ogg
new file mode 100644
index 0000000..cd365e2
Binary files /dev/null and b/project/sounds/aiy310000570.ogg differ
diff --git a/project/sounds/aiy310000580.ogg b/project/sounds/aiy310000580.ogg
new file mode 100644
index 0000000..1ff4d98
Binary files /dev/null and b/project/sounds/aiy310000580.ogg differ
diff --git a/project/sounds/aiy310000590.ogg b/project/sounds/aiy310000590.ogg
new file mode 100644
index 0000000..d6d161a
Binary files /dev/null and b/project/sounds/aiy310000590.ogg differ
diff --git a/project/sounds/aiy310000600.ogg b/project/sounds/aiy310000600.ogg
new file mode 100644
index 0000000..3afd47d
Binary files /dev/null and b/project/sounds/aiy310000600.ogg differ
diff --git a/project/sounds/aiy310000610.ogg b/project/sounds/aiy310000610.ogg
new file mode 100644
index 0000000..fdcb28b
Binary files /dev/null and b/project/sounds/aiy310000610.ogg differ
diff --git a/project/sounds/aiy310000620.ogg b/project/sounds/aiy310000620.ogg
new file mode 100644
index 0000000..b9d5791
Binary files /dev/null and b/project/sounds/aiy310000620.ogg differ
diff --git a/project/sounds/aiy310000630.ogg b/project/sounds/aiy310000630.ogg
new file mode 100644
index 0000000..b564e34
Binary files /dev/null and b/project/sounds/aiy310000630.ogg differ
diff --git a/project/sounds/aiy310000640.ogg b/project/sounds/aiy310000640.ogg
new file mode 100644
index 0000000..d976e60
Binary files /dev/null and b/project/sounds/aiy310000640.ogg differ
diff --git a/project/sounds/aiy310000650.ogg b/project/sounds/aiy310000650.ogg
new file mode 100644
index 0000000..ea7b117
Binary files /dev/null and b/project/sounds/aiy310000650.ogg differ
diff --git a/project/sounds/aiy310000660.ogg b/project/sounds/aiy310000660.ogg
new file mode 100644
index 0000000..95f02d0
Binary files /dev/null and b/project/sounds/aiy310000660.ogg differ
diff --git a/project/sounds/aiy310000670.ogg b/project/sounds/aiy310000670.ogg
new file mode 100644
index 0000000..17df42a
Binary files /dev/null and b/project/sounds/aiy310000670.ogg differ
diff --git a/project/sounds/aiy310000680.ogg b/project/sounds/aiy310000680.ogg
new file mode 100644
index 0000000..032a9b8
Binary files /dev/null and b/project/sounds/aiy310000680.ogg differ
diff --git a/project/sounds/aiy310000690.ogg b/project/sounds/aiy310000690.ogg
new file mode 100644
index 0000000..9d99453
Binary files /dev/null and b/project/sounds/aiy310000690.ogg differ
diff --git a/project/sounds/aiy310000700.ogg b/project/sounds/aiy310000700.ogg
new file mode 100644
index 0000000..7cefbff
Binary files /dev/null and b/project/sounds/aiy310000700.ogg differ
diff --git a/project/sounds/aiy310000710.ogg b/project/sounds/aiy310000710.ogg
new file mode 100644
index 0000000..dc5eb5a
Binary files /dev/null and b/project/sounds/aiy310000710.ogg differ
diff --git a/project/sounds/aiy310000720.ogg b/project/sounds/aiy310000720.ogg
new file mode 100644
index 0000000..fd37fd3
Binary files /dev/null and b/project/sounds/aiy310000720.ogg differ
diff --git a/project/sounds/aiy310000730.ogg b/project/sounds/aiy310000730.ogg
new file mode 100644
index 0000000..94a4631
Binary files /dev/null and b/project/sounds/aiy310000730.ogg differ
diff --git a/project/sounds/aiy310000740.ogg b/project/sounds/aiy310000740.ogg
new file mode 100644
index 0000000..db5f537
Binary files /dev/null and b/project/sounds/aiy310000740.ogg differ
diff --git a/project/sounds/aiy310000750.ogg b/project/sounds/aiy310000750.ogg
new file mode 100644
index 0000000..90573c8
Binary files /dev/null and b/project/sounds/aiy310000750.ogg differ
diff --git a/project/sounds/aiy310000760.ogg b/project/sounds/aiy310000760.ogg
new file mode 100644
index 0000000..43f2522
Binary files /dev/null and b/project/sounds/aiy310000760.ogg differ
diff --git a/project/sounds/aiy310000770.ogg b/project/sounds/aiy310000770.ogg
new file mode 100644
index 0000000..fccf1f1
Binary files /dev/null and b/project/sounds/aiy310000770.ogg differ
diff --git a/project/sounds/aiy310000780.ogg b/project/sounds/aiy310000780.ogg
new file mode 100644
index 0000000..d1d04ee
Binary files /dev/null and b/project/sounds/aiy310000780.ogg differ
diff --git a/project/sounds/aiy310000790.ogg b/project/sounds/aiy310000790.ogg
new file mode 100644
index 0000000..2cfa70b
Binary files /dev/null and b/project/sounds/aiy310000790.ogg differ
diff --git a/project/sounds/aiy310000800.ogg b/project/sounds/aiy310000800.ogg
new file mode 100644
index 0000000..4400a66
Binary files /dev/null and b/project/sounds/aiy310000800.ogg differ
diff --git a/project/sounds/aiy310000810.ogg b/project/sounds/aiy310000810.ogg
new file mode 100644
index 0000000..4066404
Binary files /dev/null and b/project/sounds/aiy310000810.ogg differ
diff --git a/project/sounds/aiy310000820.ogg b/project/sounds/aiy310000820.ogg
new file mode 100644
index 0000000..29c5807
Binary files /dev/null and b/project/sounds/aiy310000820.ogg differ
diff --git a/project/sounds/aiy310000830.ogg b/project/sounds/aiy310000830.ogg
new file mode 100644
index 0000000..84770ef
Binary files /dev/null and b/project/sounds/aiy310000830.ogg differ
diff --git a/project/sounds/aiy310000840.ogg b/project/sounds/aiy310000840.ogg
new file mode 100644
index 0000000..5b44741
Binary files /dev/null and b/project/sounds/aiy310000840.ogg differ
diff --git a/project/sounds/aiy310000850.ogg b/project/sounds/aiy310000850.ogg
new file mode 100644
index 0000000..0900773
Binary files /dev/null and b/project/sounds/aiy310000850.ogg differ
diff --git a/project/sounds/aiy310000860.ogg b/project/sounds/aiy310000860.ogg
new file mode 100644
index 0000000..e31d562
Binary files /dev/null and b/project/sounds/aiy310000860.ogg differ
diff --git a/project/sounds/aiy310000870.ogg b/project/sounds/aiy310000870.ogg
new file mode 100644
index 0000000..5c9f936
Binary files /dev/null and b/project/sounds/aiy310000870.ogg differ
diff --git a/project/sounds/aiy310000880.ogg b/project/sounds/aiy310000880.ogg
new file mode 100644
index 0000000..0938bb7
Binary files /dev/null and b/project/sounds/aiy310000880.ogg differ
diff --git a/project/sounds/aiy310000890.ogg b/project/sounds/aiy310000890.ogg
new file mode 100644
index 0000000..89e43c5
Binary files /dev/null and b/project/sounds/aiy310000890.ogg differ
diff --git a/project/sounds/aiy310000900.ogg b/project/sounds/aiy310000900.ogg
new file mode 100644
index 0000000..e809e52
Binary files /dev/null and b/project/sounds/aiy310000900.ogg differ
diff --git a/project/sounds/aiy310000910.ogg b/project/sounds/aiy310000910.ogg
new file mode 100644
index 0000000..ffb6b5b
Binary files /dev/null and b/project/sounds/aiy310000910.ogg differ
diff --git a/project/sounds/aiy310000920.ogg b/project/sounds/aiy310000920.ogg
new file mode 100644
index 0000000..f470e54
Binary files /dev/null and b/project/sounds/aiy310000920.ogg differ
diff --git a/project/sounds/aiy310000930.ogg b/project/sounds/aiy310000930.ogg
new file mode 100644
index 0000000..494d15f
Binary files /dev/null and b/project/sounds/aiy310000930.ogg differ
diff --git a/project/sounds/aiy310000940.ogg b/project/sounds/aiy310000940.ogg
new file mode 100644
index 0000000..de36a9d
Binary files /dev/null and b/project/sounds/aiy310000940.ogg differ
diff --git a/project/sounds/aiy310000950.ogg b/project/sounds/aiy310000950.ogg
new file mode 100644
index 0000000..9abfea9
Binary files /dev/null and b/project/sounds/aiy310000950.ogg differ
diff --git a/project/sounds/aiy310000960.ogg b/project/sounds/aiy310000960.ogg
new file mode 100644
index 0000000..394ddcb
Binary files /dev/null and b/project/sounds/aiy310000960.ogg differ
diff --git a/project/sounds/aiy310000970.ogg b/project/sounds/aiy310000970.ogg
new file mode 100644
index 0000000..aefe802
Binary files /dev/null and b/project/sounds/aiy310000970.ogg differ
diff --git a/project/sounds/aiy310000980.ogg b/project/sounds/aiy310000980.ogg
new file mode 100644
index 0000000..9c7ea85
Binary files /dev/null and b/project/sounds/aiy310000980.ogg differ
diff --git a/project/sounds/aiy310000990.ogg b/project/sounds/aiy310000990.ogg
new file mode 100644
index 0000000..5808076
Binary files /dev/null and b/project/sounds/aiy310000990.ogg differ
diff --git a/project/sounds/aiy310001000.ogg b/project/sounds/aiy310001000.ogg
new file mode 100644
index 0000000..2dba8fb
Binary files /dev/null and b/project/sounds/aiy310001000.ogg differ
diff --git a/project/sounds/aiy310001010.ogg b/project/sounds/aiy310001010.ogg
new file mode 100644
index 0000000..a647a12
Binary files /dev/null and b/project/sounds/aiy310001010.ogg differ
diff --git a/project/sounds/aiy310001027.ogg b/project/sounds/aiy310001027.ogg
new file mode 100644
index 0000000..9d31c17
Binary files /dev/null and b/project/sounds/aiy310001027.ogg differ
diff --git a/project/sounds/aiy310001030.ogg b/project/sounds/aiy310001030.ogg
new file mode 100644
index 0000000..c0f363e
Binary files /dev/null and b/project/sounds/aiy310001030.ogg differ
diff --git a/project/sounds/aiy310001040.ogg b/project/sounds/aiy310001040.ogg
new file mode 100644
index 0000000..2d36a51
Binary files /dev/null and b/project/sounds/aiy310001040.ogg differ
diff --git a/project/sounds/aiy310001050.ogg b/project/sounds/aiy310001050.ogg
new file mode 100644
index 0000000..7b3d406
Binary files /dev/null and b/project/sounds/aiy310001050.ogg differ
diff --git a/project/sounds/aiy310001060.ogg b/project/sounds/aiy310001060.ogg
new file mode 100644
index 0000000..5a7c2c1
Binary files /dev/null and b/project/sounds/aiy310001060.ogg differ
diff --git a/project/sounds/aiy310001070.ogg b/project/sounds/aiy310001070.ogg
new file mode 100644
index 0000000..4ecc17a
Binary files /dev/null and b/project/sounds/aiy310001070.ogg differ
diff --git a/project/sounds/aiy310001080.ogg b/project/sounds/aiy310001080.ogg
new file mode 100644
index 0000000..d97e943
Binary files /dev/null and b/project/sounds/aiy310001080.ogg differ
diff --git a/project/sounds/aiy310001090.ogg b/project/sounds/aiy310001090.ogg
new file mode 100644
index 0000000..dc60205
Binary files /dev/null and b/project/sounds/aiy310001090.ogg differ
diff --git a/project/sounds/aiy310001100.ogg b/project/sounds/aiy310001100.ogg
new file mode 100644
index 0000000..13d7d7d
Binary files /dev/null and b/project/sounds/aiy310001100.ogg differ
diff --git a/project/sounds/aiy310001110.ogg b/project/sounds/aiy310001110.ogg
new file mode 100644
index 0000000..040c120
Binary files /dev/null and b/project/sounds/aiy310001110.ogg differ
diff --git a/project/sounds/aiy310001120.ogg b/project/sounds/aiy310001120.ogg
new file mode 100644
index 0000000..458e4f7
Binary files /dev/null and b/project/sounds/aiy310001120.ogg differ
diff --git a/project/sounds/aiy310001130.ogg b/project/sounds/aiy310001130.ogg
new file mode 100644
index 0000000..7daea21
Binary files /dev/null and b/project/sounds/aiy310001130.ogg differ
diff --git a/project/sounds/aiy310001140.ogg b/project/sounds/aiy310001140.ogg
new file mode 100644
index 0000000..7d54e19
Binary files /dev/null and b/project/sounds/aiy310001140.ogg differ
diff --git a/project/sounds/aiy310001150.ogg b/project/sounds/aiy310001150.ogg
new file mode 100644
index 0000000..b06bdc9
Binary files /dev/null and b/project/sounds/aiy310001150.ogg differ
diff --git a/project/sounds/aiy310001160.ogg b/project/sounds/aiy310001160.ogg
new file mode 100644
index 0000000..3ec510b
Binary files /dev/null and b/project/sounds/aiy310001160.ogg differ
diff --git a/project/sounds/aiy310001170.ogg b/project/sounds/aiy310001170.ogg
new file mode 100644
index 0000000..d96b1e2
Binary files /dev/null and b/project/sounds/aiy310001170.ogg differ
diff --git a/project/sounds/aiy310001180.ogg b/project/sounds/aiy310001180.ogg
new file mode 100644
index 0000000..88cffb2
Binary files /dev/null and b/project/sounds/aiy310001180.ogg differ
diff --git a/project/sounds/aiy310001190.ogg b/project/sounds/aiy310001190.ogg
new file mode 100644
index 0000000..e35c481
Binary files /dev/null and b/project/sounds/aiy310001190.ogg differ
diff --git a/project/sounds/aiy310001200.ogg b/project/sounds/aiy310001200.ogg
new file mode 100644
index 0000000..9c30d38
Binary files /dev/null and b/project/sounds/aiy310001200.ogg differ
diff --git a/project/sounds/aiy310001210.ogg b/project/sounds/aiy310001210.ogg
new file mode 100644
index 0000000..cfe51c7
Binary files /dev/null and b/project/sounds/aiy310001210.ogg differ
diff --git a/project/sounds/aiy310001220.ogg b/project/sounds/aiy310001220.ogg
new file mode 100644
index 0000000..e7d5e61
Binary files /dev/null and b/project/sounds/aiy310001220.ogg differ
diff --git a/project/sounds/aiy310001230.ogg b/project/sounds/aiy310001230.ogg
new file mode 100644
index 0000000..4aa7064
Binary files /dev/null and b/project/sounds/aiy310001230.ogg differ
diff --git a/project/sounds/aiy310001240.ogg b/project/sounds/aiy310001240.ogg
new file mode 100644
index 0000000..9342811
Binary files /dev/null and b/project/sounds/aiy310001240.ogg differ
diff --git a/project/sounds/aiy310001250.ogg b/project/sounds/aiy310001250.ogg
new file mode 100644
index 0000000..15a6960
Binary files /dev/null and b/project/sounds/aiy310001250.ogg differ
diff --git a/project/sounds/aiy310001260.ogg b/project/sounds/aiy310001260.ogg
new file mode 100644
index 0000000..dab5516
Binary files /dev/null and b/project/sounds/aiy310001260.ogg differ
diff --git a/project/sounds/aiy310001270.ogg b/project/sounds/aiy310001270.ogg
new file mode 100644
index 0000000..d531b49
Binary files /dev/null and b/project/sounds/aiy310001270.ogg differ
diff --git a/project/sounds/aiy310001280.ogg b/project/sounds/aiy310001280.ogg
new file mode 100644
index 0000000..2e749a4
Binary files /dev/null and b/project/sounds/aiy310001280.ogg differ
diff --git a/project/sounds/aiy310001290.ogg b/project/sounds/aiy310001290.ogg
new file mode 100644
index 0000000..c2e81a6
Binary files /dev/null and b/project/sounds/aiy310001290.ogg differ
diff --git a/project/sounds/aiy310001300.ogg b/project/sounds/aiy310001300.ogg
new file mode 100644
index 0000000..904940f
Binary files /dev/null and b/project/sounds/aiy310001300.ogg differ
diff --git a/project/sounds/aiy310001310.ogg b/project/sounds/aiy310001310.ogg
new file mode 100644
index 0000000..a7f25b0
Binary files /dev/null and b/project/sounds/aiy310001310.ogg differ
diff --git a/project/sounds/aiy310001320.ogg b/project/sounds/aiy310001320.ogg
new file mode 100644
index 0000000..1b06256
Binary files /dev/null and b/project/sounds/aiy310001320.ogg differ
diff --git a/project/sounds/aiy310001330.ogg b/project/sounds/aiy310001330.ogg
new file mode 100644
index 0000000..8525810
Binary files /dev/null and b/project/sounds/aiy310001330.ogg differ
diff --git a/project/sounds/aiy310001340.ogg b/project/sounds/aiy310001340.ogg
new file mode 100644
index 0000000..44b81fe
Binary files /dev/null and b/project/sounds/aiy310001340.ogg differ
diff --git a/project/sounds/aiy310001350.ogg b/project/sounds/aiy310001350.ogg
new file mode 100644
index 0000000..2291f96
Binary files /dev/null and b/project/sounds/aiy310001350.ogg differ
diff --git a/project/sounds/aiy310001360.ogg b/project/sounds/aiy310001360.ogg
new file mode 100644
index 0000000..2114e7b
Binary files /dev/null and b/project/sounds/aiy310001360.ogg differ
diff --git a/project/sounds/aiy310001370.ogg b/project/sounds/aiy310001370.ogg
new file mode 100644
index 0000000..d7df9be
Binary files /dev/null and b/project/sounds/aiy310001370.ogg differ
diff --git a/project/sounds/aiy310001380.ogg b/project/sounds/aiy310001380.ogg
new file mode 100644
index 0000000..fac86f0
Binary files /dev/null and b/project/sounds/aiy310001380.ogg differ
diff --git a/project/sounds/aiy310001390.ogg b/project/sounds/aiy310001390.ogg
new file mode 100644
index 0000000..e543b6f
Binary files /dev/null and b/project/sounds/aiy310001390.ogg differ
diff --git a/project/sounds/aiy320000010.ogg b/project/sounds/aiy320000010.ogg
new file mode 100644
index 0000000..54d6db5
Binary files /dev/null and b/project/sounds/aiy320000010.ogg differ
diff --git a/project/sounds/aiy320000020.ogg b/project/sounds/aiy320000020.ogg
new file mode 100644
index 0000000..d98d94e
Binary files /dev/null and b/project/sounds/aiy320000020.ogg differ
diff --git a/project/sounds/aiy320000030.ogg b/project/sounds/aiy320000030.ogg
new file mode 100644
index 0000000..574f903
Binary files /dev/null and b/project/sounds/aiy320000030.ogg differ
diff --git a/project/sounds/aiy320000040.ogg b/project/sounds/aiy320000040.ogg
new file mode 100644
index 0000000..613c27f
Binary files /dev/null and b/project/sounds/aiy320000040.ogg differ
diff --git a/project/sounds/aiy320000050.ogg b/project/sounds/aiy320000050.ogg
new file mode 100644
index 0000000..b35ca98
Binary files /dev/null and b/project/sounds/aiy320000050.ogg differ
diff --git a/project/sounds/aiy320000060.ogg b/project/sounds/aiy320000060.ogg
new file mode 100644
index 0000000..0365def
Binary files /dev/null and b/project/sounds/aiy320000060.ogg differ
diff --git a/project/sounds/aiy320000070.ogg b/project/sounds/aiy320000070.ogg
new file mode 100644
index 0000000..52e3d11
Binary files /dev/null and b/project/sounds/aiy320000070.ogg differ
diff --git a/project/sounds/aiy320000080.ogg b/project/sounds/aiy320000080.ogg
new file mode 100644
index 0000000..9a2afef
Binary files /dev/null and b/project/sounds/aiy320000080.ogg differ
diff --git a/project/sounds/aiy320000090.ogg b/project/sounds/aiy320000090.ogg
new file mode 100644
index 0000000..608f2e1
Binary files /dev/null and b/project/sounds/aiy320000090.ogg differ
diff --git a/project/sounds/aiy320000100.ogg b/project/sounds/aiy320000100.ogg
new file mode 100644
index 0000000..b97a61c
Binary files /dev/null and b/project/sounds/aiy320000100.ogg differ
diff --git a/project/sounds/aiy320000110.ogg b/project/sounds/aiy320000110.ogg
new file mode 100644
index 0000000..f15348f
Binary files /dev/null and b/project/sounds/aiy320000110.ogg differ
diff --git a/project/sounds/aiy320000120.ogg b/project/sounds/aiy320000120.ogg
new file mode 100644
index 0000000..3adda1d
Binary files /dev/null and b/project/sounds/aiy320000120.ogg differ
diff --git a/project/sounds/aiy320000135.ogg b/project/sounds/aiy320000135.ogg
new file mode 100644
index 0000000..79ed386
Binary files /dev/null and b/project/sounds/aiy320000135.ogg differ
diff --git a/project/sounds/aiy320000140.ogg b/project/sounds/aiy320000140.ogg
new file mode 100644
index 0000000..0b7add2
Binary files /dev/null and b/project/sounds/aiy320000140.ogg differ
diff --git a/project/sounds/aiy340000010.ogg b/project/sounds/aiy340000010.ogg
new file mode 100644
index 0000000..1687505
Binary files /dev/null and b/project/sounds/aiy340000010.ogg differ
diff --git a/project/sounds/aiy340000020.ogg b/project/sounds/aiy340000020.ogg
new file mode 100644
index 0000000..f05a1e8
Binary files /dev/null and b/project/sounds/aiy340000020.ogg differ
diff --git a/project/sounds/aiy340000030.ogg b/project/sounds/aiy340000030.ogg
new file mode 100644
index 0000000..915b664
Binary files /dev/null and b/project/sounds/aiy340000030.ogg differ
diff --git a/project/sounds/aiy340000040.ogg b/project/sounds/aiy340000040.ogg
new file mode 100644
index 0000000..72259c5
Binary files /dev/null and b/project/sounds/aiy340000040.ogg differ
diff --git a/project/sounds/aiy340000050.ogg b/project/sounds/aiy340000050.ogg
new file mode 100644
index 0000000..ca136d2
Binary files /dev/null and b/project/sounds/aiy340000050.ogg differ
diff --git a/project/sounds/aiy340000060.ogg b/project/sounds/aiy340000060.ogg
new file mode 100644
index 0000000..8bcb94b
Binary files /dev/null and b/project/sounds/aiy340000060.ogg differ
diff --git a/project/sounds/aiy340000070.ogg b/project/sounds/aiy340000070.ogg
new file mode 100644
index 0000000..364be3b
Binary files /dev/null and b/project/sounds/aiy340000070.ogg differ
diff --git a/project/sounds/aiy340000080.ogg b/project/sounds/aiy340000080.ogg
new file mode 100644
index 0000000..6e6f1da
Binary files /dev/null and b/project/sounds/aiy340000080.ogg differ
diff --git a/project/sounds/aiy340000090.ogg b/project/sounds/aiy340000090.ogg
new file mode 100644
index 0000000..1da2a78
Binary files /dev/null and b/project/sounds/aiy340000090.ogg differ
diff --git a/project/sounds/aiy340000100.ogg b/project/sounds/aiy340000100.ogg
new file mode 100644
index 0000000..718db86
Binary files /dev/null and b/project/sounds/aiy340000100.ogg differ
diff --git a/project/sounds/aiy340000110.ogg b/project/sounds/aiy340000110.ogg
new file mode 100644
index 0000000..46d5be6
Binary files /dev/null and b/project/sounds/aiy340000110.ogg differ
diff --git a/project/sounds/aiy340000120.ogg b/project/sounds/aiy340000120.ogg
new file mode 100644
index 0000000..f1003c3
Binary files /dev/null and b/project/sounds/aiy340000120.ogg differ
diff --git a/project/sounds/aiy340000140.ogg b/project/sounds/aiy340000140.ogg
new file mode 100644
index 0000000..7a475e9
Binary files /dev/null and b/project/sounds/aiy340000140.ogg differ
diff --git a/project/sounds/aiy340000150.ogg b/project/sounds/aiy340000150.ogg
new file mode 100644
index 0000000..01b5107
Binary files /dev/null and b/project/sounds/aiy340000150.ogg differ
diff --git a/project/sounds/aiy340000160.ogg b/project/sounds/aiy340000160.ogg
new file mode 100644
index 0000000..710abca
Binary files /dev/null and b/project/sounds/aiy340000160.ogg differ
diff --git a/project/sounds/aiy340000170.ogg b/project/sounds/aiy340000170.ogg
new file mode 100644
index 0000000..7fc073b
Binary files /dev/null and b/project/sounds/aiy340000170.ogg differ
diff --git a/project/sounds/aiy340000180.ogg b/project/sounds/aiy340000180.ogg
new file mode 100644
index 0000000..575d8b4
Binary files /dev/null and b/project/sounds/aiy340000180.ogg differ
diff --git a/project/sounds/aiy340000190.ogg b/project/sounds/aiy340000190.ogg
new file mode 100644
index 0000000..155b411
Binary files /dev/null and b/project/sounds/aiy340000190.ogg differ
diff --git a/project/sounds/aiy340000200.ogg b/project/sounds/aiy340000200.ogg
new file mode 100644
index 0000000..bf6dc4a
Binary files /dev/null and b/project/sounds/aiy340000200.ogg differ
diff --git a/project/sounds/aiy340000210.ogg b/project/sounds/aiy340000210.ogg
new file mode 100644
index 0000000..3b4e1b1
Binary files /dev/null and b/project/sounds/aiy340000210.ogg differ
diff --git a/project/sounds/aiy340000220.ogg b/project/sounds/aiy340000220.ogg
new file mode 100644
index 0000000..1b46e59
Binary files /dev/null and b/project/sounds/aiy340000220.ogg differ
diff --git a/project/sounds/aiy340000230.ogg b/project/sounds/aiy340000230.ogg
new file mode 100644
index 0000000..a2462c7
Binary files /dev/null and b/project/sounds/aiy340000230.ogg differ
diff --git a/project/sounds/aiy340000240.ogg b/project/sounds/aiy340000240.ogg
new file mode 100644
index 0000000..91690e5
Binary files /dev/null and b/project/sounds/aiy340000240.ogg differ
diff --git a/project/sounds/aiy340000250.ogg b/project/sounds/aiy340000250.ogg
new file mode 100644
index 0000000..321f997
Binary files /dev/null and b/project/sounds/aiy340000250.ogg differ
diff --git a/project/sounds/aiy340000260.ogg b/project/sounds/aiy340000260.ogg
new file mode 100644
index 0000000..137c284
Binary files /dev/null and b/project/sounds/aiy340000260.ogg differ
diff --git a/project/sounds/aiy340000270.ogg b/project/sounds/aiy340000270.ogg
new file mode 100644
index 0000000..b94bbb4
Binary files /dev/null and b/project/sounds/aiy340000270.ogg differ
diff --git a/project/sounds/aiy340000280.ogg b/project/sounds/aiy340000280.ogg
new file mode 100644
index 0000000..e685598
Binary files /dev/null and b/project/sounds/aiy340000280.ogg differ
diff --git a/project/sounds/aiy340000290.ogg b/project/sounds/aiy340000290.ogg
new file mode 100644
index 0000000..6965511
Binary files /dev/null and b/project/sounds/aiy340000290.ogg differ
diff --git a/project/sounds/aiy340000300.ogg b/project/sounds/aiy340000300.ogg
new file mode 100644
index 0000000..f0c9ccd
Binary files /dev/null and b/project/sounds/aiy340000300.ogg differ
diff --git a/project/sounds/aiy340000310.ogg b/project/sounds/aiy340000310.ogg
new file mode 100644
index 0000000..886e7ba
Binary files /dev/null and b/project/sounds/aiy340000310.ogg differ
diff --git a/project/sounds/aiy340000320.ogg b/project/sounds/aiy340000320.ogg
new file mode 100644
index 0000000..c7b1ab1
Binary files /dev/null and b/project/sounds/aiy340000320.ogg differ
diff --git a/project/sounds/aiy340000330.ogg b/project/sounds/aiy340000330.ogg
new file mode 100644
index 0000000..b07b430
Binary files /dev/null and b/project/sounds/aiy340000330.ogg differ
diff --git a/project/sounds/aiy340000340.ogg b/project/sounds/aiy340000340.ogg
new file mode 100644
index 0000000..07fab33
Binary files /dev/null and b/project/sounds/aiy340000340.ogg differ
diff --git a/project/sounds/aiy340000350.ogg b/project/sounds/aiy340000350.ogg
new file mode 100644
index 0000000..4fff4de
Binary files /dev/null and b/project/sounds/aiy340000350.ogg differ
diff --git a/project/sounds/aiy340000360.ogg b/project/sounds/aiy340000360.ogg
new file mode 100644
index 0000000..1d9fa8f
Binary files /dev/null and b/project/sounds/aiy340000360.ogg differ
diff --git a/project/sounds/aiy340000370.ogg b/project/sounds/aiy340000370.ogg
new file mode 100644
index 0000000..a0e6e1e
Binary files /dev/null and b/project/sounds/aiy340000370.ogg differ
diff --git a/project/sounds/aiy340000380.ogg b/project/sounds/aiy340000380.ogg
new file mode 100644
index 0000000..0f4b917
Binary files /dev/null and b/project/sounds/aiy340000380.ogg differ
diff --git a/project/sounds/aiy340000390.ogg b/project/sounds/aiy340000390.ogg
new file mode 100644
index 0000000..021d193
Binary files /dev/null and b/project/sounds/aiy340000390.ogg differ
diff --git a/project/sounds/aiy340000400.ogg b/project/sounds/aiy340000400.ogg
new file mode 100644
index 0000000..3f217a7
Binary files /dev/null and b/project/sounds/aiy340000400.ogg differ
diff --git a/project/sounds/aiy340000410.ogg b/project/sounds/aiy340000410.ogg
new file mode 100644
index 0000000..95f46c9
Binary files /dev/null and b/project/sounds/aiy340000410.ogg differ
diff --git a/project/sounds/aiy340000420.ogg b/project/sounds/aiy340000420.ogg
new file mode 100644
index 0000000..7ed6067
Binary files /dev/null and b/project/sounds/aiy340000420.ogg differ
diff --git a/project/sounds/aiy340000430.ogg b/project/sounds/aiy340000430.ogg
new file mode 100644
index 0000000..cfc1202
Binary files /dev/null and b/project/sounds/aiy340000430.ogg differ
diff --git a/project/sounds/aiy350000240.ogg b/project/sounds/aiy350000240.ogg
new file mode 100644
index 0000000..e549bdd
Binary files /dev/null and b/project/sounds/aiy350000240.ogg differ
diff --git a/project/sounds/aiy350000250.ogg b/project/sounds/aiy350000250.ogg
new file mode 100644
index 0000000..3994c71
Binary files /dev/null and b/project/sounds/aiy350000250.ogg differ
diff --git a/project/sounds/aiy350000260.ogg b/project/sounds/aiy350000260.ogg
new file mode 100644
index 0000000..f8e3492
Binary files /dev/null and b/project/sounds/aiy350000260.ogg differ
diff --git a/project/sounds/aiy430000010.ogg b/project/sounds/aiy430000010.ogg
new file mode 100644
index 0000000..356ddcd
Binary files /dev/null and b/project/sounds/aiy430000010.ogg differ
diff --git a/project/sounds/aiy430000020.ogg b/project/sounds/aiy430000020.ogg
new file mode 100644
index 0000000..9efe052
Binary files /dev/null and b/project/sounds/aiy430000020.ogg differ
diff --git a/project/sounds/aiy430000030.ogg b/project/sounds/aiy430000030.ogg
new file mode 100644
index 0000000..c67ff9b
Binary files /dev/null and b/project/sounds/aiy430000030.ogg differ
diff --git a/project/sounds/aiy430000040.ogg b/project/sounds/aiy430000040.ogg
new file mode 100644
index 0000000..b05463e
Binary files /dev/null and b/project/sounds/aiy430000040.ogg differ
diff --git a/project/sounds/aiy430000050.ogg b/project/sounds/aiy430000050.ogg
new file mode 100644
index 0000000..5374b90
Binary files /dev/null and b/project/sounds/aiy430000050.ogg differ
diff --git a/project/sounds/aiy430000060.ogg b/project/sounds/aiy430000060.ogg
new file mode 100644
index 0000000..6b44c40
Binary files /dev/null and b/project/sounds/aiy430000060.ogg differ
diff --git a/project/sounds/aiy430000070.ogg b/project/sounds/aiy430000070.ogg
new file mode 100644
index 0000000..68fbcc8
Binary files /dev/null and b/project/sounds/aiy430000070.ogg differ
diff --git a/project/sounds/aiy430000080.ogg b/project/sounds/aiy430000080.ogg
new file mode 100644
index 0000000..f3ab8e1
Binary files /dev/null and b/project/sounds/aiy430000080.ogg differ
diff --git a/project/sounds/aiy430000090.ogg b/project/sounds/aiy430000090.ogg
new file mode 100644
index 0000000..a0487d9
Binary files /dev/null and b/project/sounds/aiy430000090.ogg differ
diff --git a/project/sounds/aiy430000100.ogg b/project/sounds/aiy430000100.ogg
new file mode 100644
index 0000000..3b111ed
Binary files /dev/null and b/project/sounds/aiy430000100.ogg differ
diff --git a/project/sounds/aiy430000110.ogg b/project/sounds/aiy430000110.ogg
new file mode 100644
index 0000000..472e8ea
Binary files /dev/null and b/project/sounds/aiy430000110.ogg differ
diff --git a/project/sounds/aiy430000120.ogg b/project/sounds/aiy430000120.ogg
new file mode 100644
index 0000000..16e11b0
Binary files /dev/null and b/project/sounds/aiy430000120.ogg differ
diff --git a/project/sounds/aiy430000130.ogg b/project/sounds/aiy430000130.ogg
new file mode 100644
index 0000000..87aaa6e
Binary files /dev/null and b/project/sounds/aiy430000130.ogg differ
diff --git a/project/sounds/aiy430000140.ogg b/project/sounds/aiy430000140.ogg
new file mode 100644
index 0000000..460a7de
Binary files /dev/null and b/project/sounds/aiy430000140.ogg differ
diff --git a/project/sounds/aiy430000150.ogg b/project/sounds/aiy430000150.ogg
new file mode 100644
index 0000000..a33a5bd
Binary files /dev/null and b/project/sounds/aiy430000150.ogg differ
diff --git a/project/sounds/aiy430000160.ogg b/project/sounds/aiy430000160.ogg
new file mode 100644
index 0000000..24971e2
Binary files /dev/null and b/project/sounds/aiy430000160.ogg differ
diff --git a/project/sounds/aiy430000170.ogg b/project/sounds/aiy430000170.ogg
new file mode 100644
index 0000000..a76c57b
Binary files /dev/null and b/project/sounds/aiy430000170.ogg differ
diff --git a/project/sounds/aiy430000180.ogg b/project/sounds/aiy430000180.ogg
new file mode 100644
index 0000000..aaf40ca
Binary files /dev/null and b/project/sounds/aiy430000180.ogg differ
diff --git a/project/sounds/aiy430000190.ogg b/project/sounds/aiy430000190.ogg
new file mode 100644
index 0000000..81ef542
Binary files /dev/null and b/project/sounds/aiy430000190.ogg differ
diff --git a/project/sounds/aiy430000200.ogg b/project/sounds/aiy430000200.ogg
new file mode 100644
index 0000000..57f8c8d
Binary files /dev/null and b/project/sounds/aiy430000200.ogg differ
diff --git a/project/sounds/aiy430000210.ogg b/project/sounds/aiy430000210.ogg
new file mode 100644
index 0000000..6a02c00
Binary files /dev/null and b/project/sounds/aiy430000210.ogg differ
diff --git a/project/sounds/aiy430000220.ogg b/project/sounds/aiy430000220.ogg
new file mode 100644
index 0000000..cc0e4be
Binary files /dev/null and b/project/sounds/aiy430000220.ogg differ
diff --git a/project/sounds/aiy430000230.ogg b/project/sounds/aiy430000230.ogg
new file mode 100644
index 0000000..a8ef1f3
Binary files /dev/null and b/project/sounds/aiy430000230.ogg differ
diff --git a/project/sounds/aiy430000240.ogg b/project/sounds/aiy430000240.ogg
new file mode 100644
index 0000000..6236846
Binary files /dev/null and b/project/sounds/aiy430000240.ogg differ
diff --git a/project/sounds/aiy430000250.ogg b/project/sounds/aiy430000250.ogg
new file mode 100644
index 0000000..806ecfb
Binary files /dev/null and b/project/sounds/aiy430000250.ogg differ
diff --git a/project/sounds/aiy430000260.ogg b/project/sounds/aiy430000260.ogg
new file mode 100644
index 0000000..8872913
Binary files /dev/null and b/project/sounds/aiy430000260.ogg differ
diff --git a/project/sounds/aiy430000270.ogg b/project/sounds/aiy430000270.ogg
new file mode 100644
index 0000000..2d61e3e
Binary files /dev/null and b/project/sounds/aiy430000270.ogg differ
diff --git a/project/sounds/aiy430000280.ogg b/project/sounds/aiy430000280.ogg
new file mode 100644
index 0000000..142bcbe
Binary files /dev/null and b/project/sounds/aiy430000280.ogg differ
diff --git a/project/sounds/aiy430000290.ogg b/project/sounds/aiy430000290.ogg
new file mode 100644
index 0000000..808500c
Binary files /dev/null and b/project/sounds/aiy430000290.ogg differ
diff --git a/project/sounds/aiy440000010.ogg b/project/sounds/aiy440000010.ogg
new file mode 100644
index 0000000..a8dad86
Binary files /dev/null and b/project/sounds/aiy440000010.ogg differ
diff --git a/project/sounds/aiy440000020.ogg b/project/sounds/aiy440000020.ogg
new file mode 100644
index 0000000..c9a14fd
Binary files /dev/null and b/project/sounds/aiy440000020.ogg differ
diff --git a/project/sounds/aiy440000030.ogg b/project/sounds/aiy440000030.ogg
new file mode 100644
index 0000000..fe311cc
Binary files /dev/null and b/project/sounds/aiy440000030.ogg differ
diff --git a/project/sounds/aiy440000040.ogg b/project/sounds/aiy440000040.ogg
new file mode 100644
index 0000000..2b98283
Binary files /dev/null and b/project/sounds/aiy440000040.ogg differ
diff --git a/project/sounds/aiy440000050.ogg b/project/sounds/aiy440000050.ogg
new file mode 100644
index 0000000..65e8f38
Binary files /dev/null and b/project/sounds/aiy440000050.ogg differ
diff --git a/project/sounds/aiy440000060.ogg b/project/sounds/aiy440000060.ogg
new file mode 100644
index 0000000..7911ca1
Binary files /dev/null and b/project/sounds/aiy440000060.ogg differ
diff --git a/project/sounds/aiy440000070.ogg b/project/sounds/aiy440000070.ogg
new file mode 100644
index 0000000..79ceecd
Binary files /dev/null and b/project/sounds/aiy440000070.ogg differ
diff --git a/project/sounds/aiy440000080.ogg b/project/sounds/aiy440000080.ogg
new file mode 100644
index 0000000..d165741
Binary files /dev/null and b/project/sounds/aiy440000080.ogg differ
diff --git a/project/sounds/aiy440000090.ogg b/project/sounds/aiy440000090.ogg
new file mode 100644
index 0000000..816a91f
Binary files /dev/null and b/project/sounds/aiy440000090.ogg differ
diff --git a/project/sounds/aiy440000100.ogg b/project/sounds/aiy440000100.ogg
new file mode 100644
index 0000000..e0cbe17
Binary files /dev/null and b/project/sounds/aiy440000100.ogg differ
diff --git a/project/sounds/aiy440000110.ogg b/project/sounds/aiy440000110.ogg
new file mode 100644
index 0000000..475cf95
Binary files /dev/null and b/project/sounds/aiy440000110.ogg differ
diff --git a/project/sounds/aiy440000120.ogg b/project/sounds/aiy440000120.ogg
new file mode 100644
index 0000000..ebdc162
Binary files /dev/null and b/project/sounds/aiy440000120.ogg differ
diff --git a/project/sounds/aiy510000010.ogg b/project/sounds/aiy510000010.ogg
new file mode 100644
index 0000000..5ab3fc0
Binary files /dev/null and b/project/sounds/aiy510000010.ogg differ
diff --git a/project/sounds/aiy510000020.ogg b/project/sounds/aiy510000020.ogg
new file mode 100644
index 0000000..57f77d7
Binary files /dev/null and b/project/sounds/aiy510000020.ogg differ
diff --git a/project/sounds/aiy720000010.ogg b/project/sounds/aiy720000010.ogg
new file mode 100644
index 0000000..5ae9b67
Binary files /dev/null and b/project/sounds/aiy720000010.ogg differ
diff --git a/project/sounds/aiy730000010.ogg b/project/sounds/aiy730000010.ogg
new file mode 100644
index 0000000..ab0d410
Binary files /dev/null and b/project/sounds/aiy730000010.ogg differ
diff --git a/project/sounds/aiy740000010.ogg b/project/sounds/aiy740000010.ogg
new file mode 100644
index 0000000..b5b010f
Binary files /dev/null and b/project/sounds/aiy740000010.ogg differ
diff --git a/project/sounds/aiy750000010.ogg b/project/sounds/aiy750000010.ogg
new file mode 100644
index 0000000..0b8ceb4
Binary files /dev/null and b/project/sounds/aiy750000010.ogg differ
diff --git a/project/sounds/aiy750000020.ogg b/project/sounds/aiy750000020.ogg
new file mode 100644
index 0000000..f260c12
Binary files /dev/null and b/project/sounds/aiy750000020.ogg differ
diff --git a/project/sounds/aiy750000030.ogg b/project/sounds/aiy750000030.ogg
new file mode 100644
index 0000000..93faa55
Binary files /dev/null and b/project/sounds/aiy750000030.ogg differ
diff --git a/project/sounds/aiy750000040.ogg b/project/sounds/aiy750000040.ogg
new file mode 100644
index 0000000..7592d4b
Binary files /dev/null and b/project/sounds/aiy750000040.ogg differ
diff --git a/project/sounds/aiy750000050.ogg b/project/sounds/aiy750000050.ogg
new file mode 100644
index 0000000..bf95779
Binary files /dev/null and b/project/sounds/aiy750000050.ogg differ
diff --git a/project/sounds/aiy750000060.ogg b/project/sounds/aiy750000060.ogg
new file mode 100644
index 0000000..b0f81b8
Binary files /dev/null and b/project/sounds/aiy750000060.ogg differ
diff --git a/project/sounds/aiy750000070.ogg b/project/sounds/aiy750000070.ogg
new file mode 100644
index 0000000..d2edb4d
Binary files /dev/null and b/project/sounds/aiy750000070.ogg differ
diff --git a/project/sounds/aiy750000080.ogg b/project/sounds/aiy750000080.ogg
new file mode 100644
index 0000000..a0ffff8
Binary files /dev/null and b/project/sounds/aiy750000080.ogg differ
diff --git a/project/sounds/aiy750000090.ogg b/project/sounds/aiy750000090.ogg
new file mode 100644
index 0000000..aefcdb3
Binary files /dev/null and b/project/sounds/aiy750000090.ogg differ
diff --git a/project/sounds/aiy750000100.ogg b/project/sounds/aiy750000100.ogg
new file mode 100644
index 0000000..4057d0c
Binary files /dev/null and b/project/sounds/aiy750000100.ogg differ
diff --git a/project/sounds/aiy750000110.ogg b/project/sounds/aiy750000110.ogg
new file mode 100644
index 0000000..e76d3be
Binary files /dev/null and b/project/sounds/aiy750000110.ogg differ
diff --git a/project/sounds/aiy750000120.ogg b/project/sounds/aiy750000120.ogg
new file mode 100644
index 0000000..41d7788
Binary files /dev/null and b/project/sounds/aiy750000120.ogg differ
diff --git a/project/sounds/aiy750000130.ogg b/project/sounds/aiy750000130.ogg
new file mode 100644
index 0000000..161f900
Binary files /dev/null and b/project/sounds/aiy750000130.ogg differ
diff --git a/project/sounds/aiy750000140.ogg b/project/sounds/aiy750000140.ogg
new file mode 100644
index 0000000..fda459c
Binary files /dev/null and b/project/sounds/aiy750000140.ogg differ
diff --git a/project/sounds/aiy750000150.ogg b/project/sounds/aiy750000150.ogg
new file mode 100644
index 0000000..8422fce
Binary files /dev/null and b/project/sounds/aiy750000150.ogg differ
diff --git a/project/sounds/aiy750000160.ogg b/project/sounds/aiy750000160.ogg
new file mode 100644
index 0000000..62f8163
Binary files /dev/null and b/project/sounds/aiy750000160.ogg differ
diff --git a/project/sounds/aiy750000170.ogg b/project/sounds/aiy750000170.ogg
new file mode 100644
index 0000000..b9fe06e
Binary files /dev/null and b/project/sounds/aiy750000170.ogg differ
diff --git a/project/sounds/aiy750000180.ogg b/project/sounds/aiy750000180.ogg
new file mode 100644
index 0000000..b7fb85f
Binary files /dev/null and b/project/sounds/aiy750000180.ogg differ
diff --git a/project/sounds/aiy750000190.ogg b/project/sounds/aiy750000190.ogg
new file mode 100644
index 0000000..1d7b4a8
Binary files /dev/null and b/project/sounds/aiy750000190.ogg differ
diff --git a/project/sounds/aiy750000200.ogg b/project/sounds/aiy750000200.ogg
new file mode 100644
index 0000000..68d41da
Binary files /dev/null and b/project/sounds/aiy750000200.ogg differ
diff --git a/project/sounds/aiy750000210.ogg b/project/sounds/aiy750000210.ogg
new file mode 100644
index 0000000..faf634b
Binary files /dev/null and b/project/sounds/aiy750000210.ogg differ
diff --git a/project/sounds/aiy750000220.ogg b/project/sounds/aiy750000220.ogg
new file mode 100644
index 0000000..1b931cf
Binary files /dev/null and b/project/sounds/aiy750000220.ogg differ
diff --git a/project/sounds/aiy750000230.ogg b/project/sounds/aiy750000230.ogg
new file mode 100644
index 0000000..3c31602
Binary files /dev/null and b/project/sounds/aiy750000230.ogg differ
diff --git a/project/sounds/aiy750000240.ogg b/project/sounds/aiy750000240.ogg
new file mode 100644
index 0000000..ad8501c
Binary files /dev/null and b/project/sounds/aiy750000240.ogg differ
diff --git a/project/sounds/aiy750000250.ogg b/project/sounds/aiy750000250.ogg
new file mode 100644
index 0000000..3ebaffe
Binary files /dev/null and b/project/sounds/aiy750000250.ogg differ
diff --git a/project/sounds/aiy750000260.ogg b/project/sounds/aiy750000260.ogg
new file mode 100644
index 0000000..c45ca4d
Binary files /dev/null and b/project/sounds/aiy750000260.ogg differ
diff --git a/project/sounds/aiy750000270.ogg b/project/sounds/aiy750000270.ogg
new file mode 100644
index 0000000..ad0c25d
Binary files /dev/null and b/project/sounds/aiy750000270.ogg differ
diff --git a/project/sounds/aiy750000280.ogg b/project/sounds/aiy750000280.ogg
new file mode 100644
index 0000000..2b1a3bc
Binary files /dev/null and b/project/sounds/aiy750000280.ogg differ
diff --git a/project/sounds/aiy750000290.ogg b/project/sounds/aiy750000290.ogg
new file mode 100644
index 0000000..11d69ae
Binary files /dev/null and b/project/sounds/aiy750000290.ogg differ
diff --git a/project/sounds/aiy750000300.ogg b/project/sounds/aiy750000300.ogg
new file mode 100644
index 0000000..145e3b3
Binary files /dev/null and b/project/sounds/aiy750000300.ogg differ
diff --git a/project/sounds/aiy750000310.ogg b/project/sounds/aiy750000310.ogg
new file mode 100644
index 0000000..aac984e
Binary files /dev/null and b/project/sounds/aiy750000310.ogg differ
diff --git a/project/sounds/aiy750000320.ogg b/project/sounds/aiy750000320.ogg
new file mode 100644
index 0000000..175ab60
Binary files /dev/null and b/project/sounds/aiy750000320.ogg differ
diff --git a/project/sounds/aiy750000330.ogg b/project/sounds/aiy750000330.ogg
new file mode 100644
index 0000000..dd13862
Binary files /dev/null and b/project/sounds/aiy750000330.ogg differ
diff --git a/project/sounds/aiy750000340.ogg b/project/sounds/aiy750000340.ogg
new file mode 100644
index 0000000..46c6c87
Binary files /dev/null and b/project/sounds/aiy750000340.ogg differ
diff --git a/project/sounds/aiy800000010.ogg b/project/sounds/aiy800000010.ogg
new file mode 100644
index 0000000..f7c1058
Binary files /dev/null and b/project/sounds/aiy800000010.ogg differ
diff --git a/project/sounds/aiy800000020.ogg b/project/sounds/aiy800000020.ogg
new file mode 100644
index 0000000..e5233c7
Binary files /dev/null and b/project/sounds/aiy800000020.ogg differ
diff --git a/project/sounds/aiy800000030.ogg b/project/sounds/aiy800000030.ogg
new file mode 100644
index 0000000..4b9d26c
Binary files /dev/null and b/project/sounds/aiy800000030.ogg differ
diff --git a/project/sounds/aiy800000040.ogg b/project/sounds/aiy800000040.ogg
new file mode 100644
index 0000000..64cca36
Binary files /dev/null and b/project/sounds/aiy800000040.ogg differ
diff --git a/project/sounds/aiy800000050.ogg b/project/sounds/aiy800000050.ogg
new file mode 100644
index 0000000..20c4b22
Binary files /dev/null and b/project/sounds/aiy800000050.ogg differ
diff --git a/project/sounds/aiy800000060.ogg b/project/sounds/aiy800000060.ogg
new file mode 100644
index 0000000..baf6f0a
Binary files /dev/null and b/project/sounds/aiy800000060.ogg differ
diff --git a/project/sounds/aiy800000070.ogg b/project/sounds/aiy800000070.ogg
new file mode 100644
index 0000000..09b6793
Binary files /dev/null and b/project/sounds/aiy800000070.ogg differ
diff --git a/project/sounds/aiy800000080.ogg b/project/sounds/aiy800000080.ogg
new file mode 100644
index 0000000..42f1925
Binary files /dev/null and b/project/sounds/aiy800000080.ogg differ
diff --git a/project/sounds/aiy800000090.ogg b/project/sounds/aiy800000090.ogg
new file mode 100644
index 0000000..0d1df0d
Binary files /dev/null and b/project/sounds/aiy800000090.ogg differ
diff --git a/project/sounds/aiy800000100.ogg b/project/sounds/aiy800000100.ogg
new file mode 100644
index 0000000..6f1ecbc
Binary files /dev/null and b/project/sounds/aiy800000100.ogg differ
diff --git a/project/sounds/aiy810000010.ogg b/project/sounds/aiy810000010.ogg
new file mode 100644
index 0000000..141c976
Binary files /dev/null and b/project/sounds/aiy810000010.ogg differ
diff --git a/project/sounds/aiy810000020.ogg b/project/sounds/aiy810000020.ogg
new file mode 100644
index 0000000..f755114
Binary files /dev/null and b/project/sounds/aiy810000020.ogg differ
diff --git a/project/sounds/aiy810000030.ogg b/project/sounds/aiy810000030.ogg
new file mode 100644
index 0000000..ece7da3
Binary files /dev/null and b/project/sounds/aiy810000030.ogg differ
diff --git a/project/sounds/aiy810000040.ogg b/project/sounds/aiy810000040.ogg
new file mode 100644
index 0000000..d600ea7
Binary files /dev/null and b/project/sounds/aiy810000040.ogg differ
diff --git a/project/sounds/aiy810000050.ogg b/project/sounds/aiy810000050.ogg
new file mode 100644
index 0000000..b3975f8
Binary files /dev/null and b/project/sounds/aiy810000050.ogg differ
diff --git a/project/sounds/aiy810000060.ogg b/project/sounds/aiy810000060.ogg
new file mode 100644
index 0000000..f6cf315
Binary files /dev/null and b/project/sounds/aiy810000060.ogg differ
diff --git a/project/sounds/aiy810000070.ogg b/project/sounds/aiy810000070.ogg
new file mode 100644
index 0000000..0944056
Binary files /dev/null and b/project/sounds/aiy810000070.ogg differ
diff --git a/project/sounds/aiy860000010.ogg b/project/sounds/aiy860000010.ogg
new file mode 100644
index 0000000..d6ffe53
Binary files /dev/null and b/project/sounds/aiy860000010.ogg differ
diff --git a/project/sounds/aiy860000020.ogg b/project/sounds/aiy860000020.ogg
new file mode 100644
index 0000000..8157a6f
Binary files /dev/null and b/project/sounds/aiy860000020.ogg differ
diff --git a/project/sounds/aiy860000030.ogg b/project/sounds/aiy860000030.ogg
new file mode 100644
index 0000000..f428615
Binary files /dev/null and b/project/sounds/aiy860000030.ogg differ
diff --git a/project/sounds/aiy860000040.ogg b/project/sounds/aiy860000040.ogg
new file mode 100644
index 0000000..cd1a1eb
Binary files /dev/null and b/project/sounds/aiy860000040.ogg differ
diff --git a/project/sounds/aiy860000050.ogg b/project/sounds/aiy860000050.ogg
new file mode 100644
index 0000000..e0cf702
Binary files /dev/null and b/project/sounds/aiy860000050.ogg differ
diff --git a/project/sounds/aiy860000060.ogg b/project/sounds/aiy860000060.ogg
new file mode 100644
index 0000000..c540697
Binary files /dev/null and b/project/sounds/aiy860000060.ogg differ
diff --git a/project/tilesets/2233.png b/project/tilesets/2233.png
new file mode 100644
index 0000000..a3bba4f
Binary files /dev/null and b/project/tilesets/2233.png differ
diff --git a/project/tilesets/C5.webp b/project/tilesets/C5.webp
index 641de3c..bbb361e 100644
Binary files a/project/tilesets/C5.webp and b/project/tilesets/C5.webp differ
diff --git a/project/tilesets/c6.png b/project/tilesets/c6.png
new file mode 100644
index 0000000..ecec049
Binary files /dev/null and b/project/tilesets/c6.png differ
diff --git a/styles.css b/styles.css
index 89ddc05..139471b 100644
--- a/styles.css
+++ b/styles.css
@@ -1,534 +1,618 @@
-html, body {
-    margin: 0;
-    padding: 0;
-    width: 100%;
-    height: 100%;
-    background-color: #000;
-    overflow: hidden;
+html,
+body {
+  margin: 0;
+  padding: 0;
+  width: 100%;
+  height: 100%;
+  background-color: #000;
+  overflow: hidden;
 }
 
 #gameGroup {
-    position: absolute;
-    box-sizing: border-box;
-    -moz-box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    background-color: #000;
+  position: absolute;
+  box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  background-color: #000;
 }
 
 #mainTips {
-    color: #fff;
-    font-size: 0.8em;
-    position: fixed;
-    top: 10px;
-    left: 10px;
-    z-index: 370;
+  color: #fff;
+  font-size: 0.8em;
+  position: fixed;
+  top: 10px;
+  left: 10px;
+  z-index: 370;
 }
 
 #musicBtn {
-    position: fixed;
-    bottom: 3px;
-    right: 3px;
-    cursor: pointer;
-    z-index: 400;
-    display: none;
+  position: fixed;
+  bottom: 3px;
+  right: 3px;
+  cursor: pointer;
+  z-index: 400;
+  display: none;
 }
 
 #enlargeBtn {
-    position: fixed;
-    bottom: 3px;
-    right: 34px;
-    cursor: pointer;
-    z-index: 400;
-    display: none;
+  position: fixed;
+  bottom: 3px;
+  right: 34px;
+  cursor: pointer;
+  z-index: 400;
+  display: none;
 }
 
 #startPanel {
-    width: 100%;
-    height: 100%;
-    position: absolute;
-    top: 0;
-    left: 0;
-    background-color: #fff;
-    overflow: hidden;
-    z-index: 300;
+  width: 100%;
+  height: 100%;
+  position: absolute;
+  top: 0;
+  left: 0;
+  background-color: #fff;
+  overflow: hidden;
+  z-index: 300;
 }
 
 #startTop {
-    width: 100%;
-    height: 100%;
-    position: absolute;
-    top: 0;
-    left: 0;
-    background-color: #000;
-    z-index: 350;
+  width: 100%;
+  height: 100%;
+  position: absolute;
+  top: 0;
+  left: 0;
+  background-color: #000;
+  z-index: 350;
 }
 
 #startTopProgressBar {
-    width: 90%;
-    height: 5%;
-    margin: 0 5%;
-    position: absolute;
-    top: 5%;
-    background-color: #fff;
-    z-index: 15;
+  width: 90%;
+  height: 5%;
+  margin: 0 5%;
+  position: absolute;
+  top: 5%;
+  background-color: #fff;
+  z-index: 15;
 }
 
 #startTopProgress {
-    width: 0%;
-    height: 100%;
-    background-color: #666;
+  width: 0%;
+  height: 100%;
+  background-color: #666;
 }
 
 #startTopLoadTips {
-    color: #fff;
-    font-size: 0.6em;
-    position: absolute;
-    top: 10%;
-    left: 5%;
-    z-index: 15;
+  color: #fff;
+  font-size: 0.6em;
+  position: absolute;
+  top: 10%;
+  left: 5%;
+  z-index: 15;
 }
 
 #startTopHint {
-    color: #66CCFF;
-    position: absolute;
-    bottom: 0;
-    left: 5%;
-    z-index: 15;
-    font-size: 1.1em;
+  color: #66ccff;
+  position: absolute;
+  bottom: 0;
+  left: 5%;
+  z-index: 15;
+  font-size: 1.1em;
 }
 
 #startBackground {
-    position:absolute;
-    top:50%;
-    left:50%;
-    height: 100%;
-    width: 100%;
-    transform:translate(-50%,-50%);
-    z-index: 260;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  height: 100%;
+  width: 100%;
+  transform: translate(-50%, -50%);
+  z-index: 260;
 }
 
 #startLogo {
-    user-select: none;
-    position: absolute;
-    z-index: 290;
-    left: 0;
-    right: 0;
-    margin-left: auto;
-    margin-right: auto;
-    margin-top: 8%;
-    max-width: 100%;
-    text-align: center;
-    font: bold 0em STXingkai;
-	color: #000000;
+  user-select: none;
+  position: absolute;
+  z-index: 290;
+  left: 0;
+  right: 0;
+  margin-left: auto;
+  margin-right: auto;
+  margin-top: 8%;
+  max-width: 100%;
+  text-align: center;
+  font: bold 0em STXingkai;
+  color: #000000;
 }
 
 #startTitle {
-    user-select: none;
-    position: absolute;
-    z-index: 280;
+  user-select: none;
+  position: absolute;
+  z-index: 280;
 }
 
 #startButtonGroup {
-    width: auto;
-    position: absolute;
-    text-align: center;
-    font-size: 1.4em;
-    display: none;
-    z-index: 310;
-    bottom: 0;
-    margin-bottom: 5%;
-    left: 50%;
-    transform: translateX(-50%);
-    padding: 15px 25px;
-    min-width: 100%;
-    /* default value */
-    background-color: #000000;
-    opacity: 0.55;
-    color: #FFFFFF;
-    border: #FFFFFF 0px solid;
-    caret-color: #ffffff;
-    border-radius: 0px;
+  width: auto;
+  position: absolute;
+  text-align: center;
+  font-size: 1.4em;
+  display: none;
+  z-index: 310;
+  bottom: 0;
+  margin-bottom: 5%;
+  left: 50%;
+  transform: translateX(-50%);
+  padding: 15px 25px;
+  min-width: 100%;
+  /* default value */
+  background-color: #000000;
+  opacity: 0.55;
+  color: #ffffff;
+  border: #ffffff 0px solid;
+  caret-color: #ffffff;
+  border-radius: 0px;
 }
 
 #startButtons {
-    display: none;
+  display: none;
 }
 
 #levelChooseButtons {
-    display: none;
+  display: none;
 }
 
 .startButton {
-    width: 100%;
-    margin: 0;
-	font:1.2rem "pala", sans-serif;
-    font-weight: normal;
-    display: block;
-    cursor: pointer;
-    padding: 0px 0;
-    border-color: transparent;
-    border-width: 0px;
-    border-style: solid;
-    border-radius: 0px;
+  width: 100%;
+  margin: 0;
+  font: 1.2rem pala, sans-serif;
+  font-weight: normal;
+  display: block;
+  cursor: pointer;
+  padding: 0px 0;
+  border-color: transparent;
+  border-width: 0px;
+  border-style: solid;
+  border-radius: 0px;
 }
 
 .onChoiceAnimate {
-    animation: onChoice 2s ease-in-out 0s infinite normal none running;
+  animation: onChoice 2s ease-in-out 0s infinite normal none running;
 }
 
 #floorMsgGroup {
-    position: absolute;
-    text-align: center;
-    display: none;
-    color: #fff;
-    background-color: #000;
-    z-index: 230;
+  position: absolute;
+  text-align: center;
+  display: none;
+  color: #fff;
+  background-color: #000;
+  z-index: 230;
 }
 
 #logoLabel {
-    margin-top: 8%;
-    font: bold 3em STXingkai;
-    margin-left: auto;
-    margin-right: auto;
+  margin-top: 8%;
+  font: bold 3em STXingkai;
+  margin-left: auto;
+  margin-right: auto;
 }
 
 #versionLabel {
-    margin-top: -3%;
-    font-size: 1.2em;
-    font-weight: bold;
+  margin-top: -3%;
+  font-size: 1.2em;
+  font-weight: bold;
 }
 
 #floorNameLabel {
-    margin-top: 30px;
-    font-size: 1.6em;
-    font-weight: bold;
+  margin-top: 30px;
+  font-size: 1.6em;
+  font-weight: bold;
 }
 
 #statusBar {
-    position: absolute;
-    box-sizing: border-box;
-    -moz-box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    background: url(project/materials/ground.png) repeat;
-    z-index: 185;
-    display: none;
-    top: 0;
-    left: 0;
-    padding: 3px;
+  position: absolute;
+  box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  background: url(project/materials/ground.png) repeat;
+  z-index: 185;
+  display: none;
+  top: 0;
+  left: 0;
+  padding: 3px;
 }
-#statusBar .status{
-    position: relative;
-    display: block;
-    float: left;
-    width: 100%;
+#statusBar .status {
+  position: relative;
+  display: block;
+  float: left;
+  width: 100%;
 }
-.status img{
-    vertical-align: middle;
-    width: auto;
-    height: 100%;
-    max-height: 1.6em;
+.status img {
+  vertical-align: middle;
+  width: auto;
+  height: 100%;
+  max-height: 1.6em;
 }
-#statusBar span{
-    font: bold italic 1.1em Verdana;
-    display: inline;
+#statusBar span {
+  font: bold italic 1.1em Verdana;
+  display: inline;
 }
 #statusBar p {
-    display: inline-block;
-    vertical-align: middle;
-    width: 60%;
-    margin: 0;
-    color: white;
-    font: bold italic 1.1em Verdana;
-    white-space: nowrap;
+  display: inline-block;
+  vertical-align: middle;
+  width: 60%;
+  margin: 0;
+  color: white;
+  font: bold italic 1.1em Verdana;
+  white-space: nowrap;
 }
 #toolBar {
-    position: absolute;
-    background: url(project/materials/ground.png) repeat;
-    z-index: 210;
-    box-sizing: border-box;
-    -moz-box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    display: none;
-    padding: 3px;
+  position: absolute;
+  background: url(project/materials/ground.png) repeat;
+  z-index: 210;
+  box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  display: none;
+  padding: 3px;
 }
-#toolBar .tools{
-    position: relative;
-    display: block;
-    float: left;
+#toolBar .tools {
+  position: relative;
+  display: block;
+  float: left;
 }
 
 p#hard {
-    width: 6em;
-    vertical-align: middle;
-    display: inline-block;
-    color: red;
-    font: bold normal 1.1em "Arial Black";
-    text-align: center;
-    margin: 0 6px 6px 0;
-    word-break: keep-all;
+  width: 6em;
+  vertical-align: middle;
+  display: inline-block;
+  color: red;
+  font: bold normal 1.1em "Arial Black";
+  text-align: center;
+  margin: 0 6px 6px 0;
+  word-break: keep-all;
 }
 
-span#poison, span#weak, span#curse, span#pickaxe, span#bomb, span#fly {
-    font-style: normal;
-    font-size: 1em;
+span#poison,
+span#weak,
+span#curse,
+span#pickaxe,
+span#bomb,
+span#fly {
+  font-style: normal;
+  font-size: 1em;
 }
 
 p#name {
-    font-style: normal;
+  font-style: normal;
 }
 
 .gameCanvas {
-    position: absolute;
-    box-sizing: border-box;
-    -moz-box-sizing: border-box;
-    -webkit-box-sizing: border-box;
+  position: absolute;
+  box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
 }
 
 #gif {
-    z-index: 20;
-    position: absolute;
-    overflow: hidden;
+  z-index: 20;
+  position: absolute;
+  overflow: hidden;
 }
 
 #gif2 {
-    z-index: 90;
-    position: absolute;
-    overflow: hidden;
+  z-index: 90;
+  position: absolute;
+  overflow: hidden;
 }
 
 #gameDraw {
-    position: absolute;
-    background: #000000;
-    overflow: hidden;
-    z-index: 185;
+  position: absolute;
+  background: #000000;
+  overflow: hidden;
+  z-index: 185;
 }
 
 #bg {
-    z-index: 10;
+  z-index: 10;
 }
 
 #event {
-    z-index: 30;
+  z-index: 30;
 }
 
 #hero {
-    z-index: 40;
+  z-index: 40;
 }
 
 #event2 {
-    z-index: 50;
+  z-index: 50;
 }
 
 #fg {
-    z-index: 60;
+  z-index: 60;
 }
 
 #damage {
-    z-index: 65;
+  z-index: 65;
 }
 
 #animate {
-    z-index: 70;
+  z-index: 70;
 }
 
 #curtain {
-    z-index: 125;
+  z-index: 125;
 }
 
 #ui {
-    z-index: 140;
+  z-index: 140;
 }
 
 #data {
-    z-index: 170;
+  z-index: 170;
 }
 
 #inputDiv {
-    display: none;
-    width: 100%;
-    height: 100%;
-    position: fixed;
-    top: 0;
-    left: 0;
-    background: rgba(127,127,127,0.6);
-    z-index: 2000
+  display: none;
+  width: 100%;
+  height: 100%;
+  position: fixed;
+  top: 0;
+  left: 0;
+  background: rgba(127, 127, 127, 0.6);
+  z-index: 2000;
 }
 
 #inputDialog {
-    position: fixed;
-    top: 50%;
-    left: 50%;
-    transform: translate(-50%, -55%);
-    background: white;
-    width: 250px;
-    min-height: 50px;
+  position: fixed;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -55%);
+  background: white;
+  width: 250px;
+  min-height: 50px;
 }
 
 #inputMessage {
-    word-wrap: break-word;
-    text-align: left;
-    margin-left: 8%;
-    margin-right: 5%;
+  word-wrap: break-word;
+  text-align: left;
+  margin-left: 8%;
+  margin-right: 5%;
 }
 
 #inputBox {
-    margin-left: 8%;
-    width: 80%;
-    margin-bottom: 10px;
-    padding: 5px 3px;
-    border: 1px solid;
-    background: #F0F0F0;
+  margin-left: 8%;
+  width: 80%;
+  margin-bottom: 10px;
+  padding: 5px 3px;
+  border: 1px solid;
+  background: #f0f0f0;
 }
 
 #inputYes {
-    margin-bottom: 15px;
-    margin-left: 8%;
+  margin-bottom: 15px;
+  margin-left: 8%;
 }
 
 #inputNo {
-    float:right;
-    margin-right: 10%;
+  float: right;
+  margin-right: 10%;
 }
 
-#_selector, ._uievent_selector {
-    animation: selector 2s ease-in-out 0s infinite normal none running;
+#_selector,
+._uievent_selector {
+  animation: selector 2s ease-in-out 0s infinite normal none running;
 }
 
 @-webkit-keyframes selector {
-    0% { opacity: 0.95; }
-    50% { opacity: 0.55; }
-    100% { opacity: 0.95; }
+  0% {
+    opacity: 0.95;
+  }
+  50% {
+    opacity: 0.55;
+  }
+  100% {
+    opacity: 0.95;
+  }
 }
 
 @keyframes selector {
-    0% { opacity: 0.95; }
-    50% { opacity: 0.55; }
-    100% { opacity: 0.95; }
+  0% {
+    opacity: 0.95;
+  }
+  50% {
+    opacity: 0.55;
+  }
+  100% {
+    opacity: 0.95;
+  }
 }
 
 #next {
-    width: 5px;
-    height: 5px;
-    display: none;
-    position: absolute;
-    transform: rotate(45deg);
-    border-bottom-width: 4px;
-    border-bottom-style: solid;
-    border-right-width: 4px;
-    border-right-style: solid;
-    -webkit-animation: next .5s ease-in-out alternate infinite;
-    animation: next .5s ease-in-out alternate infinite;
-    left: 0;
-    top: 0;
-    opacity: 0.7;
-    z-index: 169;
+  width: 5px;
+  height: 5px;
+  display: none;
+  position: absolute;
+  transform: rotate(45deg);
+  border-bottom-width: 4px;
+  border-bottom-style: solid;
+  border-right-width: 4px;
+  border-right-style: solid;
+  -webkit-animation: next 0.5s ease-in-out alternate infinite;
+  animation: next 0.5s ease-in-out alternate infinite;
+  left: 0;
+  top: 0;
+  opacity: 0.7;
+  z-index: 169;
 }
 
 @-webkit-keyframes next {
-    100% {
-        transform: rotate(45deg) translate(-3px, -3px);
-    }
+  100% {
+    transform: rotate(45deg) translate(-3px, -3px);
+  }
 }
 @keyframes next {
-    100% {
-        transform: rotate(45deg) translate(-3px, -3px);
-    }
+  100% {
+    transform: rotate(45deg) translate(-3px, -3px);
+  }
 }
 
 #startImageBackgroundDiv {
-    display: none;
-    width: 100%;
-    height: 100%;
-    position: fixed;
-    z-index: 10000;
+  display: none;
+  width: 100%;
+  height: 100%;
+  position: fixed;
+  z-index: 10000;
 }
 
 #startImageDiv {
-    width: 100%;
-    height: 100%;
-    position: fixed;
-    background: black;
-    opacity: 1;
+  width: 100%;
+  height: 100%;
+  position: fixed;
+  background: black;
+  opacity: 1;
 }
 
 #startImageLogo {
-    opacity: 0;
-    max-width: 60%;
-    max-height: 60%;
-    position: fixed;
-    left: 50%;
-    top: 50%;
-    transform: translate(-50%, -50%);
+  opacity: 0;
+  max-width: 60%;
+  max-height: 60%;
+  position: fixed;
+  left: 50%;
+  top: 50%;
+  transform: translate(-50%, -50%);
 }
 
 .startImageAnimation {
-    -webkit-animation: startImage 4s ease-in-out 1s alternate 1;
-    animation: startImage 4s ease-in-out 1s alternate 1;
+  -webkit-animation: startImage 4s ease-in-out 1s alternate 1;
+  animation: startImage 4s ease-in-out 1s alternate 1;
 }
 
 @-webkit-keyframes startImage {
-    0% { opacity: 0; }
-    60% { opacity: 1; }
-    100% { opacity: 0; }
+  0% {
+    opacity: 0;
+  }
+  60% {
+    opacity: 1;
+  }
+  100% {
+    opacity: 0;
+  }
 }
 
 @keyframes startImage {
-    0% { opacity: 0; }
-    60% { opacity: 1; }
-    100% { opacity: 0; }
+  0% {
+    opacity: 0;
+  }
+  60% {
+    opacity: 1;
+  }
+  100% {
+    opacity: 0;
+  }
 }
 
 .startImageDivAnimation {
-    -webkit-animation: startImageDivDisappear 2s ease-in-out 5s alternate 1;
-    animation: startImageDivDisappear 2s ease-in-out 5s alternate 1;
+  -webkit-animation: startImageDivDisappear 2s ease-in-out 5s alternate 1;
+  animation: startImageDivDisappear 2s ease-in-out 5s alternate 1;
 }
 
 @-webkit-keyframes startImageDivDisappear {
-    0% { opacity: 1 }
-    100% { opacity: 0 }
+  0% {
+    opacity: 1;
+  }
+  100% {
+    opacity: 0;
+  }
 }
 
 @keyframes startImageDivDisappear {
-    0% { opacity: 1 }
-    100% { opacity: 0 }
+  0% {
+    opacity: 1;
+  }
+  100% {
+    opacity: 0;
+  }
 }
 #ui-editor {
-    z-index: 9999;
-    position: absolute;
-    overflow: visible;
-    height: 100%;
+  z-index: 9999;
+  position: absolute;
+  overflow: visible;
+  height: 100%;
 }
 
 @font-face {
-    font-family: Fira Code;
-    src: url(../src/fonts/FiraCode-Regular.ttf);
+  font-family: Fira Code;
+  src: url(../src/fonts/FiraCode-Regular.ttf);
 }
 
 /* 注释下面这三行以开启抗锯齿 */
-.anti-aliasing {
-    image-rendering: pixelated;
-}
+/* .anti-aliasing {
+  image-rendering: pixelated;
+} */
 
 .warning {
-    transition: left cubic-bezier(0, 0.9, 1, 0.1) 2.5s;
-    -webkit-transition: left cubic-bezier(0, 0.9, 1, 0.1) 2.5s;
-    animation: warning 1s linear 0s alternate infinite;
-    -webkit-animation: warning 1s linear 0s alternate infinite;
+  transition: left cubic-bezier(0, 0.9, 1, 0.1) 2.5s;
+  -webkit-transition: left cubic-bezier(0, 0.9, 1, 0.1) 2.5s;
+  animation: warning 1s linear 0s alternate infinite;
+  -webkit-animation: warning 1s linear 0s alternate infinite;
 }
 
 @keyframes warning {
-    0 % { text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);}
-    50 % { text-shadow: 0px 0px 30px rgba(255, 0, 0, 1), 0px 0px 6px rgb(129, 0, 0);}
-    100 % { text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);}
+  0 % {
+    text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);
+  }
+  50 % {
+    text-shadow: 0px 0px 30px rgba(255, 0, 0, 1), 0px 0px 6px rgb(129, 0, 0);
+  }
+  100 % {
+    text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);
+  }
 }
 
 @-webkit - keyframes warning {
-    0 % { text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);}
-    50 % { text-shadow: 0px 0px 30px rgba(255, 0, 0, 1), 0px 0px 6px rgb(129, 0, 0);}
-    100 % { text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);}
+  0 % {
+    text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);
+  }
+  50 % {
+    text-shadow: 0px 0px 30px rgba(255, 0, 0, 1), 0px 0px 6px rgb(129, 0, 0);
+  }
+  100 % {
+    text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);
+  }
 }
 
 .gameCanvas {
-    transition: transform 1.5s ease-out;
-    -webkit-transition: transform 1.5s ease-out;
-}
\ No newline at end of file
+  transition: transform 1.5s ease-out;
+  -webkit-transition: transform 1.5s ease-out;
+}
+/* ====== 新增加载界面样式 ====== */
+@media screen and (max-width: 600px) {
+  .loading-slide {
+    width: 100%
+  }
+}
+#startTopGallery {
+  position: absolute;
+  width: 85%;
+  height: 85%;
+  top: 10%;
+  left:7.5%;
+  perspective: 1000px;
+}
+
+.loading-slide {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  background-size: cover;
+  background-position: center;
+  opacity: 0;
+  object-fit: contain;
+  transform: translateX(100%) rotateY(30deg);
+  transition: all 1s cubic-bezier(0.4, 0, 0.2, 1);
+  border-radius: 10px;
+  box-shadow: 0 8px 20px rgba(0,0,0,0.4);
+}
+
+.loading-slide.active {
+  opacity: 1;
+  transform: translateX(0) rotateY(0);
+}