mirror of
https://github.com/EmulatorJS/EmulatorJS.git
synced 2024-09-20 02:46:23 +00:00
Version 1.0
Co-authored-by: Allan Niles <74841470+allancoding@users.noreply.github.com> Co-authored-by: imneckro <42493772+imneckro@users.noreply.github.com>
This commit is contained in:
parent
4ffcd9832f
commit
60cb51da0d
12 changed files with 501 additions and 152 deletions
24
.github/ISSUE_TEMPLATE/bug---beta.md
vendored
Normal file
24
.github/ISSUE_TEMPLATE/bug---beta.md
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
name: bug - beta
|
||||||
|
about: Use this when you find a problem with the beta emulator cores
|
||||||
|
title: "[beta]"
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<!--
|
||||||
|
First, collect a console log.
|
||||||
|
1. Please add the line of code to your html
|
||||||
|
```
|
||||||
|
EJS_DEBUG_XX = true
|
||||||
|
```
|
||||||
|
2. then reload the broken page.
|
||||||
|
3. Right click and click `inspect`.
|
||||||
|
4. Select the `console` tab at the top.
|
||||||
|
5. Right click on the console and click `save console log to file`
|
||||||
|
6. Upload the file here
|
||||||
|
|
||||||
|
If no log of the console is present. I will immediately close the issue without any comment.
|
||||||
|
Please upload straight to github and not to some other website.
|
||||||
|
-->
|
24
.github/ISSUE_TEMPLATE/bug.md
vendored
Normal file
24
.github/ISSUE_TEMPLATE/bug.md
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
name: bug
|
||||||
|
about: Use this when you find a bug and you are not using the beta cores
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<!--
|
||||||
|
First, collect a console log.
|
||||||
|
1. Please add the line of code to your html
|
||||||
|
```
|
||||||
|
EJS_DEBUG_XX = true
|
||||||
|
```
|
||||||
|
2. then reload the broken page.
|
||||||
|
3. Right click and click `inspect`.
|
||||||
|
4. Select the `console` tab at the top.
|
||||||
|
5. Right click on the console and click `save console log to file`
|
||||||
|
6. Upload the file here
|
||||||
|
|
||||||
|
If no log of the console is present. I will immediately close the issue without any comment.
|
||||||
|
Please upload straight to github and not to some other website.
|
||||||
|
-->
|
10
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
10
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
38
README.md
38
README.md
|
@ -10,6 +10,15 @@ Self-hosted **Javascript** emulation for various system.
|
||||||
|
|
||||||
*The* ***Screen Recording*** *option currently doesn't support* ***Audio*** *.*
|
*The* ***Screen Recording*** *option currently doesn't support* ***Audio*** *.*
|
||||||
|
|
||||||
|
The **beta** version of the emulator core files are now avaliable. (For limited systems) <br>
|
||||||
|
If you would like to use it, please add the following line to your code.
|
||||||
|
|
||||||
|
```js
|
||||||
|
EJS_BETA = true;
|
||||||
|
```
|
||||||
|
|
||||||
|
When reporting bugs, please specify that you are using the beta version
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**⸢ [Example Use] ⸥ ⸢ [Emulator Demo] ⸥ ⸢ [Beta] ⸥**
|
**⸢ [Example Use] ⸥ ⸢ [Emulator Demo] ⸥ ⸢ [Beta] ⸥**
|
||||||
|
@ -71,8 +80,15 @@ EJS_gameID = 1;
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
*I have successfully rewrote the server side portion* <br>
|
by default, the netplay server url will be `emulatorjs.herokuapp.com`, but to default to the default `ws.emulatorjs.com` server add the following line
|
||||||
*of netplay, which you can now use to self host!*
|
|
||||||
|
```js
|
||||||
|
EJS_oldEJSNetplayServer = true;
|
||||||
|
```
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
*To self host:*
|
||||||
|
|
||||||
1. Download the **[Server]**.
|
1. Download the **[Server]**.
|
||||||
|
|
||||||
|
@ -84,13 +100,13 @@ EJS_netplayUrl = 'http://localhost:3000/'; // Absolute Url To Your Netplay Serve
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
##### Custom Saves
|
##### Custom Save Filename
|
||||||
|
|
||||||
To customize the filename of save states <br>
|
To customize the filename of save states <br>
|
||||||
simply add the following lines of code.
|
simply add the following lines of code.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
EJS_gameName = `Game Name`;
|
EJS_gameName = 'Game Name';
|
||||||
```
|
```
|
||||||
|
|
||||||
**➞ Save Filename:** `Game Name.state`
|
**➞ Save Filename:** `Game Name.state`
|
||||||
|
@ -103,7 +119,7 @@ To place an advertisement in front of the <br>
|
||||||
`play now` screen, include the following line:
|
`play now` screen, include the following line:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
EJS_AdUrl = `URL`;
|
EJS_AdUrl = 'URL';
|
||||||
```
|
```
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
@ -147,17 +163,23 @@ EJS_paths = {
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
|
##### Localization
|
||||||
|
|
||||||
|
please see [data/localization/readme.md](the localization readme)
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
##### USING MAME SYSTEM
|
##### USING MAME SYSTEM
|
||||||
|
|
||||||
you must add the line
|
you must add the line
|
||||||
|
|
||||||
```
|
```js
|
||||||
EJS_core = 'mame';
|
EJS_core = 'mame';
|
||||||
```
|
```
|
||||||
|
|
||||||
and the line
|
and the line
|
||||||
|
|
||||||
```
|
```js
|
||||||
EJS_mameCore = '' // mame core options (example: '4|0')
|
EJS_mameCore = '' // mame core options (example: '4|0')
|
||||||
```
|
```
|
||||||
set the mame core value to the mame core number (`1` - `6`) + `|` + save states supported (`0` or `1`)
|
set the mame core value to the mame core number (`1` - `6`) + `|` + save states supported (`0` or `1`)
|
||||||
|
@ -168,6 +190,8 @@ set the mame core value to the mame core number (`1` - `6`) + `|` + save states
|
||||||
|
|
||||||
Licenced under the Apache License 2.0
|
Licenced under the Apache License 2.0
|
||||||
|
|
||||||
|
Please state changes and the licence when re-distributing
|
||||||
|
|
||||||
Read the whole license [here](LICENSE)
|
Read the whole license [here](LICENSE)
|
||||||
|
|
||||||
|
|
||||||
|
|
214
data/emu-main.js
214
data/emu-main.js
|
@ -2082,7 +2082,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
|
||||||
}
|
}
|
||||||
'undefined' != typeof EJS_CUSTOM_COREFILE && (_0x2458d5 = EJS_CUSTOM_COREFILE);
|
'undefined' != typeof EJS_CUSTOM_COREFILE && (_0x2458d5 = EJS_CUSTOM_COREFILE);
|
||||||
_0x24de8d.db ? _0x24de8d.get(_0x2458d5, function(_0x47a6fd) {
|
_0x24de8d.db ? _0x24de8d.get(_0x2458d5, function(_0x47a6fd) {
|
||||||
if (_0x47a6fd && _0x47a6fd.version === _0x124167 && false) {
|
if (_0x47a6fd && _0x47a6fd.version === _0x124167 && !('undefined' != typeof EJS_DEBUG_XX && true === EJS_DEBUG_XX)) {
|
||||||
if (_0xc6823.coreVer === 2) {
|
if (_0xc6823.coreVer === 2) {
|
||||||
_0x4f0fcc(_0x47a6fd.data);
|
_0x4f0fcc(_0x47a6fd.data);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2529,14 +2529,8 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
|
||||||
}
|
}
|
||||||
if (type === 'save') {
|
if (type === 'save') {
|
||||||
try {
|
try {
|
||||||
if (this.coreVer === 2) {
|
var data = _0x378b5c.saveState();
|
||||||
_0x378b5c.saveState().then(function(data) {
|
_0x378b5c.saveLoaddbDB.put(key, data);
|
||||||
_0x378b5c.saveLoaddbDB.put(key, data);
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
var data = _0x378b5c.saveState();
|
|
||||||
_0x378b5c.saveLoaddbDB.put(key, data);
|
|
||||||
}
|
|
||||||
} catch(e) {return false;};
|
} catch(e) {return false;};
|
||||||
} else {
|
} else {
|
||||||
_0x378b5c.saveLoaddbDB.get(key).then(function(data) {
|
_0x378b5c.saveLoaddbDB.get(key).then(function(data) {
|
||||||
|
@ -3804,10 +3798,10 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_0x17edbf.on('end', function(_0x27f006, _0x1fb527) {
|
_0x17edbf.on('end', function(_0x27f006, _0x1fb527) {
|
||||||
_0x378b5c.syncInput(0, inputs[4], 0);
|
_0x378b5c.syncInput(0, inputs()[4], 0);
|
||||||
_0x378b5c.syncInput(0, inputs[5], 0);
|
_0x378b5c.syncInput(0, inputs()[5], 0);
|
||||||
_0x378b5c.syncInput(0, inputs[6], 0);
|
_0x378b5c.syncInput(0, inputs()[6], 0);
|
||||||
_0x378b5c.syncInput(0, inputs[7], 0);
|
_0x378b5c.syncInput(0, inputs()[7], 0);
|
||||||
});
|
});
|
||||||
_0x17edbf.on('move', function(_0x1b060e, _0x4ae7d6) {
|
_0x17edbf.on('move', function(_0x1b060e, _0x4ae7d6) {
|
||||||
var _0x2c1832 = _0x4ae7d6.angle.degree;
|
var _0x2c1832 = _0x4ae7d6.angle.degree;
|
||||||
|
@ -4038,8 +4032,8 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
|
||||||
var options = {};
|
var options = {};
|
||||||
}
|
}
|
||||||
_0xa88a13.recordData.stream = _0x27f4c4.Module.canvas.captureStream(30);
|
_0xa88a13.recordData.stream = _0x27f4c4.Module.canvas.captureStream(30);
|
||||||
|
//_0xa88a13.recordData.stream.addTrack(); // TODO - find audio element
|
||||||
_0xa88a13.recordData.recorder = new MediaRecorder(_0xa88a13.recordData.stream, options);
|
_0xa88a13.recordData.recorder = new MediaRecorder(_0xa88a13.recordData.stream, options);
|
||||||
//_0xa88a13.recordData.recorder.addTrack() // TODO - find audio element
|
|
||||||
_0xa88a13.recordData.recorder.ondataavailable = function(e) {
|
_0xa88a13.recordData.recorder.ondataavailable = function(e) {
|
||||||
if (e.data.size > 0) {
|
if (e.data.size > 0) {
|
||||||
_0xa88a13.recordData.data.push(e.data)
|
_0xa88a13.recordData.data.push(e.data)
|
||||||
|
@ -4047,7 +4041,10 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
|
||||||
if (_0xa88a13.recordData.stopped) {
|
if (_0xa88a13.recordData.stopped) {
|
||||||
var a = document.createElement("a")
|
var a = document.createElement("a")
|
||||||
a.href = window.URL.createObjectURL(new Blob(_0xa88a13.recordData.data, {type: "video/webm"}))
|
a.href = window.URL.createObjectURL(new Blob(_0xa88a13.recordData.data, {type: "video/webm"}))
|
||||||
a.download = 'record.webm'
|
if (typeof _0xa88a13.gameName == 'string') {
|
||||||
|
var aname = _0xa88a13.gameName
|
||||||
|
}
|
||||||
|
a.download = aname ? '' .concat(aname, '-recording.webm') : 'record.webm';
|
||||||
a.click()
|
a.click()
|
||||||
window.URL.revokeObjectURL(a.href)
|
window.URL.revokeObjectURL(a.href)
|
||||||
delete _0xa88a13.recordData
|
delete _0xa88a13.recordData
|
||||||
|
@ -4186,93 +4183,48 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
|
||||||
return _0x762355(_0x433182);
|
return _0x762355(_0x433182);
|
||||||
}
|
}
|
||||||
_0x378b5c.getStateInfo = _0x27f4c4.Module.cwrap('get_state_info', 'string', []);
|
_0x378b5c.getStateInfo = _0x27f4c4.Module.cwrap('get_state_info', 'string', []);
|
||||||
if (_0xa88a13.coreVer === 2) {
|
|
||||||
_0x378b5c.saveStateToFile = _0x27f4c4.Module.cwrap('cmd_save_state', 'null', []);
|
|
||||||
}
|
|
||||||
_0x378b5c.saveState = function() {
|
_0x378b5c.saveState = function() {
|
||||||
if (_0xa88a13.coreVer === 2) {
|
var _0xa88a14, _0x17edbf = _0x378b5c.getStateInfo().split('|'),
|
||||||
_0x378b5c.saveStateToFile();
|
_0x2c1832 = _0x17edbf[0x0] >> 0x0;
|
||||||
var length;
|
if (_0x2c1832 > 0x0) {
|
||||||
var asd = 50;
|
_0xa88a14 = new Uint8Array(_0x2c1832);
|
||||||
return new Promise(function(resolve, reject) {
|
for (var _0x2ef6be = _0x17edbf[0x1] >> 0x0, _0x3cc34b = 0x0; _0x3cc34b < _0x2c1832; _0x3cc34b++) _0xa88a14[_0x3cc34b] = _0x27f4c4.Module.getValue(_0x2ef6be + _0x3cc34b);
|
||||||
var a = setInterval(function() {
|
|
||||||
try {
|
|
||||||
var data = _0x27f4c4.FS.readFile('save.state');
|
|
||||||
} catch(e) {return;}
|
|
||||||
if (data.length === 0 || length === 0 || length !== data.length) {
|
|
||||||
length = data.length;
|
|
||||||
asd = 50;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (asd > 0) {
|
|
||||||
asd--;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
clearInterval(a);
|
|
||||||
_0x27f4c4.FS.unlink('save.state');
|
|
||||||
resolve(data);
|
|
||||||
}, 100)
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
var _0xa88a14, _0x17edbf = _0x378b5c.getStateInfo().split('|'),
|
|
||||||
_0x2c1832 = _0x17edbf[0x0] >> 0x0;
|
|
||||||
if (_0x2c1832 > 0x0) {
|
|
||||||
_0xa88a14 = new Uint8Array(_0x2c1832);
|
|
||||||
for (var _0x2ef6be = _0x17edbf[0x1] >> 0x0, _0x3cc34b = 0x0; _0x3cc34b < _0x2c1832; _0x3cc34b++) _0xa88a14[_0x3cc34b] = _0x27f4c4.Module.getValue(_0x2ef6be + _0x3cc34b);
|
|
||||||
}
|
|
||||||
return _0xa88a14;
|
|
||||||
}
|
}
|
||||||
|
return _0xa88a14;
|
||||||
};
|
};
|
||||||
var _0x25a7a2 = _0x27f4c4.Module.cwrap('load_state', 'number', ['string', 'number']);
|
var _0x25a7a2 = _0x27f4c4.Module.cwrap('load_state', 'number', ['string', 'number']);
|
||||||
_0x378b5c.loadState = function(_0x4389ae, _0x1d4918) {
|
_0x378b5c.loadState = function(_0x4389ae, _0x1d4918) {
|
||||||
var _0x91cd69;
|
var _0x91cd69;
|
||||||
_0x91cd69 = _0x4389ae;
|
_0x91cd69 = _0x4389ae;
|
||||||
|
try {
|
||||||
|
_0x27f4c4.FS.unlink('game.state');
|
||||||
|
} catch(e){}
|
||||||
_0x27f4c4._FS.createDataFile('/', 'game.state', _0x91cd69, true, true);
|
_0x27f4c4._FS.createDataFile('/', 'game.state', _0x91cd69, true, true);
|
||||||
null === _0x1d4918 && (_0x1d4918 = 0);
|
null === _0x1d4918 && (_0x1d4918 = 0);
|
||||||
if ('arcade' === _0x17edbf && _0xa88a13.coreVer !== 2) {
|
if ('arcade' === _0x17edbf) {
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
_0x378b5c.getStateInfo();
|
_0x378b5c.getStateInfo();
|
||||||
_0x25a7a2('game.state', _0x1d4918);
|
_0x25a7a2('game.state', _0x1d4918);
|
||||||
_0x27f4c4.FS.unlink('game.state');
|
_0x27f4c4.FS.unlink('game.state');
|
||||||
}, 0xa)
|
}, 0xa)
|
||||||
} else if (_0xa88a13.coreVer === 2) {
|
|
||||||
setTimeout(function() {
|
|
||||||
_0x25a7a2('game.state', _0x1d4918);
|
|
||||||
setTimeout(function() {
|
|
||||||
_0x27f4c4.FS.unlink('game.state');
|
|
||||||
}, 100)
|
|
||||||
}, 10)
|
|
||||||
} else {
|
} else {
|
||||||
_0x25a7a2('game.state', _0x1d4918);
|
_0x25a7a2('game.state', _0x1d4918);
|
||||||
_0x27f4c4.FS.unlink('game.state');
|
setTimeout(function() {
|
||||||
|
_0x27f4c4.FS.unlink('game.state');
|
||||||
|
}, 100)
|
||||||
}
|
}
|
||||||
if (_0xa88a13.coreVer === 2) {
|
if (_0x378b5c.connected && _0x378b5c.connection.isInitiator) {
|
||||||
if (_0x378b5c.connected && _0x378b5c.connection.isInitiator) {
|
for (var _0x54607c = _0x378b5c.getStateInfo().split('|'), _0x1ab9c9 = _0x54607c[0x0] >> 0x0, _0xce58ec = (_0x54607c[0x2], new Uint8Array(_0x1ab9c9)), _0x4aff4f = _0x54607c[0x1] >> 0x0, _0x3bfae0 = 0x0; _0x3bfae0 < _0x1ab9c9; _0x3bfae0 += 0x1) _0xce58ec[_0x3bfae0] = _0x27f4c4.Module.getValue(_0x4aff4f + _0x3bfae0);
|
||||||
var _0x227419 = new File([_0x91cd69], '0-game.state', {
|
var _0x227419 = new File([_0xce58ec], '0-game.state', {
|
||||||
'type': '',
|
'type': '',
|
||||||
'lastModified': new Date()
|
'lastModified': new Date()
|
||||||
});
|
});
|
||||||
_0x378b5c.connection.shareFile(_0x227419);
|
_0x378b5c.connection.shareFile(_0x227419);
|
||||||
_0x378b5c.inputsData = {};
|
_0x378b5c.inputsData = {};
|
||||||
_0x378b5c.wait = true;
|
_0x378b5c.wait = true;
|
||||||
_0x378b5c.systemPause(0x1);
|
_0x378b5c.systemPause(0x1);
|
||||||
_0x27f4c4.Module.pauseMainLoop();
|
_0x27f4c4.Module.pauseMainLoop();
|
||||||
_0x378b5c.disableControl(true);
|
_0x378b5c.disableControl(true);
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (_0x378b5c.connected && _0x378b5c.connection.isInitiator) {
|
|
||||||
for (var _0x54607c = _0x378b5c.getStateInfo().split('|'), _0x1ab9c9 = _0x54607c[0x0] >> 0x0, _0xce58ec = (_0x54607c[0x2], new Uint8Array(_0x1ab9c9)), _0x4aff4f = _0x54607c[0x1] >> 0x0, _0x3bfae0 = 0x0; _0x3bfae0 < _0x1ab9c9; _0x3bfae0 += 0x1) _0xce58ec[_0x3bfae0] = _0x27f4c4.Module.getValue(_0x4aff4f + _0x3bfae0);
|
|
||||||
var _0x227419 = new File([_0xce58ec], '0-game.state', {
|
|
||||||
'type': '',
|
|
||||||
'lastModified': new Date()
|
|
||||||
});
|
|
||||||
_0x378b5c.connection.shareFile(_0x227419);
|
|
||||||
_0x378b5c.inputsData = {};
|
|
||||||
_0x378b5c.wait = true;
|
|
||||||
_0x378b5c.systemPause(0x1);
|
|
||||||
_0x27f4c4.Module.pauseMainLoop();
|
|
||||||
_0x378b5c.disableControl(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
_0xa88a13.elements.container.focus();
|
_0xa88a13.elements.container.focus();
|
||||||
};
|
};
|
||||||
|
@ -4301,25 +4253,13 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
|
||||||
_0x27f4c4.FS.unlink(name);
|
_0x27f4c4.FS.unlink(name);
|
||||||
} catch (_0x4b4d4c) {}
|
} catch (_0x4b4d4c) {}
|
||||||
try {
|
try {
|
||||||
if (_0xa88a13.coreVer === 2) {
|
var _0x17edbf = _0x378b5c.saveState();
|
||||||
_0xa88a13.elements.widgets.stateInfoDiv.innerHTML = 'SAVING STATE TO SLOT ' + slot;
|
_0x27f4c4._FS.createDataFile('/', name, _0x17edbf, true, true);
|
||||||
_0x378b5c.saveState().then(function(data) {
|
_0xa88a13.elements.widgets.stateInfoDiv.innerHTML = 'STATE SAVED TO SLOT ' + slot;
|
||||||
_0x27f4c4._FS.createDataFile('/', name, data, true, true);
|
clearTimeout(_0x378b5c.saveMsgTransitions);
|
||||||
_0xa88a13.elements.widgets.stateInfoDiv.innerHTML = 'STATE SAVED TO SLOT ' + slot;
|
_0x378b5c.saveMsgTransitions = setTimeout(function() {
|
||||||
clearTimeout(_0x378b5c.saveMsgTransitions);
|
_0xa88a13.elements.widgets.stateInfoDiv.innerHTML = '';
|
||||||
_0x378b5c.saveMsgTransitions = setTimeout(function() {
|
}, 1500)
|
||||||
_0xa88a13.elements.widgets.stateInfoDiv.innerHTML = '';
|
|
||||||
}, 1500)
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
var _0x17edbf = _0x378b5c.saveState();
|
|
||||||
_0x27f4c4._FS.createDataFile('/', name, _0x17edbf, true, true);
|
|
||||||
_0xa88a13.elements.widgets.stateInfoDiv.innerHTML = 'STATE SAVED TO SLOT ' + slot;
|
|
||||||
clearTimeout(_0x378b5c.saveMsgTransitions);
|
|
||||||
_0x378b5c.saveMsgTransitions = setTimeout(function() {
|
|
||||||
_0xa88a13.elements.widgets.stateInfoDiv.innerHTML = '';
|
|
||||||
}, 1500)
|
|
||||||
}
|
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
_0xa88a13.elements.widgets.stateInfoDiv.innerHTML = 'FAILED TO SAVE STATE TO SLOT ' + slot;
|
_0xa88a13.elements.widgets.stateInfoDiv.innerHTML = 'FAILED TO SAVE STATE TO SLOT ' + slot;
|
||||||
clearTimeout(_0x378b5c.saveMsgTransitions);
|
clearTimeout(_0x378b5c.saveMsgTransitions);
|
||||||
|
@ -4351,19 +4291,8 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
|
||||||
var name = slot + '-quick.state';
|
var name = slot + '-quick.state';
|
||||||
var success = true;
|
var success = true;
|
||||||
try {
|
try {
|
||||||
if (_0xa88a13.coreVer === 2) {
|
_0x25a7a2(name, 0);
|
||||||
var data = _0x27f4c4.FS.readFile(name);
|
if ('arcade' === _0x17edbf) {
|
||||||
_0x27f4c4.FS.writeFile('/game.state', data);
|
|
||||||
setTimeout(function() {
|
|
||||||
_0x25a7a2(name, 0);
|
|
||||||
setTimeout(function() {
|
|
||||||
_0x27f4c4.FS.unlink('game.state');
|
|
||||||
}, 100)
|
|
||||||
}, 10)
|
|
||||||
} else {
|
|
||||||
_0x25a7a2(name, 0);
|
|
||||||
}
|
|
||||||
if ('arcade' === _0x17edbf && _0xa88a13.coreVer !== 2) {
|
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
_0x378b5c.getStateInfo();
|
_0x378b5c.getStateInfo();
|
||||||
_0x25a7a2(name, 0x0);
|
_0x25a7a2(name, 0x0);
|
||||||
|
@ -5008,6 +4937,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
|
||||||
default:
|
default:
|
||||||
_0xa88a13 = {}, console.warn('Unsupported emulator');
|
_0xa88a13 = {}, console.warn('Unsupported emulator');
|
||||||
}
|
}
|
||||||
|
if (this.coreVer === 2) {
|
||||||
|
_0xa88a13 = {};
|
||||||
|
}
|
||||||
if (this.statesSupported === true) {
|
if (this.statesSupported === true) {
|
||||||
_0xa88a13['save-state-slot'] = {
|
_0xa88a13['save-state-slot'] = {
|
||||||
'label': this.localization('Save State Slot'),
|
'label': this.localization('Save State Slot'),
|
||||||
|
@ -5650,7 +5582,11 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
|
||||||
}
|
}
|
||||||
addContextHtml(_0xa88a13.localization('Take Screenshot'), false, function(_0x20faaa) {
|
addContextHtml(_0xa88a13.localization('Take Screenshot'), false, function(_0x20faaa) {
|
||||||
var _0x4e898a = _0x378b5c.getScreenData();
|
var _0x4e898a = _0x378b5c.getScreenData();
|
||||||
_0x4e4ca6()(new Blob([_0x4e898a]), 'game.png');
|
if (typeof _0xa88a13.gameName == 'string') {
|
||||||
|
var gamep = _0xa88a13.gameName
|
||||||
|
}
|
||||||
|
var gamepng = gamep ? '' .concat(gamep, '-screenshot.png') : 'game.png';
|
||||||
|
_0x4e4ca6()(new Blob([_0x4e898a]), gamepng);
|
||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
addContextHtml(_0xa88a13.localization('Cache Manage'), true, function(_0x275730) {
|
addContextHtml(_0xa88a13.localization('Cache Manage'), true, function(_0x275730) {
|
||||||
|
@ -6163,12 +6099,11 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
|
||||||
_0x5ab74d.toggleControls.call(_0x17edbf, !0x1), _0x132da7(_0x2c1832.dialogs.gamepad, !0x1);
|
_0x5ab74d.toggleControls.call(_0x17edbf, !0x1), _0x132da7(_0x2c1832.dialogs.gamepad, !0x1);
|
||||||
}, 'mute'), this.bind(_0x2c1832.buttons.saveState, 'click', function() {
|
}, 'mute'), this.bind(_0x2c1832.buttons.saveState, 'click', function() {
|
||||||
_0xbae705.call(_0x17edbf, _0x17edbf.elements.container, 'savestate-start', !0x1, {});
|
_0xbae705.call(_0x17edbf, _0x17edbf.elements.container, 'savestate-start', !0x1, {});
|
||||||
_0xdcec2a.saveState().then(function(_0x31e271) {
|
var _0x31e271 = _0xdcec2a.saveState(),
|
||||||
var _0x2c1832 = _0xdcec2a.getScreenData();
|
_0x2c1832 = _0xdcec2a.getScreenData();
|
||||||
_0xbae705.call(_0x17edbf, _0x17edbf.elements.container, 'savestate', !0x1, {
|
_0xbae705.call(_0x17edbf, _0x17edbf.elements.container, 'savestate', !0x1, {
|
||||||
'state': _0x31e271,
|
'state': _0x31e271,
|
||||||
'screenshot': _0x2c1832
|
'screenshot': _0x2c1832
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}, 'mute'), this.bind(_0x2c1832.buttons.loadState, 'click', function() {
|
}, 'mute'), this.bind(_0x2c1832.buttons.loadState, 'click', function() {
|
||||||
_0xbae705.call(_0x17edbf, _0x17edbf.elements.container, 'loadstate', !0x1, {});
|
_0xbae705.call(_0x17edbf, _0x17edbf.elements.container, 'loadstate', !0x1, {});
|
||||||
|
@ -6299,14 +6234,12 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
|
||||||
var a = function(_0x154660, _0x15626f) {
|
var a = function(_0x154660, _0x15626f) {
|
||||||
if (!(_0x154660 instanceof _0x15626f)) throw new TypeError('Cannot call a class as a function');
|
if (!(_0x154660 instanceof _0x15626f)) throw new TypeError('Cannot call a class as a function');
|
||||||
}(this, _0x6954aa);
|
}(this, _0x6954aa);
|
||||||
this.version = _0x3d61f9.a;
|
this.version = '1.0';
|
||||||
this.system = '';
|
this.system = '';
|
||||||
this.adUrl = null;
|
this.adUrl = null;
|
||||||
this.gameName = null;
|
this.gameName = null;
|
||||||
this.loadStateOnStart = false;
|
this.loadStateOnStart = false;
|
||||||
this.statesSupported = true;
|
this.statesSupported = true;
|
||||||
this.listUrl = 'https://ws.emulatorjs.com/';
|
|
||||||
this.socketUrl = 'wss://ws.emulatorjs.com/';
|
|
||||||
this.mameCore = null;
|
this.mameCore = null;
|
||||||
this.startOnLoad = false;
|
this.startOnLoad = false;
|
||||||
this.dataPath = '';
|
this.dataPath = '';
|
||||||
|
@ -6325,13 +6258,15 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
|
||||||
this.game = this.game;
|
this.game = this.game;
|
||||||
this.game.innerHTML = '';
|
this.game.innerHTML = '';
|
||||||
this.config = _0x5dc0c0({}, _0x39ca5e, _0x6954aa.defaults, _0x2ba0e6 || {});
|
this.config = _0x5dc0c0({}, _0x39ca5e, _0x6954aa.defaults, _0x2ba0e6 || {});
|
||||||
this.coreVer = function(core) {
|
this.coreVer = function(core, useBeta) {
|
||||||
if (false) {
|
if (useBeta === true) {
|
||||||
return 2;
|
if (window.WebAssembly) {
|
||||||
|
var supportedCores = ['nes', 'snes'];
|
||||||
|
return supportedCores.includes(core) ? 2 : 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var supportedCores = ['nes', 'snes'];
|
return 1;
|
||||||
return supportedCores.includes(core) ? 2 : 1;
|
}(this.config.system, this.config.useBeta); // 2 = beta cores, 1 = old cores
|
||||||
}(this.config.system); // 2 = beta cores, 1 = old cores
|
|
||||||
this.lightgun = this.config.lightgun;
|
this.lightgun = this.config.lightgun;
|
||||||
this.loadStateOnStart = this.config.loadStateOnStart || false;
|
this.loadStateOnStart = this.config.loadStateOnStart || false;
|
||||||
this.adUrl = this.config.adUrl || null;
|
this.adUrl = this.config.adUrl || null;
|
||||||
|
@ -6340,8 +6275,17 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
|
||||||
this.multitap = this.config.multitap;
|
this.multitap = this.config.multitap;
|
||||||
this.cheats = this.config.cheats;
|
this.cheats = this.config.cheats;
|
||||||
this.cheats || (this.cheats = []);
|
this.cheats || (this.cheats = []);
|
||||||
this.listUrl = this.config.netplayUrl || 'https://ws.emulatorjs.com/';
|
var u = function(a, b) {
|
||||||
this.socketUrl = this.config.netplayUrl || 'wss://ws.emulatorjs.com/';
|
if (typeof b === 'string') {
|
||||||
|
return b;
|
||||||
|
} else if (a === true) {
|
||||||
|
return 'https://ws.emulatorjs.com/'
|
||||||
|
} else {
|
||||||
|
return 'https://emulatorjs.herokuapp.com/';
|
||||||
|
}
|
||||||
|
}(this.config.oldNetplayServer, this.config.netplayUrl);
|
||||||
|
this.listUrl = u;
|
||||||
|
this.socketUrl = u;
|
||||||
this.mameCore = this.config.mameCore || null;
|
this.mameCore = this.config.mameCore || null;
|
||||||
this.color = this.config.color;
|
this.color = this.config.color;
|
||||||
this.startOnLoad = this.config.startOnLoad || false;
|
this.startOnLoad = this.config.startOnLoad || false;
|
||||||
|
|
|
@ -51,6 +51,8 @@ emu_main.onload = function() {
|
||||||
'undefined' != typeof EJS_core && (config.system = EJS_core)
|
'undefined' != typeof EJS_core && (config.system = EJS_core)
|
||||||
'undefined' != typeof EJS_loadStateURL && (config.loadStateOnStart = EJS_loadStateURL)
|
'undefined' != typeof EJS_loadStateURL && (config.loadStateOnStart = EJS_loadStateURL)
|
||||||
'undefined' != typeof EJS_language && (config.lang = EJS_language)
|
'undefined' != typeof EJS_language && (config.lang = EJS_language)
|
||||||
|
'undefined' != typeof EJS_oldEJSNetplayServer && (config.oldNetplayServer = EJS_oldEJSNetplayServer)
|
||||||
|
'undefined' != typeof EJS_BETA && (config.useBeta = EJS_BETA)
|
||||||
config.onsavestate = null
|
config.onsavestate = null
|
||||||
config.onloadstate = null
|
config.onloadstate = null
|
||||||
'undefined' != typeof EJS_onSaveState && (config.onsavestate = EJS_onSaveState)
|
'undefined' != typeof EJS_onSaveState && (config.onsavestate = EJS_onSaveState)
|
||||||
|
|
197
data/localization/el-GR.json
Normal file
197
data/localization/el-GR.json
Normal file
|
@ -0,0 +1,197 @@
|
||||||
|
{
|
||||||
|
"i18n": {
|
||||||
|
"restart": "Επανεκκίνηση",
|
||||||
|
"play": "Συνέχισε",
|
||||||
|
"pause": "Παύση",
|
||||||
|
"played": "Παίχτηκε",
|
||||||
|
"volume": "Ένταση",
|
||||||
|
"mute": "Σίγαση (F9)",
|
||||||
|
"unmute": "Αναίρεση σίγασης (F9)",
|
||||||
|
"enterFullscreen": "Πλήρης οθόνη",
|
||||||
|
"exitFullscreen": "Κλείσιμο πλήρους οθόνης",
|
||||||
|
"settings": "Ρυθμίσεις",
|
||||||
|
"saveState": "Αποθήκευση (Shift + F2)",
|
||||||
|
"loadState": "Φόρτωση (Shift + F4)",
|
||||||
|
"screenRecord": "Εγγραφή οθόνης",
|
||||||
|
"netplay": "Online παιχνίδι",
|
||||||
|
"gamepad": "Ρυθμίσεις χειρισμού",
|
||||||
|
"cheat": "Κωδικοί παιχνιδιού",
|
||||||
|
"menuBack": "Πίσω στο μενού",
|
||||||
|
"normal": "Κανονικό",
|
||||||
|
"all": "Όλα",
|
||||||
|
"reset": "Επαναφορά",
|
||||||
|
"disabled": "Απενεργοποιημένο",
|
||||||
|
"enabled": "Ενεργοποιημένο",
|
||||||
|
"playNow": "Παίξε τώρα"
|
||||||
|
},
|
||||||
|
"normalOptions": {
|
||||||
|
"shader": {
|
||||||
|
"label": "Σκίαση",
|
||||||
|
"options": {
|
||||||
|
"disabled": "Απενεργοποιημένο",
|
||||||
|
"2xScaleHQ.glslp": "Κλίμακα x2",
|
||||||
|
"4xScaleHQ.glslp": "Κλίμακα x4",
|
||||||
|
"crt-easymode.glslp": "Λειτουργία οθόνης παλαιού τύπου απλή",
|
||||||
|
"crt-aperture.glslp": "Λειτουργία οθόνης παλαιού τύπου με άνοιγμα",
|
||||||
|
"crt-geom.glslp": "Λειτουργία οθόνης παλαιού τύπου με θόλο"
|
||||||
|
},
|
||||||
|
"default": "disabled"
|
||||||
|
},
|
||||||
|
"virtual-gamepad": {
|
||||||
|
"label": "Εικονικός μοχλός",
|
||||||
|
"options": {
|
||||||
|
"disabled": "Απενεργοποιημένο",
|
||||||
|
"enabled": "Ενεργοποιημένο"
|
||||||
|
},
|
||||||
|
"default": "enabled"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Control Settings": "Ρυθμίσεις χειρισμού",
|
||||||
|
"Player 1": "Παίκτης 1",
|
||||||
|
"Player 2": "Παίκτης 2",
|
||||||
|
"Player 3": "Παίκτης 3",
|
||||||
|
"Player 4": "Παίκτης 4",
|
||||||
|
"Update": "Ενημέρωση",
|
||||||
|
"Reset": "Επαναφορά",
|
||||||
|
"Clear": "Καθαρισμός",
|
||||||
|
"Cancel": "Ακύρωση",
|
||||||
|
"Close": "Κλείσιμο",
|
||||||
|
"Empty": "Άδειασμα",
|
||||||
|
"Loading": "Φορτώνει",
|
||||||
|
"Submit": "Υποβολή",
|
||||||
|
"Description": "Περιγραφή",
|
||||||
|
"Code": "Κωδικός",
|
||||||
|
"Add Cheat Code": "Προσθήκη κωδικού παιχνιδιού",
|
||||||
|
"OK": "Εντάξει",
|
||||||
|
"Add Cheat": "Προσθήκη κωδικού",
|
||||||
|
"Cache Manager": "Διαχείριση μνήμης",
|
||||||
|
"Press keyboard or gamepad": "Πατήστε στο πληκτρολόγιο ή στο μοχλό",
|
||||||
|
"Gamepad": "Μοχλός",
|
||||||
|
"Keyboard": "Πληκτρολόγιο",
|
||||||
|
"Set": "Διαμόρφωση",
|
||||||
|
"QUICK SAVE STATE": "Γρήγορη αποθήκευση",
|
||||||
|
"QUICK LOAD STATE": "Γρήγορη φόρτωση",
|
||||||
|
"CHANGE STATE SLOT": "Εναλλαγή θέσης αποθήκευσης",
|
||||||
|
"INSERT COIN": "Βάλτε κέρμα",
|
||||||
|
"Press keyboard or gamepad": "Πατήστε στο πληκτρολόγιο ή στο μοχλό",
|
||||||
|
"Press escape (esc) to clear": "Πατήστε escape (esc) για καθαρισμό",
|
||||||
|
"Netplay": "Online παιχνίδι",
|
||||||
|
"Rooms": "Online παιχνίδια",
|
||||||
|
"Players": "Παίκτες",
|
||||||
|
"Player": "Παίκτης",
|
||||||
|
"Room Name": "Όνομα online παιχνιδιού",
|
||||||
|
"Password": "Κωδικός",
|
||||||
|
"Name": "Όνομα",
|
||||||
|
"Quit Room": "Έξοδος",
|
||||||
|
"Create a Room": "Δημιουργία online παιχνιδιού",
|
||||||
|
"Set Player Name": "Δημιουργία ονόματος παίκτη",
|
||||||
|
"Player Name": "Όνομα παίκτη",
|
||||||
|
"Room Name": "Όνομα online παιχνιδιού",
|
||||||
|
"Create a Room": "Δημιουργία online παιχνιδιού",
|
||||||
|
"Password (optional)": "Κωδικός (προαιρετικά)",
|
||||||
|
"Select": "Select",
|
||||||
|
"Start": "Start",
|
||||||
|
"Menu": "Menu",
|
||||||
|
"Decompress Game Core": "Αποσυμπίεση αρχείου πυρήνα παιχνιδιού",
|
||||||
|
"Decompress Game Data": "Αποσυμπίεση αρχείων παιχνιδιού",
|
||||||
|
"Decompress Game Patch": "Αποσυμπίεση πρόσθετων αρχείων παιχνιδιού",
|
||||||
|
"Download Game Data": "Λήψη αρχείων παιχνιδιού",
|
||||||
|
"Download Game Core": "Λήψη αρχείου πυρήνα παιχνιδιού",
|
||||||
|
"Network Error": "Σφάλμα δικτύου",
|
||||||
|
"Default": "Προκαθορισμένο",
|
||||||
|
"default": "προκαθορισμένο",
|
||||||
|
"Save State Location": "Διαδρομή αποθήκευσης",
|
||||||
|
"Save State Slot": "Θυρίδα αποθήκευσης",
|
||||||
|
"Color Palette": "Χρωματοπαλέτα",
|
||||||
|
"No Sprite Limit": "Στοιχεία χωρίς όριο",
|
||||||
|
"Enabled": "Ενεργοποιημένο",
|
||||||
|
"Disabled": "Απενεργοποιημένο",
|
||||||
|
"enabled": "ενεργοποιημένο",
|
||||||
|
"disabled": "απενεργοποιημένο",
|
||||||
|
"Low": "Χαμηλό",
|
||||||
|
"High": "Υψηλό",
|
||||||
|
"Very High": "Πολύ Υψηλό",
|
||||||
|
"4 Players Support": "Υποστήριξη 4 παικτών",
|
||||||
|
"Turbo Enable": "Ενεργοποίηση Turbo",
|
||||||
|
"None": "Κανένα",
|
||||||
|
"Both": "Και τα δύο",
|
||||||
|
"Region": "Περιοχή",
|
||||||
|
"SuperFX Overclock": "Υπερχρονισμός SuperFX",
|
||||||
|
"Sound Quality": "Ποιότητα ήχου",
|
||||||
|
"GB Colorization": "Χρωματισμός GB",
|
||||||
|
"auto": "αυτόματο",
|
||||||
|
"internal": "εσωτερικό",
|
||||||
|
"Internal Palette": "Εσωτερική Παλέτα",
|
||||||
|
"GBC - Blue": "GBC - Μπλε",
|
||||||
|
"GBC - Brown": "GBC - Καφέ",
|
||||||
|
"GBC - Dark Blue": "GBC - Σκούρο Μπλε",
|
||||||
|
"GBC - Dark Brown": "GBC - Σκούρο Καφέ",
|
||||||
|
"GBC - Dark Green": "GBC - Σκούρο Πράσινο",
|
||||||
|
"GBC - Grayscale": "GBC - Κλίμακα του γκρι",
|
||||||
|
"GBC - Green": "GBC - Πράσινο",
|
||||||
|
"GBC - Inverted": "GBC - Ανεστραμμένο",
|
||||||
|
"GBC - Orange": "GBC - Πορτοκαλί",
|
||||||
|
"GBC - Red": "GBC - Κόκκινο",
|
||||||
|
"GBC - Pastel Mix": "GBC - Παστέλ Μίξη",
|
||||||
|
"GBC - Yellow": "GBC - Κίτρινο",
|
||||||
|
"Frameskip": "Παράλειψη Καρέ",
|
||||||
|
"Solar sensor level": "Επίπεδο ηλιακού σένσορα",
|
||||||
|
"Enable Turbo Buttons": "Ενεργοποίηση τούρμπο κουμπιών",
|
||||||
|
"Turbo Delay in frames": "Καθυστέρηση τούρμπο στα καρέ",
|
||||||
|
"Auto": "Αυτόματο",
|
||||||
|
"Aspect Ratio (Need to refresh page)": "Αναλογία Απεικόνισης (Χρειάζεται ανανέωση σελίδας)",
|
||||||
|
"16:9 Resolution": "16:9 Ανάλυση",
|
||||||
|
"4:3 Resolution": "4:3 Ανάλυση",
|
||||||
|
"Player 1 Pak": "Παίκτης 1 Pak",
|
||||||
|
"Player 2 Pak": "Παίκτης 2 Pak",
|
||||||
|
"Player 3 Pak": "Παίκτης 3 Pak",
|
||||||
|
"Player 4 Pak": "Παίκτης 4 Pak",
|
||||||
|
"none": "κανένα",
|
||||||
|
"memory": "μνήμη",
|
||||||
|
"rumble": "rumble",
|
||||||
|
"Screen layout": "Διάταξη οθόνης",
|
||||||
|
"right/left": "δεξιά/αριστερά",
|
||||||
|
"left/right": "αριστερά/δεξιά",
|
||||||
|
"bottom/top": "κάτω/επάνω",
|
||||||
|
"top/bottom": "επάνω/κάτω",
|
||||||
|
"top only": "Μόνο επάνω",
|
||||||
|
"bottom only": "Μόνο κάτω",
|
||||||
|
"quick switch": "Γρήγορη εναλλαγή",
|
||||||
|
"hybrid/bottom": "Υβριδικά/κάτω",
|
||||||
|
"hybrid/top": "-Υβριδικά/επάνω",
|
||||||
|
"Screen Rotation": "Περιστροφή οθόνης",
|
||||||
|
"CPU speed": "Ταχύτητα επεξεργαστή",
|
||||||
|
"Sound output": "Έξοδος ήχου",
|
||||||
|
"mono": "μονοφωνικός",
|
||||||
|
"stereo": "στερεοφωνικός",
|
||||||
|
"OFF": "ΚΛΕΙΣΤΟ",
|
||||||
|
"ON": "ΑΝΟΙΚΤΟ",
|
||||||
|
"Fast Blitter": "Γρήγορο Μπλίτερ",
|
||||||
|
"Bios": "Bios",
|
||||||
|
"Enable second memory card": "Ενεργοποίηση δεύτερης κάρτας μνήμης",
|
||||||
|
"Pad 1 Type": "Τύπος Pad 1",
|
||||||
|
"Pad 2 Type": "Τύπος Pad 2",
|
||||||
|
"Pad 3 Type": "Τύπος Pad 3",
|
||||||
|
"Pad 4 Type": "Τύπος Pad 4",
|
||||||
|
"standard": "πρότυπο",
|
||||||
|
"analog": "αναλογικός μοχλος",
|
||||||
|
"negcon": "negcon μοχλός",
|
||||||
|
"Enable Vibration": "Ενεργοποίηση Δόνησης",
|
||||||
|
"Enable interlacing mode(s)": "Ενεργοποίηση λειτουργίας διαπλοκής(s)",
|
||||||
|
"Enhanced resolution (slow)": "Βελτιωμένη ανάλυση (αργό)",
|
||||||
|
"Enhanced resolution speed hack": "Βελτιωμένη ανάλυση χακάρισμα ταχύτητας",
|
||||||
|
"Aspect ratio": "Αναλογία απεικόνισης",
|
||||||
|
"CPU overclock": "Υπερχρονισμός επεξεργαστή",
|
||||||
|
"Force Neo Geo mode": "Επιβολή λειτουργίας Neo Geo",
|
||||||
|
"Diagnostic Input": "Διαγωνστική εισαγωγή",
|
||||||
|
"download": "λήψη",
|
||||||
|
"keep in browser": "αποθήκευση στον περιηγητή",
|
||||||
|
"Webassembly support is not detected in this browser": "Η λειτουργία Webassembly δεν υποστηρίζεται από τον τρέχον περιηγητή",
|
||||||
|
"Please upgrade your browser to the latest version": "Παρακαλώ αναβαθμίστε τον περιηγητή σας στην τελευταία έκδοση",
|
||||||
|
"Missing mame config": "Λείπει το αρχείο διαμόρφωσης mame",
|
||||||
|
"Stop Screen Recording": "Στάματημα εγγραφής οθόνης",
|
||||||
|
"Start Screen Recording": "Εκκίνηση εγγραφής οθόνης",
|
||||||
|
"Take Screenshot": "Στιγμιότυπο οθόνης",
|
||||||
|
"Quick Save": "Γρήγορη Αποθήκευση",
|
||||||
|
"Quick Load": "Γρήγορη Φόρτωση"
|
||||||
|
}
|
|
@ -3,20 +3,33 @@
|
||||||
|
|
||||||
Supported languages
|
Supported languages
|
||||||
|
|
||||||
`en-US`
|
`en-US` <br>
|
||||||
`pt-BR`
|
`pt-BR` <br>
|
||||||
`es-ES`
|
`es-ES` <br>
|
||||||
|
`el-GR` <br>
|
||||||
|
|
||||||
default: `un-US`
|
|
||||||
|
default: `en-US`
|
||||||
|
|
||||||
|
|
||||||
|
add the line to your code to use
|
||||||
|
|
||||||
|
```js
|
||||||
|
EJS_language = ''; //language
|
||||||
|
```
|
||||||
|
|
||||||
|
If the language file is not found or there was an error fetching the file, the emulator will default to english.
|
||||||
|
|
||||||
|
|
||||||
## credits
|
## credits
|
||||||
|
|
||||||
translated for `pt-BR` by [@cesarcristianodeoliveira](https://github.com/cesarcristianodeoliveira)
|
translated for `pt-BR` by [@cesarcristianodeoliveira](https://github.com/cesarcristianodeoliveira) <br>
|
||||||
|
translated for `es-ES` by [@cesarcristianodeoliveira](https://github.com/cesarcristianodeoliveira) <br>
|
||||||
translated for `es-ES` by [@cesarcristianodeoliveira](https://github.com/cesarcristianodeoliveira)
|
translated for `el-GR` by [@imneckro](https://github.com/imneckro)
|
||||||
|
|
||||||
|
|
||||||
## contributing
|
## contributing
|
||||||
|
|
||||||
download the default `en.json` file and simply translate all the words that start with the `-` (remove the dash afterwards) then perform a pull request or open an issue with the file uploaded and I will add your work
|
download the default `en.json` file and simply translate all the words that start with the `-` (remove the dash afterwards) then perform a pull request or open an issue with the file uploaded and I will add your work
|
||||||
|
|
||||||
|
Please contribute!!
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"nes": {
|
"nes": {
|
||||||
"version":"16",
|
"version":"17",
|
||||||
"netplay": 1,
|
"netplay": 1,
|
||||||
"state": 1,
|
"state": 1,
|
||||||
"asmjs": 1,
|
"asmjs": 1,
|
||||||
"wasm": 1
|
"wasm": 1
|
||||||
},
|
},
|
||||||
"snes": {
|
"snes": {
|
||||||
"version":"13",
|
"version":"14",
|
||||||
"netplay": 1,
|
"netplay": 1,
|
||||||
"state": 1,
|
"state": 1,
|
||||||
"asmjs": 1,
|
"asmjs": 1,
|
||||||
|
|
111
index.html
Normal file
111
index.html
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
window.addEventListener('load', function() {
|
||||||
|
document.getElementById('file').onchange = async function(e) {
|
||||||
|
var ce = function(e) {return document.createElement(e);};
|
||||||
|
var br = function(e) {e.appendChild(ce('br'))};
|
||||||
|
var gameUrl = URL.createObjectURL(new Blob([e.target.files[0]]))
|
||||||
|
var extension = e.target.files[0].name.split('.').pop()
|
||||||
|
var gameName = e.target.files[0].name.replaceAll("'", "\\'")
|
||||||
|
var gameName = gameName.substr(0, gameName.length - extension.length - 1)
|
||||||
|
e.target.remove()
|
||||||
|
while(document.body.firstChild) {
|
||||||
|
document.body.removeChild(document.body.firstChild);
|
||||||
|
};
|
||||||
|
if (['fds', 'nes', 'unif', 'unf'].includes(extension)) {
|
||||||
|
var core = 'nes';
|
||||||
|
} else if (['z64'].includes(extension)) {
|
||||||
|
var core = 'n64';
|
||||||
|
} else if (['smc', 'fig', 'sfc', 'gd3', 'gd7', 'dx2', 'bsx', 'swc'].includes(extension)) {
|
||||||
|
var core = 'snes';
|
||||||
|
} else if (['nds'].includes(extension)) {
|
||||||
|
var core = 'nds';
|
||||||
|
} else if (['gba'].includes(extension)) {
|
||||||
|
var core = 'gba';
|
||||||
|
} else if (['gb'].includes(extension)) {
|
||||||
|
var core = 'gb';
|
||||||
|
} else {
|
||||||
|
var core = await function() {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
var cores = {"NES / Nintendo Entertainment System / Famicon": "nes",
|
||||||
|
"SNES / Super Nintendo Entertainment System": "snes",
|
||||||
|
"Nintendo 64": "n64",
|
||||||
|
"Nintendo Game Boy": "gb",
|
||||||
|
"Nintendo Game Boy Advance": "gba",
|
||||||
|
"Nintendo DS": "nds",
|
||||||
|
"PlayStation": "psx",
|
||||||
|
"Virtual Boy": "vb",
|
||||||
|
"Sega Mega Drive": "segaMD",
|
||||||
|
"Sega Master System": "segaMS",
|
||||||
|
"Sega CD": "segaCD",
|
||||||
|
"Atari Lynx": "lynx",
|
||||||
|
"Sega 32X": "sega32x",
|
||||||
|
"Atari Jaguar": "jaguar",
|
||||||
|
"Sega Game Gear": "segaGG",
|
||||||
|
"Sega Saturn": "segaSaturn",
|
||||||
|
"Atari 7800": "atari7800",
|
||||||
|
"Atari 2600": "atari2600"};
|
||||||
|
var a = ce('div');
|
||||||
|
a.style = 'padding: 50px;';
|
||||||
|
var p = ce('h2');
|
||||||
|
p.innerHTML = 'Unable to auto-detect system. Please select the desired system.';
|
||||||
|
a.appendChild(p);
|
||||||
|
br(a);
|
||||||
|
for (var k in cores) {
|
||||||
|
var input = ce('input');
|
||||||
|
input.type = 'radio';
|
||||||
|
input.id = 'game-' + cores[k];
|
||||||
|
input.name = 'game';
|
||||||
|
input.value = cores[k];
|
||||||
|
a.appendChild(input);
|
||||||
|
var label = ce('label');
|
||||||
|
label.for = 'game-' + cores[k];
|
||||||
|
label.innerHTML = k;
|
||||||
|
a.appendChild(label);
|
||||||
|
br(a);
|
||||||
|
};
|
||||||
|
br(a);
|
||||||
|
var submit = ce('input');
|
||||||
|
submit.type = 'submit';
|
||||||
|
submit.value = 'Load Game';
|
||||||
|
submit.onclick = function(e) {
|
||||||
|
var q = false;
|
||||||
|
var radios = document.getElementsByName('game');
|
||||||
|
for (var i=0; i<radios.length; i++) {
|
||||||
|
if (radios[i].checked) {
|
||||||
|
var q = radios[i].value;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
if (! q) {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
while(document.body.firstChild) {
|
||||||
|
document.body.removeChild(document.body.firstChild);
|
||||||
|
};
|
||||||
|
resolve(q);
|
||||||
|
};
|
||||||
|
a.appendChild(submit);
|
||||||
|
document.body.appendChild(a);
|
||||||
|
});
|
||||||
|
}();
|
||||||
|
};
|
||||||
|
var a = document.createElement('div');
|
||||||
|
a.style = "width:640px;height:480px;max-width:100%";
|
||||||
|
var b = document.createElement('div');
|
||||||
|
b.id = 'game';
|
||||||
|
a.appendChild(b);
|
||||||
|
document.body.appendChild(a);
|
||||||
|
var script = document.createElement('script');
|
||||||
|
script.innerHTML = "EJS_player = '#game'; EJS_gameName = '" + gameName + "'; EJS_biosUrl = ''; EJS_gameUrl = '" + gameUrl + "'; EJS_core = '" + core + "'; EJS_pathtodata = 'data/'; ";
|
||||||
|
document.body.appendChild(script);
|
||||||
|
var script = document.createElement('script');
|
||||||
|
script.src = 'data/loader.js';
|
||||||
|
document.body.appendChild(script);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
Select Game Rom: <input type="file" id="file">
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in a new issue