diff --git a/data/emu-main.js b/data/emu-main.js
index 30ae8ed..2226787 100644
--- a/data/emu-main.js
+++ b/data/emu-main.js
@@ -1478,7 +1478,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (0x4 === _0x52e6f3.data.t && _0x52e6f3.data.total > 0x0) {
var _0x163fc4 = Math.floor(_0x52e6f3.data.current / _0x52e6f3.data.total * 0x64),
_0x5448a3 = _0x52e6f3.data.name || '';
- _0x163fc4 <= 0x64 && _0x163fc4 > 0x0 && (_0x1cfda7.innerHTML = 'Decompress Game Data ' .concat(_0x5448a3, ' ').concat(_0x163fc4, '%'));
+ _0x163fc4 <= 0x64 && _0x163fc4 > 0x0 && (_0x1cfda7.innerHTML = _0xa88a13.localization('Decompress Game Data')+' ' .concat(_0x5448a3, ' ').concat(_0x163fc4, '%'));
}
}
},
@@ -1530,7 +1530,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x139f1c = _0x154dc5[_0x154dc5.length - 0x1];
_0x139f1c.indexOf('?') > -0x1 && (_0x139f1c = _0x139f1c.substr(0x0, _0x139f1c.indexOf('?')));
_0x139f1c.split('.').pop();
- _0x2c1832.innerHTML = 'Download Game Data', ['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_0x17edbf.system) && _0x17edbf.config.gameParentUrl && (_0x2c1832.innerHTML += ' (2/2)'), _0x17edbf.config.gamePatchUrl && (_0x2c1832.innerHTML += ' (2/2)');
+ _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data'), ['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_0x17edbf.system) && _0x17edbf.config.gameParentUrl && (_0x2c1832.innerHTML += ' (2/2)'), _0x17edbf.config.gamePatchUrl && (_0x2c1832.innerHTML += ' (2/2)');
new Promise(async function(resolve, reject) {
if (! _0x3cf3cf.startsWith('blob:')) {
resolve(await _0x550f17.a.head(_0x3cf3cf, {}))
@@ -1547,7 +1547,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x550f17.a.get(_0x3cf3cf, {
'onDownloadProgress': function(_0x4e7133) {
var _0x13b999 = _0x4e7133.total ? '' .concat(Math.floor(_0x4e7133.loaded / _0x4e7133.total * 0x64), '%') : '';
- ['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_0x17edbf.system) && _0x17edbf.config.gameParentUrl ? _0x2c1832.innerHTML = 'Download Game Data (2/2) ' .concat(_0x13b999) : _0x17edbf.config.gamePatchUrl ? _0x2c1832.innerHTML = 'Download Game Data (2/2) ' .concat(_0x13b999) : _0x2c1832.innerHTML = 'Download Game Data ' .concat(_0x13b999);
+ ['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_0x17edbf.system) && _0x17edbf.config.gameParentUrl ? _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' (2/2) ' .concat(_0x13b999) : _0x17edbf.config.gamePatchUrl ? _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' (2/2) ' .concat(_0x13b999) : _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' ' .concat(_0x13b999);
},
'responseType': 'arraybuffer'
}).then(function(_0x22a1f4) {
@@ -1587,7 +1587,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
});
_0x3512e9(_0x139f1c, _0x17edbf);
}).catch(function(_0x2e4d62) {
- console.log(_0x2e4d62), _0x2c1832.innerHTML = 'Network Error';
+ console.log(_0x2e4d62), _0x2c1832.innerHTML = ''+_0xa88a13.localization('Network Error')+'';
});
};
_0x1ffb98.db ? _0x1ffb98.get(_0x107e8a, function(_0x5afc4a) {
@@ -1611,7 +1611,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
else _0x43a689();
}) : _0x43a689();
}).catch(function(_0x5ec6be) {
- _0x2c1832.innerHTML = 'Network Error';
+ _0x2c1832.innerHTML = ''+_0xa88a13.localization('Network Error')+'';
});
},
_0x139f68 = function() {
@@ -1622,9 +1622,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x179b43 = _0x227b23[_0x227b23.length - 0x1];
_0x179b43.indexOf('?') > -0x1 && (_0x179b43 = _0x179b43.substr(0x0, _0x179b43.indexOf('?')));
_0x179b43.split('.').pop();
- _0x2591d9.innerHTML = 'Download Game Data (1/2)', _0x550f17.a.get(_0x5c896f, {
+ _0x2591d9.innerHTML = _0xa88a13.localization('Download Game Data')+' (1/2)', _0x550f17.a.get(_0x5c896f, {
'onDownloadProgress': function(_0x3da9ab) {
- _0x2591d9.innerHTML = 'Download Game Data (1/2) ';
+ _0x2591d9.innerHTML = _0xa88a13.localization('Download Game Data')+' (1/2) ';
var _0x17edbf = _0x3da9ab.total ? '' .concat(Math.floor(_0x3da9ab.loaded / _0x3da9ab.total * 0x64), '%') : '';
_0x2591d9.innerHTML += _0x17edbf;
},
@@ -1644,7 +1644,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (0x4 === _0x36004e.data.t && _0x36004e.data.total > 0x0) {
var _0x1097ca = Math.floor(_0x36004e.data.current / _0x36004e.data.total * 0x64),
_0x95ac83 = _0x36004e.data.name || '';
- _0x1097ca <= 0x64 && _0x1097ca > 0x0 && (_0xf6806b.innerHTML = 'Decompress Game Patch ' .concat(_0x95ac83, ' ').concat(_0x1097ca, '%'));
+ _0x1097ca <= 0x64 && _0x1097ca > 0x0 && (_0xf6806b.innerHTML = _0xa88a13.localization('Decompress Game Patch')+' ' .concat(_0x95ac83, ' ').concat(_0x1097ca, '%'));
}
}
}),
@@ -1660,7 +1660,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}), _0x4c332a = true), _0x4c332a || (_0x468801 += _0x1097ca.length, _0x4d7024.gamePatch = '/' .concat(_0xe531f0), _0x4d7024._FS.createDataFile('/', _0xe531f0, _0x1097ca, true, !0x1), _0x5048db());
}(_0x179b43, _0x39a81f);
}).catch(function(_0x314293) {
- console.log(_0x314293), _0x2591d9.innerHTML = 'Network Error';
+ console.log(_0x314293), _0x2591d9.innerHTML = ''+_0xa88a13.localization('Network Error')+'';
});
} else _0x5048db();
},
@@ -1673,7 +1673,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0xa1889f = _0x71bb4d[_0x71bb4d.length - 0x1];
_0xa1889f.indexOf('?') > -0x1 && (_0xa1889f = _0xa1889f.substr(0x0, _0xa1889f.indexOf('?')));
_0xa1889f.split('.').pop();
- _0x2c1832.innerHTML = 'Download Game Data (1/2)', _0x17edbf.config.gamePatchUrl && (_0x2c1832.innerHTML = 'Download Game Data (1/3)'), _0x550f17.a.head(_0x5a21f7, {}).then(function(_0x35c23a) {
+ _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' (1/2)', _0x17edbf.config.gamePatchUrl && (_0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' (1/3)'), _0x550f17.a.head(_0x5a21f7, {}).then(function(_0x35c23a) {
var _0x17edbf = _0x35c23a.headers['content-length'],
_0x500ba1 = _0x35c23a.headers['content-type'],
_0x316472 = (_0x35c23a.headers['last-modified'], '' .concat(_0x1143c5, '-').concat(_0xa1889f)),
@@ -1681,7 +1681,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x550f17.a.get(_0x5a21f7, {
'onDownloadProgress': function(_0x5e449f) {
var _0x17edbf = _0x5e449f.total ? '' .concat(Math.floor(_0x5e449f.loaded / _0x5e449f.total * 0x64), '%') : '';
- _0x2c1832.innerHTML = 'Download Game Data (1/2) ' .concat(_0x17edbf);
+ _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' (1/2) ' .concat(_0x17edbf);
},
'responseType': 'arraybuffer'
}).then(function(_0x191007) {
@@ -1725,7 +1725,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
console.log(_0x125736);
}
}).catch(function(_0x516cc3) {
- console.log(_0x516cc3), _0x2c1832.innerHTML = 'Network Error';
+ console.log(_0x516cc3), _0x2c1832.innerHTML = ''+_0xa88a13.localization('Network Error')+'';
});
};
_0x1ffb98.db ? _0x1ffb98.get(_0x316472, function(_0x3e612b) {
@@ -1745,7 +1745,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
else _0x31f098();
}) : _0x31f098();
}).catch(function(_0x20f2e3) {
- _0x2c1832.innerHTML = 'Network Error';
+ _0x2c1832.innerHTML = ''+_0xa88a13.localization('Network Error')+'';
});
} else _0x139f68();
},
@@ -1831,14 +1831,14 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'data': _0x17edbf
}), _0x57d85d(_0x103241, _0x17edbf);
}).catch(function(_0x58e374) {
- _0x1f8424.innerHTML = 'Network Error';
+ _0x1f8424.innerHTML = ''+_0xa88a13.localization('Network Error')+'';
});
};
_0xa884ea.db ? _0xa884ea.get(_0x51bfef, function(_0x5cac21) {
_0x5cac21 && _0x5cac21.filename === _0x103241 && _0x5cac21.filesize - _0x8e30bf == 0x0 && _0x5cac21.filetype === _0x14309b ? _0x57d85d(_0x5cac21.filename, _0x5cac21.data) : _0x574747();
}) : _0x574747();
}).catch(function(_0x4f39c1) {
- _0x1f8424.innerHTML = 'Network Error';
+ _0x1f8424.innerHTML = ''+_0xa88a13.localization('Network Error')+'';
});
} else _0x452592();
},
@@ -1887,7 +1887,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x58b5a7 = _0x17edbf.split('.').pop();
_0x4d7024.coreFileData[_0x17edbf] = _0x3f49ec.data.data, 'js' !== _0x58b5a7 || _0x17edbf.includes('.worker.js') || (_0x247459 = _0x3f49ec.data.data), 'mem' === _0x58b5a7 && (_0x4d7024.memData = _0x3f49ec.data.data), 'wasm' === _0x58b5a7 && (_0x4d7024.wasmData = _0x3f49ec.data.data);
}
- 0x4 === _0x3f49ec.data.t && _0x3f49ec.data.total > 0x0 && (_0x2c1832.innerHTML = 'Decompress Game Core ' .concat(Math.floor(_0x3f49ec.data.current / _0x3f49ec.data.total * 0x64), '%'));
+ 0x4 === _0x3f49ec.data.t && _0x3f49ec.data.total > 0x0 && (_0x2c1832.innerHTML = _0xa88a13.localization('Decompress Game Core')+' ' .concat(Math.floor(_0x3f49ec.data.current / _0x3f49ec.data.total * 0x64), '%'));
}
};
_0xa24f60(_0x17edbf).then(function(_0x48c633) {
@@ -1899,7 +1899,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
function() {
var _0x3787ba = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p1)),
_0x2c1832 = _0xa88a13;
- _0x3787ba.innerHTML = 'Loading...';
+ _0x3787ba.innerHTML = _0x2c1832.localization('Loading')+'...';
var _0x1c9c57 = setInterval(function() {
if (true === _0x528f2b && true === _0x547484 && true === _0x5e24fa) {
window.Module = {
@@ -1951,7 +1951,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x550f17.a.get(path, {
'onDownloadProgress': function(_0x117e6b) {
var _0x55a075 = _0x117e6b.total ? '' .concat(Math.floor(_0x117e6b.loaded / _0x117e6b.total * 0x64), '%') : '';
- _0x3787ba.innerHTML = 'Download Game Core ' .concat(_0x55a075);
+ _0x3787ba.innerHTML = _0x2c1832.localization('Download Game Core')+' ' .concat(_0x55a075);
},
'responseType': 'arraybuffer'
}).then(function(_0x5eb80b) {
@@ -1970,7 +1970,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
}).catch(function(_0x2e06c8) {
- _0x3787ba.innerHTML = 'Network Error';
+ _0x3787ba.innerHTML = ''+_0x2c1832.localization('Network Error')+'';
});
};
_0x550f17.a.get(_0xa88a13, {}).then(function(_0x578a2b) {
@@ -1997,11 +1997,11 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if ('mame' == _0x2c1832.system) {
var data = _0x2c1832.mameCore;
if (! data || data === null || data.split('|').length !== 2) {
- _0x3787ba.innerHTML = 'Missing mame config';
+ _0x3787ba.innerHTML = ''+_0x2c1832.localization('Missing mame config')+'';
return;
}
var _0x3787ba = data.split('|');
- _0x4d7024.coreFileName = '' .concat(_0x2c1832.system, '-').concat(_0x3787ba[0x0]), _0x5b1dcd = '1' === _0x3787ba[0x1], _0x1e2c68.element(_0x2c1832.elements.buttons.saveState) && _0x132da7(_0x2c1832.elements.buttons.saveState, !_0x5b1dcd), _0x1e2c68.element(_0x2c1832.elements.buttons.loadState) && _0x132da7(_0x2c1832.elements.buttons.loadState, !_0x5b1dcd), _0x132da7(_0x2593da.contextMenu.querySelectorAll('ul li').item(0x2), !_0x5b1dcd), _0x132da7(_0x2593da.contextMenu.querySelectorAll('ul li').item(0x3), !_0x5b1dcd), _0x3787ba[0x0] ? (_0x2d904a.wasm && _0x3e4345 ? (_0x2458d5 = '' .concat(_0x2c1832.system, '-').concat(_0x3787ba[0x0], '-wasm.data'), _0x31a5b3 = true) : (_0x3787ba.innerHTML = 'Webassembly support is not detected in this browser', _0x2458d5 = ''), _0x2458d5 && (_0x24de8d.db ? _0x24de8d.get(_0x2458d5, function(_0x655c87) {
+ _0x4d7024.coreFileName = '' .concat(_0x2c1832.system, '-').concat(_0x3787ba[0x0]), _0x5b1dcd = '1' === _0x3787ba[0x1], _0x1e2c68.element(_0x2c1832.elements.buttons.saveState) && _0x132da7(_0x2c1832.elements.buttons.saveState, !_0x5b1dcd), _0x1e2c68.element(_0x2c1832.elements.buttons.loadState) && _0x132da7(_0x2c1832.elements.buttons.loadState, !_0x5b1dcd), _0x132da7(_0x2593da.contextMenu.querySelectorAll('ul li').item(0x2), !_0x5b1dcd), _0x132da7(_0x2593da.contextMenu.querySelectorAll('ul li').item(0x3), !_0x5b1dcd), _0x3787ba[0x0] ? (_0x2d904a.wasm && _0x3e4345 ? (_0x2458d5 = '' .concat(_0x2c1832.system, '-').concat(_0x3787ba[0x0], '-wasm.data'), _0x31a5b3 = true) : (_0x3787ba.innerHTML = ''+_0x2c1832.localization('Webassembly support is not detected in this browser')+'', _0x2458d5 = ''), _0x2458d5 && (_0x24de8d.db ? _0x24de8d.get(_0x2458d5, function(_0x655c87) {
if (_0x655c87 && _0x655c87.version === _0x124167) {
if (_0xc6823.coreVer === 2) {
_0x4f0fcc(_0x655c87.data);
@@ -2011,7 +2011,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x4f0fcc(_0x3787ba);
}
} else _0x3641d6(_0x2458d5, _0x124167);
- }) : _0x3641d6(_0x2458d5, _0x124167))) : _0x3787ba.innerHTML = 'Unsupported Game';
+ }) : _0x3641d6(_0x2458d5, _0x124167))) : _0x3787ba.innerHTML = ''+_0x2c1832.localization('Unsupported Game')+'';
} else {
_0x2458d5 = false;
var type;
@@ -2031,7 +2031,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
'undefined' != typeof EJS_CUSTOM_COREFILE && (_0x2458d5 = EJS_CUSTOM_COREFILE);
if (_0x2458d5 !== true) {
- _0x3787ba.innerHTML = 'Please upgrade your browser to the latest version';
+ _0x3787ba.innerHTML = ''+_0x2c1832.localization('Please upgrade your browser to the latest version')+'';
return;
}
if (_0x2c1832.coreVer === 2) {
@@ -2055,7 +2055,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x254bc2 || _0x1e2c68.element(_0x2c1832.elements.buttons.netplay) && _0x132da7(_0x2c1832.elements.buttons.netplay, true), _0x1e2c68.element(_0x2c1832.elements.buttons.saveState) && _0x132da7(_0x2c1832.elements.buttons.saveState, !_0x5b1dcd), _0x1e2c68.element(_0x2c1832.elements.buttons.loadState) && _0x132da7(_0x2c1832.elements.buttons.loadState, !_0x5b1dcd), _0x132da7(_0x2593da.contextMenu.querySelectorAll('ul li').item(0x2), !_0x5b1dcd), _0x132da7(_0x2593da.contextMenu.querySelectorAll('ul li').item(0x3), !_0x5b1dcd);
_0xc6823.setStatesSupported(_0x5b1dcd);
}).catch(function(_0x2d06a9) {
- _0x3787ba.innerHTML = 'Network Error';
+ _0x3787ba.innerHTML = ''+_0x2c1832.localization('Network Error')+'';
}), clearInterval(_0x1c9c57), _0x4d7024.romdb = _0x4e171c;
}
}, 0x1f4);
@@ -2689,10 +2689,10 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
},
'setGamepadDialog': function() {
var _0xa88a13 = this;
- _0xa88a13.elements.dialogs.gamepad.innerHTML = '\n
\n
\n
Control Settings
\n \n \n
\n
\n
\n
\n \n
\n
\n '
+ _0xa88a13.elements.dialogs.gamepad.innerHTML = '\n \n
\n
'+_0xa88a13.localization('Control Settings')+'
\n \n \n
\n
\n
\n
\n \n
\n
\n '
- var _0x17edbf = '\n \n
\n
\n
Connected gamepad: n/a
\n
\n
\n
\n
\n
\n
'),
- _0x2c1832 = '\n ')
+ var _0x17edbf = '\n \n
\n
\n
Connected gamepad: n/a
\n
\n
\n
\n
\n
'+_0xa88a13.localization('Gamepad')+'
\n
'+_0xa88a13.localization('Keyboard')+'
\n
\n
\n
\n
\n
'),
+ _0x2c1832 = '\n ')
if ('nes' === _0xa88a13.system) {
var _0x48ee51 = {
0: 'B',
@@ -2703,9 +2703,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
6: 'LEFT',
7: 'RIGHT',
8: 'A',
- 24: 'QUICK SAVE STATE',
- 25: 'QUICK LOAD STATE',
- 26: 'CHANGE STATE SLOT'
+ 24: _0xa88a13.localization('QUICK SAVE STATE'),
+ 25: _0xa88a13.localization('QUICK LOAD STATE'),
+ 26: _0xa88a13.localization('CHANGE STATE SLOT')
}
} else if ('snes' === _0xa88a13.system) {
var _0x48ee51 = {
@@ -2721,9 +2721,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
9: 'X',
10: 'L',
11: 'R',
- 24: 'QUICK SAVE STATE',
- 25: 'QUICK LOAD STATE',
- 26: 'CHANGE STATE SLOT'
+ 24: _0xa88a13.localization('QUICK SAVE STATE'),
+ 25: _0xa88a13.localization('QUICK LOAD STATE'),
+ 26: _0xa88a13.localization('CHANGE STATE SLOT')
};
} else if ('n64' === _0xa88a13.system) {
var _0x48ee51 = {
@@ -2745,9 +2745,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
22: 'R STICK DOWN',
21: 'R STICK LEFT',
20: 'R STICK RIGHT',
- 24: 'QUICK SAVE STATE',
- 25: 'QUICK LOAD STATE',
- 26: 'CHANGE STATE SLOT'
+ 24: _0xa88a13.localization('QUICK SAVE STATE'),
+ 25: _0xa88a13.localization('QUICK LOAD STATE'),
+ 26: _0xa88a13.localization('CHANGE STATE SLOT')
};
} else if ('nds' === _0xa88a13.system) {
var _0x48ee51 = {
@@ -2764,9 +2764,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
10: 'L',
11: 'R',
14: 'Microphone',
- 24: 'QUICK SAVE STATE',
- 25: 'QUICK LOAD STATE',
- 26: 'CHANGE STATE SLOT'
+ 24: _0xa88a13.localization('QUICK SAVE STATE'),
+ 25: _0xa88a13.localization('QUICK LOAD STATE'),
+ 26: _0xa88a13.localization('CHANGE STATE SLOT')
};
} else {
var _0x48ee51 = {
@@ -2794,13 +2794,13 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
22: 'R STICK DOWN',
21: 'R STICK LEFT',
20: 'R STICK RIGHT',
- 24: 'QUICK SAVE STATE',
- 25: 'QUICK LOAD STATE',
- 26: 'CHANGE STATE SLOT'
+ 24: _0xa88a13.localization('QUICK SAVE STATE'),
+ 25: _0xa88a13.localization('QUICK LOAD STATE'),
+ 26: _0xa88a13.localization('CHANGE STATE SLOT')
};
}
if (['arcade', 'mame'].includes(_0xa88a13.system)) {
- _0x48ee51[2] = 'INSERT COIN'
+ _0x48ee51[2] = _0xa88a13.localization('INSERT COIN');
}
if (_0xa88a13.statesSupported === false) {
delete _0x48ee51[24];
@@ -2895,16 +2895,16 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x4a6f6f = _0x2c1832.getAttribute('data-label');
_0x132da7(_0x11b11a, !0x1), _0x11b11a.setAttribute('data-id', _0x4e649c), _0x11b11a.setAttribute('data-index', _0x431719);
var _0x179623 = '[ ' .concat(_0x4a6f6f, ' ]');
- _0x378b5c.gamepad.gamepads[_0x431719] && _0x4e649c < 0x10 ? _0x179623 += '
Gamepad:' .concat(_0x378b5c.gamepad.gamepads[_0x431719].id, '
Press keyboard or gamepad
Press escape (esc) to clear') : _0x179623 += '
Press keyboard
Press escape (esc) to clear', _0x11b11a.querySelector('.' .concat(_0x378b5c.classNames['key-setting-popup'])).innerHTML = _0x179623, _0x1e1d79.stopPropagation();
+ _0x378b5c.gamepad.gamepads[_0x431719] && _0x4e649c < 0x10 ? _0x179623 += '
Gamepad:' .concat(_0x378b5c.gamepad.gamepads[_0x431719].id, '
'+_0xa88a13.localization('Press keyboard or gamepad')+'
'+_0xa88a13.localization('Press escape (esc) to clear')) : _0x179623 += '
Press keyboard
'+_0xa88a13.localization('Press escape (esc) to clear'), _0x11b11a.querySelector('.' .concat(_0x378b5c.classNames['key-setting-popup'])).innerHTML = _0x179623, _0x1e1d79.stopPropagation();
});
});
},
'setCacheDialog': function() {
var _0xa88a13 = this;
- _0xa88a13.elements.dialogs.cache.innerHTML = '\n \n
\n
Cache Manager
\n \n
\n\n
\n
\n
\n '), _0x1093f4.call(this, _0xa88a13.elements.dialogs.cache.querySelector('.' .concat(_0x378b5c.classNames['btn-cancel'])), 'click', function(_0x5d6721) {
+ _0xa88a13.elements.dialogs.cache.innerHTML = '\n \n
\n
'+_0xa88a13.localization('Cache Manager')+'
\n \n
\n\n
\n
\n
\n '), _0x1093f4.call(this, _0xa88a13.elements.dialogs.cache.querySelector('.' .concat(_0x378b5c.classNames['btn-cancel'])), 'click', function(_0x5d6721) {
return _0x132da7(_0xa88a13.elements.dialogs.cache, true), _0xa88a13.elements.container.focus(), _0x5d6721.stopPropagation(), !0x1;
}), _0x1093f4.call(this, _0xa88a13.elements.dialogs.cache.querySelector('.' .concat(_0x378b5c.classNames['dialog-title'], ' a')), 'click', function(_0x46992d) {
- return _0x27f4c4.romdb && (_0x27f4c4.romdb.clear(), _0xa88a13.elements.dialogs.cache.querySelector('.' .concat(_0x378b5c.classNames['dialog-content'])).innerHTML = 'Empty
'), _0x46992d.stopPropagation(), !0x1;
+ return _0x27f4c4.romdb && (_0x27f4c4.romdb.clear(), _0xa88a13.elements.dialogs.cache.querySelector('.' .concat(_0x378b5c.classNames['dialog-content'])).innerHTML = ''+_0xa88a13.localization('Empty')+'
'), _0x46992d.stopPropagation(), !0x1;
});
},
'showLoading': function(_0x108b55) {
@@ -2916,12 +2916,12 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x4d8495.close(), _0x132da7(this.elements.dialogs.loading, true);
},
'setLoadingDialog': function() {
- this.elements.dialogs.loading && (this.elements.dialogs.loading.innerHTML = '\n '));
+ this.elements.dialogs.loading && (this.elements.dialogs.loading.innerHTML = '\n \n
\n
\n '+this.localization('Loading')+'...\n
\n
\n
'));
},
'setCheatDialog': function() {
var _0xa88a13 = this;
if (_0xa88a13.elements.dialogs.cheat) {
- _0xa88a13.elements.dialogs.cheat.innerHTML = '\n \n\n \n\n \n
\n
\n \n
\n\n \n Code
\n
\n Description
\n
\n\n \n \n
\n
\n
\n ');
+ _0xa88a13.elements.dialogs.cheat.innerHTML = '\n \n\n \n\n \n
\n
\n \n
\n\n \n '+_0xa88a13.localization('Code')+'
\n
\n '+_0xa88a13.localization('Description')+'
\n
\n\n \n \n
\n
\n
\n ');
var _0x17edbf = _0xa88a13.elements.dialogs.cheat.querySelector('#modal-85cd7a1c543a484b');
_0x1093f4.call(this, _0xa88a13.elements.dialogs.cheat.querySelector('.' .concat(_0x378b5c.classNames['cheats-add'])), 'click', function(_0x2a74b5) {
return _0x4d8495.show('modal-85cd7a1c543a484b', {
@@ -2984,7 +2984,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
var _0xa88a13 = this,
_0x17edbf = this;
if (_0x17edbf.elements.dialogs.netplay) {
- _0x17edbf.elements.dialogs.netplay.innerHTML = '\n \n
\n
Netplay
\n \n
\n
\n
Rooms\n
\n \n \n Room Name | \n Players | \n | \n
\n \n \n \n | \n | \n | \n
\n \n
\n
\n\n
\n
Room Name\n
Password:
\n
\n \n \n Player | \n Name | \n | \n
\n \n \n \n 1 | \n Name 1 | \n | \n
\n \n 2 | \n Name 2 | \n | \n
\n \n 3 | \n Name 3 | \n | \n
\n \n 4 | \n Name 4 | \n | \n
\n \n
\n
\n
\n
\n
\n\n \n \n
\n
\n \n
\n\n \n Player Name
\n
\n\n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n '), _0x1093f4.call(this, _0x17edbf.elements.dialogs.netplay.querySelector('.' .concat(_0x378b5c.classNames['btn-cancel'])), 'click', function(_0x3d4554) {
+ _0x17edbf.elements.dialogs.netplay.innerHTML = '\n \n
\n
'+_0x17edbf.localization('Netplay')+'
\n \n
\n
\n
'+_0x17edbf.localization('Rooms')+'\n
\n \n \n '+_0x17edbf.localization('Room Name')+' | \n '+_0x17edbf.localization('Players')+' | \n | \n
\n \n \n \n | \n | \n | \n
\n \n
\n
\n\n
\n
'+_0x17edbf.localization('Room Name')+'\n
'+_0x17edbf.localization('Password')+':
\n
\n \n \n '+_0x17edbf.localization('Player')+' | \n '+_0x17edbf.localization('Name')+' | \n | \n
\n \n \n \n 1 | \n '+_0x17edbf.localization('Name')+' 1 | \n | \n
\n \n 2 | \n '+_0x17edbf.localization('Name')+' 2 | \n | \n
\n \n 3 | \n '+_0x17edbf.localization('Name')+' 3 | \n | \n
\n \n 4 | \n '+_0x17edbf.localization('Name')+' 4 | \n | \n
\n \n
\n
\n
\n
\n
\n\n \n \n
\n
\n \n
\n\n \n '+_0x17edbf.localization('Player Name')+'
\n
\n\n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n '), _0x1093f4.call(this, _0x17edbf.elements.dialogs.netplay.querySelector('.' .concat(_0x378b5c.classNames['btn-cancel'])), 'click', function(_0x3d4554) {
return _0x132da7(_0x17edbf.elements.dialogs.netplay, true), _0x378b5c.disableControl(!0x1), _0x378b5c.stopLoadRooms(), _0x3d4554.stopPropagation(), _0x17edbf.elements.container.focus(), !0x1;
}), window.setInterval(function() {
var _0xa88a13 = '';
@@ -3651,13 +3651,13 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}), '">\n SELECT
\n '+_0xa88a13.localization('Select')+'
\n START
\n '+_0xa88a13.localization('Start')+'
\n MENU
\n \n '+_0xa88a13.localization('Menu')+'
\n \n \n
Empty
';
- } else _0x3360eb.innerHTML = '
Empty
';
+ }), _0x275730.appendChild(_0x1ab9e9), _0x3360eb.appendChild(_0x275730)) : _0x3360eb.innerHTML = '
'+_0xa88a13.localization('Empty')+'
';
+ } else _0x3360eb.innerHTML = '
'+_0xa88a13.localization('Empty')+'
';
}, function() {});
}
return false;
@@ -5906,81 +6007,102 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
return path
}
- if (function(_0x154660, _0x15626f) {
- if (!(_0x154660 instanceof _0x15626f)) throw new TypeError('Cannot call a class as a function');
- }(this, _0x6954aa),
- this.version = _0x3d61f9.a,
- this.system = '',
- this.adUrl = null,
- this.gameName = null,
- this.loadStateOnStart = false,
- this.statesSupported = true,
- this.listUrl = 'https://ws.emulatorjs.com/',
- this.socketUrl = 'wss://ws.emulatorjs.com/',
- this.coreVer = 2, // 2 = beta cores, 1 = old cores
- this.mameCore = null,
- this.startOnLoad = false,
- this.dataPath = '',
- this.customPaths = null,
- this.hash = '',
- this.lightgun = false,
- this.mouse = false,
- this.multitap = false,
- this.ready = false,
- this.paused = true,
- this.started = !0x1,
- this.touch = _0x2d904a.touch,
- this.game = _0x28cce1,
- _0x1e2c68.string(this.game) && (this.game = document.querySelectorAll(this.game)),
- (window.jQuery && this.game instanceof jQuery || _0x1e2c68.nodeList(this.game) || _0x1e2c68.array(this.game)) && (this.game = this.game[0x0]),
- this.game = this.game,
- this.game.innerHTML = '',
- this.config = _0x5dc0c0({}, _0x39ca5e, _0x6954aa.defaults, _0x2ba0e6 || {}),
- this.lightgun = this.config.lightgun,
- this.loadStateOnStart = this.config.loadStateOnStart || false,
- this.adUrl = this.config.adUrl || null,
- this.gameName = this.config.gameName || null,
- this.mouse = this.config.mouse,
- this.multitap = this.config.multitap,
- this.cheats = this.config.cheats,
- this.cheats || (this.cheats = []),
- this.listUrl = this.config.netplayUrl || 'https://ws.emulatorjs.com/',
- this.socketUrl = this.config.netplayUrl || 'wss://ws.emulatorjs.com/',
- this.mameCore = this.config.mameCore || null,
- this.color = this.config.color,
- this.startOnLoad = this.config.startOnLoad || false,
- this.statesSupported = this.config.statesSupported || true,
- this.customPaths = function(paths) {
- if (! paths) return null;
- var newPaths = {};
- for (var k in paths) {
- if (typeof paths[k] == 'string') {
- newPaths[k] = _0x2136bc(paths[k]);
- }
+ var a = function(_0x154660, _0x15626f) {
+ if (!(_0x154660 instanceof _0x15626f)) throw new TypeError('Cannot call a class as a function');
+ }(this, _0x6954aa);
+ this.version = _0x3d61f9.a;
+ this.system = '';
+ this.adUrl = null;
+ this.gameName = null;
+ this.loadStateOnStart = false;
+ this.statesSupported = true;
+ this.listUrl = 'https://ws.emulatorjs.com/';
+ this.socketUrl = 'wss://ws.emulatorjs.com/';
+ this.coreVer = 2; // 2 = beta cores, 1 = old cores
+ this.mameCore = null;
+ this.startOnLoad = false;
+ this.dataPath = '';
+ this.customPaths = null;
+ this.hash = '';
+ this.lightgun = false;
+ this.mouse = false;
+ this.multitap = false;
+ this.ready = false;
+ this.paused = true;
+ this.started = false;
+ this.touch = _0x2d904a.touch;
+ this.game = _0x28cce1;
+ _0x1e2c68.string(this.game) && (this.game = document.querySelectorAll(this.game));
+ (window.jQuery && this.game instanceof jQuery || _0x1e2c68.nodeList(this.game) || _0x1e2c68.array(this.game)) && (this.game = this.game[0x0]);
+ this.game = this.game;
+ this.game.innerHTML = '';
+ this.config = _0x5dc0c0({}, _0x39ca5e, _0x6954aa.defaults, _0x2ba0e6 || {});
+ this.lightgun = this.config.lightgun;
+ this.loadStateOnStart = this.config.loadStateOnStart || false;
+ this.adUrl = this.config.adUrl || null;
+ this.gameName = this.config.gameName || null;
+ this.mouse = this.config.mouse;
+ this.multitap = this.config.multitap;
+ this.cheats = this.config.cheats;
+ this.cheats || (this.cheats = []);
+ this.listUrl = this.config.netplayUrl || 'https://ws.emulatorjs.com/';
+ this.socketUrl = this.config.netplayUrl || 'wss://ws.emulatorjs.com/';
+ this.mameCore = this.config.mameCore || null;
+ this.color = this.config.color;
+ this.startOnLoad = this.config.startOnLoad || false;
+ this.statesSupported = this.config.statesSupported || true;
+ this.customPaths = function(paths) {
+ if (! paths) return null;
+ var newPaths = {};
+ for (var k in paths) {
+ if (typeof paths[k] == 'string') {
+ newPaths[k] = _0x2136bc(paths[k]);
}
- return newPaths;
- }(this.config.paths),
- this.dataPath = function(path) {
- if (typeof path != 'string') {
- return function(origpath) {
- var fullrequestpath = origpath
- var finpath = fullrequestpath.split('/').pop()
- var finalpath = fullrequestpath.substring(0, fullrequestpath.length - finpath.length)
- if (origpath == '/') {
- return window.location.protocol + '//' + window.location.host + '/';
- } else {
- if (finalpath.startsWith('/')) {
- finalpath = window.location.protocol + '//' + window.location.host + finalpath;
- }
- if (! finalpath.endsWith('/')) {
- finalpath = finalpath + '/';
- }
- return finalpath
+ }
+ return newPaths;
+ }(this.config.paths);
+ this.dataPath = function(path) {
+ if (typeof path != 'string') {
+ return function(origpath) {
+ var fullrequestpath = origpath
+ var finpath = fullrequestpath.split('/').pop()
+ var finalpath = fullrequestpath.substring(0, fullrequestpath.length - finpath.length)
+ if (origpath == '/') {
+ return window.location.protocol + '//' + window.location.host + '/';
+ } else {
+ if (finalpath.startsWith('/')) {
+ finalpath = window.location.protocol + '//' + window.location.host + finalpath;
}
- }(window.location.href);
+ if (! finalpath.endsWith('/')) {
+ finalpath = finalpath + '/';
+ }
+ return finalpath
+ }
+ }(window.location.href);
+ }
+ return _0x2136bc(path, true);
+ }(this.config.dataPath);
+ (async function(dataPath, customPath, lang) {
+ var localJson = {};
+ if (lang && typeof lang == 'string' && lang !== 'en') {
+ var url = (typeof customPath[lang+'.json'] == 'string') ? customPath[lang+'.json'] : dataPath+'localization/'+lang+'.json';
+ try {
+ var res = await fetch(url);
+ var text = await res.text();
+ var localJson = JSON.parse(text);
+ _0x39ca5e.i18n = localJson.i18n;
+ _0x7f9f36.normalOptions = localJson.normalOptions;
+ } catch(e) {
+ console.error(e);
+ console.warn('error setting localization');
}
- return _0x2136bc(path, true);
- }(this.config.dataPath),
+ }
+ return function(engText) {
+ return (typeof localJson[engText] == 'string') ? localJson[engText] : engText;
+ }
+ }(this.dataPath, this.customPaths, this.config.lang)).then(function(a) {
+ this.localization = a;
+ this.config = _0x5dc0c0({}, _0x39ca5e, _0x6954aa.defaults, _0x2ba0e6 || {});
Object.keys(this.config.classNames).forEach(function(_0x1d6b41) {
var _0x28cce1 = _0x5938bc;
if (_0x1e2c68.object(_0x28cce1.config.classNames[_0x1d6b41])) Object.keys(_0x28cce1.config.classNames[_0x1d6b41]).forEach(function(_0x42f7f2) {
@@ -5991,11 +6113,15 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
var _0x2ba0e6 = {};
_0x2ba0e6[_0x5938bc.config.classNames[_0x1d6b41]] = true, _0x5938bc.config.classNames[_0x1d6b41] = _0x449eac(_0x2ba0e6);
}
- }), this.config.selectors.controls.wrapper = '.' .concat(_0x449eac({
+ });
+ this.config.selectors.controls.wrapper = '.' .concat(_0x449eac({
'ejs__controls': true
- })), this.config.selectors.container = '.' .concat(_0x449eac({
+ }));
+ this.config.selectors.container = '.' .concat(_0x449eac({
'ejs': true
- })), this.system = this.config.system, this.elements = {
+ }));
+ this.system = this.config.system;
+ this.elements = {
'container': null,
'buttons': {},
'display': {},
@@ -6012,27 +6138,42 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'netplay': null
},
'widgets': {}
- }, this.fullscreen = {
+ };
+ this.fullscreen = {
'active': false
- }, this.game.emulator) console.warn('Target already setup');
- else {
- this.config.mute = true, this.eventListeners = [], this.listeners = new _0x37093c(this), this.storage = new _0x2f61ba(this, 'ejs_settings'), this.game.emulator = this, _0x1e2c68.element(this.elements.container) || (this.elements.container = _0x428003('div'), _0x580edd(this.game, this.elements.container));
- var _0x5e63f0 = _0x428003('div', {
- 'class': _0x449eac({
- 'ejs__widgets': true
- })
- });
- this.elements.container.appendChild(_0x5e63f0);
- var _0x32c8af = _0x428003('div', {
- 'class': _0x449eac({
- 'ejs__dialogs': true
- })
- });
- this.elements.container.appendChild(_0x32c8af), _0x5ab74d.addStyleHook.call(this), _0xdcec2a.setup.call(this), _0x5ab74d.build.call(this), this.listeners.container(), this.listeners.global(), this.fullscreen = new _0x335854(this), _0x27f4c4.create.call(this);
- var _0x446e06 = document.createElement('script');
- _0x446e06.src = (this.customPaths && typeof this.customPaths['webrtc-adapter.js'] == 'string') ? this.customPaths['webrtc-adapter.js'] : (this.dataPath + 'webrtc-adapter.js');
- document.body.appendChild(_0x446e06);
- }
+ }
+ if (this.game.emulator) console.warn('Target already setup');
+ else {
+ this.config.mute = true;
+ this.eventListeners = [];
+ this.listeners = new _0x37093c(this);
+ this.storage = new _0x2f61ba(this, 'ejs_settings');
+ this.game.emulator = this;
+ _0x1e2c68.element(this.elements.container) || (this.elements.container = _0x428003('div'), _0x580edd(this.game, this.elements.container));
+ var _0x5e63f0 = _0x428003('div', {
+ 'class': _0x449eac({
+ 'ejs__widgets': true
+ })
+ });
+ this.elements.container.appendChild(_0x5e63f0);
+ var _0x32c8af = _0x428003('div', {
+ 'class': _0x449eac({
+ 'ejs__dialogs': true
+ })
+ });
+ this.elements.container.appendChild(_0x32c8af);
+ _0x5ab74d.addStyleHook.call(this);
+ _0xdcec2a.setup.call(this);
+ _0x5ab74d.build.call(this);
+ this.listeners.container();
+ this.listeners.global();
+ this.fullscreen = new _0x335854(this);
+ _0x27f4c4.create.call(this);
+ var _0x446e06 = document.createElement('script');
+ _0x446e06.src = (this.customPaths && typeof this.customPaths['webrtc-adapter.js'] == 'string') ? this.customPaths['webrtc-adapter.js'] : (this.dataPath + 'webrtc-adapter.js');
+ document.body.appendChild(_0x446e06);
+ }
+ }.bind(this))
}
var _0x17edbf, _0x2c1832, _0x423c42;
_0x17edbf = _0x6954aa, _0x423c42 = [{
diff --git a/data/loader.js b/data/loader.js
index f889dd5..a69215d 100644
--- a/data/loader.js
+++ b/data/loader.js
@@ -50,6 +50,7 @@ emu_main.onload = function() {
'undefined' != typeof EJS_startOnLoaded && (config.startOnLoad = EJS_startOnLoaded)
'undefined' != typeof EJS_core && (config.system = EJS_core)
'undefined' != typeof EJS_loadStateURL && (config.loadStateOnStart = EJS_loadStateURL)
+ 'undefined' != typeof EJS_language && (config.lang = EJS_language)
config.onsavestate = null
config.onloadstate = null
'undefined' != typeof EJS_onSaveState && (config.onsavestate = EJS_onSaveState)