151 lines
3.7 KiB
HTML
151 lines
3.7 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<title>Test</title>
|
|
|
|
<style type="text/css">
|
|
body,html {
|
|
margin: 0;
|
|
padding: 0;
|
|
height: 100%;
|
|
overflow: hidden;
|
|
background: transparent;
|
|
}
|
|
|
|
.game {
|
|
width: 100%;
|
|
height: 100%;
|
|
max-width: 100%;
|
|
display: block;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.ejs_menu_bar {
|
|
display: none !important;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<div class="game" id="game">
|
|
</div>
|
|
|
|
<script type="text/javascript" language="javascript">
|
|
let scriptElement = null;
|
|
|
|
EJS_player = "#game";
|
|
EJS_pathtodata = "https://cdn.emulatorjs.org/stable/data/";
|
|
EJS_language = "en-US";
|
|
EJS_volume = 0;
|
|
EJS_startOnLoaded = true;
|
|
EJS_backgroundColor = '#000';
|
|
|
|
EJS_Buttons = {
|
|
playPause: false,
|
|
restart: false,
|
|
mute: false,
|
|
settings: false,
|
|
fullscreen: false,
|
|
saveState: false,
|
|
loadState: false,
|
|
screenRecord: false,
|
|
gamepad: false,
|
|
cheat: false,
|
|
volume: false,
|
|
saveSavFiles: false,
|
|
loadSavFiles: false,
|
|
quickSave: false,
|
|
quickLoad: false,
|
|
screenshot: false,
|
|
cacheManager: false,
|
|
exitEmulation: false
|
|
}
|
|
|
|
EJS_defaultOptions = {
|
|
|
|
};
|
|
|
|
const emulatorInit = data => {
|
|
EJS_gameUrl = `/api/v1/rom?id=${data.gameId}`;
|
|
EJS_core = data.core;
|
|
EJS_gameName = data.gameName;
|
|
EJS_externalFiles = {
|
|
'/homeplay/saves/': `/api/v1/save?id=${data.gameId}`
|
|
}
|
|
|
|
scriptElement = document.createElement('script');
|
|
scriptElement.src = 'https://cdn.emulatorjs.org/stable/data/loader.js';
|
|
document.body.appendChild(scriptElement);
|
|
}
|
|
|
|
const send = data => {
|
|
window.parent.postMessage(data, '*');
|
|
}
|
|
|
|
window.onmessage = (e) => {
|
|
const { data } = e;
|
|
|
|
if(!data) {
|
|
console.error('No data');
|
|
return;
|
|
}
|
|
|
|
const { message } = data;
|
|
switch(message) {
|
|
case 'init':
|
|
emulatorInit(data);
|
|
break;
|
|
|
|
case 'volume':
|
|
EJS_emulator.setVolume(data.volume);
|
|
break;
|
|
|
|
default:
|
|
console.error('Unknown message', message);
|
|
}
|
|
};
|
|
|
|
EJS_ready = () => {
|
|
// Modify the EJS stuff
|
|
const oldGetRetroArchCfg = window.EJS_GameManager.prototype.getRetroArchCfg;
|
|
const oldMountFileSystems = window.EJS_GameManager.prototype.mountFileSystems;
|
|
|
|
EJS_GameManager.prototype.getRetroArchCfg = function() {
|
|
const ejsConfig = oldGetRetroArchCfg.call(this);
|
|
|
|
// Parse back into key value pair
|
|
const raConfig = ejsConfig.split('\n').reduce((acc, line) => {
|
|
if(!line.length) return acc;
|
|
const [key, value] = line.split('=');
|
|
acc[key.trim()] = value.trim();
|
|
return acc;
|
|
}, {});
|
|
|
|
// Add new options
|
|
raConfig['savefiles_in_content_dir'] = false;
|
|
raConfig['sort_savefiles_by_content_enable'] = false;
|
|
raConfig['sort_savefiles_enable'] = false;
|
|
raConfig['savefile_directory'] = '/homeplay/saves';
|
|
|
|
// Return back as RA config string
|
|
return Object.entries(raConfig).map(([k, v]) => `${k} = ${v}`).join('\n');
|
|
}
|
|
|
|
send({ message: 'ready' });
|
|
}
|
|
|
|
EJS_onSaveState = () => {
|
|
send({ message: 'save' });
|
|
}
|
|
|
|
EJS_onLoadState = () => {
|
|
send({ message: 'load' });
|
|
}
|
|
|
|
EJS_onGameStart = () => {
|
|
send({ message: 'start' });
|
|
}
|
|
</script>
|
|
</body>
|
|
</html> |