js实现闯关式疯狂像素风格怪兽卡车驾驶操控游戏代码

代码语言:html

所属分类:游戏

代码描述:js实现闯关式疯狂像素风格怪兽卡车驾驶操控游戏代码

代码标签: js 闯关 疯狂 像素 风格 怪兽 卡车 驾驶 操控 游戏 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en-us">

<head>
  <script src="//repo.bfw.wiki/bfwrepo/js/maddrive/index.wasm.js"></script>
  <script src="//repo.bfw.wiki/bfwrepo/js/maddrive/index.data.js"></script>
  <title>Drive Mad</title>
</head>

<body id="body">
  <style>
    @font-face {
      font-family: 'baloo 2';
      font-style: normal;
      font-weight: 800;
      font-display: swap;
      src: url(baloo2.woff) format('woff');
      unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD
    }

    .fullscreen {
      position: absolute;
      width: 100%;
      height: 100%
    }

    .center {
      text-align: center
    }

    .centered {
      margin-left: auto;
      margin-right: auto;
      display: block;
      text-align: center
    }

    #play_overlay {
      display: none;
      z-index: 10
    }

    .middle {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%)
    }

    .middle_vertical {
      position: absolute;
      top: 50%;
      transform: translate(0%, -50%)
    }

    .edge {
      margin-left: auto;
      margin-right: auto;
      width: 164px;
      height: 180px;
      background-color: #cfdaed;
      box-shadow: 5px 1px 5px rgba(0, 0, 0, .25);
      transform: rotate(-5deg)
    }

    .box {
      width: 164px;
      height: 164px;
      background-color: #fff;
      position: relative
    }

    .black {
      width: 132px;
      height: 156px;
      background-color: #000;
      position: absolute;
      top: 4px;
      right: 4px;
      margin: 0 auto
    }

    .cover {
      width: 128px;
      height: 128px;
      margin: 2px
    }

    .title {
      font-size: 14px;
      font-family: 'baloo 2', ubuntu, verdana, sans-serif
    }

    .author {
      font-family: 'baloo 2', ubuntu, verdana, sans-serif;
      border-spacing: 0;
      font-size: 14px;
      color: #ccc;
      text-align: right;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      position: absolute;
      width: 150px;
      top: 4px;
      right: 142px;
      transform-origin: right top;
      transform: rotate(-90deg)
    }

    .loading {
      margin-top: 20px;
      margin-bottom: 10px
    }

    .description {
      font-family: 'baloo 2', ubuntu, verdana, sans-serif;
      display: inline-block;
      font-size: 16px;
      line-height: 1.2em;
      width: 240px
    }

    .button {
      display: inline-block;
      border: 2px solid #00a2ff;
      border-radius: 7px;
      width: 133px;
      height: 43px;
      font-size: 16px;
      line-height: 43px;
      margin: 0 auto
    }

    .overlay_button {
      display: inline-block;
      border: 2px solid #000;
      border-radius: 12px;
      width: 200px;
      height: 50px;
      font-size: 18px;
      line-height: 50px;
      margin: 11px
    }

    #play_button {
      color: #333;
      background-color: #eee
    }

    .emscripten_border {
      position: relative
    }

    #gradient {
      background-image: linear-gradient(135deg, #70e1fd, #00a2ff);
      position: absolute;
      top: 0;
      width: 100%;
      height: 768px
    }

    * {
      margin: 0;
      padding: 0
    }

    p,
    ul,
    ol,
    dl {
      margin-bottom: 1em
    }

    h1,
    h2,
    h3,
    h4,
    h5,
    h6,
    p,
    ul,
    ol,
    dl {
      margin-left: 16px;
      margin-right: 16px
    }

    img {
      vertical-align: top
    }

    html,
    body {
      font-family: 'baloo 2', ubuntu, verdana, sans-serif;
      font-size: 18px;
      color: #bbb;
      padding: 0;
      width: 100%;
      height: 100%;
      margin: 0;
      border: 0;
      line-height: 1.8;
      overflow: hidden;
      display: block
    }

    canvas {
      padding-right: 0;
      margin-left: auto;
      margin-right: auto;
      display: block;
      margin-top: auto;
      margin-bottom: auto;
      position: relative;
      width: 1024px;
      height: 768px
    }

    div.emscripten {
      text-align: center
    }

    canvas.emscripten {
      border: 0;
      background-color: #000
    }

    #status {
      display: inline-block;
      width: 100%;
      font-weight: 700;
      color: #787878;
      text-align: center
    }

    #modal_parent {
      display: none;
      position: fixed;
      z-index: 1;
      left: 0;
      top: 0;
      width: 100%;
      height: 100%;
      overflow: auto;
      background-color: #000;
      background-color: rgba(0, 0, 0, .4)
    }

    .modal_inner {
      display: none
    }

    #play_content {
      color: #fff;
      z-index: 10
    }

    #modal_content {
      position: relative;
      background-color: #fefefe;
      margin: auto;
      padding: 20px;
      border: 1px solid #888;
      box-sizing: border-box
    }

    .error_message {
      color: red
    }

    .error_text {
      color: red;
      font-family: sans-serif;
      font-size: .8em
    }

    #modal_close_button {
      color: #aaa;
      position: absolute;
      right: 15px;
      top: 10px;
      font-size: 28px;
      line-height: 28px;
      font-weight: 700;
      transition: .2s
    }

    #modal_close_button:hover,
    #modal_close_button:focus {
      color: #000;
      text-decoration: none;
      cursor: pointer
    }

    a:link {
      color: #00b9fe;
      text-decoration: none;
      transition: .2s
    }

    a:visited {
      color: #00b9fe
    }

    a:hover,
    a:active {
      opacity: .5
    }

    .link_image_button {
      margin-right: 10px
    }

    .playstore075 {
      width: 153px;
      height: 45px
    }

    .appstore075 {
      width: 135px;
      height: 45px
    }

    #progress_or_play {
      margin-top: 10px
    }

    #terms_p {
      font-family: sans-serif;
      color: #141414;
      font-size: .7em;
      margin-bottom: 0
    }

    #terms_p a {
      color: #f0f0f0
    }

    .deeplink_message {
      font-size: 1em;
      color: #f0f0f0;
      line-height: 1.1em;
      font-size: 20px
    }

    .menu {
      color: #f0f0f0
    }

    .level_button {
      border: 2px solid #222;
      border-radius: 1em;
      color: #f0f0f0;
      background-color: #00a2ff;
      line-height: 1em;
      height: 2.5em;
      width: 5em;
      justify-self: center;
      position: relative;
      padding-top: .6em
    }

    .grid_element_center {
      justify-self: center
    }

    .level_button_name {
      font-size: .6em;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis
    }

    .level_button_number {
      font-size: 1.2em
    }

    .level_button:hover {
      background-color: #00c2ff
    }

    .level_checkmark {
      position: absolute;
      right: 0;
      top: 0;
      margin: 0;
      padding: 0;
      text-align: right;
      font-size: 1.2em;
      line-height: 1.2em
    }

    .level_button a {
      color: #f0f0f0;
      opacity: 1
    }

    .menu_items {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 10px;
      margin-bottom: 20px
    }

    .menu_header {
      font-size: 3em;
      margin-top: 40px
    }

    #webview_content {
      display: none;
      background-color: transparent;
      position: absolute;
      top: 0;
      width: 100%;
      height: 768px
    }

    .webview {
      width: 100%;
      height: 100%;
      background: 0 0;
      margin: 0;
      border: 0;
      overflow: hidden
    }
  </style>

  <div id="modal_parent">
    <div id="modal_content">
      <span id="modal_close_button">&times;</span>
      <div id="store_link_modal_content" class="modal_inner"></div>
      <div id="share_file_modal_content" class="modal_inner"></div>
    </div>
  </div>
  <div id="canvas_border" class="emscripten_border">
    <div id="play_content" class="middle center">
      <div class="edge">
        <div class="box">
          <div class="black">
            <img src="//repo.bfw.wiki/bfwrepo/image/60505c91f2004.png" class="cover" />
            <p class="title">Drive Mad</p>
            <p class="author">Martin Magni</p>
          </div>
        </div>
      </div>
      <div id="progress_or_play"><progress id="progress" class="loading" value="0" max="100"></progress></div>
      <p class="description"></p>
    </div>
    <canvas class="emscripten" id="canvas" tabindex="-1"></canvas>
    <div id="gradient"></div>
    <div id="webview_content"></div>
  </div>
  <script type="text/javascript">
    var pokiDebug = false;
    var postRunDone = false;
    var theDomLoaded = false;
    var pokiInited = false;
    var gameReadyToStart = false;
    var requestedCanvas = false;
    var adblocker = false;
    var gameStarted = false;
    var updatedScreenSize = false;
    var startupTimeStr = "";
    var loadProgressFrac = 0;
    var fakeProgressPercentStart = 80 + Math.random() * 15;
    window.addEventListener('DOMContentLoaded', domContentLoaded);
    window.addEventListener('load', function() {
      console.log("Load event received");
      if (inIframe()) {
        document.addEventListener('click', ev => {
          let canvas = document.getElementById('canvas');
          if (canvas) {
            canvas.focus();
          }
        });
      }
    });

    function inIframe() {
      try {
        return window.self !== window.top;
      } catch (e) {
        return true;
      }
    }

    function updateLoadProgress() {
      let progressElement = document.getElementById('progress');
      if (progressElement) {
        progressElement.value = Math.round(loadProgressFrac * fakeProgressPercentStart);
        progressElement.max = 100;
      }
      if (loadProgressFrac >= 1) {
        console.log("Loading done");
        tryStartGame();
      }
    }

    function domContentLoaded() {
      initPokiSdk();
      console.log("DOM content loaded event received");
      let canvas = document.getElementById('canvas');
      canvas.addEventListener("contextmenu", stopContextMenu);
      if (!postRunDone) {
        resizeCanvas(false);
      }
      window.addEventListener('blur', ev => setGameFocus(false));
      window.addEventListener('focus', ev => setGameFocus(true));
      canvas.onpointerdown = beginPointerDrag;
      canvas.onpointerup = endPointerDrag;
      theDomLoaded = true;
    }

    function beginPointerDrag(e) {
      let canvas = document.getElementById('canvas');
      canvas.setPointerCapture(e.pointerId);
    }

    function endPointerDrag(e) {
      let canvas = document.getElementById('canvas');
      canvas.releasePointerCapture(e.pointerId);
    }

    function setGameFocus(f) {
      if (postRunDone) {
        Module.ccall('set_game_focus', 'v', ['number'], [f]);
      }
    }

    function canBeGameGuid(str) {
      return str && str.match('([A-F]|[0-9]){16}');
    }

    function getMeta(metaName) {
      const metas = document.getElementsByTagName('meta');
      for (let i = 0; i < metas.length; i++) {
        if (metas[i].getAttribute('name') === metaName) {
          return metas[i].getAttribute('content');
        }
      }
      return '';
    }

    function getCSSRgb(color) {
      return `rgb(${Math.round(color[0])}, ${Math.round(color[1])}, ${Math.round(color[2])})`;
    }
    let lastGradientStyleStr = "";
    let lastDeepLinkLoadFraction = 0;

    function getGradientStr(frac) {
      let fromColor = [frac * 0x70, frac * 0xe1, frac * 0xfd];
      let toColor = [frac * 0x00, frac * 0xa2, frac * 0xff];
      let str = `linear-gradient(135deg, ${getCSSRgb(fromColor)}, ${getCSSRgb(toColor)})`
      return str;
    }

    function hideOverlayGradient() {
      var gradient = document.getElementById('gradient');
      gradient.style.display = "none";
    }
    var showedStartGameError = false;

    function setPokiInited() {
      pokiInited = true;
    }

    function initPokiSdk() {
      setPokiInited();
    }

    function hideOverlay() {
      var playContent = document.getElementById('play_content');
      playContent.style.display = "none";
      hideOverlayGradient();
    }

    function startGame() {
      try {
        console.log("Registering event listeners");
        window.addEventListener("beforeunload", function(event) {
          Module.ccall('app_terminate_if_necessary', 'v');
        });
        window.addEventListener("unload", function(event) {
          Module.ccall('app_terminate_if_necessary', 'v');
        });
        document.addEventListener("visibilitychange", function() {
          if (document.visibilityState === 'visible') {
            Module.ccall('app_resume', 'v');
          } else {
            Module.ccall('app_pause', 'v');
          }
        });
        console.log("Confirming accept in app");
        try {
          Module.ccall('user_accepted_and_clicked', 'v');
          Module.ccall('set_is_mobile', 'v', ['number'], [matchMedia('(pointer:coarse)').matches]);
        } catch (err4) {}
        gameStarted = true;
        if (!updatedScreenSize) {
          resizeCanvas(true);
        }
      } catch (err) {
        if (!showedStartGameError) {
          let foundModuleAsm = false;
          let additionalInfo = "";
          try {
            if (Module["asm"]) {
              foundModuleAsm = true;
            }
          } catch (err2) {}
          if (!foundModuleAsm) {
            additionalInfo += "Could not find Module.asm";
          }
          console.log(`Error when starting game. Try to reload the page. Error message: ${err}. ${additionalInfo}`);
          showedStartGameError = true;
        }
      }
    }
    var pokiStopped = true;

    function pokiEnsureStop() {
      if (!pokiStopped) {
        pokiStopped = true;
      }
    }

    function pokiEnsureStart() {
      if (pokiStopped) {
        pokiStopped = false;
      }
    }
    var startGameAttempts = 0;
    var tryStartGameTimeout = null;

    function tryStartGame() {
      console.log("tryStartGame()", gameReadyToStart);
      if (gameReadyToStart) {
        return;
      }
      if (!postRunDone || !theDomLoaded || !pokiInited) {
        startGameAttempts++;
        if (startGameAttempts == 20) {
          return;
        }
        if (tryStartGameTimeout != null) {
          clearTimeout(tryStartGameTimeout);
        }
        tryStartGameTimeout = setTimeout(tryStartGame, startGameAttempts * 100);
        console.log("Not ready to start game yet...");
        return;
      }
      gameReadyToStart = true;
      console.log("Starting game");
      startGame();
    }

    function simpleLogC(str) {
      if (postRunDone) {
        Module.ccall('log_simple', 'v', ['string'], [str]);
      } else {
        console.log(str);
      }
    }

    function appErrorC(code, str) {
      if (postRunDone) {
        Module.ccall('app_error', 'v', ['number', 'string'], [code, str]);
      } else {
        console.error(str, code);
      }
    }

    function simpleAppErrorC(str) {
      appErrorC(1, str);
    }

    function parseUrlArgument(name) {
      let result = "";
      let str = window.location.search;
      if (str.length > 0 && str[0] == '?') {
        var arr = str.substr(1).split('&');
        for (let i = 0; i < arr.length; i++) {
          if (arr[i].startsWith(name + "=")) {
            result = arr[i].substr(name.length + 1);
            break;
          }
        }
      }
      return result;
    }

    function parseUrlArgumentInt(name) {
      let str = parseUrlArgument(name);
      let parsed = parseInt(str);
      if (isNaN(parsed)) {
        return 0;
      } else {
        return parsed;
      }
    }

    function resizeCanvas(informC) {
      let iw = window.innerWidth;
      let ih = window.innerHeight;
      let canvas = document.getElementById('canvas');
      let border = document.getElementById('canvas_border');
      canvas.width = iw * window.devicePixelRatio;
      canvas.height = ih * window.devicePixelRatio;
      border.style.marginTop = '0px';
      let gradient = document.getElementById("gradient");
      let webViewContent = document.getElementById("webview_content");
      [gradient, webViewContent].forEach(e => {
        if (e) {
          e.style.left = '0px';
        }
      });
      [canvas, gradient, webViewContent].forEach(e => {
        if (e) {
          e.style.width = iw + 'px';
          e.style.height = ih + 'px';
          e.style.borderRadius = '0px';
        }
      });
      if (informC && gameStarted && requestedCanvas) {
        Module.ccall("update_screen_size", "v", ["number", "number", "number"], [canvas.width, canvas.height, window.devicePixelRatio]);
        updatedScreenSize = true;
      }
    }

    function stopContextMenu(event) {
      event.preventDefault();
      return false;
    }
    var Module = {
      locateFile: function(path, prefix) {
        if (prefix == "") {
          return "" + path;
        }
        return prefix + path;
      },
      preRun: [function() {
        console.log("preRun() called");
      }],
      postRun: [function() {
        console.log("postRun() called");
        document.onfullscreenchange = function() {
          setTimeout(function() {
            resizeCanvas(true);
            if (document.fullscreenElement && gameStarted && requestedCanvas) {
              let canvas = document.getElementById('canvas');
              Module.ccall("update_screen_size", "v", ["number", "number", "number"], [canvas.width, canvas.height, 1]);
            }
          }, 500);
        };
        window.addEventListener('resize', (event) => resizeCanvas(true), false);
        if (theDomLoaded) {
          resizeCanvas(true);
        }
        console.log("Registering keydown listener");
        window.addEventListener('keydown', e => {
          ccall("keydown_browser", "v", ["string"], [e.key]);
        });
        postRunDone = true;
      }],
      print: (function() {
        return function(text) {
          if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
          console.log(text);
        };
      })(),
      printErr: function(text) {
        if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
        console.error(text);
      },
      canvas: (function() {
        var canvas = document.getElementById('canvas');
        canvas.addEventListener("webglcontextlost", function(e) {
          alert('WebGL context lost. You will need to reload the page.');
          e.preventDefault();
        }, false);
        requestedCanvas = true;
        return canvas;
      })(),
      setStatus: function(text) {
        if (!Module.setStatus.last) Module.setStatus.last = {
          time: Date.now(),
          text: ''
        };
        if (text === Module.setStatus.last.text) return;
        var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
        var now = Date.now();
        if (m && now - Module.setStatus.last.time < 30) return;
        Module.setStatus.last.time = now;
        Module.setStatus.last.text = text;
        if (m) {
          text = m[1];
          loadProgressFrac = parseInt(m[2]) / parseInt(m[4]);
        } else {
          loadProgressFrac = 1;
        }
        updateLoadProgress();
      },
      totalDependencies: 0,
      monitorRunDependencies: function(left) {
        this.totalDependencies = Math.max(this.totalDependencies, left);
      }
    };
    var notifications = [];
    var webViewIframe = null;
    var storedScripts = [];
    var webviewDomLoaded = false;
    async function isUrlFound(url) {
      try {
        const response = await fetch(url, {
          method: 'HEAD',
          cache: 'no-cache'
        });
        return response.status === 200;
      } catch (error) {
        return false;
      }
    }

    function checkHintFileExist(src, li) {
      isUrlFound(src).then(found => {
        if (found) {
          Module.ccall("hint_file_exists", "v", ["number"], [li]);
        }
      });
    }

    function postStored() {
      for (var i = 0; i < storedScripts.length; i++) {
        webViewIframe.contentWindow.postMessage("eval:" + storedScripts[i], '*');
      }
      storedScripts = [];
    }

    function onWebviewDomContentLoaded() {
      webviewDomLoaded = true;
      postStored();
    }

    function webViewPostMessage(message) {
      Module.ccall("app_webview_message", "v", ["string"], [message]);
    }

    function webViewError(type, message) {
      webViewPostMessage(`error|${type}|${message}`);
    }

    function webViewClose() {
      try {
        var content = document.getElementById("webview_content");
        content.style.display = 'none';
        if (content.contains(webViewIframe)) {
          webviewDomLoaded = false;
          webViewIframe.contentWindow.removeEventListener('DOMContentLoaded', onWebviewDomContentLoaded);
          content.removeChild(webViewIframe);
        }
        setTimeout(function() {
          Module.ccall("set_game_focus", "v", ["number"], [true])
        }, 100);
      } catch (err) {
        webViewError("unknown", err);
      }
    }

    function webViewOpen(path) {
      try {
        let arr = readLocalFile(path);
        let html = new TextDecoder("utf-8").decode(arr);
        if (webViewIframe == null) {
          window.onmessage = function(e) {
            webViewPostMessage(e.data);
          }
        }
        html = html.replace("common.js", `webapp/view_common.js`);
        html = html.replace("common.css", `webapp/view_common.css`);
        var content = document.getElementById("webview_content");
        content.style.display = 'block';
        webViewIframe = document.createElement('iframe');
        webViewIframe.classList.add('webview');
        webViewIframe.allowtransparency = true;
        content.appendChild(webViewIframe);
        webViewIframe.contentWindow.document.open();
        webviewDomLoaded = false;
        webViewIframe.contentWindow.addEventListener('DOMContentLoaded', onWebviewDomContentLoaded);
        webViewIframe.contentWindow.document.write(html);
        webViewIframe.contentWindow.document.close();
      } catch (err) {
        webViewError("unknown", err);
      }
    }

    function webViewExecuteJS(jsString) {
      try {
        if (!webviewDomLoaded) {
          storedScripts.push(jsString);
        } else {
          webViewIframe.contentWindow.postMessage("eval:" + jsString, '*');
        }
      } catch (err) {
        webViewError("unknown", err);
      }
    }

    function getHostname() {
      let hostname = window.location.hostname.split(':')[0];
      let lengthBytes = lengthBytesUTF8(hostname) + 1;
      let stringOnWasmHeap = _malloc(lengthBytes);
      stringToUTF8(hostname, stringOnWasmHeap, lengthBytes);
      return stringOnWasmHeap;
    }

    function parseUrlArgumentString(name) {
      let str = parseUrlArgument(name);
      let lengthBytes = lengthBytesUTF8(str) + 1;
      let stringOnWasmHeap = _malloc(lengthBytes);
      stringToUTF8(str, stringOnWasmHeap, lengthBytes);
      return stringOnWasmHeap;
    }

    function writeLocalFile(buffer, pathDevice) {
      let arr = new Uint8Array(buffer);
      let stream = FS.open(pathDevice, 'w');
      FS.write(stream, arr, 0, arr.length, 0);
      FS.close(stream);
    }

    function readLocalFile(path) {
      let stream = FS.open(path, 'r');
      FS.llseek(stream, 0, 2);
      let fileSize = stream.position;
      FS.llseek(stream, 0, 0);
      let buf = new Uint8Array(fileSize);
      FS.read(stream, buf, 0, fileSize, 0);
      FS.close(stream);
      return buf;
    }

    function resizeModal(modal, modalContent, maxWidth) {
      let iw = window.innerWidth;
      let ih = window.innerHeight;
      let top = Math.min(0.15 * ih, 100);
      let w = Math.min(iw, maxWidth);
      modal.style.display = "block";
      modalContent.style.width = w + "px";
      modal.style.paddingTop = top + "px";
      return w;
    }

    function fetchUrl(url, id, useToken) {}

    function adInit() {
      setTimeout(() => Module.ccall("ad_on_inited", "v"), 100);
    }

    function firebasePause() {}

    function firebaseResume() {}

    function adInterstitialLoad() {
      setTimeout(() => Module.ccall("ad_interstitial_on_loaded", "v", ["number"], [1]), 100);
    }

    function adInterstitialShow() {
      Module.ccall("ad_interstitial_on_showed", "v", ["number"], [1]);
    }

    function adRewardedLoad() {
      setTimeout(() => Module.ccall("ad_rewarded_on_loaded", "v", ["number"], [1]), 100);
    }

    function adRewardedShow() {
      pokiEnsureStop();
      Module.ccall("ad_rewarded_on_reward", "v");
      Module.ccall("ad_rewarded_on_showed", "v", ["number"], [true]);
    }

    function firebaseDeinit() {}

    function currentTimeSecondsRound() {
      return Math.round(Date.now() / 1000);
    }
  </script>
  <script type="text/javascript">
    var Module = typeof Module != "undefined" ? Module : {};
    if (!Module.expectedDataFileDownloads) {
      Module.expectedDataFileDownloads = 0
    }
    Module.expectedDataFileDownloads++;
    (function() {
      if (Module["ENVIRONMENT_IS_PTHREAD"]) return;
      var loadPackage = function(metadata) {
        var PACKAGE_PATH = "";
        if (typeof window === "object") {
          PACKAGE_PATH = window["encodeURIComponent"](window.location.pathname.toString().substring(0, window.location.pathname.toString().lastIndexOf("/")) + "/")
        } else if (typeof process === "undefined" && typeof location !== "undefined") {
          PACKAGE_PATH = encodeURIComponent(location.pathname.toString().substring(0, location.pathname.toString().lastIndexOf("/")) + "/")
        }
        var PACKAGE_NAME = "index.data";
        var REMOTE_PACKAGE_BASE = "index.data";
        if (typeof Module["locateFilePackage"] === "function" && !Module["locateFile"]) {
          Module["locateFile"] = Module["locateFilePackage"];
          err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")
        }
        var REMOTE_PACKAGE_NAME = Module["locateFile"] ? Module["locateFile"](REMOTE_PACKAGE_BASE, "") : REMOTE_PACKAGE_BASE;
        var REMOTE_PACKAGE_SIZE = metadata["remote_package_size"];

        function fetchRemotePackage(packageName, packageSize, callback, errback) {
          if (typeof process === "object" && typeof process.versions === "object" && typeof process.versions.node === "string") {
            require("fs").readFile(packageName, function(err, contents) {
              if (err) {
                errback(err)
              } else {
                callback(contents.buffer)
              }
            });
            return
          }
          var xhr = new XMLHttpRequest;
          xhr.open("GET", window["index.data"], true);
          xhr.responseType = "arraybuffer";
          xhr.onprogress = function(event) {
            var url = packageName;
            var size = packageSize;
            if (event.total) size = event.total;
            if (event.loaded) {
              if (!xhr.addedTotal) {
                xhr.addedTotal = true;
                if (!Module.dataFileDownloads) Module.dataFileDownloads = {};
                Module.dataFileDownloads[url] = {
                  loaded: event.loaded,
                  total: size
                }
              } else {
                Module.dataFileDownloads[url].loaded = event.loaded
              }
              var total = 0;
              var loaded = 0;
              var num = 0;
              for (var download in Module.dataFileDownloads) {
                var data = Module.dataFileDownloads[download];
                total += data.total;
                loaded += data.loaded;
                num++
              }
              total = Math.ceil(total * Module.expectedDataFileDownloads / num);
              if (Module["setStatus"]) Module["setStatus"]("Downloading data... (" + loaded + "/" + total + ")")
            } else if (!Module.dataFileDownloads) {
              if (Module["setStatus"]) Module["setStatus"]("Downloading data...")
            }
          };
          xhr.onerror = function(event) {
            throw new Error("NetworkError for: " + packageName)
          };
          xhr.onload = function(event) {
            if (xhr.status == 200 || xhr.status == 304 || xhr.status == 206 || xhr.status == 0 && xhr.response) {
              var packageData = xhr.response;
              callback(packageData)
            } else {
              throw new Error(xhr.statusText + " : " + xhr.responseURL)
            }
          };
          xhr.send(null)
        }

        function handleError(error) {
          console.error("package error:", error)
        }
        var fetchedCallback = null;
        var fetched = Module["getPreloadedPackage"] ? Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE) : null;
        if (!fetched) fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE, function(data) {
          if (fetchedCallback) {
            fetchedCallback(data);
            fetchedCallback = null
          } else {
            fetched = data
          }
        }, handleError);

        function runWithFS() {
          function assert(check, msg) {
            if (!check) throw msg + (new Error).stack
          }
          Module["FS_createPath"]("/", "assets", true, true);
          Module["FS_createPath"]("/assets", "blocks", true, true);
          Module["FS_createPath"]("/assets", "views", true, true);
          Module["FS_createPath"]("/assets", "games", true, true);
          Module["FS_createPath"]("/assets", "sounds", true, true);

          function DataRequest(start, end, audio) {
            this.start = start;
            this.end = end;
            this.audio = audio
          }
          DataRequest.prototype = {
            requests: {},
            open: function(mode, name) {
              this.name = name;
              this.requests[name] = this;
              Module["addRunDependency"]("fp " + this.name)
            },
            send: function() {},
            onload: function() {
              var byteArray = this.byteArray.subarray(this.start, this.end);
              this.finish(byteArray)
            },
            finish: function(byteArray) {
              var that = this;
              Module["FS_createDataFile"](this.name, null, byteArray, true, true, true);
              Module["removeRunDependency"]("fp " + that.name);
              this.requests[this.name] = null
            }
          };
          var files = metadata["files"];
          for (var i = 0; i < files.length; ++i) {
            new DataRequest(files[i]["start"], files[i]["end"], files[i]["audio"] || 0).open("GET", files[i]["filename"])
          }

          function processPackageData(arrayBuffer) {
            assert(arrayBuffer, "Loading data file failed.");
            assert(arrayBuffer instanceof ArrayBuffer, "bad input to processPackageData");
            var byteArray = new Uint8Array(arrayBuffer);
            DataRequest.prototype.byteArray = byteArray;
            var files = metadata["files"];
            for (var i = 0; i < files.length; ++i) {
              DataRequest.prototype.requests[files[i].filename].onload()
            }
            Module["removeRunDependency"]("datafile_index.data")
          }
          Module["addRunDependency"]("datafile_index.data");
          if (!Module.preloadResults) Module.preloadResults = {};
          Module.preloadResults[PACKAGE_NAME] = {
            fromCache: false
          };
          if (fetched) {
            processPackageData(fetched);
            fetched = null
          } else {
            fetchedCallback = processPackageData
          }
        }
        if (Module["calledRun"]) {
          runWithFS()
        } else {
          if (!Module["preRun"]) Module["preRun"] = [];
          Module["preRun"].push(runWithFS)
        }
      };
      loadPackage({
        "files": [{
          "filename": "/assets/blocks/ACCELEROMETER_V",
          "start": 0,
          "end": 313
        }, {
          "filename": "/assets/blocks/ARCH",
          "start": 313,
          "end": 490
        }, {
          "filename": "/assets/blocks/BALL",
          "start": 490,
          "end": 635
        }, {
          "filename": "/assets/blocks/BOX",
          "start": 635,
          "end": 850
        }, {
          "filename": "/assets/blocks/BRICKS",
          "start": 850,
          "end": 1033
        }, {
          "filename": "/assets/blocks/BUTTERFLY",
          "start": 1033,
          "end": 2330
        }, {
          "filename": "/assets/blocks/BUTTON",
          "start": 2330,
          "end": 2853
        }, {
          "filename": "/assets/blocks/BUTTON_B",
          "start": 2853,
          "end": 3738
        }, {
          "filename": "/assets/blocks/CAMERA_ORBIT",
          "start": 3738,
          "end": 5126
        }, {
          "filename": "/assets/blocks/COMMENT",
          "start": 5126,
          "end": 5240
        }, {
          "filename": "/assets/blocks/CpF_LIST_ELEMENT_Cp",
          "start": 5240,
          "end": 5606
        }, {
          "filename": "/assets/blocks/DASH_CAT",
          "start": 5606,
          "end": 7471
        }, {
          "filename": "/assets/blocks/DINO",
          "start": 7471,
          "end": 12090
        }, {
          "filename": "/assets/blocks/DINO_RED",
          "start": 12090,
          "end": 13825
        }, {
          "filename": "/assets/blocks/DIRT",
          "start": 13825,
          "end": 13918
        }, {
          "filename": "/assets/blocks/DIRT_B",
          "start": 13918,
          "end": 14097
        }, {
          "filename": "/assets/blocks/DIRT_SLAB",
          "start": 14097,
          "end": 14219
        }, {
          "filename": "/assets/blocks/ECpC_SET_VAR_E",
          "start": 14219,
          "end": 14596
        }, {
          "filename": "/assets/blocks/ECVV_SET_ANG_LIMITS_E",
          "start": 14596,
          "end": 15053
        }, {
          "filename": "/assets/blocks/ECVV_SET_ANG_MOTOR_E",
          "start": 15053,
          "end": 15508
        }, {
          "filename": "/assets/blocks/ECVV_SET_ANG_SPRING_E",
          "start": 15508,
          "end": 15963
        }, {
          "filename": "/assets/blocks/ECVV_SET_LIN_LIMITS_E",
          "start": 15963,
          "end": 16418
        }, {
          "filename": "/assets/blocks/ECVV_SET_LIN_MOTOR_E",
          "start": 16418,
          "end": 16874
        }, {
          "filename": "/assets/blocks/ECVV_SET_LIN_SPRING_E",
          "start": 16874,
          "end": 17324
        }, {
          "filename": "/assets/blocks/EC_SET_VAR_E",
          "start": 17324,
          "end": 17579
        }, {
          "filename": "/assets/blocks/EFFF_VOLUME_PITCH_E",
          "start": 17579,
          "end": 18022
        }, {
          "filename": "/assets/blocks/EFF_LOOP_EFE",
          "start": 18022,
          "end": 18392
        }, {
          "filename": "/assets/blocks/EFF_SET_SCORE_E",
          "start": 18392,
          "end": 18776
        }, {
          "filename": "/assets/blocks/EFF_SFX_PLAY_FE",
          "start": 18776,
          "end": 19158
        }, {
          "filename": "/assets/blocks/EFpF_SET_VAR_E",
          "start": 19158,
          "end": 19532
        }, {
          "filename": "/assets/blocks/EFpO_MENU_ITEM_E",
          "start": 19532,
          "end": 19904
        }, {
          "filename": "/assets/blocks/EFp_DEC_VAR_E",
          "start": 19904,
          "end": 20170
        }, {
          "filename": "/assets/blocks/EFp_INC_VAR_E",
          "start": 20170,
          "end": 20442
        }, {
          "filename": "/assets/blocks/EF_INSPECT_E",
          "start": 20442,
          "end": 20791
        }, {
          "filename": "/assets/blocks/EF_RANDOM_SEED_E",
          "start": 20791,
          "end": 21179
        }, {
          "filename": "/assets/blocks/EF_SET_VAR_E",
          "start": 21179,
          "end": 21430
        }, {
          "filename": "/assets/blocks/EF_SFX_STOP_E",
          "start": 21430,
          "end": 21806
        }, {
          "filename": "/assets/blocks/EOF_SET_BOUNCE_E",
          "start": 21806,
          "end": 22198
        }, {
          "filename": "/assets/blocks/EOF_SET_FRICTION_E",
          "start": 22198,
          "end": 22594
        }, {
          "filename": "/assets/blocks/EOF_SET_MASS_E",
          "start": 22594,
          "end": 22977
        }, {
          "filename": "/assets/blocks/EOOV_ADD_CONSTRAINT_EC",
          "start": 22977,
          "end": 23428
        }, {
          "filename": "/assets/blocks/EOpO_SET_VAR_E",
          "start": 23428,
          "end": 23802
        }, {
          "filename": "/assets/blocks/EOT_SET_VISIBLE_E",
          "start": 23802,
          "end": 24180
        }, {
          "filename": "/assets/blocks/EOVQ_SET_POS_E",
          "start": 24180,
          "end": 24642
        }, {
          "filename": "/assets/blocks/EOVVV_ADD_FORCE_E",
          "start": 24642,
          "end": 25155
        }, {
          "filename": "/assets/blocks/EOVV_SET_LOCKED_E",
          "start": 25155,
          "end": 25617
        }, {
          "filename": "/assets/blocks/EOVV_SET_VEL_E",
          "start": 25617,
          "end": 26075
        }, {
          "filename": "/assets/blocks/EO_COLLISION_EOFVE",
          "start": 26075,
          "end": 26596
        }, {
          "filename": "/assets/blocks/EO_CREATE_EO",
          "start": 26596,
          "end": 26972
        }, {
          "filename": "/assets/blocks/EO_DESTROY_E",
          "start": 26972,
          "end": 27349
        }, {
          "filename": "/assets/blocks/EO_INSPECT_E",
          "start": 27349,
          "end": 27697
        }, {
          "filename": "/assets/blocks/EO_SET_VAR_E",
          "start": 27697,
          "end": 27948
        }, {
          "filename": "/assets/blocks/EQpQ_SET_VAR_E",
          "start": 27948,
          "end": 28324
        }, {
          "filename": "/assets/blocks/EQ_INSPECT_E",
          "start": 28324,
          "end": 28675
        }, {
          "filename": "/assets/blocks/EQ_SET_VAR_E",
          "start": 28675,
          "end": 28928
        }, {
          "filename": "/assets/blocks/ETpT_SET_VAR_E",
          "start": 28928,
          "end": 29302
        }, {
          "filename": "/assets/blocks/ET_IF_EEE",
          "start": 29302,
          "end": 29666
        }, {
          "filename": "/assets/blocks/ET_INSPECT_E",
          "start": 29666,
          "end": 30015
        }, {
          "filename": "/assets/blocks/ET_SET_VAR_E",
          "start": 30015,
          "end": 30265
        }, {
          "filename": "/assets/blocks/EVpV_SET_VAR_E",
          "start": 30265,
          "end": 30640
        }, {
          "filename": "/assets/blocks/EVQF_SET_CAM_E",
          "start": 30640,
          "end": 31090
        }, {
          "filename": "/assets/blocks/EVQ_SET_LIT_E",
          "start": 31090,
          "end": 31487
        }, {
          "filename": "/assets/blocks/EV_INSPECT_E",
          "start": 31487,
          "end": 31835
        }, {
          "filename": "/assets/blocks/EV_SET_GRAVITY_E",
          "start": 31835,
          "end": 32214
        }, {
          "filename": "/assets/blocks/EV_SET_VAR_E",
          "start": 32214,
          "end": 32466
        }, {
          "filename": "/assets/blocks/E_BUT_SENSOR_EE",
          "start": 32466,
          "end": 32836
        }, {
          "filename": "/assets/blocks/E_JOY_SENSOR_VE",
          "start": 32836,
          "end": 33198
        }, {
          "filename": "/assets/blocks/E_LATE_UPDATE_EE",
          "start": 33198,
          "end": 33563
        }, {
          "filename": "/assets/blocks/E_LOSE_E",
          "start": 33563,
          "end": 33936
        }, {
          "filename": "/assets/blocks/E_PLAY_EE",
          "start": 33936,
          "end": 34298
        }, {
          "filename": "/assets/blocks/E_SCREENSHOT_EE",
          "start": 34298,
          "end": 34687
        }, {
          "filename": "/assets/blocks/E_SWIPE_EVE",
          "start": 34687,
          "end": 35059
        }, {
          "filename": "/assets/blocks/E_TOUCH_EFFE",
          "start": 35059,
          "end": 35494
        }, {
          "filename": "/assets/blocks/E_WIN_E",
          "start": 35494,
          "end": 35871
        }, {
          "filename": "/assets/blocks/FALSE_T",
          "start": 35871,
          "end": 36118
        }, {
          "filename": "/assets/blocks/FFF_EULER_Q",
          "start": 36118,
          "end": 36507
        }, {
          "filename": "/assets/blocks/FFF_JOIN_V",
          "start": 36507,
          "end": 36894
        }, {
          "filename": "/assets/blocks/FF_ADD_F",
          "start": 36894,
          "end": 37193
        }, {
          "filename": "/assets/blocks/FF_DIV_F",
          "start": 37193,
          "end": 37487
        }, {
          "filename": "/assets/blocks/FF_EQL_T",
          "start": 37487,
          "end": 37788
        }, {
          "filename": "/assets/blocks/FF_GT_T",
          "start": 37788,
          "end": 38097
        }, {
          "filename": "/assets/blocks/FF_LOG_F",
          "start": 38097,
          "end": 38413
        }, {
          "filename": "/assets/blocks/FF_LT_T",
          "start": 38413,
          "end": 38720
        }, {
          "filename": "/assets/blocks/FF_MAX_F",
          "start": 38720,
          "end": 39025
        }, {
          "filename": "/assets/blocks/FF_MIN_F",
          "start": 39025,
          "end": 39331
        }, {
          "filename": "/assets/blocks/FF_MOD_F",
          "start": 39331,
          "end": 39625
        }, {
          "filename": "/assets/blocks/FF_MUL_F",
          "start": 39625,
          "end": 39930
        }, {
          "filename": "/assets/blocks/FF_POW_F",
          "start": 39930,
          "end": 40229
        }, {
          "filename": "/assets/blocks/FF_RANDOM_F",
          "start": 40229,
          "end": 40545
        }, {
          "filename": "/assets/blocks/FF_S2W_VV",
          "start": 40545,
          "end": 40876
        }, {
          "filename": "/assets/blocks/FF_SUB_F",
          "start": 40876,
          "end": 41174
        }, {
          "filename": "/assets/blocks/FLOWERS",
          "start": 41174,
          "end": 41311
        }, {
          "filename": "/assets/blocks/FOLDER_EMPTY",
          "start": 41311,
          "end": 41451
        }, {
          "filename": "/assets/blocks/FOLDER_LOCKED",
          "start": 41451,
          "end": 41644
        }, {
          "filename": "/assets/blocks/FOLDER_UNKNOWN",
          "start": 41644,
          "end": 41809
        }, {
          "filename": "/assets/blocks/FOLIAGE",
          "start": 41809,
          "end": 41901
        }, {
          "filename": "/assets/blocks/FOLIAGE_B",
          "start": 41901,
          "end": 42076
        }, {
          "filename": "/assets/blocks/FOLIAGE_BOT",
          "start": 42076,
          "end": 42209
        }, {
          "filename": "/assets/blocks/FOLIAGE_SLAB",
          "start": 42209,
          "end": 42370
        }, {
          "filename": "/assets/blocks/FOLIAGE_TOP",
          "start": 42370,
          "end": 42499
        }, {
          "filename": "/assets/blocks/FpF_LIST_ELEMENT_Fp",
          "start": 42499,
          "end": 42861
        }, {
          "filename": "/assets/blocks/FRAME_F",
          "start": 42861,
          "end": 43071
        }, {
          "filename": "/assets/blocks/F_ABS_F",
          "start": 43071,
          "end": 43288
        }, {
          "filename": "/assets/blocks/F_CEIL_F",
          "start": 43288,
          "end": 43506
        }, {
          "filename": "/assets/blocks/F_COS_F",
          "start": 43506,
          "end": 43724
        }, {
          "filename": "/assets/blocks/F_FLOOR_F",
          "start": 43724,
          "end": 43945
        }, {
          "filename": "/assets/blocks/F_NEG_F",
          "start": 43945,
          "end": 44158
        }, {
          "filename": "/assets/blocks/F_ROUND_F",
          "start": 44158,
          "end": 44378
        }, {
          "filename": "/assets/blocks/F_SIN_F",
          "start": 44378,
          "end": 44600
        }, {
          "filename": "/assets/blocks/GOAL",
          "start": 44600,
          "end": 45039
        }, {
          "filename": "/assets/blocks/GRASS_A",
          "start": 45039,
          "end": 45182
        }, {
          "filename": "/assets/blocks/GRASS_B",
          "start": 45182,
          "end": 45344
        }, {
          "filename": "/assets/blocks/L2R",
          "start": 45344,
          "end": 45452
        }, {
          "filename": "/assets/blocks/MARKER",
          "start": 45452,
          "end": 45565
        }, {
          "filename": "/assets/blocks/MOTOR_X",
          "start": 45565,
          "end": 46196
        }, {
          "filename": "/assets/blocks/MOTOR_Y",
          "start": 46196,
          "end": 47053
        }, {
          "filename": "/assets/blocks/MOTOR_Z",
          "start": 47053,
          "end": 47710
        }, {
          "filename": "/assets/blocks/MULTI_IN",
          "start": 47710,
          "end": 47819
        }, {
          "filename": "/assets/blocks/MULTI_IN_E",
          "start": 47819,
          "end": 47932
        }, {
          "filename": "/assets/blocks/MULTI_OUT",
          "start": 47932,
          "end": 48044
        }, {
          "filename": "/assets/blocks/MULTI_OUT_E",
          "start": 48044,
          "end": 48159
        }, {
          "filename": "/assets/blocks/NONE",
          "start": 48159,
          "end": 48369
        }, {
          "filename": "/assets/blocks/NUMBER_F",
          "start": 48369,
          "end": 48618
        }, {
          "filename": "/assets/blocks/OBSTACLE",
          "start": 48618,
          "end": 48746
        }, {
          "filename": "/assets/blocks/OO_EQL_T",
          "start": 48746,
          "end": 49049
        }, {
          "filename": "/assets/blocks/OpF_LIST_ELEMENT_Op",
          "start": 49049,
          "end": 49410
        }, {
          "filename": "/assets/blocks/O_GET_POS_VQ",
          "start": 49410,
          "end": 49744
        }, {
          "filename": "/assets/blocks/O_GET_SIZE_VV",
          "start": 49744,
          "end": 50068
        }, {
          "filename": "/assets/blocks/O_GET_VEL_VV",
          "start": 50068,
          "end": 50400
        }, {
          "filename": "/assets/blocks/PARTICLE",
          "start": 50400,
          "end": 50512
        }, {
          "filename": "/assets/blocks/PASS_THROUGH",
          "start": 50512,
          "end": 50636
        }, {
          "filename": "/assets/blocks/QpF_LIST_ELEMENT_Qp",
          "start": 50636,
          "end": 51e3
        }, {
          "filename": "/assets/blocks/QQF_LERP_Q",
          "start": 51e3,
          "end": 51389
        }, {
          "filename": "/assets/blocks/QQ_MUL_Q",
          "start": 51389,
          "end": 51692
        }, {
          "filename": "/assets/blocks/QUATERNION_Q",
          "start": 51692,
          "end": 52037
        }, {
          "filename": "/assets/blocks/Q_EULER_FFF",
          "start": 52037,
          "end": 52426
        }, {
          "filename": "/assets/blocks/Q_INV_Q",
          "start": 52426,
          "end": 52641
        }, {
          "filename": "/assets/blocks/SCREEN_SIZE_FF",
          "start": 52641,
          "end": 52956
        }, {
          "filename": "/assets/blocks/SCRIPT",
          "start": 52956,
          "end": 53102
        }, {
          "filename": "/assets/blocks/SFX_Fp",
          "start": 53102,
          "end": 53424
        }, {
          "filename": "/assets/blocks/SHRUB",
          "start": 53424,
          "end": 53623
        }, {
          "filename": "/assets/blocks/SLATE",
          "start": 53623,
          "end": 53717
        }, {
          "filename": "/assets/blocks/SLATE_B",
          "start": 53717,
          "end": 53922
        }, {
          "filename": "/assets/blocks/SLATE_BOT",
          "start": 53922,
          "end": 54060
        }, {
          "filename": "/assets/blocks/SLATE_NE",
          "start": 54060,
          "end": 54173
        }, {
          "filename": "/assets/blocks/SLATE_NW",
          "start": 54173,
          "end": 54293
        }, {
          "filename": "/assets/blocks/SLATE_SE",
          "start": 54293,
          "end": 54409
        }, {
          "filename": "/assets/blocks/SLATE_SW",
          "start": 54409,
          "end": 54529
        }, {
          "filename": "/assets/blocks/SLATE_TOP",
          "start": 54529,
          "end": 54653
        }, {
          "filename": "/assets/blocks/SLIDER",
          "start": 54653,
          "end": 56555
        }, {
          "filename": "/assets/blocks/SLIDER_X",
          "start": 56555,
          "end": 56835
        }, {
          "filename": "/assets/blocks/SLIDER_Y",
          "start": 56835,
          "end": 57156
        }, {
          "filename": "/assets/blocks/SLIDER_Z",
          "start": 57156,
          "end": 57454
        }, {
          "filename": "/assets/blocks/SPHERE",
          "start": 57454,
          "end": 57594
        }, {
          "filename": "/assets/blocks/STEEL",
          "start": 57594,
          "end": 57734
        }, {
          "filename": "/assets/blocks/STICK_DE",
          "start": 57734,
          "end": 57885
        }, {
          "filename": "/assets/blocks/STICK_DN",
          "start": 57885,
          "end": 58037
        }, {
          "filename": "/assets/blocks/STICK_DS",
          "start": 58037,
          "end": 58194
        }, {
          "filename": "/assets/blocks/STICK_DW",
          "start": 58194,
          "end": 58352
        }, {
          "filename": "/assets/blocks/STICK_NE",
          "start": 58352,
          "end": 58506
        }, {
          "filename": "/assets/blocks/STICK_NW",
          "start": 58506,
          "end": 58669
        }, {
          "filename": "/assets/blocks/STICK_SE",
          "start": 58669,
          "end": 58826
        }, {
          "filename": "/assets/blocks/STICK_SW",
          "start": 58826,
          "end": 58986
        }, {
          "filename": "/assets/blocks/STICK_UE",
          "start": 58986,
          "end": 59140
        }, {
          "filename": "/assets/blocks/STICK_UN",
          "start": 59140,
          "end": 59310
        }, {
          "filename": "/assets/blocks/STICK_US",
          "start": 59310,
          "end": 59467
        }, {
          "filename": "/assets/blocks/STICK_UW",
          "start": 59467,
          "end": 59622
        }, {
          "filename": "/assets/blocks/STICK_X",
          "start": 59622,
          "end": 59764
        }, {
          "filename": "/assets/blocks/STICK_Y",
          "start": 59764,
          "end": 59913
        }, {
          "filename": "/assets/blocks/STICK_Z",
          "start": 59913,
          "end": 60051
        }, {
          "filename": "/assets/blocks/STONE",
          "start": 60051,
          "end": 60145
        }, {
          "filename": "/assets/blocks/STONE_B",
          "start": 60145,
          "end": 60322
        }, {
          "filename": "/assets/blocks/STONE_BLOCK",
          "start": 60322,
          "end": 60520
        }, {
          "filename": "/assets/blocks/STONE_BOT",
          "start": 60520,
          "end": 60658
        }, {
          "filename": "/assets/blocks/STONE_LOWER",
          "start": 60658,
          "end": 60799
        }, {
          "filename": "/assets/blocks/STONE_PILLAR",
          "start": 60799,
          "end": 60954
        }, {
          "filename": "/assets/blocks/STONE_SLAB",
          "start": 60954,
          "end": 61102
        }, {
          "filename": "/assets/blocks/STONE_TOP",
          "start": 61102,
          "end": 61227
        }, {
          "filename": "/assets/blocks/SWIPE_CHICK",
          "start": 61227,
          "end": 64004
        }, {
          "filename": "/assets/blocks/THIS_O",
          "start": 64004,
          "end": 64119
        }, {
          "filename": "/assets/blocks/TILT_BALL",
          "start": 64119,
          "end": 64366
        }, {
          "filename": "/assets/blocks/TpF_LIST_ELEMENT_Tp",
          "start": 64366,
          "end": 64728
        }, {
          "filename": "/assets/blocks/TRUE_T",
          "start": 64728,
          "end": 64974
        }, {
          "filename": "/assets/blocks/TT_AND_T",
          "start": 64974,
          "end": 65267
        }, {
          "filename": "/assets/blocks/TT_EQL_T",
          "start": 65267,
          "end": 65568
        }, {
          "filename": "/assets/blocks/TT_OR_T",
          "start": 65568,
          "end": 65859
        }, {
          "filename": "/assets/blocks/T_NOT_T",
          "start": 65859,
          "end": 66073
        }, {
          "filename": "/assets/blocks/VAR_Cp",
          "start": 66073,
          "end": 66326
        }, {
          "filename": "/assets/blocks/VAR_Fp",
          "start": 66326,
          "end": 66575
        }, {
          "filename": "/assets/blocks/VAR_Op",
          "start": 66575,
          "end": 66825
        }, {
          "filename": "/assets/blocks/VAR_Qp",
          "start": 66825,
          "end": 67077
        }, {
          "filename": "/assets/blocks/VAR_Tp",
          "start": 67077,
          "end": 67327
        }, {
          "filename": "/assets/blocks/VAR_Vp",
          "start": 67327,
          "end": 67577
        }, {
          "filename": "/assets/blocks/VECTOR_V",
          "start": 67577,
          "end": 67920
        }, {
          "filename": "/assets/blocks/VF_AXIS_ANG_Q",
          "start": 67920,
          "end": 68245
        }, {
          "filename": "/assets/blocks/VF_MUL_V",
          "start": 68245,
          "end": 68546
        }, {
          "filename": "/assets/blocks/VpF_LIST_ELEMENT_Vp",
          "start": 68546,
          "end": 68909
        }, {
          "filename": "/assets/blocks/VQ_MUL_V",
          "start": 68909,
          "end": 69211
        }, {
          "filename": "/assets/blocks/VVVV_LINE_VS_PLANE_V",
          "start": 69211,
          "end": 69656
        }, {
          "filename": "/assets/blocks/VV_ADD_V",
          "start": 69656,
          "end": 69955
        }, {
          "filename": "/assets/blocks/VV_CROSS_V",
          "start": 69955,
          "end": 70260
        }, {
          "filename": "/assets/blocks/VV_DIST_F",
          "start".........完整代码请登录后点击上方下载按钮下载查看

网友评论0