设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 2225|回复: 21

有人知道游戏Nyakori's rabbit doll用的是什么加密吗?

[复制链接]

签到天数: 273 天

[LV.8]以坛为家I

发表于 2022/7/9 13:00 | 显示全部楼层 |阅读模式 |Google Chrome 103.0.0.0|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
本帖最后由 EATB 于 2022/7/9 15:55 编辑

有人知道游戏Nyakori's rabbit doll用的是什么加密吗?或者怎么解密这个游戏的图片文件吗?或者找到是用什么方法加密的也行(具体的)

steam的一个游戏,这个游戏的引擎是RPG maker MV/MZ,
但是对图片和声音资源的加密和普通的RPG maker游戏的加密又不一样

普通的RPG maker加密的文件一般都是rpgmvp或者.png_的后缀,但是这个游戏的资源文件是没有后缀的

这是游戏本体的链接,Steam上没有购买且Steam没有启动是无法打开的
链接:https://pan.baidu.com/s/1y4pfmsd8DiG0xjCGIvgvMQ
提取码:aexq
密码:bbs.itzmx.com@EATB
屏幕截图 2022-07-09 125921.png
[发帖际遇]: EATB 乐于助人,奖励 5 贡献. 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/7/9 13:02 | 显示全部楼层 |Google Chrome 103.0.0.0|Windows 10
这个游戏的目录结构和文件和普通的RPG游戏都不太一样,比较明显的是greenworks,https://github.com/greenheartgames/greenworks
  1. // Copyright (c) 2015 Greenheart Games Pty. Ltd. All rights reserved.

  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.

  4. // The source code can be found in https://github.com/greenheartgames/greenworks
  5. var fs = require('fs');

  6. var greenworks;

  7. if (process.platform == 'darwin') {
  8.   if (process.arch == 'x64')
  9.     greenworks = require('./lib/greenworks-osx64');
  10.   else if (process.arch == 'ia32')
  11.     greenworks = require('./lib/greenworks-osx32');
  12. } else if (process.platform == 'win32') {
  13.   if (process.arch == 'x64')
  14.     greenworks = require('./lib/greenworks-win64');
  15.   else if (process.arch == 'ia32')
  16.     greenworks = require('./lib/greenworks-win32');
  17. } else if (process.platform == 'linux') {
  18.   if (process.arch == 'x64')
  19.     greenworks = require('./lib/greenworks-linux64');
  20.   else if (process.arch == 'ia32')
  21.     greenworks = require('./lib/greenworks-linux32');
  22. }

  23. function error_process(err, error_callback) {
  24.   if (err && error_callback)
  25.     error_callback(err);
  26. }

  27. greenworks.ugcGetItems = function(options, ugc_matching_type, ugc_query_type,
  28.     success_callback, error_callback) {
  29.   if (typeof options !== 'object') {
  30.     error_callback = success_callback;
  31.     success_callback = ugc_query_type;
  32.     ugc_query_type = ugc_matching_type;
  33.     ugc_matching_type = options;
  34.     options = {
  35.       'app_id': greenworks.getAppId(),
  36.       'page_num': 1
  37.     }
  38.   }
  39.   greenworks._ugcGetItems(options, ugc_matching_type, ugc_query_type,
  40.       success_callback, error_callback);
  41. }

  42. greenworks.ugcGetUserItems = function(options, ugc_matching_type,
  43.     ugc_list_sort_order, ugc_list, success_callback, error_callback) {
  44.   if (typeof options !== 'object') {
  45.     error_callback = success_callback;
  46.     success_callback = ugc_list;
  47.     ugc_list = ugc_list_sort_order;
  48.     ugc_list_sort_order = ugc_matching_type;
  49.     ugc_matching_type = options;
  50.     options = {
  51.       'app_id': greenworks.getAppId(),
  52.       'page_num': 1
  53.     }
  54.   }
  55.   greenworks._ugcGetUserItems(options, ugc_matching_type, ugc_list_sort_order,
  56.       ugc_list, success_callback, error_callback);
  57. }

  58. greenworks.ugcSynchronizeItems = function (options, sync_dir, success_callback,
  59.     error_callback) {
  60.   if (typeof options !== 'object') {
  61.     error_callback = success_callback;
  62.     success_callback = sync_dir;
  63.     sync_dir = options;
  64.     options = {
  65.       'app_id': greenworks.getAppId(),
  66.       'page_num': 1
  67.     }
  68.   }
  69.   greenworks._ugcSynchronizeItems(options, sync_dir, success_callback,
  70.       error_callback);
  71. }

  72. greenworks.publishWorkshopFile = function(options, file_path, image_path, title,
  73.     description, success_callback, error_callback) {
  74.   if (typeof options !== 'object') {
  75.     error_callback = success_callback;
  76.     success_callback = description;
  77.     description = title;
  78.     title = image_path;
  79.     image_path = file_path;
  80.     file_path = options;
  81.     options = {
  82.       'app_id': greenworks.getAppId(),
  83.       'tags': []
  84.     }
  85.   }
  86.   greenworks._publishWorkshopFile(options, file_path, image_path, title,
  87.       description, success_callback, error_callback);
  88. }

  89. greenworks.updatePublishedWorkshopFile = function(options,
  90.     published_file_handle, file_path, image_path, title, description,
  91.     success_callback, error_callback) {
  92.   if (typeof options !== 'object') {
  93.     error_callback = success_callback;
  94.     success_callback = description;
  95.     description = title;
  96.     title = image_path;
  97.     image_path = file_path;
  98.     file_path = published_file_handle;
  99.     published_file_handle = options;
  100.     options = {
  101.       'tags': [] // No tags are set
  102.     }
  103.   }
  104.   greenworks._updatePublishedWorkshopFile(options, published_file_handle,
  105.      file_path, image_path, title, description, success_callback,
  106.      error_callback);
  107. }

  108. // An utility function for publish related APIs.
  109. // It processes remains steps after saving files to Steam Cloud.
  110. function file_share_process(file_name, image_name, next_process_func,
  111.     error_callback, progress_callback) {
  112.   if (progress_callback)
  113.     progress_callback("Completed on saving files on Steam Cloud.");
  114.   greenworks.fileShare(file_name, function() {
  115.     greenworks.fileShare(image_name, function() {
  116.       next_process_func();
  117.     }, function(err) { error_process(err, error_callback); });
  118.   }, function(err) { error_process(err, error_callback); });
  119. }

  120. // Publishing user generated content(ugc) to Steam contains following steps:
  121. // 1. Save file and image to Steam Cloud.
  122. // 2. Share the file and image.
  123. // 3. publish the file to workshop.
  124. greenworks.ugcPublish = function(file_name, title, description, image_name,
  125.     success_callback, error_callback, progress_callback) {
  126.   var publish_file_process = function() {
  127.     if (progress_callback)
  128.       progress_callback("Completed on sharing files.");
  129.     greenworks.publishWorkshopFile(file_name, image_name, title, description,
  130.         function(publish_file_id) { success_callback(publish_file_id); },
  131.         function(err) { error_process(err, error_callback); });
  132.   };
  133.   greenworks.saveFilesToCloud([file_name, image_name], function() {
  134.     file_share_process(file_name, image_name, publish_file_process,
  135.         error_callback, progress_callback);
  136.   }, function(err) { error_process(err, error_callback); });
  137. }

  138. // Update publish ugc steps:
  139. // 1. Save new file and image to Steam Cloud.
  140. // 2. Share file and images.
  141. // 3. Update published file.
  142. greenworks.ugcPublishUpdate = function(published_file_id, file_name, title,
  143.     description, image_name, success_callback, error_callback,
  144.     progress_callback) {
  145.   var update_published_file_process = function() {
  146.     if (progress_callback)
  147.       progress_callback("Completed on sharing files.");
  148.     greenworks.updatePublishedWorkshopFile(published_file_id,
  149.         file_name, image_name, title, description,
  150.         function() { success_callback(); },
  151.         function(err) { error_process(err, error_callback); });
  152.   };

  153.   greenworks.saveFilesToCloud([file_name, image_name], function() {
  154.     file_share_process(file_name, image_name, update_published_file_process,
  155.         error_callback, progress_callback);
  156.   }, function(err) { error_process(err, error_callback); });
  157. }

  158. // Greenworks Utils APIs implmentation.
  159. greenworks.Utils.move = function(source_dir, target_dir, success_callback,
  160.     error_callback) {
  161.   fs.rename(source_dir, target_dir, function(err) {
  162.     if (err) {
  163.       if (error_callback) error_callback(err);
  164.       return;
  165.     }
  166.     if (success_callback)
  167.       success_callback();
  168.   });
  169. }

  170. greenworks.init = function() {
  171.   if (this.initAPI()) return true;
  172.   if (!this.isSteamRunning())
  173.     throw new Error("Steam initialization failed. Steam is not running.");
  174.   var appId;
  175.   try {
  176.     appId = fs.readFileSync('steam_appid.txt', 'utf8');
  177.   } catch (e) {
  178.     throw new Error("Steam initialization failed. Steam is running," +
  179.                     "but steam_appid.txt is missing. Expected to find it in: " +
  180.                     require('path').resolve('steam_appid.txt'));
  181.   }
  182.   if (!/^\d+ *\r?\n?$/.test(appId)) {
  183.     throw new Error("Steam initialization failed. " +
  184.                     "steam_appid.txt appears to be invalid; " +
  185.                     "it should contain a numeric ID: " + appId);
  186.   }
  187.   throw new Error("Steam initialization failed, but Steam is running, " +
  188.                   "and steam_appid.txt is present and valid." +
  189.                   "Maybe that's not really YOUR app ID? " + appId.trim());
  190. }

  191. var EventEmitter = require('events').EventEmitter;
  192. greenworks.__proto__ = EventEmitter.prototype;
  193. EventEmitter.call(greenworks);

  194. greenworks._steam_events.on = function () {
  195.   greenworks.emit.apply(greenworks, arguments);
  196. };

  197. process.versions['greenworks'] = greenworks._version;

  198. module.exports = greenworks;
复制代码
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/7/9 13:28 | 显示全部楼层 |Google Chrome 103.0.0.0|Windows 10
这个游戏的CG大概是用MD5来加密的,在plugins文件夹找到了个叫md5.js的文件
听说md5加密是无解的,如果是无解的游戏又是怎么显示被md5加密的cg文件呢?

  1. var md5 = md5 || {};
  2.         (function($){
  3.                 var rotateLeft = function(lValue, iShiftBits) {
  4.                         return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
  5.                 }
  6.                 var addUnsigned = function(lX, lY) {
  7.                         var lX4, lY4, lX8, lY8, lResult;
  8.                         lX8 = (lX & 0x80000000);
  9.                         lY8 = (lY & 0x80000000);
  10.                         lX4 = (lX & 0x40000000);
  11.                         lY4 = (lY & 0x40000000);
  12.                         lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
  13.                         if (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
  14.                         if (lX4 | lY4) {
  15.                                 if (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
  16.                                 else return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
  17.                         } else {
  18.                                 return (lResult ^ lX8 ^ lY8);
  19.                         }
  20.                 }
  21.                 var F = function(x, y, z) {
  22.                         return (x & y) | ((~ x) & z);
  23.                 }
  24.                 var G = function(x, y, z) {
  25.                         return (x & z) | (y & (~ z));
  26.                 }
  27.                 var H = function(x, y, z) {
  28.                         return (x ^ y ^ z);
  29.                 }
  30.                 var I = function(x, y, z) {
  31.                         return (y ^ (x | (~ z)));
  32.                 }
  33.                 var FF = function(a, b, c, d, x, s, ac) {
  34.                         a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac));
  35.                         return addUnsigned(rotateLeft(a, s), b);
  36.                 };
  37.                 var GG = function(a, b, c, d, x, s, ac) {
  38.                         a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac));
  39.                         return addUnsigned(rotateLeft(a, s), b);
  40.                 };
  41.                 var HH = function(a, b, c, d, x, s, ac) {
  42.                         a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac));
  43.                         return addUnsigned(rotateLeft(a, s), b);
  44.                 };
  45.                 var II = function(a, b, c, d, x, s, ac) {
  46.                         a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac));
  47.                         return addUnsigned(rotateLeft(a, s), b);
  48.                 };
  49.                 var convertToWordArray = function(string) {
  50.                         var lWordCount;
  51.                         var lMessageLength = string.length;
  52.                         var lNumberOfWordsTempOne = lMessageLength + 8;
  53.                         var lNumberOfWordsTempTwo = (lNumberOfWordsTempOne - (lNumberOfWordsTempOne % 64)) / 64;
  54.                         var lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16;
  55.                         var lWordArray = Array(lNumberOfWords - 1);
  56.                         var lBytePosition = 0;
  57.                         var lByteCount = 0;
  58.                         while (lByteCount < lMessageLength) {
  59.                                 lWordCount = (lByteCount - (lByteCount % 4)) / 4;
  60.                                 lBytePosition = (lByteCount % 4) * 8;
  61.                                 lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
  62.                                 lByteCount++;
  63.                         }
  64.                         lWordCount = (lByteCount - (lByteCount % 4)) / 4;
  65.                         lBytePosition = (lByteCount % 4) * 8;
  66.                         lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
  67.                         lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
  68.                         lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
  69.                         return lWordArray;
  70.                 };
  71.                 var wordToHex = function(lValue) {
  72.                         var WordToHexValue = "", WordToHexValueTemp = "", lByte, lCount;
  73.                         for (lCount = 0; lCount <= 3; lCount++) {
  74.                                 lByte = (lValue >>> (lCount * 8)) & 255;
  75.                                 WordToHexValueTemp = "0" + lByte.toString(16);
  76.                                 WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2);
  77.                         }
  78.                         return WordToHexValue;
  79.                 };
  80.                 var uTF8Encode = function(string) {
  81.                         string = string.replace(/\x0d\x0a/g, "\x0a");
  82.                         var output = "";
  83.                         for (var n = 0; n < string.length; n++) {
  84.                                 var c = string.charCodeAt(n);
  85.                                 if (c < 128) {
  86.                                         output += String.fromCharCode(c);
  87.                                 } else if ((c > 127) && (c < 2048)) {
  88.                                         output += String.fromCharCode((c >> 6) | 192);
  89.                                         output += String.fromCharCode((c & 63) | 128);
  90.                                 } else {
  91.                                         output += String.fromCharCode((c >> 12) | 224);
  92.                                         output += String.fromCharCode(((c >> 6) & 63) | 128);
  93.                                         output += String.fromCharCode((c & 63) | 128);
  94.                                 }
  95.                         }
  96.                         return output;
  97.                 };
  98.                 $.compute = function(string) {
  99.                                 var x = Array();
  100.                                 var k, AA, BB, CC, DD, a, b, c, d;
  101.                                 var S11=7, S12=12, S13=17, S14=22;
  102.                                 var S21=5, S22=9 , S23=14, S24=20;
  103.                                 var S31=4, S32=11, S33=16, S34=23;
  104.                                 var S41=6, S42=10, S43=15, S44=21;
  105.                                 string = uTF8Encode(string);
  106.                                 x = convertToWordArray(string);
  107.                                 a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
  108.                                 for (k = 0; k < x.length; k += 16) {
  109.                                         AA = a; BB = b; CC = c; DD = d;
  110.                                         a = FF(a, b, c, d, x[k+0],  S11, 0xD76AA478);
  111.                                         d = FF(d, a, b, c, x[k+1],  S12, 0xE8C7B756);
  112.                                         c = FF(c, d, a, b, x[k+2],  S13, 0x242070DB);
  113.                                         b = FF(b, c, d, a, x[k+3],  S14, 0xC1BDCEEE);
  114.                                         a = FF(a, b, c, d, x[k+4],  S11, 0xF57C0FAF);
  115.                                         d = FF(d, a, b, c, x[k+5],  S12, 0x4787C62A);
  116.                                         c = FF(c, d, a, b, x[k+6],  S13, 0xA8304613);
  117.                                         b = FF(b, c, d, a, x[k+7],  S14, 0xFD469501);
  118.                                         a = FF(a, b, c, d, x[k+8],  S11, 0x698098D8);
  119.                                         d = FF(d, a, b, c, x[k+9],  S12, 0x8B44F7AF);
  120.                                         c = FF(c, d, a, b, x[k+10], S13, 0xFFFF5BB1);
  121.                                         b = FF(b, c, d, a, x[k+11], S14, 0x895CD7BE);
  122.                                         a = FF(a, b, c, d, x[k+12], S11, 0x6B901122);
  123.                                         d = FF(d, a, b, c, x[k+13], S12, 0xFD987193);
  124.                                         c = FF(c, d, a, b, x[k+14], S13, 0xA679438E);
  125.                                         b = FF(b, c, d, a, x[k+15], S14, 0x49B40821);
  126.                                         a = GG(a, b, c, d, x[k+1],  S21, 0xF61E2562);
  127.                                         d = GG(d, a, b, c, x[k+6],  S22, 0xC040B340);
  128.                                         c = GG(c, d, a, b, x[k+11], S23, 0x265E5A51);
  129.                                         b = GG(b, c, d, a, x[k+0],  S24, 0xE9B6C7AA);
  130.                                         a = GG(a, b, c, d, x[k+5],  S21, 0xD62F105D);
  131.                                         d = GG(d, a, b, c, x[k+10], S22, 0x2441453);
  132.                                         c = GG(c, d, a, b, x[k+15], S23, 0xD8A1E681);
  133.                                         b = GG(b, c, d, a, x[k+4],  S24, 0xE7D3FBC8);
  134.                                         a = GG(a, b, c, d, x[k+9],  S21, 0x21E1CDE6);
  135.                                         d = GG(d, a, b, c, x[k+14], S22, 0xC33707D6);
  136.                                         c = GG(c, d, a, b, x[k+3],  S23, 0xF4D50D87);
  137.                                         b = GG(b, c, d, a, x[k+8],  S24, 0x455A14ED);
  138.                                         a = GG(a, b, c, d, x[k+13], S21, 0xA9E3E905);
  139.                                         d = GG(d, a, b, c, x[k+2],  S22, 0xFCEFA3F8);
  140.                                         c = GG(c, d, a, b, x[k+7],  S23, 0x676F02D9);
  141.                                         b = GG(b, c, d, a, x[k+12], S24, 0x8D2A4C8A);
  142.                                         a = HH(a, b, c, d, x[k+5],  S31, 0xFFFA3942);
  143.                                         d = HH(d, a, b, c, x[k+8],  S32, 0x8771F681);
  144.                                         c = HH(c, d, a, b, x[k+11], S33, 0x6D9D6122);
  145.                                         b = HH(b, c, d, a, x[k+14], S34, 0xFDE5380C);
  146.                                         a = HH(a, b, c, d, x[k+1],  S31, 0xA4BEEA44);
  147.                                         d = HH(d, a, b, c, x[k+4],  S32, 0x4BDECFA9);
  148.                                         c = HH(c, d, a, b, x[k+7],  S33, 0xF6BB4B60);
  149.                                         b = HH(b, c, d, a, x[k+10], S34, 0xBEBFBC70);
  150.                                         a = HH(a, b, c, d, x[k+13], S31, 0x289B7EC6);
  151.                                         d = HH(d, a, b, c, x[k+0],  S32, 0xEAA127FA);
  152.                                         c = HH(c, d, a, b, x[k+3],  S33, 0xD4EF3085);
  153.                                         b = HH(b, c, d, a, x[k+6],  S34, 0x4881D05);
  154.                                         a = HH(a, b, c, d, x[k+9],  S31, 0xD9D4D039);
  155.                                         d = HH(d, a, b, c, x[k+12], S32, 0xE6DB99E5);
  156.                                         c = HH(c, d, a, b, x[k+15], S33, 0x1FA27CF8);
  157.                                         b = HH(b, c, d, a, x[k+2],  S34, 0xC4AC5665);
  158.                                         a = II(a, b, c, d, x[k+0],  S41, 0xF4292244);
  159.                                         d = II(d, a, b, c, x[k+7],  S42, 0x432AFF97);
  160.                                         c = II(c, d, a, b, x[k+14], S43, 0xAB9423A7);
  161.                                         b = II(b, c, d, a, x[k+5],  S44, 0xFC93A039);
  162.                                         a = II(a, b, c, d, x[k+12], S41, 0x655B59C3);
  163.                                         d = II(d, a, b, c, x[k+3],  S42, 0x8F0CCC92);
  164.                                         c = II(c, d, a, b, x[k+10], S43, 0xFFEFF47D);
  165.                                         b = II(b, c, d, a, x[k+1],  S44, 0x85845DD1);
  166.                                         a = II(a, b, c, d, x[k+8],  S41, 0x6FA87E4F);
  167.                                         d = II(d, a, b, c, x[k+15], S42, 0xFE2CE6E0);
  168.                                         c = II(c, d, a, b, x[k+6],  S43, 0xA3014314);
  169.                                         b = II(b, c, d, a, x[k+13], S44, 0x4E0811A1);
  170.                                         a = II(a, b, c, d, x[k+4],  S41, 0xF7537E82);
  171.                                         d = II(d, a, b, c, x[k+11], S42, 0xBD3AF235);
  172.                                         c = II(c, d, a, b, x[k+2],  S43, 0x2AD7D2BB);
  173.                                         b = II(b, c, d, a, x[k+9],  S44, 0xEB86D391);
  174.                                         a = addUnsigned(a, AA);
  175.                                         b = addUnsigned(b, BB);
  176.                                         c = addUnsigned(c, CC);
  177.                                         d = addUnsigned(d, DD);
  178.                                 }
  179.                                 var tempValue = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);
  180.                                 return tempValue.toLowerCase();
  181.                         }
  182.         })(md5);
复制代码


这是图片文件
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/7/9 14:03 | 显示全部楼层
这个游戏的图标可能都是加密的,游戏运行的时候会在“C:\Users\用户名\AppData\Local”生成一个文件夹,里面大概是缓存文件

在这个路径找到了已解密的游戏图标和未解密的md5文件
C:\Users\用户名\AppData\Local\Nyakori's Rabbit Doll\User Data\Default\Web Applications\_crx_kcglhcegbdionpbancnfbnbjjgjnolbm

游戏目录下的package.json就有写游戏图标
屏幕截图 2022-07-09 140036.png
屏幕截图 2022-07-09 140305.png
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/7/9 21:01 | 显示全部楼层
https://rpg.blue/thread-477772-1-1.html

找到了一点线索,
部分资源是【预载入到本地硬盘】的,部分资源是【预载入内存】的。

立绘,se,me,bgm这种不会卡MV场景加载的都会预载到硬盘

也就是说cg文件可能会被解密到硬盘中,但是目前发现此游戏创建的文件只有c盘的“C:\Users\用户名\AppData\Local\Nyakori's Rabbit Doll”


图:webgl告诉我你的显卡可以用S3TC的压缩格式。

如果MV要使用这些压缩纹理来节省图片内存占用的话,有什么方法可以让MV使用压缩纹理么。

这句说明cg文件不一定是普通的图片格式,也可能会以其他形式显示成图片


因为MV的资源管理模式几乎就是用到再加载,其实就是边玩边加载图片,这样图片稍微加载慢一点就出LOADING了,玩玩就LOADING,很烦。但为什么其他网游没这个问题,因为他们在游戏启动的时候一次性把资源全都预加载上来了。

这句已经印证游戏的资源文件会被提前加载好,这也就是为什么一开始游戏会有加载图,而且Game.exe对CPU和GPU的利用率提高
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 161 天

[LV.7]常住居民III

发表于 2022/7/11 05:32 | 显示全部楼层 |Firefox 100.0|Windows 10
帮顶,感谢游戏推荐。
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/7/12 11:06 | 显示全部楼层 |Google Chrome 103.0.0.0|Windows 10
ICP13013206-7 发表于 2022/7/11 05:32
帮顶,感谢游戏推荐。

你是不是搞错了什么?
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 527 天

[LV.9]以坛为家II

发表于 2022/7/17 00:08 | 显示全部楼层 |Google Chrome 73.0.3683.121|Windows 7
看起来还不错,感谢游戏推荐
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/8/21 17:22 | 显示全部楼层 |Google Chrome 104.0.0.0|Windows 10
这是这个游戏的index.html,里面只加载了一个插件(mrd.min.bin),这说明此游戏的资源文件价值极有可能是靠插件(mrd.min.bin)加载的,这个插件的大小为6.1MB

  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="UTF-8">
  5.         <meta name="apple-mobile-web-app-capable" content="yes">
  6.         <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  7.         <meta name="viewport" content="user-scalable=no">
  8.                 <meta itemprop="name" content="喵可莉的兔玩偶"/>
  9.                 <meta itemprop="image" content="icon/share.png" />
  10.                 <meta name="description" itemprop="description" content="RPGMaker MV. WebGL Mode." />
  11.                 <meta name="keywords" content="喵可莉,喵可莉的兔玩偶" />
  12.         <link rel="icon" href="icon/icon.png" type="image/png">
  13.         <link rel="apple-touch-icon" href="icon/icon.png">
  14.         <link rel="stylesheet" type="text/css" href="fonts/gamefont.css">
  15.         <title></title>
  16.     </head>
  17.     <body style="background-color: black">
  18.                 <script type="text/javascript">
  19.                 window.is_nwjc = true;
  20.                 var xhr = new XMLHttpRequest();
  21.                 xhr.responseType = 'arraybuffer';
  22.                 xhr.open('GET', 'js/mrd.min.bin');
  23.                 xhr.onload = function() {
  24.                         if(xhr.status < 400)
  25.                         {
  26.                                 nw.Window.get().evalNWBin(null, xhr.response);
  27.                         }
  28.                         window._setIntervalt = setInterval(function() {
  29.                                 if(window.onIndexCheckOK)
  30.                                 {
  31.                                         clearInterval(window._setIntervalt);
  32.                                         SceneManager.run(Scene_Boot);
  33.                                 }
  34.                         }, 100);
  35.                 };
  36.                 xhr.send();
  37.                 </script>
  38.     </body>
  39. </html>
复制代码
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/8/21 17:23 | 显示全部楼层 |Google Chrome 104.0.0.0|Windows 10

这个是普通RPG游戏的的index.html文件的内容

  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="UTF-8">
  5.         <meta name="apple-mobile-web-app-capable" content="yes">
  6.         <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  7.         <meta name="viewport" content="user-scalable=no">
  8.         <link rel="icon" href="icon/icon.png" type="image/png">
  9.         <link rel="apple-touch-icon" href="icon/icon.png">
  10.         <link rel="stylesheet" type="text/css" href="fonts/gamefont.css">
  11.         <title>XXXX ver1.00</title>
  12.     </head>
  13.     <body style="background-color: black">
  14.         <script type="text/javascript" src="js/libs/pixi.js"></script>
  15.         <script type="text/javascript" src="js/libs/pixi-tilemap.js"></script>
  16.         <script type="text/javascript" src="js/libs/pixi-picture.js"></script>
  17.         <script type="text/javascript" src="js/libs/fpsmeter.js"></script>
  18.         <script type="text/javascript" src="js/libs/lz-string.js"></script>
  19.         <script type="text/javascript" src="js/libs/iphone-inline-video.browser.js"></script>
  20.         <script type="text/javascript" src="js/rpg_core.js"></script>
  21.         <script type="text/javascript" src="js/rpg_managers.js"></script>
  22.         <script type="text/javascript" src="js/rpg_objects.js"></script>
  23.         <script type="text/javascript" src="js/rpg_scenes.js"></script>
  24.         <script type="text/javascript" src="js/rpg_sprites.js"></script>
  25.         <script type="text/javascript" src="js/rpg_windows.js"></script>
  26.         <script type="text/javascript" src="js/plugins.js"></script>
  27.         <script type="text/javascript" src="js/main.js"></script>
  28.     </body>
  29. </html>
复制代码
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/8/21 17:32 | 显示全部楼层 |Google Chrome 104.0.0.0|Windows 10

通过对比,这个游戏的index.html文件的head部分多出了这部分代码

  1. <meta itemprop="name" content="喵可莉的兔玩偶"/>
  2.                 <meta itemprop="image" content="icon/share.png" />
  3.                 <meta name="description" itemprop="description" content="RPGMaker MV. WebGL Mode." />
  4.                 <meta name="keywords" content="喵可莉,喵可莉的兔玩偶" />
复制代码


body部分被替换为

  1. <script type="text/javascript">
  2.                 window.is_nwjc = true;
  3.                 var xhr = new XMLHttpRequest();
  4.                 xhr.responseType = 'arraybuffer';
  5.                 xhr.open('GET', 'js/mrd.min.bin');
  6.                 xhr.onload = function() {
  7.                         if(xhr.status < 400)
  8.                         {
  9.                                 nw.Window.get().evalNWBin(null, xhr.response);
  10.                         }
  11.                         window._setIntervalt = setInterval(function() {
  12.                                 if(window.onIndexCheckOK)
  13.                                 {
  14.                                         clearInterval(window._setIntervalt);
  15.                                         SceneManager.run(Scene_Boot);
  16.                                 }
  17.                         }, 100);
  18.                 };
  19.                 xhr.send();
  20.                 </script>
复制代码


body部分被完全用于加载插件(mrd.min.bin),没有看到用于加载其他插件的代码,所以其他的插件及有可能是被插件(mrd.min.bin)加载的
head部分不太清楚是感什么的,但是肯定和WebGL有关

如果把插件(mrd.min.bin)删除,或者把body被替换的部分删除,打开game.exe就会一片黑
打开game.exe就会一片黑的原因就是什么都没有加载
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/8/21 17:37 | 显示全部楼层 |Google Chrome 104.0.0.0|Windows 10
如果index.html文件被修改,打开game.exe就自动退出,并不是闪退,因为游戏退出的动画就是进程被关闭的样子

这说明index.html文件有保护,无法修改
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/8/21 17:48 | 显示全部楼层 |Google Chrome 104.0.0.0|Windows 10
把js文件夹内除了mrd.min.bin以外的文件都删除后,游戏仍然能正常运行及游玩
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/8/21 18:02 | 显示全部楼层 |Google Chrome 104.0.0.0|Windows 10
如果把普通RPG Maker MV游戏的plugins文件夹删除,就会提示ERROR   Failed to load: xxx.js
如果删除js文件夹内的lib文件夹,打开game.exe就会一片黑
如果把js文件夹根目录下的任何.js问价删除,打开game.exe都会一片黑

但是Nyakori's rabbit doll的js文件夹内的除了mrd.min.bin文件删除后,仍然能正常启动及游玩

这说明Nyakori's rabbit doll的mrd.min.bin文件内已经包含了所有需要的js,所有把js文件夹下的任何js删除都可以正常启动及游玩

这一切都说明搞定mrd.min.bin文件是关键
屏幕截图 2022-08-21 175442.png
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/8/21 18:06 | 显示全部楼层 |Google Chrome 104.0.0.0|Windows 10
Nyakori's rabbit doll的mrd.min.bin文件内已经包含了所有需要的js


这句话可能不太对,因为js文件夹内除了mrd.min.bin的文件大小为13.5MB,但是mrd.min.bin文件只有6.1MB
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/8/21 18:10 | 显示全部楼层 |Google Chrome 104.0.0.0|Windows 10
现在最大的问题是如何查看和编辑mrd.min.bin文件
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/8/22 20:38 | 显示全部楼层 |Google Chrome 104.0.0.0|Windows 10
本帖最后由 EATB 于 2022/8/22 20:42 编辑

用hex workshop打开mrd.min.bin后的截图,能直接解读的是“DO_NOT_EXPORT_JSZIP"和DO_NOT_EXPORT_CODEPAGE
被警告不要提取JSZIP,由这个信息可知,这个文件大概就是一个JSZIP

百度到”jszip 是一个 JavaScript 库,可直接在浏览器上创建 zip 压缩档“
这样就知道这实际上是一种压缩包

以及50 49 58 49处的PIXI字样,这已经说明这个文件已经整合了游戏需要的插件



https://blog.csdn.net/static_coder/article/details/86293076
https://github.com/egret-labs/egret-game-library

屏幕截图 2022-08-22 202806.png
屏幕截图 2022-08-22 203314.png
[发帖际遇]: EATB 被钱袋砸中进医院,看病花了 3 樱币. 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/8/22 20:48 | 显示全部楼层 |Google Chrome 104.0.0.0|Windows 10

看到了一堆网址,我怀疑这个文件其实没有加密?
屏幕截图 2022-08-22 204722.png
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/8/22 21:00 | 显示全部楼层 |Google Chrome 104.0.0.0|Windows 10
一对比,就发现了相似之处,是非常的相似

这已经可以确定index.html中的代码就是解压mrd.min.bin
然后执行mrd.min.bin中的代码,让mrd.min.bin中的代码解密被加密的图片资源再运行游戏
屏幕截图 2022-08-22 205510.png
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/8/22 22:08 | 显示全部楼层 |Google Chrome 104.0.0.0|Windows 10

在加了允许读取本地文件的浏览器打开index.html,无法运行游戏

出现两个错误,看起来是mrd.min.bin无法加载,想不出说明解决方法

还是只能解包mrd.min.bin

Access to XMLHttpRequest at 'file:///D:/Test/Nyakori's%20Rabbit%20Doll/js/mrd.min.bin' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome-extension, edge, https, chrome-untrusted.

Failed to load resource: net::ERR_FAILED
屏幕截图 2022-08-22 215918.png
屏幕截图 2022-08-22 220539.png
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 273 天

[LV.8]以坛为家I

 楼主| 发表于 2022/8/22 22:59 | 显示全部楼层 |Google Chrome 104.0.0.0|Windows 10

在游戏内开启了控制台,获取了以下信息

  1. <html>
  2. <head>
  3. <meta charset="UTF-8">
  4. <meta name="apple-mobile-web-app-capable" content="yes">
  5. <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  6. <meta name="viewport" content="user-scalable=no">
  7. <meta itemprop="name" content="喵可莉的兔玩偶">
  8. <meta itemprop="image" content="icon/share.png">
  9. <meta name="description" itemprop="description" content="RPGMaker MV. WebGL Mode.">
  10. <meta name="keywords" content="喵可莉,喵可莉的兔玩偶">
  11. <link rel="icon" href="icon/icon.png" type="image/png">
  12. <link rel="apple-touch-icon" href="icon/icon.png">
  13. <link rel="stylesheet" type="text/css" href="fonts/gamefont.css">
  14. <title>
  15. 喵可莉的兔玩偶
  16. </title>
  17. <style>
  18. #__vconsole {
  19.   --VC-BG-0: #ededed;
  20.   --VC-BG-1: #f7f7f7;
  21.   --VC-BG-2: #fff;
  22.   --VC-BG-3: #f7f7f7;
  23.   --VC-BG-4: #4c4c4c;
  24.   --VC-BG-5: #fff;
  25.   --VC-FG-0: rgba(0, 0, 0, 0.9);
  26.   --VC-FG-HALF: rgba(0, 0, 0, 0.9);
  27.   --VC-FG-1: rgba(0, 0, 0, 0.5);
  28.   --VC-FG-2: rgba(0, 0, 0, 0.3);
  29.   --VC-FG-3: rgba(0, 0, 0, 0.1);
  30.   --VC-RED: #fa5151;
  31.   --VC-ORANGE: #fa9d3b;
  32.   --VC-YELLOW: #ffc300;
  33.   --VC-GREEN: #91d300;
  34.   --VC-LIGHTGREEN: #95ec69;
  35.   --VC-BRAND: #07c160;
  36.   --VC-BLUE: #10aeff;
  37.   --VC-INDIGO: #1485ee;
  38.   --VC-PURPLE: #6467f0;
  39.   --VC-LINK: #576b95;
  40.   --VC-TEXTGREEN: #06ae56;
  41.   --VC-FG: black;
  42.   --VC-BG: white;
  43.   --VC-BG-COLOR-ACTIVE: #ececec;
  44.   --VC-WARN-BG: #fff3cc;
  45.   --VC-WARN-BORDER: #ffe799;
  46.   --VC-ERROR-BG: #fedcdc;
  47.   --VC-ERROR-BORDER: #fdb9b9;
  48.   --VC-DOM-TAG-NAME-COLOR: #881280;
  49.   --VC-DOM-ATTRIBUTE-NAME-COLOR: #994500;
  50.   --VC-DOM-ATTRIBUTE-VALUE-COLOR: #1a1aa6;
  51.   --VC-CODE-KEY-FG: #881391;
  52.   --VC-CODE-PRIVATE-KEY-FG: #cfa1d3;
  53.   --VC-CODE-FUNC-FG: #0d22aa;
  54.   --VC-CODE-NUMBER-FG: #1c00cf;
  55.   --VC-CODE-STR-FG: #c41a16;
  56.   --VC-CODE-NULL-FG: #808080;
  57.   color: var(--VC-FG-0);
  58.   font-size: 13px;
  59.   font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
  60.   -webkit-user-select: auto;
  61.   /* global */
  62.   /* compoment */
  63. }
  64. #__vconsole .vc-max-height {
  65.   max-height: 19.23076923em;
  66. }
  67. #__vconsole .vc-max-height-line {
  68.   max-height: 3.38461538em;
  69. }
  70. #__vconsole .vc-min-height {
  71.   min-height: 3.07692308em;
  72. }
  73. #__vconsole dd,
  74. #__vconsole dl,
  75. #__vconsole pre {
  76.   margin: 0;
  77. }
  78. #__vconsole .vc-switch {
  79.   display: block;
  80.   position: fixed;
  81.   right: 0.76923077em;
  82.   bottom: 0.76923077em;
  83.   color: #FFF;
  84.   background-color: var(--VC-BRAND);
  85.   line-height: 1;
  86.   font-size: 1.07692308em;
  87.   padding: 0.61538462em 1.23076923em;
  88.   z-index: 10000;
  89.   border-radius: 0.30769231em;
  90.   box-shadow: 0 0 0.61538462em rgba(0, 0, 0, 0.4);
  91. }
  92. #__vconsole .vc-mask {
  93.   display: none;
  94.   position: fixed;
  95.   top: 0;
  96.   left: 0;
  97.   right: 0;
  98.   bottom: 0;
  99.   background: rgba(0, 0, 0, 0);
  100.   z-index: 10001;
  101.   -webkit-transition: background 0.3s;
  102.   transition: background 0.3s;
  103.   -webkit-tap-highlight-color: transparent;
  104.   overflow-y: scroll;
  105. }
  106. #__vconsole .vc-panel {
  107.   display: none;
  108.   position: fixed;
  109.   min-height: 85%;
  110.   left: 0;
  111.   right: 0;
  112.   bottom: 0;
  113.   z-index: 10002;
  114.   background-color: var(--VC-BG-0);
  115.   -webkit-transition: -webkit-transform 0.3s;
  116.   transition: -webkit-transform 0.3s;
  117.   transition: transform 0.3s;
  118.   transition: transform 0.3s, -webkit-transform 0.3s;
  119.   -webkit-transform: translate(0, 100%);
  120.   transform: translate(0, 100%);
  121. }
  122. #__vconsole .vc-tabbar {
  123.   border-bottom: 1px solid var(--VC-FG-3);
  124.   overflow-x: auto;
  125.   height: 3em;
  126.   width: auto;
  127.   white-space: nowrap;
  128. }
  129. #__vconsole .vc-tabbar .vc-tab {
  130.   display: inline-block;
  131.   line-height: 3em;
  132.   padding: 0 1.15384615em;
  133.   border-right: 1px solid var(--VC-FG-3);
  134.   text-decoration: none;
  135.   color: var(--VC-FG-0);
  136.   -webkit-tap-highlight-color: transparent;
  137.   -webkit-touch-callout: none;
  138. }
  139. #__vconsole .vc-tabbar .vc-tab:active {
  140.   background-color: rgba(0, 0, 0, 0.15);
  141. }
  142. #__vconsole .vc-tabbar .vc-tab.vc-actived {
  143.   background-color: var(--VC-BG-1);
  144. }
  145. #__vconsole .vc-content {
  146.   background-color: var(--VC-BG-2);
  147.   overflow-x: hidden;
  148.   overflow-y: auto;
  149.   position: absolute;
  150.   top: 3.07692308em;
  151.   left: 0;
  152.   right: 0;
  153.   bottom: 3.07692308em;
  154.   -webkit-overflow-scrolling: touch;
  155.   margin-bottom: constant(safe-area-inset-bottom);
  156.   margin-bottom: env(safe-area-inset-bottom);
  157. }
  158. #__vconsole .vc-content.vc-has-topbar {
  159.   top: 5.46153846em;
  160. }
  161. #__vconsole .vc-topbar {
  162.   background-color: var(--VC-BG-1);
  163.   display: -webkit-box;
  164.   display: -webkit-flex;
  165.   display: -moz-box;
  166.   display: -ms-flexbox;
  167.   display: flex;
  168.   -webkit-box-orient: horizontal;
  169.   -webkit-box-direction: normal;
  170.   -webkit-flex-direction: row;
  171.   -moz-box-orient: horizontal;
  172.   -moz-box-direction: normal;
  173.   -ms-flex-direction: row;
  174.   flex-direction: row;
  175.   -webkit-flex-wrap: wrap;
  176.   -ms-flex-wrap: wrap;
  177.   flex-wrap: wrap;
  178.   width: 100%;
  179. }
  180. #__vconsole .vc-topbar .vc-toptab {
  181.   display: none;
  182.   -webkit-box-flex: 1;
  183.   -webkit-flex: 1;
  184.   -moz-box-flex: 1;
  185.   -ms-flex: 1;
  186.   flex: 1;
  187.   line-height: 2.30769231em;
  188.   padding: 0 1.15384615em;
  189.   border-bottom: 1px solid var(--VC-FG-3);
  190.   text-decoration: none;
  191.   text-align: center;
  192.   color: var(--VC-FG-0);
  193.   -webkit-tap-highlight-color: transparent;
  194.   -webkit-touch-callout: none;
  195. }
  196. #__vconsole .vc-topbar .vc-toptab.vc-toggle {
  197.   display: block;
  198. }
  199. #__vconsole .vc-topbar .vc-toptab:active {
  200.   background-color: rgba(0, 0, 0, 0.15);
  201. }
  202. #__vconsole .vc-topbar .vc-toptab.vc-actived {
  203.   border-bottom: 1px solid var(--VC-INDIGO);
  204. }
  205. #__vconsole .vc-logbox {
  206.   display: none;
  207.   position: relative;
  208.   min-height: 100%;
  209. }
  210. #__vconsole .vc-logbox i {
  211.   font-style: normal;
  212. }
  213. #__vconsole .vc-logbox .vc-log {
  214.   padding-bottom: 6em;
  215.   -webkit-tap-highlight-color: transparent;
  216. }
  217. #__vconsole .vc-logbox .vc-log:empty:before {
  218.   content: "Empty";
  219.   color: var(--VC-FG-1);
  220.   position: absolute;
  221.   top: 45%;
  222.   left: 0;
  223.   right: 0;
  224.   bottom: 0;
  225.   font-size: 1.15384615em;
  226.   text-align: center;
  227. }
  228. #__vconsole .vc-logbox .vc-item {
  229.   margin: 0;
  230.   padding: 0.46153846em 0.61538462em;
  231.   overflow: hidden;
  232.   line-height: 1.3;
  233.   border-bottom: 1px solid var(--VC-FG-3);
  234.   word-break: break-word;
  235. }
  236. #__vconsole .vc-logbox .vc-item-info {
  237.   color: var(--VC-PURPLE);
  238. }
  239. #__vconsole .vc-logbox .vc-item-debug {
  240.   color: var(--VC-YELLOW);
  241. }
  242. #__vconsole .vc-logbox .vc-item-warn {
  243.   color: var(--VC-ORANGE);
  244.   border-color: var(--VC-WARN-BORDER);
  245.   background-color: var(--VC-WARN-BG);
  246. }
  247. #__vconsole .vc-logbox .vc-item-error {
  248.   color: var(--VC-RED);
  249.   border-color: var(--VC-ERROR-BORDER);
  250.   background-color: var(--VC-ERROR-BG);
  251. }
  252. #__vconsole .vc-logbox .vc-log.vc-log-partly .vc-item {
  253.   display: none;
  254. }
  255. #__vconsole .vc-logbox .vc-log.vc-log-partly-log .vc-item-log,
  256. #__vconsole .vc-logbox .vc-log.vc-log-partly-info .vc-item-info,
  257. #__vconsole .vc-logbox .vc-log.vc-log-partly-warn .vc-item-warn,
  258. #__vconsole .vc-logbox .vc-log.vc-log-partly-error .vc-item-error {
  259.   display: block;
  260. }
  261. #__vconsole .vc-logbox .vc-item.hide {
  262.   display: none;
  263. }
  264. #__vconsole .vc-logbox .vc-item .vc-item-content {
  265.   margin-right: 4.61538462em;
  266.   display: inline-block;
  267. }
  268. #__vconsole .vc-logbox .vc-item .vc-item-repeat {
  269.   display: inline-block;
  270.   margin-right: 0.30769231em;
  271.   padding: 0 6.5px;
  272.   color: #D7E0EF;
  273.   background-color: #42597F;
  274.   border-radius: 8.66666667px;
  275. }
  276. #__vconsole .vc-logbox .vc-item.vc-item-error .vc-item-repeat {
  277.   color: #901818;
  278.   background-color: var(--VC-RED);
  279. }
  280. #__vconsole .vc-logbox .vc-item.vc-item-warn .vc-item-repeat {
  281.   color: #987D20;
  282.   background-color: #F4BD02;
  283. }
  284. #__vconsole .vc-logbox .vc-item .vc-item-code {
  285.   display: block;
  286.   white-space: pre-wrap;
  287.   overflow: auto;
  288.   position: relative;
  289. }
  290. #__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-input,
  291. #__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-output {
  292.   padding-left: 0.92307692em;
  293. }
  294. #__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-input:before,
  295. #__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-output:before {
  296.   content: "&#8250;";
  297.   position: absolute;
  298.   top: -0.23076923em;
  299.   left: 0;
  300.   font-size: 1.23076923em;
  301.   color: #6A5ACD;
  302. }
  303. #__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-output:before {
  304.   content: "&#8249;";
  305. }
  306. #__vconsole .vc-logbox .vc-item .vc-fold {
  307.   display: block;
  308.   overflow: auto;
  309.   -webkit-overflow-scrolling: touch;
  310. }
  311. #__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer {
  312.   display: block;
  313.   font-style: italic;
  314.   padding-left: 0.76923077em;
  315.   position: relative;
  316. }
  317. #__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer:active {
  318.   background-color: var(--VC-BG-COLOR-ACTIVE);
  319. }
  320. #__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer:before {
  321.   content: "";
  322.   position: absolute;
  323.   top: 0.30769231em;
  324.   left: 0.15384615em;
  325.   width: 0;
  326.   height: 0;
  327.   border: transparent solid 0.30769231em;
  328.   border-left-color: var(--VC-FG-1);
  329. }
  330. #__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer.vc-toggle:before {
  331.   top: 0.46153846em;
  332.   left: 0;
  333.   border-top-color: var(--VC-FG-1);
  334.   border-left-color: transparent;
  335. }
  336. #__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-inner {
  337.   display: none;
  338.   margin-left: 0.76923077em;
  339. }
  340. #__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-inner.vc-toggle {
  341.   display: block;
  342. }
  343. #__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-inner .vc-code-key {
  344.   margin-left: 0.76923077em;
  345. }
  346. #__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer .vc-code-key {
  347.   margin-left: 0;
  348. }
  349. #__vconsole .vc-logbox .vc-code-key {
  350.   color: var(--VC-CODE-KEY-FG);
  351. }
  352. #__vconsole .vc-logbox .vc-code-private-key {
  353.   color: var(--VC-CODE-PRIVATE-KEY-FG);
  354. }
  355. #__vconsole .vc-logbox .vc-code-function {
  356.   color: var(--VC-CODE-FUNC-FG);
  357.   font-style: italic;
  358. }
  359. #__vconsole .vc-logbox .vc-code-number,
  360. #__vconsole .vc-logbox .vc-code-boolean {
  361.   color: var(--VC-CODE-NUMBER-FG);
  362. }
  363. #__vconsole .vc-logbox .vc-code-string {
  364.   color: var(--VC-CODE-STR-FG);
  365. }
  366. #__vconsole .vc-logbox .vc-code-null,
  367. #__vconsole .vc-logbox .vc-code-undefined {
  368.   color: var(--VC-CODE-NULL-FG);
  369. }
  370. #__vconsole .vc-logbox .vc-cmd {
  371.   position: absolute;
  372.   height: 3.07692308em;
  373.   left: 0;
  374.   right: 0;
  375.   bottom: 41px;
  376.   border-top: 1px solid var(--VC-FG-3);
  377.   display: block!important;
  378. }
  379. #__vconsole .vc-logbox .vc-cmd.vc-filter {
  380.   bottom: 0;
  381. }
  382. #__vconsole .vc-logbox .vc-cmd .vc-cmd-input-wrap {
  383.   display: block;
  384.   height: 2.15384615em;
  385.   margin-right: 3.07692308em;
  386.   padding: 0.46153846em 0.61538462em;
  387. }
  388. #__vconsole .vc-logbox .vc-cmd .vc-cmd-input {
  389.   width: 100%;
  390.   border: none;
  391.   resize: none;
  392.   outline: none;
  393.   padding: 0;
  394.   font-size: 0.92307692em;
  395.   background-color: transparent;
  396.   color: var(--VC-FG-0);
  397. }
  398. #__vconsole .vc-logbox .vc-cmd .vc-cmd-input::-webkit-input-placeholder {
  399.   line-height: 2.15384615em;
  400. }
  401. #__vconsole .vc-logbox .vc-cmd .vc-cmd-btn {
  402.   position: absolute;
  403.   top: 0;
  404.   right: 0;
  405.   bottom: 0;
  406.   width: 3.07692308em;
  407.   border: none;
  408.   background-color: var(--VC-BG-0);
  409.   color: var(--VC-FG-0);
  410.   outline: none;
  411.   -webkit-touch-callout: none;
  412.   font-size: 1em;
  413. }
  414. #__vconsole .vc-logbox .vc-cmd .vc-cmd-btn:active {
  415.   background-color: rgba(0, 0, 0, 0.15);
  416. }
  417. #__vconsole .vc-logbox .vc-cmd .vc-cmd-prompted {
  418.   position: fixed;
  419.   width: 100%;
  420.   background-color: var(--VC-BG-3);
  421.   border: 1px solid var(--VC-FG-3);
  422.   overflow-x: scroll;
  423.   display: none;
  424. }
  425. #__vconsole .vc-logbox .vc-cmd .vc-cmd-prompted li {
  426.   list-style: none;
  427.   line-height: 30px;
  428.   padding: 0 0.46153846em;
  429.   border-bottom: 1px solid var(--VC-FG-3);
  430. }
  431. #__vconsole .vc-logbox .vc-group .vc-group-preview {
  432.   -webkit-touch-callout: none;
  433. }
  434. #__vconsole .vc-logbox .vc-group .vc-group-preview:active {
  435.   background-color: var(--VC-BG-COLOR-ACTIVE);
  436. }
  437. #__vconsole .vc-logbox .vc-group .vc-group-detail {
  438.   display: none;
  439.   padding: 0 0 0.76923077em 1.53846154em;
  440.   border-bottom: 1px solid var(--VC-FG-3);
  441. }
  442. #__vconsole .vc-logbox .vc-group.vc-actived .vc-group-detail {
  443.   display: block;
  444.   background-color: var(--VC-BG-1);
  445. }
  446. #__vconsole .vc-logbox .vc-group.vc-actived .vc-table-row {
  447.   background-color: var(--VC-BG-2);
  448. }
  449. #__vconsole .vc-logbox .vc-group.vc-actived .vc-group-preview {
  450.   background-color: var(--VC-BG-1);
  451. }
  452. #__vconsole .vc-logbox .vc-table .vc-table-row {
  453.   display: -webkit-box;
  454.   display: -webkit-flex;
  455.   display: -moz-box;
  456.   display: -ms-flexbox;
  457.   display: flex;
  458.   -webkit-box-orient: horizontal;
  459.   -webkit-box-direction: normal;
  460.   -webkit-flex-direction: row;
  461.   -moz-box-orient: horizontal;
  462.   -moz-box-direction: normal;
  463.   -ms-flex-direction: row;
  464.   flex-direction: row;
  465.   -webkit-flex-wrap: wrap;
  466.   -ms-flex-wrap: wrap;
  467.   flex-wrap: wrap;
  468.   overflow: hidden;
  469.   border-bottom: 1px solid var(--VC-FG-3);
  470. }
  471. #__vconsole .vc-logbox .vc-table .vc-table-row.vc-left-border {
  472.   border-left: 1px solid var(--VC-FG-3);
  473. }
  474. #__vconsole .vc-logbox .vc-table .vc-table-col {
  475.   -webkit-box-flex: 1;
  476.   -webkit-flex: 1;
  477.   -moz-box-flex: 1;
  478.   -ms-flex: 1;
  479.   flex: 1;
  480.   padding: 0.23076923em 0.30769231em;
  481.   border-left: 1px solid var(--VC-FG-3);
  482.   overflow: auto;
  483.   white-space: pre-wrap;
  484.   word-break: break-word;
  485.   /*white-space: nowrap;
  486.         text-overflow: ellipsis;*/
  487.   -webkit-overflow-scrolling: touch;
  488. }
  489. #__vconsole .vc-logbox .vc-table .vc-table-col:first-child {
  490.   border: none;
  491. }
  492. #__vconsole .vc-logbox .vc-table .vc-small .vc-table-col {
  493.   padding: 0 0.30769231em;
  494.   font-size: 0.92307692em;
  495. }
  496. #__vconsole .vc-logbox .vc-table .vc-table-col-2 {
  497.   -webkit-box-flex: 2;
  498.   -webkit-flex: 2;
  499.   -moz-box-flex: 2;
  500.   -ms-flex: 2;
  501.   flex: 2;
  502. }
  503. #__vconsole .vc-logbox .vc-table .vc-table-col-3 {
  504.   -webkit-box-flex: 3;
  505.   -webkit-flex: 3;
  506.   -moz-box-flex: 3;
  507.   -ms-flex: 3;
  508.   flex: 3;
  509. }
  510. #__vconsole .vc-logbox .vc-table .vc-table-col-4 {
  511.   -webkit-box-flex: 4;
  512.   -webkit-flex: 4;
  513.   -moz-box-flex: 4;
  514.   -ms-flex: 4;
  515.   flex: 4;
  516. }
  517. #__vconsole .vc-logbox .vc-table .vc-table-col-5 {
  518.   -webkit-box-flex: 5;
  519.   -webkit-flex: 5;
  520.   -moz-box-flex: 5;
  521.   -ms-flex: 5;
  522.   flex: 5;
  523. }
  524. #__vconsole .vc-logbox .vc-table .vc-table-col-6 {
  525.   -webkit-box-flex: 6;
  526.   -webkit-flex: 6;
  527.   -moz-box-flex: 6;
  528.   -ms-flex: 6;
  529.   flex: 6;
  530. }
  531. #__vconsole .vc-logbox .vc-table .vc-table-row-error {
  532.   border-color: var(--VC-ERROR-BORDER);
  533.   background-color: var(--VC-ERROR-BG);
  534. }
  535. #__vconsole .vc-logbox .vc-table .vc-table-row-error .vc-table-col {
  536.   color: var(--VC-RED);
  537.   border-color: var(--VC-ERROR-BORDER);
  538. }
  539. #__vconsole .vc-logbox .vc-table .vc-table-col-title {
  540.   font-weight: bold;
  541. }
  542. #__vconsole .vc-logbox.vc-actived {
  543.   display: block;
  544. }
  545. #__vconsole .vc-toolbar {
  546.   border-top: 1px solid var(--VC-FG-3);
  547.   line-height: 3em;
  548.   position: absolute;
  549.   left: 0;
  550.   right: 0;
  551.   bottom: 0;
  552.   display: -webkit-box;
  553.   display: -webkit-flex;
  554.   display: -moz-box;
  555.   display: -ms-flexbox;
  556.   display: flex;
  557.   -webkit-box-orient: horizontal;
  558.   -webkit-box-direction: normal;
  559.   -webkit-flex-direction: row;
  560.   -moz-box-orient: horizontal;
  561.   -moz-box-direction: normal;
  562.   -ms-flex-direction: row;
  563.   flex-direction: row;
  564. }
  565. #__vconsole .vc-toolbar .vc-tool {
  566.   display: none;
  567.   text-decoration: none;
  568.   color: var(--VC-FG-0);
  569.   width: 50%;
  570.   -webkit-box-flex: 1;
  571.   -webkit-flex: 1;
  572.   -moz-box-flex: 1;
  573.   -ms-flex: 1;
  574.   flex: 1;
  575.   text-align: center;
  576.   position: relative;
  577.   -webkit-touch-callout: none;
  578. }
  579. #__vconsole .vc-toolbar .vc-tool.vc-toggle,
  580. #__vconsole .vc-toolbar .vc-tool.vc-global-tool {
  581.   display: block;
  582. }
  583. #__vconsole .vc-toolbar .vc-tool:active {
  584.   background-color: rgba(0, 0, 0, 0.15);
  585. }
  586. #__vconsole .vc-toolbar .vc-tool:after {
  587.   content: " ";
  588.   position: absolute;
  589.   top: 0.53846154em;
  590.   bottom: 0.53846154em;
  591.   right: 0;
  592.   border-left: 1px solid var(--VC-FG-3);
  593. }
  594. #__vconsole .vc-toolbar .vc-tool-last:after {
  595.   border: none;
  596. }
  597. @supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) {
  598.   #__vconsole .vc-toolbar,
  599.   #__vconsole .vc-switch {
  600.     bottom: constant(safe-area-inset-bottom);
  601.     bottom: env(safe-area-inset-bottom);
  602.   }
  603. }
  604. #__vconsole.vc-toggle .vc-switch {
  605.   display: none;
  606. }
  607. #__vconsole.vc-toggle .vc-mask {
  608.   background: rgba(0, 0, 0, 0.6);
  609.   display: block;
  610. }
  611. #__vconsole.vc-toggle .vc-panel {
  612.   -webkit-transform: translate(0, 0);
  613.   transform: translate(0, 0);
  614. }
  615. @media (prefers-color-scheme: dark) {
  616.   #__vconsole:not([data-theme="light"]) {
  617.     --VC-BG-0: #191919;
  618.     --VC-BG-1: #1f1f1f;
  619.     --VC-BG-2: #232323;
  620.     --VC-BG-3: #2f2f2f;
  621.     --VC-BG-4: #606060;
  622.     --VC-BG-5: #2c2c2c;
  623.     --VC-FG-0: rgba(255, 255, 255, 0.8);
  624.     --VC-FG-HALF: rgba(255, 255, 255, 0.6);
  625.     --VC-FG-1: rgba(255, 255, 255, 0.5);
  626.     --VC-FG-2: rgba(255, 255, 255, 0.3);
  627.     --VC-FG-3: rgba(255, 255, 255, 0.05);
  628.     --VC-RED: #fa5151;
  629.     --VC-ORANGE: #c87d2f;
  630.     --VC-YELLOW: #cc9c00;
  631.     --VC-GREEN: #74a800;
  632.     --VC-LIGHTGREEN: #28b561;
  633.     --VC-BRAND: #07c160;
  634.     --VC-BLUE: #10aeff;
  635.     --VC-INDIGO: #1196ff;
  636.     --VC-PURPLE: #8183ff;
  637.     --VC-LINK: #7d90a9;
  638.     --VC-TEXTGREEN: #259c5c;
  639.     --VC-FG: white;
  640.     --VC-BG: black;
  641.     --VC-BG-COLOR-ACTIVE: #282828;
  642.     --VC-WARN-BG: #332700;
  643.     --VC-WARN-BORDER: #664e00;
  644.     --VC-ERROR-BG: #321010;
  645.     --VC-ERROR-BORDER: #642020;
  646.     --VC-DOM-TAG-NAME-COLOR: #5DB0D7;
  647.     --VC-DOM-ATTRIBUTE-NAME-COLOR: #9BBBDC;
  648.     --VC-DOM-ATTRIBUTE-VALUE-COLOR: #f29766;
  649.     --VC-CODE-KEY-FG: #e36eec;
  650.     --VC-CODE-PRIVATE-KEY-FG: #f4c5f7;
  651.     --VC-CODE-FUNC-FG: #556af2;
  652.     --VC-CODE-NUMBER-FG: #9980ff;
  653.     --VC-CODE-STR-FG: #e93f3b;
  654.     --VC-CODE-NULL-FG: #808080;
  655.   }
  656. }
  657. #__vconsole[data-theme="dark"] {
  658.   --VC-BG-0: #191919;
  659.   --VC-BG-1: #1f1f1f;
  660.   --VC-BG-2: #232323;
  661.   --VC-BG-3: #2f2f2f;
  662.   --VC-BG-4: #606060;
  663.   --VC-BG-5: #2c2c2c;
  664.   --VC-FG-0: rgba(255, 255, 255, 0.8);
  665.   --VC-FG-HALF: rgba(255, 255, 255, 0.6);
  666.   --VC-FG-1: rgba(255, 255, 255, 0.5);
  667.   --VC-FG-2: rgba(255, 255, 255, 0.3);
  668.   --VC-FG-3: rgba(255, 255, 255, 0.05);
  669.   --VC-RED: #fa5151;
  670.   --VC-ORANGE: #c87d2f;
  671.   --VC-YELLOW: #cc9c00;
  672.   --VC-GREEN: #74a800;
  673.   --VC-LIGHTGREEN: #28b561;
  674.   --VC-BRAND: #07c160;
  675.   --VC-BLUE: #10aeff;
  676.   --VC-INDIGO: #1196ff;
  677.   --VC-PURPLE: #8183ff;
  678.   --VC-LINK: #7d90a9;
  679.   --VC-TEXTGREEN: #259c5c;
  680.   --VC-FG: white;
  681.   --VC-BG: black;
  682.   --VC-BG-COLOR-ACTIVE: #282828;
  683.   --VC-WARN-BG: #332700;
  684.   --VC-WARN-BORDER: #664e00;
  685.   --VC-ERROR-BG: #321010;
  686.   --VC-ERROR-BORDER: #642020;
  687.   --VC-DOM-TAG-NAME-COLOR: #5DB0D7;
  688.   --VC-DOM-ATTRIBUTE-NAME-COLOR: #9BBBDC;
  689.   --VC-DOM-ATTRIBUTE-VALUE-COLOR: #f29766;
  690.   --VC-CODE-KEY-FG: #e36eec;
  691.   --VC-CODE-PRIVATE-KEY-FG: #f4c5f7;
  692.   --VC-CODE-FUNC-FG: #556af2;
  693.   --VC-CODE-NUMBER-FG: #9980ff;
  694.   --VC-CODE-STR-FG: #e93f3b;
  695.   --VC-CODE-NULL-FG: #808080;
  696. }
  697. </style>
  698. <style>
  699. /* color */
  700. .vcelm-node {
  701.   color: var(--VC-DOM-TAG-NAME-COLOR);
  702. }
  703. .vcelm-k {
  704.   color: var(--VC-DOM-ATTRIBUTE-NAME-COLOR);
  705. }
  706. .vcelm-v {
  707.   color: var(--VC-DOM-ATTRIBUTE-VALUE-COLOR);
  708. }
  709. /* layout */
  710. .vcelm-l {
  711.   padding-left: 8px;
  712.   position: relative;
  713.   word-wrap: break-word;
  714.   line-height: 1;
  715. }
  716. /*.vcelm-l.vcelm-noc {
  717.   padding-left: 0;
  718. }*/
  719. .vcelm-l.vc-toggle > .vcelm-node {
  720.   display: block;
  721. }
  722. .vcelm-l .vcelm-node:active {
  723.   background-color: var(--VC-BG-COLOR-ACTIVE);
  724. }
  725. .vcelm-l.vcelm-noc .vcelm-node:active {
  726.   background-color: transparent;
  727. }
  728. .vcelm-t {
  729.   white-space: pre-wrap;
  730.   word-wrap: break-word;
  731. }
  732. /* level */
  733. .vcelm-l .vcelm-l {
  734.   display: none;
  735. }
  736. .vcelm-l.vc-toggle > .vcelm-l {
  737.   margin-left: 4px;
  738.   display: block;
  739. }
  740. /* arrow */
  741. .vcelm-l:before {
  742.   content: "";
  743.   display: block;
  744.   position: absolute;
  745.   top: 6px;
  746.   left: 3px;
  747.   width: 0;
  748.   height: 0;
  749.   border: transparent solid 3px;
  750.   border-left-color: var(--VC-FG-1);
  751. }
  752. .vcelm-l.vc-toggle:before {
  753.   display: block;
  754.   top: 6px;
  755.   left: 0;
  756.   border-top-color: var(--VC-FG-1);
  757.   border-left-color: transparent;
  758. }
  759. .vcelm-l.vcelm-noc:before {
  760.   display: none;
  761. }
  762. </style>
  763. </head>
  764. <body style="background-color: black; user-select: none;">
  765. <script type="text/javascript">
  766. window.is_nwjc = true;
  767.                 var xhr = new XMLHttpRequest();
  768.                 xhr.responseType = 'arraybuffer';
  769.                 xhr.open('GET', 'js/mrd.min.bin');
  770.                 xhr.onload = function() {
  771.                         if(xhr.status < 400)
  772.                         {
  773.                                 nw.Window.get().evalNWBin(null, xhr.response);
  774.                         }
  775.                         window._setIntervalt = setInterval(function() {
  776.                                 if(window.onIndexCheckOK)
  777.                                 {
  778.                                         clearInterval(window._setIntervalt);
  779.                                         SceneManager.run(Scene_Boot);
  780.                                 }
  781.                         }, 100);
  782.                 };
  783.                 xhr.send();
  784. </script>
  785. <p id="ErrorPrinter" style="text-align: left; text-shadow: rgb(0, 0, 0) 1px 1px 3px; font-size: 20px; z-index: 99; position: absolute; margin: auto; top: 0px; left: 0px; right: 0px; bottom: 0px; width: 972px; height: 270px;"></p>
  786. <img align="right" style="padding: 100px 30px;">
  787. <canvas id="GameCanvas" width="1080" height="540" style="z-index: 1; position: absolute; margin: auto; top: 0px; left: 0px; right: 0px; bottom: 0px; width: 1080px; height: 540px; touch-action: none; cursor: inherit;"></canvas>
  788. <video id="GameVideo" playsinline width="1080" height="540" style="opacity: 0; z-index: 2; position: absolute; margin: auto; top: 0px; left: 0px; right: 0px; bottom: 0px; width: 1080px; height: 540px;"></video>
  789. <canvas id="UpperCanvas" width="1080" height="540" style="z-index: 3; position: absolute; margin: auto; top: 0px; left: 0px; right: 0px; bottom: 0px; width: 1080px; height: 540px; opacity: 0;"></canvas>
  790. <div style="padding: 0px; min-width: 95px; height: 30px; line-height: 30px; text-align: right; text-shadow: rgba(0, 0, 0, 0.5) 1px 1px 0px; color: rgb(255, 255, 255); position: absolute; z-index: 10; left: 5px; top: 5px; right: auto; bottom: auto; margin: 0px; display: none;">
  791. <div style="position: absolute; top: 0px; right: 0px; padding: 0px 5px; height: 40px; font-size: 24px; font-family: Consolas, "Andale Mono", monospace; z-index: 2; line-height: 40px;">
  792. 0
  793. </div>
  794. <div style="position: absolute; top: 0px; left: 0px; padding: 0px 5px; height: 40px; font-size: 12px; line-height: 42px; font-family: sans-serif; text-align: left; z-index: 2;">
  795. FPS
  796. </div>
  797. <div style="position: relative; height: 40px; z-index: 1; width: 119px;">
  798. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 0px; width: 5px; height: 0px;"></div>
  799. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 6px; width: 5px; height: 0px;"></div>
  800. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 12px; width: 5px; height: 0px;"></div>
  801. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 18px; width: 5px; height: 0px;"></div>
  802. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 24px; width: 5px; height: 0px;"></div>
  803. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 30px; width: 5px; height: 0px;"></div>
  804. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 36px; width: 5px; height: 0px;"></div>
  805. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 42px; width: 5px; height: 0px;"></div>
  806. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 48px; width: 5px; height: 0px;"></div>
  807. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 54px; width: 5px; height: 0px;"></div>
  808. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 60px; width: 5px; height: 0px;"></div>
  809. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 66px; width: 5px; height: 0px;"></div>
  810. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 72px; width: 5px; height: 0px;"></div>
  811. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 78px; width: 5px; height: 0px;"></div>
  812. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 84px; width: 5px; height: 0px;"></div>
  813. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 90px; width: 5px; height: 0px;"></div>
  814. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 96px; width: 5px; height: 0px;"></div>
  815. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 102px; width: 5px; height: 0px;"></div>
  816. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 108px; width: 5px; height: 0px;"></div>
  817. <div style="background: rgb(153, 153, 153); opacity: 0.5; position: absolute; bottom: 0px; right: 114px; width: 5px; height: 0px;"></div>
  818. </div>
  819. </div>
  820. <div id="modeTextBack" style="position: absolute; left: 5px; top: 5px; width: 119px; height: 58px; background: rgba(0, 0, 0, 0.2); z-index: 9; opacity: 0;">
  821. <div id="modeText" style="position: absolute; left: 0px; top: 41px; width: 119px; font-size: 12px; font-family: monospace; color: white; text-align: center; text-shadow: rgba(0, 0, 0, 0.5) 1px 1px 0px;">
  822. WebGL mode
  823. </div>
  824. </div>
  825. </body>
  826. <div id="__vconsole" class=" vc-toggle">
  827. <div class="vc-switch">
  828. vConsole
  829. </div>
  830. <div class="vc-mask" style="display: block;"></div>
  831. <div class="vc-panel" style="display: block;">
  832. <div class="vc-tabbar"></div>
  833. <div class="vc-topbar"></div>
  834. <div class="vc-content"></div>
  835. <div class="vc-toolbar"></div>
  836. </div>
  837. </div>
  838. </html>
复制代码
屏幕截图 2022-08-22 224943.png
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 527 天

[LV.9]以坛为家II

发表于 2022/8/28 13:20 | 显示全部楼层 |Google Chrome 73.0.3683.121|Windows 7
这就是大佬么
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2024/12/23 12:43 , Processed in 0.111951 second(s), 21 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表