initial commit

This commit is contained in:
Djalim Simaila 2025-01-22 17:18:24 +01:00
commit e87dd9f8fe
109 changed files with 147691 additions and 0 deletions

192
api.py Normal file
View File

@ -0,0 +1,192 @@
import flask
from db_classes import *
from sqlalchemy.orm import Session
from sqlalchemy import create_engine
from flask_cors import CORS
app = flask.Flask(__name__)
CORS(app)
def setup_session():
engine = create_engine("mariadb+mariadbconnector://videogamedb:MumMTK3bwjYJRfe@simailadjalim.fr/videogamedb")
return Session(engine)
def close_session(session):
session.close()
@app.route("/langage", methods=["GET"])
def get_langage():
session = setup_session()
data = []
for language in session.query(Language).all():
data.append({
"id": language.id,
"name": language.name
})
close_session(session)
return flask.jsonify(data), 200
@app.route("/langage/<int:langage_id>", methods=["GET"])
def get_langage_id(langage_id):
session = setup_session()
language = session.query(Language).filter(Language.id == langage_id).first()
if language is None:
close_session(session)
return flask.jsonify({"error": "language not found"}), 404
data = {
"id": language.id,
"name": language.name
}
close_session(session)
return flask.jsonify(data), 200
@app.route("/extention", methods=["GET"])
def get_extention():
session = setup_session()
data = []
for extention in session.query(RomFileExtensions).all():
data.append({
"id": extention.id,
"name": extention.name
})
close_session(session)
return flask.jsonify(data), 200
@app.route("/extention/<int:extention_id>", methods=["GET"])
def get_extention_id(extention_id):
session = setup_session()
extention = session.query(RomFileExtensions).filter(RomFileExtensions.id == extention_id).first()
if extention is None:
close_session(session)
return flask.jsonify({"error": "extention not found"}), 404
data = {
"id": extention.id,
"name": extention.name
}
close_session(session)
return flask.jsonify(data), 200
@app.route("/consoles", methods=["GET"])
def get_consoles():
session = setup_session()
send_data = []
for console in session.query(Console).all():
data = {
"id": console.id,
"name": console.name,
"core": console.core,
#TODO Fix
"playable": True if console.playable else False
}
send_data.append(data)
close_session(session)
return send_data, 200
@app.route("/consoles/<int:console_id>", methods=["GET"])
def get_console(console_id):
session = setup_session()
console = session.query(Console).filter(Console.id == console_id).first()
if console is None:
close_session(session)
return flask.jsonify({"error": "console not found"}), 404
data = {
"id": console.id,
"core": console.core,
"name": console.name,
"playable": True if console.playable else False
}
close_session(session)
return flask.jsonify(data), 200
@app.route("/consoles/<int:console_id>/roms", methods=["GET"])
def get_console_roms(console_id):
session = setup_session()
console = session.query(Console).filter(Console.id == console_id).first()
if console is None:
close_session(session)
return flask.jsonify({"error": "console not found"}), 404
data = []
for rom in console.rom_files:
data.append({
"id": rom.id,
"name": rom.name,
"console_id": rom.console_id,
"extension_id": rom.extension_id,
"language_id": [language.id for language in rom.languages],
})
close_session(session)
return flask.jsonify(data), 200
@app.route("/roms", methods=["GET"])
def get_roms():
session = setup_session()
data = []
for rom in session.query(RomFile).all():
data.append({
"id": rom.id,
"name": rom.name,
"console_id": rom.console_id,
"extension_id": rom.extension_id,
"language_id": [language.id for language in rom.languages],
})
close_session(session)
return flask.jsonify(data), 200
@app.route("/roms/<int:rom_id>", methods=["GET"])
def get_rom(rom_id):
session = setup_session()
rom = session.query(RomFile).filter(RomFile.id == rom_id).first()
if rom is None:
close_session(session)
return flask.jsonify({"error": "rom not found"}), 404
if flask.request.args.get("romfile"):
return flask.send_file(rom.path), 200
else :
data = {
"id": rom.id,
"name": rom.name,
"console_id": rom.console_id,
"extension_id": rom.extension_id,
"categories": [category.id for category in rom.categories],
"language_id": [language.id for language in rom.languages],
}
close_session(session)
return flask.jsonify(data), 200
@app.route("/categories", methods=["GET"])
def get_categories():
session = setup_session()
data = []
for category in session.query(Category).all():
data.append({
"id": category.id,
"name": category.name
})
close_session(session)
return flask.jsonify(data), 200
@app.route("/categories/<int:category_id>", methods=["GET"])
def get_category(category_id):
session = setup_session()
category = session.query(Category).filter(Category.id == category_id).first()
if category is None:
close_session(session)
return flask.jsonify({"error": "category not found"}), 404
data = {
"id": category.id,
"name": category.name
}
close_session(session)
return flask.jsonify(data), 200
@app.route("/emulator", methods=["GET"])
def get_emulator():
rom_id = flask.request.args.get("rom_id")
if rom_id is None:
return flask.jsonify({"error": "rom_id not found"}), 404
console_core = flask.request.args.get("console_core")
if console_core is None:
return flask.jsonify({"error": "console_core not found"}), 404
return flask.render_template("emulator.html",rom_id=rom_id,console_core=console_core), 200
app.run(host="0.0.0.0", port=5000, debug=True)

136
db_classes.py Normal file
View File

@ -0,0 +1,136 @@
from typing import List
from sqlalchemy import ForeignKey
from sqlalchemy import Table, Column
from sqlalchemy import String, Integer, Boolean
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.orm import Mapped
from sqlalchemy.orm import mapped_column
from sqlalchemy.orm import relationship
class Base(DeclarativeBase):
pass
#Many to many relationship
consoles_extensions = Table(
" consoles_extensions",
Base.metadata,
Column("console_id", ForeignKey("console.id")),
Column("extension_id", ForeignKey("rom_file_extensions.id")),
)
class Console(Base):
__tablename__ = 'console'
id : Mapped[int] = mapped_column(primary_key=True)
name : Mapped[str] = mapped_column(String(400))
core : Mapped[str] = mapped_column(String(400))
playable = Mapped[bool]
#Many to many relationship
rom_files_extensions : Mapped[List['RomFileExtensions']] = relationship(secondary=consoles_extensions, back_populates='consoles')
#One to many relationship
rom_files : Mapped[List['RomFile']] = relationship(back_populates='console')
def __init__(self,name ,core ,playable, rom_files_extensions):
self.name = name
self.core = core
self.playable = playable
self.rom_files_extensions = rom_files_extensions
def __repr__(self):
return f"<Console(name={self.name},core={self.core}, playable={self.playable})>"
class RomFileExtensions(Base):
__tablename__ = 'rom_file_extensions'
id : Mapped[int] = mapped_column(primary_key=True)
name : Mapped[str] = mapped_column(String(400))
#Many to many relationship
consoles: Mapped[List[Console]] = relationship(secondary=consoles_extensions, back_populates='rom_files_extensions')
#One to many relationship
roms : Mapped[List['RomFile']] = relationship(back_populates='extension')
def __init__(self, name, consoles):
self.name = name
self.consoles = consoles
def __repr__(self):
return f"<RomFileExtensions(name={self.name})>"
rom_language = Table(
"rom_language",
Base.metadata,
Column("language_id", ForeignKey("language.id")),
Column("rom_id", ForeignKey("rom_file.id")),
)
class Language(Base):
__tablename__ = 'language'
id : Mapped[int] = mapped_column(primary_key=True)
name : Mapped[str] = mapped_column(String(400))
#Many to many relationship
roms : Mapped[List['RomFile']] = relationship(secondary=rom_language, back_populates='languages')
def __init__(self, name, roms):
self.name = name
self.roms = roms
def __repr__(self):
return f"<Language(name={self.name})>"
#Many to many relationship
rom_category = Table(
"rom_category",
Base.metadata,
Column("category_id", ForeignKey("category.id")),
Column("rom_id", ForeignKey("rom_file.id")),
)
class Category(Base):
__tablename__ = 'category'
id : Mapped[int] = mapped_column(primary_key=True)
name : Mapped[str] = mapped_column(String(400))
#Many to many relationship
roms : Mapped[List['RomFile']] = relationship(secondary=rom_category, back_populates='categories')
def __init__(self, name, roms):
self.name = name
self.roms = roms
def __repr__(self):
return f"<Category(name={self.name})>"
class RomFile(Base):
__tablename__ = 'rom_file'
id : Mapped[int] = mapped_column(primary_key=True)
name : Mapped[str] = mapped_column(String(400))
path : Mapped[str] = mapped_column(String(400))
#Many to many relationship
categories : Mapped[List[Category]] = relationship(secondary=rom_category, back_populates='roms')
#Many to many relationship
languages : Mapped[List[Language]] = relationship(secondary=rom_language, back_populates='roms')
#One to many relationship
extension : Mapped[RomFileExtensions] = relationship(back_populates="roms")
extension_id : Mapped[int] = mapped_column(ForeignKey('rom_file_extensions.id'))
#One to many relationship
console : Mapped[Console] = relationship(back_populates="rom_files")
console_id : Mapped[int] = mapped_column(ForeignKey('console.id'))
def __init__(self, name, path, categories, languages, extension, console):
self.name = name
self.path = path
self.categories = categories
self.languages = languages
self.extension = extension
self.console = console
def __repr__(self):
return f"<RomFile(name={self.name}, path={self.path})>"

View File

@ -0,0 +1,13 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: EmulatorJS # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

View File

@ -0,0 +1,30 @@
---
name: Bug
about: Something isn't functioning as intended
title: "[Bug]"
labels: ''
assignees: ''
---
#### Make sure your issue doesn't get closed! Make sure you have done the following items
- [ ] I have collected a **FULL** log of the console, with `EJS_DEBUG_XX` set to true, and uploaded it straight to GitHub.
- [ ] I have not made any changes to the EmulatorJS instance I am running into this bug on.
- [ ] I am on the latest version of EmulatorJS
- [ ] I have not attached any images or logs via external sites. I have uploaded them straight to GitHub and acknowledge that external sites may pose a security issue.
- [ ] I have included, **IN DETAIL**, the steps to reproduce the bug.
<!--
To collect a log of the console.
1. Add the following line to your code
```
EJS_DEBUG_XX = true;
```
2. Right click and click `inspect`.
3. Select the `console` tab at the top.
4. then reload the broken page.
5. Right click on the console and click `Save as...`
6. Upload it to your issue.
-->

View File

@ -0,0 +1,42 @@
name: Minify Code
on: [push, pull_request, workflow_dispatch]
jobs:
paths-filter:
runs-on: ubuntu-latest
outputs:
output1: ${{ steps.filter.outputs.data }}
steps:
- uses: actions/checkout@v2
- uses: dorny/paths-filter@v2
id: filter
with:
filters: |
data:
- 'data/**'
# run only if 'data' files were changed
- name: workflow tests
if: steps.filter.outputs.data == 'true'
run: echo "Data file"
# run only if not 'data' files were changed
- name: not workflow tests
if: steps.filter.outputs.data != 'true'
run: echo "NOT Data file"
next-job:
runs-on: ubuntu-latest
# Wait from the paths-filter to be completed before starting next-job
needs: paths-filter
if: needs.paths-filter.outputs.output1 == 'true'
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '12'
- run: cd data/minify && npm install
- run: cd data/minify && npm run build
- uses: EndBug/add-and-commit@v9
with:
default_author: github_actions

2
emulatorjs/EmulatorJS-main/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
**/node_modules/
*.db

View File

@ -0,0 +1,262 @@
# Changes
# 4.0.3
- Remove RetroArch messages
- Center video at top
# 4.0.2 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/06fe386e780bb55ef6baa4fbc6addd486bee747a)
- Add link to RetroArch License on about page
- Fix gamepad support for legacy browsers
# 4.0.1 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/efbb9dd462ee0e4f2120a6947af312e02fcf657c)
Complete application re-write. Everything changed. Although some changes to note are:
- Optimization for smaller screens.
- No more dead code.
- Fix Gamepad for firefox.
- Store srm in browser.
- Ability to import/export srm files.
- No more old cores
And much much more was changed...
# 3.1.5 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/f7fa5d41487a424233b40e903020455606d68fee)
- Fixed iOS bug for iPads
- Added netplay! (only working on old cores)
# 3.1.0 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/614f5cb55e2768199ba05b756b47d0ab7ab283fd)
- Added ability to drag and drop save states.
- Fixed some "update" and "cancel" and "close" button confustion
- Removed save state retroarch messages
- Beta netplay cleanup (not yet working)
- (Theoretically) fixed a bug that did not allow iOS devices to work
# 3.0.5 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/44c31371fb3c314cd8dea36ccbaad89fb3ab98e6)
- Fixed screen recording on devices that do not support getUserMedia api.
- Added C label buttons to nintendo 64 virtual gamepad.
- Fixed EJS_color bug.
- Savestates are pulled from the core itself, to always be correct.
- Several new cores. (a5200, beetle_vb, desmume2015, fbalpha2012_cps1, fbalpha2012_cps2, fceumm, gambatte, mame2003, mednafen_psx, mednafen_psx_hw, melonds, mgba, mupen64plus_next, nestopia, snes9x)
- D-pad for virtual gamepad.
- Updated translation files to include new menu options.
- Ability to add more than one zone object to virtual gamepads.
- Added ability to set custom menu options.
- Virtual gamepad left handed mode.
- Fixed Screen record svg.
- Updated svg icons.
- Cache "clear all" button.
- Cache button moved to menu bar.
- Added feature that will display the current downloaded size when the content length is not available.
# 2.3.9 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/088942083e44510f07133f2074a2d63a8af477cd)
- Fixed incorrect variable referencing when update bios download data callback.
- Fixed rom storage size limits.
- Fixed download percent not showing with some files.
# 2.3.8 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/5f176b963e4b2055983b82396378d1e3837a69c4)
- Remove broken shader.
- Add download percent message.
- Fixed UI "saving state" message not going away.
# 2.3.7 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/8b9607becfe0aaad42b8b8486c7d379821b72125)
- Add more shaders.
- Add bold fontsize option to custom virtual gamepad settings.
- No longer set "normalOptions" from localization file.
# 2.3.6 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/b2919bc2c3d2d4c9fe3ab4f4486790a376b7acfe)
- Remove default control mappings for gamepads.
- Upgraded invalid character regex to catch more characters.
# 2.3.5 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/a5a9916aba041e75ee73815376ed4fd2e22701bd)
- Use regex to detect and replace invalid characters in filename/gamename settings.
# 2.3.4 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/45d982b6362cfd29cb2eda9721066e03893ba0d8)
- Add new arcade core.
- Fix patch file game id set bug.
# 2.3.4 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/45d982b6362cfd29cb2eda9721066e03893ba0d8)
- Add new arcade core.
# 2.3.3 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/11bddd5a4277aa04f80b941f05cc024b3de58bfc)
- Make version in loader.js reasonable.
- Created function to return the game id to prevent unnecessary data stored.
# 2.3.2 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/e9e017435f2c41c6c2b127024cc88ac51bdf04d9)
- Fix reference error.
- Fix bug in custom virtual gamepad processor where if value is set to 0 it will see that as the value being missing.
# 2.3.1 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/0fd6d58e2011fa1a39bd2e11ba3d2f17773f0961)
- Use let instead of var.
# 2.3.0 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/2fd0f545285151524262cc799efef6d996d7c6c1)
- Added ability to customize virtual gamepad UI.
- Fixed bug where shader is not set on start.
# 2.2.9 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/018c39d4065b866487f8f18ca88c9488eab69a6d)
- Added feature to save save files to indexeddb every 5 minutes.
# 2.2.8 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/9860d662d02b56417044cca11937448041d9cf43)
- Re-write gamepad handler.
# 2.2.7 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/c03d18990b6536c1503bba2c640dbc13db982bb3)
- Removed un-needed FS proxy functions.
# 2.2.6 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/fd71b5dfc2bd44d8e1f0e7c6c7b3ee1a1127a696)
- Added fps counter.
- Fixed gba core aspect.
# 2.2.5 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/4b444ec23918149a6052807d778af82f79883c01)
- Added ability to set custom control mappings.
- Added ability to set custom default volume value.
- Fixed gamepad axis as button, gamepad varaible compared to incorrect value.
- Added ability to hide/show menu/context menu buttons.
- Added ability to set game url to other data types.
# 2.2.3 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/41eed05677b4927bd114613040bfe4572c92c4b4)
- Fixed rar unarchiving function reference.
- Updated rar header detection.
- Removed netplay.
# 2.2.1 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/19980deb12c3f0790176db6fc7b8b2de4069bf4e)
- Added core menu options for new cores.
- Added new mame2003 core.
- Added support for debug emscripten setting for new cores.
# 2.0.1 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/a72222c39a793c4ff470ebb2b71c04829fee4b5e)
- Control mapping for beta cores.
- Updated beta cores.
- Beta cores now the default option!
- Added a5200 core.
- Fixed save state for new n64 core.
# 1.2.2 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/8ab7bb3f49da373ed5d291c5f72039bbabf2fbc8)
- Moved virtual gamepad menu button to the top left as 3 lines.
- Added screen orientation lock.
- Added beta n64 core!
# 1.2.1 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/638658e6202fd39cb5c94bedcfa00ccdf8b25840)
- Updated beta core files.
# 1.1.6 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/fa153ba76791184d978f9fb8b69991b05b161bc8)
- Replaced axios module with custom script.
- Added pause/play for beta cores.
- Sepperated css into its own file.
- Renamed emu-min.js to emulator.min.js.
# 1.1.5 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/2767c635b8a6e05c57e054d2f9d01ae0c4ff6d47)
- Cleaned up fetch error function.
- Cleaned up virtual gamepad event listeners.
- Add code of conduct.
# 1.1.2 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/64731dd8219931155b4e698aa98dbf65c2120038)
- Fixed error where mame files were misnamed.
- Fixed bug where variable referenced was not defined in loader.js.
- Added .gitignore
- Added nodejs script to minify js files.
- Added audio to screen recording.
- Removed lots of dead code from emulator.js file.
- Update axios module.
- Added CORS error message
- Update nodejs buffer module.
# 1.1.0 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/715ded4ae23c2135bc9a8b9b7599f12c905393b3)
- Added minify feature.
- Added emulatorjs logo.
- Added beta nds and gb core.
- Fixed bug where when wasm was supported on the beta cores and not the old cores, a network error would appear if not using beta.
- Added volume setting and cheats to beta cores.
# 1.0 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/fde44b095bb89e299daaaa4c8d7deebc79019865)
- Official release of the beta cores.
- Ability to use beta cores in production.
- Ability to use the old emulatorjs netplay server.
- Set screen recording out file name to gamename if present.
- Set screenshot out file name to gamename if present.
- Fixed virtual gamepad bug where a function was referenced to as an array.
# 0.4.26 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/0709829a11266b6ab4bbbf3e61d6dd6d3c372133)
- Sepperated emulator.js file into 2 files.
- Added support for a custom netplay server.
- Fixed netplay room password input bug.
- Fixed bug on iOS where virtual gamepad zone was un-responsive.
- Added save state location feature.
- Added mame core setting.
- Added beta cores!
- Added localization.
- Re-wrote virtual gamepad code.
- Added EJS_terminate function.
- Exposed simulate_input function to window.
- Update webrtc adapter.
# 0.4.25 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/ef3200ef87bffe57241e05ae9646cc201142ec46)
- Moved load state on start from loader.js file to emulator.js file.
- Moved data path function from loader.js file to emulator.js file.
- Added ability to set custom path to data through `EJS_pathtodata` variable.
- Added support for custom paths.
- Expose the module and loader to window.
- Added `EJS_startOnLoaded` to start the emulator on load.
- Added quick save state slots.
- Added save state message.
- Only show save state slot in settings when save states are supported.
- Added ds pointer lock.
- Added menu button to virtual gamepad. Menu will only open when clicked on mobile.
- Created licenese
- Created official emulatorjs website.
# 0.4.24 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/73ff641616bcd10f088a004002183760832a1afc)
- Deobsfocuted emulator.js and loader.js files to the most of my extent.
- Added quick save/load hotkeys.
- Added ability to use gamepad axis as button.
- Fixed typo in controls title.
- Only show needed inputs per system in control settings.
- Re-write the loader.js file.
- Exposed some variables to window.
- Cleaned up context menu code.
- Cleaned up some syntax in emulator.js file.
- Declared `EJS_AdUrl` through loader.js file.
- Fixed bug where mapping an axis as a button didn't work.
- Added missing legacy n64 core.
- Updated n64 core.
# 0.4.23-07 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/83e148c82cbc8b4e835a808dcf84456975f82a7c)
- Removed not needed code.
- Added reset button to control settings.
- Added clear button to control settings.
- Added `EJS_AdUrl` option, the ability to add an ad to the emulator.
- Cleaned up some file fetching.
- Fixed RAR unarchiving.
# 0.4.23-05 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/018c787ccf6daca58c863d38fff61910f33f98ec)
- No longer cache games with the protocols of `file:`, and `chrome-extension:`.
- Changed default keymappings.
- Added screen recording button.
# 0.4.23-04 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/6464bbedc1cd58c023cd66656540fc174aedde8b)
- Added mame2003, snes2002, snes2005, snes2010, and vbanext cores.
- Added asmjs for all supported cores.
# 0.4.23-03 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/c883f267e1e56ed6b6472b891f78704c6e4b4c17)
- Start loader.js deobsfocuting.
- Deobsfocute extractzip.js.
- Added `EJS_gameName`, the ability to change the file name of save states.
# 0.4.23-02 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/5d97620b25a81e49c6ba313e586fb37a5ce66002)
- Start emulator.js deobsfocuting.
# 0.4.23-01 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/42a7e129cfded266b72539e8d1b5978d5e4119d8)
- Added support for loading "blob:" urls.
- Added support for loading state on game start.
# 0.4.23 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/5f5cf5cbba29cfd772d525a4c73a4bc5ea26654c)
- Added update available message.
- Fixed a bug where the 'x' from the ad iframe was still visible on game start.
- Added a2600 and mame cores.
- Remove visible 'x'
- Add rar extraction support.
# 0.4.19 [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/4fd22871663e5896bb5d0ce29a50ad508462387a)
- Added support for 32x, 3do, a7800, arcade, bluemsx, jaguar, lynx, ngp, pce, saturn, sega, segacd, and ws cores.
# Initial release [View Tree](https://github.com/EmulatorJS/EmulatorJS/tree/be2db16cba8bd85bf901cd89ca6de51414cea792)
- Support for unzipping zip files.
- Support for unzipping 7zip files.
- Support for vb, snes, psx, nes, nds, n64, gba, and gb systems. Only support for WASM.

View File

@ -0,0 +1 @@
demo.emulatorjs.org

View File

@ -0,0 +1,128 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
ethan.a.obrien@gmail.com.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View File

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
EmulatorJS: RetroArch on the web
Copyright (C) 2023 Ethan O'Brien
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
EmulatorJS Copyright (C) 2023 Ethan O'Brien
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

View File

@ -0,0 +1,198 @@
<div align = center>
<img width = 300 src = docs/Logo-light.png#gh-dark-mode-only>
<img width = 300 src = docs/Logo.png#gh-light-mode-only>
<br>
<br>
[![Badge License]][License]
Self-hosted **Javascript** emulation for various system.
<br>
[![Button Website]][Website]
[![Button Usage]][Usage]<br>
[![Button Configurator]][Configurator]<br>
[![Button Demo]][Demo]
[![Button Legacy]][Legacy]
[![Button Contributors]][Contributors]
Join our Discord server:
[![Join our Discord server!](https://invite.caspertheghost.me/?inviteCode=6akryGkETU&format=svg)](https://discord.gg/6akryGkETU)
</div>
<br>
**As of EmulatorJS version 4.0, this project is no longer a reverse-engineered version of the emulatorjs.com project. It is now a complete re-write,**
<br>
**README BEFORE YOU UPDATE:** EmulatorJS Version 4.0 is a complete re-write of the application. At least some bugs are expected. If you did any communicating with the emulator, there is a 100% chance you will need to re-write your project, and to people with active branches of this project, I wish you luck with merge conflicts (I'm very sorry). The emulator object can be accessed through the `window.EJS_emulator` object.
It is **HIGHLY** suggested that you update to 4.0 ASAP.
<br>
### Ads
*This project has no ads.* <br>
*Although, the demo page currently has an ad to help fund this project.* <br>
*Ads on the demo page may come and go depending on how many people are* <br>
*funding this project.* <br>
*You can help fund this project on* ***[patreon]***
<br>
### Issues
*If something doesn't work, please consider opening an* ***[Issue]*** <br>
*with as many details as possible, as well as the console log.*
<br>
### Extensions
**[GameLibrary]**
*A library overview for your **ROM** folder.*
<br>
**>>When reporting bugs, please specify that you are using the old version**
<br>
<br>
<br>
<h1 align = center>Supported Systems</h1>
<br>
<div align = center>
### Nintendo
**[Game Boy Advance][Nintendo Game Boy Advance]**|
**[Famicom / NES][NES / Famicom]**|
**[Virtual Boy][Virtual Boy]**
**[Game Boy][Nintendo Game Boy]**|
**[SNES]**|
**[DS][Nintendo DS]**|
**[64][Nintendo 64]**
<br>
<br>
### Sega
**[Master System][Sega Master System]**|
**[Mega Drive][Sega Mega Drive]**|
**[Game Gear][Sega Game Gear]**
**[Saturn][Sega Saturn]**|
**[CD][Sega CD]**
<br>
<br>
### Atari
**[2600][Atari 2600]**|
**[5200][Atari 5200]**|
**[7800][Atari 7800]**|
**[Lynx][Atari Lynx]**|
**[Jaguar][Atari Jaguar]**
<br>
<br>
### Other
**[PlayStation]**|
**[Arcade]**|
**[3DO]**|
**[MAME 2003]**
</div>
<br>
<!-- 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 --->
[License]: LICENSE
[Issue]: https://github.com/ethanaobrien/emulatorjs/issues
[patreon]: https://patreon.com/EmulatorJS
<!-- 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 Extensions 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 --->
[GameLibrary]: https://github.com/Ramaerel/emulatorjs-GameLibrary
<!-- 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 Quicklinks 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 --->
[Configurator]: https://emulatorjs.org/editor.html
[Contributors]: docs/Contributors.md
[Website]: https://emulatorjs.org/
[Legacy]: https://coldcast.org/games/1/Super-Mario-Bros
[Usage]: https://emulatorjs.org/docs/
[Demo]: https://demo.emulatorjs.org/
<!-- 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 Systems 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 -->
[Nintendo Game Boy Advance]: docs/Systems/Nintendo%20Game%20Boy%20Advance.md
[Nintendo Game Boy]: docs/Systems/Nintendo%20Game%20Boy.md
[Nintendo 64]: docs/Systems/Nintendo%2064.md
[Nintendo DS]: docs/Systems/Nintendo%20DS.md
[Sega Master System]: docs/Systems/Sega%20Master%20System.md
[Sega Mega Drive]: docs/Systems/Sega%20Mega%20Drive.md
[Sega Game Gear]: docs/Systems/Sega%20Game%20Gear.md
[Sega Saturn]: docs/Systems/Sega%20Saturn.md
[Sega 32X]: docs/Systems/Sega%2032X.md
[Sega CD]: docs/Systems/Sega%20CD.md
[Atari Jaguar]: docs/Systems/Atari%20Jaguar.md
[Atari Lynx]: docs/Systems/Atari%20Lynx.md
[Atari 7800]: docs/Systems/Atari%207800.md
[Atari 2600]: docs/Systems/Atari%202600.md
[Atari 5200]: docs/Systems/Atari%205200.md
[NES / Famicom]: docs/Systems/NES-Famicom.md
[SNES]: docs/Systems/SNES.md
[TurboGrafs-16 / PC Engine]: docs/Systems/TurboGrafs%2016-PC%20Engine.md
[WanderSwan / Color]: docs/Systems/WanderSwan-Color.md
[Neo Geo Poket]: docs/Systems/Neo%20Geo%20Poket.md
[PlayStation]: docs/Systems/PlayStation.md
[Virtual Boy]: docs/Systems/Virtual%20Boy.md
[Arcade]: docs/Systems/Arcade.md
[MSX]: docs/Systems/MSX.md
[3DO]: docs/Systems/3DO.md
[MAME 2003]: docs/Systems/MAME%202003.md
<!-- 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 Badges 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 🎮 --->
[Badge License]: https://img.shields.io/badge/License-GPLv3-blue.svg?style=for-the-badge
[Button Configurator]: https://img.shields.io/badge/Configurator-992cb3?style=for-the-badge
[Button Contributors]: https://img.shields.io/badge/Contributors-54b7dd?style=for-the-badge
[Button Website]: https://img.shields.io/badge/Website-736e9b?style=for-the-badge
[Button Legacy]: https://img.shields.io/badge/Legacy-ab910b?style=for-the-badge
[Button Usage]: https://img.shields.io/badge/Usage-2478b5?style=for-the-badge
[Button Demo]: https://img.shields.io/badge/Demo-528116?style=for-the-badge
[Button Beta]: https://img.shields.io/badge/Beta-bb044f?style=for-the-badge

View File

@ -0,0 +1 @@
google.com, pub-8832864985153925, DIRECT, f08c47fec0942fa0

View File

@ -0,0 +1,109 @@
<br>
<div align = center>
# Owner
<br>
<br>
![Ethan Avatar]
**[![Badge Ethan GitHub]][Ethan GitHub]**
<br>
<br>
<br>
<br>
# Contributors
<br>
<br>
![Allan Avatar]
### Co-Owner
***Various Fixes & Additions***
**[![Badge Allan GitHub]][Allan GitHub]**
**[![Badge Allan Website]][Allan Website]**
<br>
<br>
<br>
![Archiver Avatar]
***Documentation Design***
**[![Badge Archiver GitHub]][Archiver GitHub]**
**[![Badge Archiver Marked]][Archiver Marked]**
<br>
<br>
<br>
[![Avatar Nekro]][GitHub Nekro]
[![Avatar Grey]][GitHub Grey]
[![Avatar Kyle]][GitHub Kyle]
[![Avatar Protektor]][GitHub Protektor]
[![Avatar ericKuang]][GitHub ericKuang]
[![Avatar seedgou]][GitHub seedgou]
</div>
<!------------------------------------------------------------------------------>
[Avatar Nekro]: https://github.com/imneckro.png?size=100
[GitHub Nekro]: https://github.com/imneckro 'ImNekro - ck-oneman'
[Avatar Grey]: https://github.com/Grey41.png?size=100
[GitHub Grey]: https://github.com/Grey41 'Grey41 - Grey Hope'
[Avatar Kyle]: https://github.com/cheesykyle.png?size=100
[GitHub Kyle]: https://github.com/cheesykyle 'CheesyKyle - Kyle Steffel'
[Avatar Protektor]: https://github.com/Protektor-Desura.png?size=100
[GitHub Protektor]: https://github.com/Protektor-Desura 'Protektor-Desura - Protektor'
[Avatar ericKuang]: https://github.com/eric183.png?size=100
[GitHub ericKuang]: https://github.com/eric183 'eric183 - ericKuang'
[Avatar seedgou]: https://github.com/rwv.png?size=100
[GitHub seedgou]: https://github.com/rwv 'rwv - seedgou'
<!----------------------------------{ Ethan }----------------------------------->
[Badge Ethan GitHub]: https://img.shields.io/badge/Ethan_O'_Brien-181717.svg?style=for-the-badge&logo=GitHub&logoColor=white
[Ethan Avatar]: https://avatars.githubusercontent.com/u/77750390?s=90 'Ethan O\'Brien'
[Ethan GitHub]: https://github.com/ethanaobrien
<!---------------------------{ ElectronicsArchiver }--------------------------->
[Badge Archiver GitHub]: https://img.shields.io/badge/ElectronicsArchiver-181717.svg?style=for-the-badge&logo=GitHub&logoColor=white
[Badge Archiver Marked]: https://img.shields.io/badge/-49a2d5.svg?style=for-the-badge&logo=GitHub&logoColor=white
[Archiver Avatar]: https://avatars.githubusercontent.com/u/85485984?s=90 'ElectronicsArchiver - トトも'
[Archiver GitHub]: https://github.com/ElectronicsArchiver
[Archiver Marked]: https://github.com/MarkedDown
<!----------------------------------{ Allan }---------------------------------->
[Badge Allan GitHub]: https://img.shields.io/badge/allancoding-181717.svg?style=for-the-badge&logo=GitHub&logoColor=white
[Badge Allan Website]: https://img.shields.io/badge/AllanCoding.ga-lightgray.svg?style=for-the-badge&logo=GitHub&logoColor=white
[Allan Avatar]: https://avatars.githubusercontent.com/u/74841470?s=90 'Allancoding - Allan Niles'
[Allan GitHub]: https://github.com/allancoding
[Allan Website]: https://allancoding.ga/

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 170 KiB

View File

@ -0,0 +1,56 @@
# 3DO
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
// Can also be opera
EJS_core = 'nes';
// URL to BIOS file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
// Path to the data directory
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following types:
- `iso`
- `bin`
- `chd`
- `cue`
### BIOS
| File Name | Description | md5sum |
| ----------- | ------------- | ----------- |
| panafz1.bin | Panasonic FZ-1 | `f47264dd47fe30f73ab3c010015c155b`
| panafz10.bin | Panasonic FZ-10 | `51f2f43ae2f3508a14d9f56597e2d3ce`
| panafz10-norsa.bin | Panasonic FZ-10 [RSA Patch] | `1477bda80dc33731a65468c1f5bcbee9`
| panafz10e-anvil.bin | Panasonic FZ-10-E [Anvil] | `a48e6746bd7edec0f40cff078f0bb19f`
| panafz10e-anvil-norsa.bin | Panasonic FZ-10-E [Anvil RSA Patch] | `cf11bbb5a16d7af9875cca9de9a15e09`
| panafz1j.bin | Panasonic FZ-1J | `a496cfdded3da562759be3561317b605`
| panafz1j-norsa.bin | Panasonic FZ-1J [RSA Patch] | `f6c71de7470d16abe4f71b1444883dc8`
| goldstar.bin | Goldstar GDO-101M | `8639fd5e549bd6238cfee79e3e749114`
| sanyotry.bin | Sanyo IMP-21J TRY | `35fa1a1ebaaeea286dc5cd15487c13ea`
| 3do_arcade_saot.bin | Shootout At Old Tucson | `8970fc987ab89a7f64da9f8a8c4333ff`
### CORES
The *nes* system supports 1 core
- `opera`
If set to `3do`, emulator will use the `opera` core.

View File

@ -0,0 +1,37 @@
# Arcade
## Code Example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
// Can also be fbalpha2012_cps1 or fbalpha2012_cps2
EJS_core = 'arcade';
// URL to Game rom
EJS_gameUrl = '';
// Path to the data directory
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following extensions:
- `zip`
### CORES
The *arcade* system supports 2 cores
- `fbalpha2012_cps1`
- `fbalpha2012_cps2`
If set to `arcade`, emulator will use the `fbalpha2012_cps1` core.

View File

@ -0,0 +1,35 @@
# Atari 2600
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'atari2600';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

View File

@ -0,0 +1,37 @@
# Atari 5200
## Code Example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
// Can also be a5200
EJS_core = 'atari5200';
// URL to Game rom
EJS_gameUrl = '';
// Path to the data directory
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following extensions:
- `a52`
- `bin`
### CORES
The *atari5200* system supports 1 core
- `a5200`
If set to `atari5200`, emulator will use the `a5200` core.

View File

@ -0,0 +1,33 @@
# Atari 7800
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'atari7800';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

View File

@ -0,0 +1,37 @@
# Atari Jaguar
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'jaguar';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

View File

@ -0,0 +1,32 @@
# Atari Lynx
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'lynx';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

View File

@ -0,0 +1,35 @@
# MAME 2003
## Code Example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'mame2003';
// URL to Game rom
EJS_gameUrl = '';
// Path to the data directory
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following extensions:
- `zip`
### CORES
The *mame2003* system supports 2 cores
- `mame2003`
If set to `mame2003`, emulator will use the `mame2003` core.

View File

@ -0,0 +1,52 @@
# NES / Famicom
## Code Example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
// Can also be fceumm or nestopia
EJS_core = 'nes';
EJS_lightgun = false; // Lightgun
// URL to BIOS file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
// Path to the data directory
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following extensions:
- `fds`
- `nes`
- `unif`
- `unf`
### BIOS
| File Name | Description | md5sum |
| ----------- | ------------- | ----------- |
| disksys.rom | Family Computer Disk System BIOS -<br> Required for Famicom Disk System emulation | ca30b50f880eb660a320674ed365ef7a |
| gamegenie.nes | Game Genie add-on cartridge -<br> Required for Game Genei Add-on emulation<br> (Only supported on the fceumm core) | 7f98d77d7a094ad7d069b74bd553ec98 |
### CORES
The *nes* system supports 2 cores
- `fceumm`
- `nestopia`
If set to `nes`, emulator will use the `fceumm` core.

View File

@ -0,0 +1,42 @@
# Nintendo 64
## Code Example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
// Can also be mupen64plus_next
EJS_core = 'n64';
// URL to Game rom
EJS_gameUrl = '';
// Path to the data directory
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following extensions:
- `n64`
- `v64`
- `z64`
- `bin`
- `u1`
- `ndd`
- `gb`
### CORES
The *n64* system supports 1 core
- `mupen64plus_next`
If set to `n64`, emulator will use the `mupen64plus_next` core.

View File

@ -0,0 +1,54 @@
# Nintendo DS
## Code Example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
// Can also be desmume2015 or melonds
EJS_core = 'nds';
// URL to BIOS file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
// Path to the data directory
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following extensions:
- `nds`
- `bin` (desmume2015 core only)
### BIOS (melonds core only)
| File Name | Description | md5sum |
| ----------- | ------------- | ----------- |
| bios7.bin | NDS ARM7 BIOS - Required | df692a80a5b1bc90728bc3dfc76cd948 |
| bios9.bin | NDS ARM9 BIOS - Required | a392174eb3e572fed6447e956bde4b25 |
| firmware.bin | NDS Firmware - Required | 145eaef5bd3037cbc247c213bb3da1b3 |
| dsi_bios7.bin | DSi ARM7 BIOS - Optional | |
| dsi_bios9.bin | DSi ARM9 BIOS - Optional | |
| dsi_firmware.bin | DSi Firmware - Optional | |
| dsi_nand.bin | DSi NAND - Optional | |
| dsi_sd_card.bin | DSi SD Card - Optional | |
### CORES
The *nds* system supports 2 cores
- `melonds`
- `desmume2015`
If set to `nds`, emulator will use the `melonds` core.

View File

@ -0,0 +1,50 @@
# Nintendo GameBoy Advance
## Code Example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
// Can also be mgba
EJS_core = 'gba';
// URL to BIOS file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
// Path to the data directory
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following extensions:
- `gb`
- `gbc`
- `gba`
### BIOS
| File Name | Description | md5sum |
| ----------- | ------------- | ----------- |
| gb_bios.bin | Game Boy BIOS - Optional | 32fbbd84168d3482956eb3c5051637f5 |
| gbc_bios.bin | Game Boy Color BIOS - Optional | dbfce9db9deaa2567f6a84fde55f9680 |
| gba_bios.bin | Game Boy Advance BIOS - Optional | a860e8c0b6d573d191e4ec7db1b1e4f6 |
| sgb_bios.bin | Super Game Boy BIOS - Optional | d574d4f9c12f305074798f54c091a8b4 |
### CORES
The *gba* system supports 1 core
- `mgba`
If set to `gba`, emulator will use the `mgba` core.

View File

@ -0,0 +1,49 @@
# Nintendo GameBoy
## Code Example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
// Can also be gambatte or mgba
EJS_core = 'gb';
// URL to BIOS file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
// Path to the data directory
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following extensions:
- `gb`
- `gbc`
- `dmg`
### BIOS
| File Name | Description | md5sum |
| ----------- | ------------- | ----------- |
| gb_bios.bin | Game Boy BIOS - Optional | 32fbbd84168d3482956eb3c5051637f5 |
| gbc_bios.bin | Game Boy Color BIOS - Optional | dbfce9db9deaa2567f6a84fde55f9680 |
### CORES
The *gb* system supports 2 cores
- `gambatte`
- `mgba`
If set to `gb`, emulator will use the `gambatte` core.

View File

@ -0,0 +1,54 @@
# PlayStation
## Code Example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
// Can also be mednafen_psx or mednafen_psx_hw
EJS_core = 'psx';
// URL to BIOS file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
// Path to the data directory
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following extensions:
- `cue`
- `toc`
- `m3u`
- `ccd`
- `exe`
- `pbp`
- `chd`
### BIOS
| File Name | Description | md5sum |
| ----------- | ------------- | ----------- |
| scph5500.bin | PS1 JP BIOS - Required for JP games | 8dd7d5296a650fac7319bce665a6a53c |
| scph5501.bin | PS1 US BIOS - Required for US games | 490f666e1afb15b7362b406ed1cea246 |
| scph5502.bin | PS1 EU BIOS - Required for EU games | 32736f17079d0b2b7024407c39bd3050 |
### CORES
The *psx* system supports 2 cores
- `mednafen_psx_hw`
- `mednafen_psx`
If set to `psx`, emulator will use the `mednafen_psx_hw` core.

View File

@ -0,0 +1,57 @@
# SNES
## Code Example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
// Can also be snes9x
EJS_core = 'snes';
//SNES mouse
EJS_mouse = false;
// SNES Multitap
EJS_multitap = false;
// URL to BIOS file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
// Path to the data directory
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following extensions:
- `smc`
- `sfc`
- `swc`
- `fig`
- `bs`
- `st`
### BIOS
| File Name | Description | md5sum |
| ----------- | ------------- | ----------- |
| BS-X.bin | BS-X - Sore wa Namae o Nusumareta Machi no<br> Monogatari (Japan) (Rev 1) - Optional | fed4d8242cfbed61343d53d48432aced |
| STBIOS.bin | Sufami Turbo (Japan) - Optional | d3a44ba7d42a74d3ac58cb9c14c6a5ca |
### CORES
The *snes* system supports 1 core
- `snes9x`
If set to `snes`, emulator will use the `snes9x` core.

View File

@ -0,0 +1,43 @@
# Sega CD
I do not know the file extension limits for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'segaCD';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## BIOS
You can search for the BIOS you need by utilizing the **MD5** checksum.
| Type | MD5 Checksum |
|------|--------------|
| MegaCD EU | `e66fa1dc5820d254611fdcdba0662372`
| SegaCD US | `854b9150240a198070150e4566ae1290`
| MegaCD EU | `278a9397d192149e84e820ac621a8edd`
<!-- Are those names correct / intended? -->

View File

@ -0,0 +1,35 @@
# Sega Game Gear
I do not know the file extension limits for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'segaGG';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## BIOS
GameGear BIOS (bootrom) - Optional `672e104c3be3a238301aceffc3b23fd6`

View File

@ -0,0 +1,45 @@
# Sega Master System
I do not know the file extension limits for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'segaMS';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## BIOS
You can search for the BIOS you need by utilizing the **MD5** checksum.
(bootrom) - Optional
| Name | MD5 Checksum | Description |
|------|--------------|-------------|
| `bios_E.sms` | `840481177270d5642a14ca71ee72844c` | MasterSystem EU BIOS
| `bios_U.sms` | `840481177270d5642a14ca71ee72844c` | MasterSystem US BIOS
| `bios_J.sms` | `24a519c53f67b00640d0048ef7089105` | MasterSystem JP BIOS
<!-- EU & US have the same checksum? -->

View File

@ -0,0 +1,32 @@
# Sega Mega Drive
I do not know the file extension limits for this system. <br>
There is no bios for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'segaMD';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```

View File

@ -0,0 +1,39 @@
# Sega Saturn
I do not know the file extension limits for this system.
## Code example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
EJS_core = 'segaSaturn';
// URL to Bios file
EJS_biosUrl = '';
// URL to Game rom
EJS_gameUrl = '';
/*
* Path to the WASM / JS files
* HAS TO BE in the same directory.
*/
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## BIOS
Saturn BIOS - Optional `af5828fdff51384f99b3c4926be27762`

View File

@ -0,0 +1,38 @@
# Virtual Boy
## Code Example
```html
<div style='width:640px;height:480px;max-width:100%'>
<div id='game'></div>
</div>
<script type='text/javascript'>
EJS_player = '#game';
// Can also be beetle_vb
EJS_core = 'vb';
// URL to Game rom
EJS_gameUrl = '';
// Path to the data directory
EJS_pathtodata = 'data/';
</script>
<script src='data/loader.js'></script>
```
## ROM Type
Your **ROM** can have the following extensions:
- `vb`
- `vboy`
- `bin`
### CORES
The *vb* system supports 1 core
- `beetle_vb`
If set to `vb`, emulator will use the `beetle_vb` core.

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

View File

@ -0,0 +1,185 @@
<!DOCTYPE html>
<html>
<head>
<title>EmulatorJS</title>
<link rel = icon href = docs/favicon.ico sizes = "16x16 32x32 48x48 64x64" type = image/vnd.microsoft.icon>
<meta name = viewport content = "width = device-width, initial-scale = 1">
<style>
body, html {
height: 100%;
}
body {
font-family: monospace;
font-weight: bold;
font-size: 20px;
margin: 0;
overflow: hidden;
background-color: #222
}
body, #box {
display: flex;
align-items: center;
justify-content: center;
}
#box {
color: #aaa;
height: 20em;
width: 30em;
max-width: 80%;
max-height: 80%;
background-color: #333;
border-radius: 0.4em;
border: 2px solid #555;
position: relative;
flex-direction: column;
transition-duration: 0.2s;
overflow: hidden
}
#box:hover, #box[drag] {
border-color: #38f;
color: #ddd
}
#input {
cursor: pointer;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
opacity: 0
}
#display {
width: 100%;
height: 100%
}
select, button {
padding: 0.6em 0.4em;
margin: 0.5em;
width: 15em;
max-width: 100%;
font-family: monospace;
font-weight: bold;
font-size: 16px;
background-color: #444;
color: #aaa;
border-radius: 0.4em;
border: 1px solid #555;
cursor: pointer;
transition-duration: 0.2s
}
select:hover, button:hover {
background-color: #666;
color: #ddd
}
</style>
</head>
<body>
<div id = box>
<input type = file id = input>
Drag ROM file or click here
</div>
<script>
input.onchange = async () => {
const url = URL.createObjectURL(new Blob([input.files[0]]))
const parts = input.files[0].name.split(".")
const core = await (async (ext) => {
if (["fds", "nes", "unif", "unf"].includes(ext))
return "nes"
if (["smc", "fig", "sfc", "gd3", "gd7", "dx2", "bsx", "swc"].includes(ext))
return "snes"
if (["z64", "n64"].includes(ext))
return "n64"
if (["nds", "gba", "gb", "z64", "n64"].includes(ext))
return ext
return await new Promise(resolve => {
const cores = {
"Nintendo 64": "n64",
"Nintendo Game Boy": "gb",
"Nintendo Game Boy Advance": "gba",
"Nintendo DS": "nds",
"Nintendo Entertainment System": "nes",
"Super Nintendo Entertainment System": "snes",
"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"
}
const button = document.createElement("button")
const select = document.createElement("select")
for (const type in cores) {
const option = document.createElement("option")
option.value = cores[type]
option.textContent = type
select.appendChild(option)
}
button.onclick = () => resolve(select[select.selectedIndex].value)
button.textContent = "Load game"
box.innerHTML = ""
box.appendChild(select)
box.appendChild(button)
})
})(parts.pop())
const div = document.createElement("div")
const sub = document.createElement("div")
const script = document.createElement("script")
sub.id = "game"
div.id = "display"
box.remove()
div.appendChild(sub)
document.body.appendChild(div)
window.EJS_player = "#game"
window.EJS_gameName = parts.shift()
window.EJS_biosUrl = ""
window.EJS_gameUrl = url
window.EJS_core = core
window.EJS_pathtodata = "data/"
window.EJS_startOnLoaded = true;
if (window.location.hostname === "demo.emulatorjs.org") {
window.EJS_AdUrl = "https://ads.emulatorjs.org/";
}
script.src = "data/loader.js"
document.body.appendChild(script)
}
box.ondragover = () => box.setAttribute("drag", true)
box.ondragleave = () => box.removeAttribute("drag")
</script>
</body>
</html>

BIN
emulatorjs/main.zip Normal file

Binary file not shown.

238
initial_data.py Normal file
View File

@ -0,0 +1,238 @@
LANGUAGES = {
"English": {
"patterns" : [
"(us_fr)",
"(UK,F,I)",
"(U)",
"(Eng-Fre-Ger)",
"(E)",
"(En,Ja)",
"(UK)",
"(UK,F,S)"
"(Europe)",
"(Eng-Ita-Spa)"
"(Eng-Spa)" \
"(En,Ja,Fr,De,Es,It,Ko)",
"(UK,F,G,S,I)",
"(Eng-Fre)",
"(UK,F,G,S)",
"(Eng-Ita-Fre)",
"(USA, Europe)",
"(Eng-Spa-Ita)",
"(us_sp)",
"(EU)",
"(EUR)",
"(EngPATCHED)",
"(UK,S)",
"(us_en)",
"(US Games)",
"(Japan, USA)",
"(UK,G,F)",
"(USA)"
"(En,Ja,Fr,De,Es,It,Zh,Ko)",
"(Eng-Ger-Fre)",
"(UK,G)",
"(English Fix)",
"(UK,F,S,NL,I)"
"(UK,F,G)",
"(En,Fr,De,Es,It)",
"(US)",
"(Eng-Fre-Ita)",
"(En,Fr,Nl)",
"(En,Fr,De)",
"(English)",
"(UK,G,NL)",
"(En,Fr,De,Es)",
]
},
"Japanese": {
"patterns": [
"(J)",
"(JPN)",
"(JP)",
"(Japan)",
"(En,Ja)",
"(En,Ja,Fr,De,Es,It,Ko)",
"(Japan, USA)",
"(En,Ja,Fr,De,Es,It,Zh,Ko)",
"(JPN)",
]
},
"French": {
"patterns": [
"(F)",
"(French)",
"(Eng-Fre)",
"(FR)",
"(us_fr)",
"(UK,F,I)",
"(Eng-Fre-Ger)",
"(Europe)",
"(UK,F,S)",
"(France)",
"(En,Ja,Fr,De,Es,It,Ko)",
"(UK,F,G,S,I)",
"(F,I)",
"(Eng-Ita-Fre)",
"(USA, Europe)"
"(EU)",
"(EUR)",
"(UK,G,F)",
"(En,Ja,Fr,De,Es,It,Zh,Ko)"
"(Eng-Ger-Fre)",
"(UK,F,S,NL,I)",
"(UK,F,G)"
"(En,Fr,De,Es,It)",
"(Eng-Fre-Ita)",
"(En,Fr,Nl)",
"(En,Fr,De)",
"(En,Fr,De,Es)"
]
},
"German": {
"patterns": [
"(Eng-Fre-Ger)",
"(Europe)",
"(En,Ja,Fr,De,Es,It,Ko)",
"(UK,F,G,S,I)",
"(UK,F,G,S)",
"(EU)",
"(EUR)",
"(UK,G,F)",
"(En,Ja,Fr,De,Es,It,Zh,Ko)",
"(Eng-Ger-Fre)",
"(UK,G)",
"(Germany)",
"(UK,F,G)",
"(En,Fr,De,Es,It)",
"(En,Fr,De)",
"(UK,G,NL)"
"(En,Fr,De,Es)"
]
},
"Spanish": {
"patterns": [
"(S)",
"(UK,F,G,S)",
"(En,Ja,Fr,De,Es,It,Ko)",
"(Eng-Spa)",
"(Eng-Ita-Spa)",
"(UK,F,S)",
"(Europe)",
"(UK,F,G,S,I)",
"(Eng-Spa-Ita)",
"(us_sp)",
"(EU)",
"(EUR)",
"(UK,S)",
"(En,Ja,Fr,De,Es,It,Zh,Ko)",
"(UK,F,S,NL,I)",
"(Spain)",
"(En,Fr,De,Es,It)",
"(En,Fr,De,Es)"
]
},
"Italian": {
"patterns": [
"(I)",
"(UK,F,I)",
"(Eng-Ita-Spa)"
"(En,Ja,Fr,De,Es,It,Ko)",
"(UK,F,G,S,I)",
"(F,I)",
"(Europe)",
"(EU)",
"(EUR)",
"(Italy)"
"(Eng-Ita-Fre)",
"(Eng-Spa-Ita)",
"(En,Ja,Fr,De,Es,It,Zh,Ko)",
"(En,Fr,De,Es,It)",
"(Eng-Fre-Ita)"
]
},
"Unknown": {
"patterns": [
"(Unk)",
]
},
}
CONSOLE_DATA = {
"Atari 2600": {
"console_core" : "2600",
"extensions": [".a26"],
"playable": True
},
"Atari 5200": {
"console_core" : "null",
"extensions": [".a52"],
"playable": False
},
"Atari 7800": {
"console_core" : "7800",
"extensions": [".a78"],
"playable": True
},
"Atari Jaguar": {
"console_core" : "jaguar",
"extensions": [".jag"],
"playable": True
},
"Atari Lynx": {
"console_core" : "lynx",
"extensions": [".lnx"],
"playable": True
},
"Nintendo Entertainment System": {
"console_core" : "nes",
"extensions": [".nes"],
"playable": True
},
"Super Nintendo Entertainment System": {
"console_core" : "snes",
"extensions": [".smc"],
"playable": True
},
"Nintendo 64": {
"console_core" : "n64",
"extensions": [".n64", ".v64", ".z64"],
"playable": True
},
"Nintendo DS": {
"console_core" : "ds",
"extensions": [".nds"],
"playable": False
},
"Nintendo Gameboy": {
"console_core" : "gb",
"extensions": [".gb"],
"playable": True
},
"Nintendo Gameboy Color": {
"console_core" : "gbc",
"extensions": [".gbc"],
"playable": True
},
"Nintendo Gameboy Advance": {
"console_core" : "gba",
"extensions": [".gba"],
"playable": True
},
"Nintendo Virtual Boy": {
"console_core" : "null",
"extensions": [".vb"],
"playable": False
},
"Sega Master System": {
"console_core" : "mastersystem",
"extensions": [".sms"],
"playable": True
},
"Sega Genesis": {
"console_core" : "megadrive",
"extensions": [".gen",".32x"],
"playable": True
}
}

67680
languages.txt Normal file

File diff suppressed because it is too large Load Diff

46
parse.py Normal file
View File

@ -0,0 +1,46 @@
import json
def parse_romlist():
data ={}
ignore = ["zel", "CaveStory","$RECYCLE.BIN","savestates.old"]
with open("romlist.txt","r") as f:
lines = f.readlines()
for line in lines:
# line = "| |-- ./console/romname.extension"
line = line.strip()
line = line.split("./")
if len(line) < 2 or "/" not in line[1] :
continue
line = line[1]
# line = "console/romname.extension"
name_element = line.split("/")
if len(name_element) > 2:
continue
console_name, rom_name = name_element
if console_name in ignore:
continue
name_element = rom_name.split(".")
if len(name_element) == 2:
rom_name, extension = name_element
elif len(name_element) > 2:
rom_name = "".join(name_element[:-1])
extension = name_element[-1]
if extension == "rom":
print(line)
if not console_name in data:
data[console_name] = []
if extension not in data[console_name]:
data[console_name].append(extension)
print(json.dumps(data, indent=2))
def parse_langages():
data = set()
with open("languages.txt","r") as f:
lines = f.readlines()
for line in lines:
line = line.strip()
data.add(line)
for i in data:
print(i)
parse_langages()

0
requirements.txt Normal file
View File

62725
romlist.txt Normal file

File diff suppressed because it is too large Load Diff

54
scangames.py Normal file
View File

@ -0,0 +1,54 @@
import os
from db_classes import *
from sqlalchemy.orm import Session
from sqlalchemy import create_engine
def scan_folder(path):
engine = create_engine('mariadb+mariadbconnector://videogamedb:MumMTK3bwjYJRfe@localhost/videogamedb')
session = Session(engine)
extensions = session.query(RomFileExtensions).all()
ROMS = []
cpt = 0
ani = ["-","\\","|","/"]
for root, dirs, files in os.walk(path):
for file in files:
#print(file)
# print(ani[cpt%len(ani)],end="\r")
PATH = os.path.join(root, file)
file_split = file.split(".")
file_extension = file_split[-1]
CONSOLE = None
for db_extentions in extensions:
if "." + file_extension.lower() == db_extentions.name:
CONSOLE = db_extentions.consoles[0]
ROM_EXTENSION = db_extentions
break
if CONSOLE is None:
continue
ROM_NAME = ""
for i in file_split[:-1]:
ROM_NAME += i
CATEGORIES = []
LANGUAGE = session.query(Language).filter(Language.name == "Unknown").first()
LANGUAGE = [LANGUAGE]
rom = RomFile(ROM_NAME,
PATH,
CATEGORIES,
LANGUAGE,
ROM_EXTENSION,
CONSOLE)
ROMS.append(rom)
print(rom)
session.add_all(ROMS)
session.commit()
scan_folder("/roms")

32
setup_db.py Normal file
View File

@ -0,0 +1,32 @@
from sqlalchemy.orm import Session
from db_classes import *
from sqlalchemy import create_engine
from initial_data import CONSOLE_DATA, LANGUAGES
#db pass MumMTK3bwjYJRfe
def create_db():
engine = create_engine('mariadb+mariadbconnector://videogamedb:MumMTK3bwjYJRfe@simailadjalim.fr/videogamedb')
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)
session = Session(engine)
consoles = []
rom_file_extensions = {}
languages = []
for console_name, console_data in CONSOLE_DATA.items():
console = Console(console_name,console_data["console_core"] ,console_data["playable"], [])
consoles.append(console)
for extension in console_data["extensions"]:
if extension not in rom_file_extensions:
rom_file_extensions[extension] = RomFileExtensions(extension, [])
rom_file_extensions[extension].consoles.append(console)
for language_name, language_data in LANGUAGES.items():
language = Language(language_name, [])
languages.append(language)
session.add_all(consoles)
session.add_all(rom_file_extensions.values())
session.add_all(languages)
session.commit()
create_db()

230
specs.yml Normal file
View File

@ -0,0 +1,230 @@
openapi: 3.0.0
info:
description: "This is a sample server Petstore server. You can find out more about
Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net,
#swagger](http://swagger.io/irc/). For this sample, you can use the api key
`special-key` to test the authorization filters."
version: 1.0.2
title: Swagger Petstore
termsOfService: http://swagger.io/terms/
contact:
email: apiteam@swagger.io
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html
tags:
- name: console
description: consoles supportés
externalDocs:
description: Find out more
url: http://swagger.io
- name: rom
description: roms supportés
externalDocs:
description: Find out more
url: http://swagger.io
- name: extention
description: extention supportés
externalDocs:
description: Find out more
url: http://swagger.io
- name: langage
description: langages supportés
externalDocs:
description: Find out more
url: http://swagger.io
paths:
/consoles:
get:
tags:
- console
summary: Liste les consoles
description: ""
operationId: listconsole
responses:
"200":
description: Tout est ok
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/console"
/consoles/{id}:
get:
tags:
- console
summary: Liste les consoles
description: ""
operationId: listconsole
parameters:
- name: id
in: path
description: ID de la console
required: true
schema:
type: integer
responses:
"200":
description: Tout est ok
content:
application/json:
schema:
$ref: "#/components/schemas/console"
"404":
description: console non trouvée
content:
application/json:
schema:
$ref: "#/components/schemas/error"
/consoles/{id}/roms:
get:
tags:
- console
summary: Liste les roms de la console
description: ""
operationId: listromfromconsole
parameters:
- name: id
in: path
description: ID de la console
required: true
schema:
type: integer
responses:
"200":
description: Tout est ok
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/rom"
"404":
description: Invalid input
content:
application/json:
schema:
$ref: "#/components/schemas/error"
/roms:
get:
tags:
- rom
summary: Liste les roms
description: ""
operationId: listrom
responses:
"200":
description: Tout est ok
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/rom"
/roms/{id}:
get:
tags:
- rom
summary: donnée d'une rom
description: ""
operationId: listrom
parameters:
- name: id
in: path
description: ID de la rom
required: true
schema:
type: integer
responses:
"200":
description: Tout est ok
content:
application/json:
schema:
$ref: "#/components/schemas/rom"
"404":
description: rom non trouvée
content:
application/json:
schema:
$ref: "#/components/schemas/error"
externalDocs:
description: Find out more about Swagger
url: http://swagger.io
servers:
- url: https://videogamedb.simailadjalim.fr
components:
requestBodies:
UserArray:
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/console"
description: List of user object
required: true
Pet:
content:
application/json:
schema:
$ref: "#/components/schemas/console"
application/xml:
schema:
$ref: "#/components/schemas/console"
description: Pet object that needs to be added to the store
required: true
schemas:
console:
type: object
properties:
id:
type: integer
format: int32
name:
type: string
core:
type: string
playable:
type: boolean
rom:
type: object
properties:
id:
type: integer
name:
type: string
language_id:
type: integer
extention_id:
type: integer
console_id:
type: integer
extention:
type: object
properties:
id:
type: integer
name:
type: string
langage:
type: object
properties:
id:
type: integer
name:
type: string
error:
type: object
properties:
error:
type: string

262
static/data/GameManager.js Normal file
View File

@ -0,0 +1,262 @@
class EJS_GameManager {
constructor(Module, EJS) {
this.EJS = EJS;
this.Module = Module;
this.FS = this.Module.FS;
this.functions = {
restart: this.Module.cwrap('system_restart', '', []),
getStateInfo: this.Module.cwrap('get_state_info', 'string', []), //these names are dumb
saveStateInfo: this.Module.cwrap('save_state_info', 'null', []),
loadState: this.Module.cwrap('load_state', 'number', ['string', 'number']),
screenshot: this.Module.cwrap('cmd_take_screenshot', '', []),
simulateInput: this.Module.cwrap('simulate_input', 'null', ['number', 'number', 'number']),
toggleMainLoop: this.Module.cwrap('toggleMainLoop', 'null', ['number']),
getCoreOptions: this.Module.cwrap('get_core_options', 'string', []),
setVariable: this.Module.cwrap('set_variable', 'null', ['string', 'string']),
setCheat: this.Module.cwrap('set_cheat', 'null', ['number', 'number', 'string']),
resetCheat: this.Module.cwrap('reset_cheat', 'null', []),
toggleShader: this.Module.cwrap('shader_enable', 'null', ['number']),
getDiskCount: this.Module.cwrap('get_disk_count', 'number', []),
getCurrentDisk: this.Module.cwrap('get_current_disk', 'number', []),
setCurrentDisk: this.Module.cwrap('set_current_disk', 'null', ['number']),
getSaveFilePath: this.Module.cwrap('save_file_path', 'string', []),
saveSaveFiles: this.Module.cwrap('cmd_savefiles', '', []),
supportsStates: this.Module.cwrap('supports_states', 'number', []),
loadSaveFiles: this.Module.cwrap('refresh_save_files', 'null', []),
setVolume: this.Module.cwrap('set_volume', 'null', ['number'])
}
this.mkdir("/home");
this.mkdir("/home/web_user");
this.mkdir("/home/web_user/retroarch");
this.mkdir("/home/web_user/retroarch/userdata");
this.mkdir("/home/web_user/retroarch/userdata/config");
this.mkdir("/home/web_user/retroarch/userdata/config/Beetle PSX HW");
this.FS.writeFile("/home/web_user/retroarch/userdata/config/Beetle PSX HW/Beetle PSX HW.opt", 'beetle_psx_hw_renderer = "software"\n');
this.mkdir("/data");
this.mkdir("/data/saves");
this.FS.writeFile("/home/web_user/retroarch/userdata/retroarch.cfg", this.getRetroArchCfg());
this.FS.mount(IDBFS, {}, '/data/saves');
this.FS.syncfs(true, () => {});
this.initShaders();
this.EJS.addEventListener(window, "beforeunload", () => {
this.saveSaveFiles();
this.FS.syncfs(() => {});
})
}
mkdir(path) {
try {
this.FS.mkdir(path);
} catch(e) {}
}
getRetroArchCfg() {
return "autosave_interval = 60\n" +
"screenshot_directory = /\n" +
"block_sram_overwrite = false\n" +
"video_gpu_screenshot = false\n" +
"audio_latency = 64\n" +
"video_top_portrait_viewport = true\n" +
"video_vsync = true\n" +
"video_smooth = false\n" +
"savefile_directory = \"/data/saves\"\n";
}
initShaders() {
if (!window.EJS_SHADERS) return;
this.mkdir("/shader");
for (const shader in window.EJS_SHADERS) {
this.FS.writeFile('/shader/'+shader, window.EJS_SHADERS[shader]);
}
}
restart() {
this.functions.restart();
}
getState() {
return new Promise(async (resolve, reject) => {
const stateInfo = (await this.getStateInfo()).split('|')
let state;
let size = stateInfo[0] >> 0;
if (size > 0) {
state = new Uint8Array(size);
let start = stateInfo[1] >> 0;
for (let i=0; i<size; i++) state[i] = this.Module.getValue(start + i);
}
resolve(state);
})
}
getStateInfo() {
this.functions.saveStateInfo();
return new Promise((resolve, reject) => {
let a;
let b = setInterval(() => {
a = this.functions.getStateInfo();
if (a) {
clearInterval(b);
resolve(a);
}
}, 50)
});
}
loadState(state) {
try {
this.FS.unlink('game.state');
} catch(e){}
this.FS.writeFile('/game.state', state);
this.functions.loadState("game.state", 0);
setTimeout(() => {
try {
this.FS.unlink('game.state');
} catch(e){}
}, 5000)
}
screenshot() {
this.functions.screenshot();
return this.FS.readFile('screenshot.png');
}
quickSave(slot) {
if (!slot) slot = 1;
(async () => {
let name = slot + '-quick.state';
try {
this.FS.unlink(name);
} catch (e) {}
let data = await this.getState();
this.FS.writeFile('/'+name, data);
})();
}
quickLoad(slot) {
if (!slot) slot = 1;
(async () => {
let name = slot + '-quick.state';
this.functions.loadState(name, 0);
})();
}
simulateInput(player, index, value) {
if (this.EJS.isNetplay) {
this.EJS.netplay.simulateInput(player, index, value);
return;
}
if ([24, 25, 26].includes(index)) {
if (index === 24 && value === 1) {
const slot = this.EJS.settings['save-state-slot'] ? this.EJS.settings['save-state-slot'] : "1";
this.quickSave(slot);
this.EJS.displayMessage(this.EJS.localization("SAVED STATE TO SLOT")+" "+slot);
}
if (index === 25 && value === 1) {
const slot = this.EJS.settings['save-state-slot'] ? this.EJS.settings['save-state-slot'] : "1";
this.quickLoad(slot);
this.EJS.displayMessage(this.EJS.localization("LOADED STATE FROM SLOT")+" "+slot);
}
if (index === 26 && value === 1) {
let newSlot;
try {
newSlot = parseFloat(this.EJS.settings['save-state-slot'] ? this.EJS.settings['save-state-slot'] : "1") + 1;
} catch(e) {
newSlot = 1;
}
if (newSlot > 9) newSlot = 1;
this.EJS.displayMessage(this.EJS.localization("SET SAVE STATE SLOT TO")+" "+newSlot);
this.EJS.changeSettingOption('save-state-slot', newSlot.toString());
}
return;
}
this.functions.simulateInput(player, index, value);
}
createCueFile(fileNames) {
try {
if (fileNames.length > 1) {
fileNames = fileNames.filter((item) => {
return ["toc", "ccd", "exe", "pbp", "chd", "img", "bin"].includes(item.split(".").pop().toLowerCase());
})
fileNames = fileNames.sort((a, b) => {
if (isNaN(a.charAt()) || isNaN(b.charAt())) throw new Error("Incorrect file name format");
return (parseInt(a.charAt()) > parseInt(b.charAt())) ? 1 : -1;
})
}
} catch(e) {
console.log(e, fileNames);
if (fileNames.length > 1) {
console.warn("Could not auto-create cue file(s).");
return null;
}
}
for (let i=0; i<fileNames.length; i++) {
if (fileNames[i].split(".").pop().toLowerCase() === "ccd") {
console.warn("Did not auto-create cue file(s). Found a ccd.");
return null;
}
}
if (fileNames.length === 0) {
console.warn("Could not auto-create cue file(s).");
return null;
}
console.log(fileNames);
let baseFileName = fileNames[0].split("/").pop();
if (baseFileName.includes(".")) {
baseFileName = baseFileName.substring(0, baseFileName.length - baseFileName.split(".").pop().length - 1);
console.log(baseFileName);
}
for (let i=0; i<fileNames.length; i++) {
const contents = " FILE \""+fileNames[i]+"\" BINARY\n TRACK 01 MODE1/2352\n INDEX 01 00:00:00";
FS.writeFile("/"+baseFileName+"-"+i+".cue", contents);
}
if (fileNames.length > 1) {
let contents = "";
for (let i=0; i<fileNames.length; i++) {
contents += "/"+baseFileName+"-"+i+".cue\n";
}
FS.writeFile("/"+baseFileName+".m3u", contents);
}
return (fileNames.length === 1) ? baseFileName+"-0.cue" : baseFileName+".m3u";
}
toggleMainLoop(playing) {
this.functions.toggleMainLoop(playing);
}
getCoreOptions() {
return this.functions.getCoreOptions();
}
setVariable(option, value) {
this.functions.setVariable(option, value);
}
setCheat(index, enabled, code) {
this.functions.setCheat(index, enabled, code);
}
resetCheat() {
this.functions.resetCheat();
}
toggleShader(active) {
this.functions.toggleShader(active);
}
getDiskCount() {
return this.functions.getDiskCount();
}
getCurrentDisk() {
return this.functions.getCurrentDisk();
}
setCurrentDisk(disk) {
this.functions.setCurrentDisk(disk);
}
getSaveFilePath() {
return this.functions.getSaveFilePath();
}
saveSaveFiles() {
this.functions.saveSaveFiles();
this.FS.syncfs(false, () => {});
}
supportsStates() {
return !!this.functions.supportsStates();
}
getSaveFile() {
this.saveSaveFiles();
const exists = FS.analyzePath(this.getSaveFilePath()).exists;
return (exists ? FS.readFile(this.getSaveFilePath()) : null);
}
loadSaveFiles() {
this.functions.loadSaveFiles();
}
}
window.EJS_GameManager = EJS_GameManager;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

1333
static/data/emulator.css Normal file

File diff suppressed because it is too large Load Diff

3695
static/data/emulator.js Normal file

File diff suppressed because one or more lines are too long

1
static/data/emulator.min.css vendored Normal file

File diff suppressed because one or more lines are too long

1
static/data/emulator.min.js vendored Normal file

File diff suppressed because one or more lines are too long

107
static/data/gamepad.js Normal file
View File

@ -0,0 +1,107 @@
class GamepadHandler {
gamepads;
timeout;
listeners;
constructor() {
this.gamepads = [];
this.listeners = {};
this.timeout = null;
this.loop();
}
terminate() {
window.clearTimeout(this.timeout);
}
getGamepads() {
return navigator.getGamepads ? navigator.getGamepads() : (navigator.webkitGetGamepads ? navigator.webkitGetGamepads() : []);
}
loop() {
this.updateGamepadState();
this.timeout = setTimeout(this.loop.bind(this), 10);
}
updateGamepadState() {
let gamepads = this.getGamepads();
if (!gamepads) return;
if (!Array.isArray(gamepads) && gamepads.length) {
let gp = [];
for (let i=0; i<gamepads.length; i++) {
gp.push(gamepads[i]);
}
gamepads = gp;
} else if (!Array.isArray(gamepads)) return;
gamepads.forEach((gamepad, index) => {
if (!gamepad) return;
let hasGamepad = false;
this.gamepads.forEach((oldGamepad, oldIndex) => {
if (oldGamepad.index !== gamepad.index) return;
const gamepadToSave = {
axes: [],
buttons: {},
index: oldGamepad.index
}
hasGamepad = true;
oldGamepad.axes.forEach((axis, axisIndex) => {
if (gamepad.axes[axisIndex] !== axis) {
const axis = ['LEFT_STICK_X', 'LEFT_STICK_Y', 'RIGHT_STICK_X', 'RIGHT_STICK_Y'][axisIndex];
if (!axis) return;
this.dispatchEvent('axischanged', {axis: axis, value: gamepad.axes[axisIndex], index: gamepad.index, gamepadIndex: gamepad.index});
}
gamepadToSave.axes[axisIndex] = axis;
})
gamepad.buttons.forEach((button, buttonIndex) => {
let pressed = oldGamepad.buttons[buttonIndex] === 1.0;
if (typeof oldGamepad.buttons[buttonIndex] === "object") {
pressed = oldGamepad.buttons[buttonIndex].pressed;
}
let pressed2 = button === 1.0;
if (typeof button === "object") {
pressed2 = button.pressed;
}
gamepadToSave.buttons[buttonIndex] = {pressed:pressed2};
if (pressed !== pressed2) {
if (pressed2) {
this.dispatchEvent('buttondown', {index: buttonIndex, gamepadIndex: gamepad.index});
} else {
this.dispatchEvent('buttonup', {index: buttonIndex, gamepadIndex: gamepad.index});
}
}
})
this.gamepads[oldIndex] = gamepadToSave;
})
if (!hasGamepad) {
this.gamepads.push(gamepads[index]);
this.dispatchEvent('connected', {gamepadIndex: gamepad.index});
}
});
for (let j=0; j<this.gamepads.length; j++) {
if (!this.gamepads[j]) continue;
let has = false;
for (let i=0; i<gamepads.length; i++) {
if (!gamepads[i]) continue;
if (this.gamepads[j].index === gamepads[i].index) {
has = true;
break;
}
}
if (!has) {
this.dispatchEvent('disconnected', {gamepadIndex: this.gamepads[j].index});
this.gamepads.splice(j, 1);
j--;
}
}
}
dispatchEvent(name, arg) {
if (typeof this.listeners[name] !== 'function') return;
if (!arg) arg={};
arg.type = name;
this.listeners[name](arg);
}
on(name, cb) {
this.listeners[name.toLowerCase()] = cb;
}
}
window.GamepadHandler = GamepadHandler;

101
static/data/loader.js Normal file
View File

@ -0,0 +1,101 @@
(async function() {
const folderPath = (path) => path.substring(0, path.length - path.split('/').pop().length);
var scriptPath = (typeof window.EJS_pathtodata === "string") ? window.EJS_pathtodata : folderPath((new URL(document.currentScript.src)).pathname);
if (!scriptPath.endsWith('/')) scriptPath+='/';
//console.log(scriptPath);
function loadScript(file) {
return new Promise(function (resolve, reject) {
let script = document.createElement('script');
script.src = function() {
if ('undefined' != typeof EJS_paths && typeof EJS_paths[file] === 'string') {
return EJS_paths[file];
} else {
return scriptPath+file;
}
}();
script.onload = resolve;
document.head.appendChild(script);
})
}
function loadStyle(file) {
return new Promise(function(resolve, reject) {
let css = document.createElement('link');
css.rel = 'stylesheet';
css.href = function() {
if ('undefined' != typeof EJS_paths && typeof EJS_paths[file] === 'string') {
return EJS_paths[file];
} else {
return scriptPath+file;
}
}();
css.onload = resolve;
document.head.appendChild(css);
})
}
if (('undefined' != typeof EJS_DEBUG_XX && true === EJS_DEBUG_XX)) {
await loadScript('emulator.js');
await loadScript('nipplejs.js');
await loadScript('shaders.js');
await loadScript('storage.js');
await loadScript('gamepad.js');
await loadScript('GameManager.js');
await loadScript('socket.io.min.js');
await loadStyle('emulator.css');
} else {
await loadScript('emulator.min.js');
await loadStyle('emulator.min.css');
}
const config = {};
config.gameUrl = window.EJS_gameUrl;
config.dataPath = scriptPath;
config.system = window.EJS_core;
config.biosUrl = window.EJS_biosUrl;
config.gameName = window.EJS_gameName;
config.color = window.EJS_color;
config.adUrl = window.EJS_AdUrl;
config.adTimer = window.EJS_AdTimer;
config.VirtualGamepadSettings = window.EJS_VirtualGamepadSettings;
config.buttonOpts = window.EJS_Buttons;
config.volume = window.EJS_volume;
config.defaultControllers = window.EJS_defaultControls;
config.startOnLoad = window.EJS_startOnLoaded;
config.filePaths = window.EJS_paths;
config.loadState = window.EJS_loadStateURL;
config.cacheLimit = window.EJS_CacheLimit;
config.cheats = window.EJS_cheats;
config.defaultOptions = window.EJS_defaultOptions;
config.gamePatchUrl = window.EJS_gamePatchUrl;
config.gameParentUrl = window.EJS_gameParentUrl;
config.netplayUrl = window.EJS_netplayServer;
config.gameId = window.EJS_gameID;
config.backgroundImg = window.EJS_backgroundImage;
if (typeof window.EJS_language === "string" && window.EJS_language !== "en-US") {
try {
let path;
if ('undefined' != typeof EJS_paths && typeof EJS_paths[window.EJS_language] === 'string') {
path = EJS_paths[window.EJS_language];
} else {
path = scriptPath+"localization/"+window.EJS_language+".json";
}
config.language = window.EJS_language;
config.langJson = JSON.parse(await (await fetch(path)).text());
} catch(e) {
config.langJson = {};
}
}
window.EJS_emulator = new EmulatorJS(EJS_player, config);
if (typeof window.EJS_onGameStart === "function") {
window.EJS_emulator.on("start", window.EJS_onGameStart);
}
if (typeof window.EJS_onLoadState === "function") {
window.EJS_emulator.on("load", window.EJS_onLoadState);
}
if (typeof window.EJS_onSaveState === "function") {
window.EJS_emulator.on("save", window.EJS_onSaveState);
}
})();

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,196 @@
{
"i18n": {
"restart": "Redémarrer",
"play": "Jouer",
"pause": "Pause",
"played": "Joué",
"volume": "Volume",
"mute": "Muet (F9)",
"unmute": "Rétablir le son (F9)",
"enterFullscreen": "Entrer en plein écran",
"exitFullscreen": "Quitter le plein écran",
"settings": "Paramètres",
"saveState": "Enregistrer l'état (Maj + F2)",
"loadState": "État de charge (Maj + F4)",
"cacheManager": "Cache Manager",
"screenRecord": "Démarrer l'enregistrement d'écran",
"netplay": "Netplay",
"gamepad": "Paramètres de contrôle",
"cheat": "Tricheurs",
"menuBack": "Revenir au menu précédent",
"normal": "Normale",
"all": "Tous",
"reset": "Réinitialiser",
"disabled": "Désactivé",
"enabled": "Activé",
"playNow": "Jouer maintenant"
},
"normalOptions": {
"shader": {
"label": " Ombrage",
"options": {
"disabled": "Désactivé",
"2xScaleHQ.glslp": "2xScaleHQ",
"4xScaleHQ.glslp": "4xScaleHQ",
"crt-easymode.glslp": "CRT mode facile",
"crt-aperture.glslp": "Ouverture CRT",
"crt-geom.glslp": "CRT geom",
"crt-mattias.glslp": "CRT mattias"
},
"default": "disabled"
},
"virtual-gamepad": {
"label": " Manette de jeu virtuelle",
"options": {
"disabled": "Désactivé",
"enabled": "Activé"
},
"default": "enabled"
}
},
"Control Settings": "Paramètres de contrôle",
"Player 1": "Joueur 1",
"Player 2": "Joueur 2",
"Player 3": "Joueur 3",
"Player 4": "Joueur 4",
"Update": "Mettre à jour",
"Reset": "Réinitialiser",
"Clear": "Effacer",
"Cancel": "Annuler",
"Close": "Fermer",
"Empty": "Vide",
"Loading": "Chargement",
"Submit": "Soumettre",
"Description": "Description",
"Code": "Code",
"Add Cheat Code": "Ajouter un code de triche",
"OK": "D'accord",
"Add Cheat": "Ajouter une triche",
"Cache Manager": "Gestionnaire de cache",
"Press keyboard or gamepad": "Appuyez sur le clavier ou la manette de jeu",
"Gamepad": "Manette de jeu",
"Keyboard": "Clavier",
"Set": "Définir",
"QUICK SAVE STATE": "ÉTAT DE SAUVEGARDE RAPIDE",
"QUICK LOAD STATE": "ÉTAT DE CHARGEMENT RAPIDE",
"CHANGE STATE SLOT": "CHANGER L'EMPLACEMENT D'ETAT",
"INSERT COIN": "INSÉRER UNE PIÈCE",
"Press escape (esc) to clear": "Appuyez sur Échap (esc) pour effacer",
"Netplay": "Netplay",
"Rooms": "Chambres",
"Players": "Joueurs",
"Player": "Joueur",
"Room Name": "Nom de la pièce",
"Password": "Mot de passe",
"Name": "Nom",
"Quit Room": "Quitter le salon",
"Create a Room": "Créer une pièce",
"Set Player Name": "Définir le nom du joueur",
"Player Name": "Nom du joueur",
"Password (optional)": "Mot de passe (facultatif)",
"Select": "Sélectionner",
"Start": "Démarrer",
"Menu": "Menu",
"Decompress Game Core": "Décompresser le noyau du jeu",
"Decompress Game Data": "Décompresser les données du jeu",
"Decompress Game Patch": "Décompresser le patch du jeu",
"Download Game Data": "Télécharger les données du jeu",
"Download Game Core": "Télécharger le noyau du jeu",
"Network Error": "Erreur réseau",
"Default": "Par défaut",
"default": "par défaut",
"Save State Location": "Enregistrer l'emplacement de l'état",
"Save State Slot": "Enregistrer l'emplacement de l'état",
"Color Palette": " Palette de couleurs",
"No Sprite Limit": "Pas de limite de sprites",
"Enabled": "Activé",
"Disabled": "Désactivé",
"enabled": "activé",
"disabled": "désactivé",
"Low": "Bas",
"High": "Élevé",
"Very High": "Très élevé",
"4 Players Support": " Prise en charge de 4 joueurs",
"Turbo Enable": "Activation turbo",
"None": "Aucun",
"Both": "Les deux",
"Region": "Région",
"SuperFX Overclock": "SuperFX Overclock",
"Sound Quality": "Qualité sonore",
"GB Colorization": "GB Colorisation",
"auto": "auto",
"internal": "interne",
"Internal Palette": "Palette interne",
"GBC - Blue": "GBC Bleu",
"GBC - Brown": "GBC Marron",
"GBC - Dark Blue": "GBC Bleu Foncé",
"GBC - Dark Brown": "GBC Marron Foncé",
"GBC - Dark Green": "GBC vert foncé",
"GBC - Grayscale": " Niveaux de gris GBC",
"GBC - Green": "GBC Vert",
"GBC - Inverted": "GBC Inversé",
"GBC - Orange": "GBC Orange",
"GBC - Red": "GBC Rouge",
"GBC - Pastel Mix": "mélange de pastels GBC",
"GBC - Yellow": "GBC Jaune",
"Frameskip": "Frameskip",
"Solar sensor level": "Niveau du capteur solaire",
"Enable Turbo Buttons": "Activer les boutons turbo",
"Turbo Delay in frames": "Turbo Delay dans les images",
"Auto": "Auto",
"Aspect Ratio (Need to refresh page)": "Aspect Ratio (Besoin d'actualiser la page)",
"16:9 Resolution": "Résolution 16:9",
"4:3 Resolution": " Résolution 4:3",
"Player 1 Pak": "Pack joueur 1",
"Player 2 Pak": "Pack joueur 2",
"Player 3 Pak": "Pack de 3 joueurs",
"Player 4 Pak": "Pack de 4 joueurs",
"none": "aucun",
"memory": "mémoire",
"rumble": "grondement",
"Screen layout": "Disposition de l'écran",
"right/left": "droite/gauche",
"left/right": "gauche/droite",
"bottom/top": "bas/haut",
"top/bottom": "haut/bas",
"top only": "haut seulement",
"bottom only": "en bas uniquement",
"quick switch": "commutateur rapide",
"hybrid/bottom": "hybride/fond",
"hybrid/top": "hybride/haut",
"Screen Rotation": " Rotation de l'écran",
"CPU speed": "Vitesse du processeur",
"Sound output": "Sortie sonore",
"mono": "mono",
"stereo": "stéréo",
"OFF": "OFF",
"ON": "ON",
"Fast Blitter": "Blitter rapide",
"Bios": "Bios",
"Enable second memory card": "Activer la deuxième carte mémoire",
"Pad 1 Type": "Type de tampon 1",
"Pad 2 Type": "Type de plaquette 2",
"Pad 3 Type": "Type de tampon 3",
"Pad 4 Type": "Type de tampon 4",
"standard": "norme",
"analog": "analogique",
"negcon": "negcon",
"Enable Vibration": "Activer les vibrations",
"Enable interlacing mode(s)": "Activer le(s) mode(s) d'entrelacement",
"Enhanced resolution (slow)": "Résolution améliorée (lente)",
"Enhanced resolution speed hack": "Hack de vitesse de résolution améliorée",
"Aspect ratio": "Rapport d'aspect",
"CPU overclock": " Surcadençage du processeur",
"Force Neo Geo mode": "Forcer le mode Neo Geo",
"Diagnostic Input": "Entrée de diagnostic",
"download": "télécharger",
"keep in browser": "garder dans le navigateur",
"Webassembly support is not detected in this browser": "La prise en charge de Webassembly n'est pas détectée dans ce navigateur",
"Please upgrade your browser to the latest version": "Veuillez mettre à niveau votre navigateur vers la dernière version",
"Missing mame config": "Configuration Mame manquante",
"Stop Screen Recording": "Arrêter l'enregistrement d'écran",
"Start Screen Recording": "Démarrer l'enregistrement d'écran",
"Take Screenshot": "Prendre une capture d'écran",
"Quick Save": "Enregistrement rapide",
"Quick Load": "Chargement rapide"
}

View File

@ -0,0 +1,196 @@
{
"i18n": {
"restart": "اعادة البدء",
"play": " تشغيل",
"pause": " وقفة",
"played": " تم اللعب",
"volume": " الحجم",
"mute": " كتم الصوت (F9)",
"unmute": " إلغاء كتم الصوت (F9)",
"enterFullscreen": " أدخل ملء الشاشة",
"exitFullscreen": " الخروج من وضع ملء الشاشة",
"settings": " الإعدادات",
"saveState": " حفظ الحالة (إزاحة + F2)",
"loadState": " حالة التحميل (Shift + F4)",
"cacheManager": "Cache Manager",
"screenRecord": " بدء تسجيل الشاشة",
"netplay": " نيت بلاي",
"gamepad": " إعدادات التحكم",
"cheat": " غش",
"menuBack": " ارجع إلى القائمة السابقة",
"normal": " عادي",
"all": " الكل",
"reset": " إعادة تعيين",
"disabled": " معطل",
"enabled": " ممكّن",
"playNow": " العب الآن"
},
"normalOptions": {
"shader": {
"label": " شادر",
"options": {
"disabled": " معطل",
"2xScaleHQ.glslp": " 2x مقياس",
"4xScaleHQ.glslp": " 4xScaleHQ",
"crt-easymode.glslp": " وضع CRT السهل",
"crt-aperture.glslp": " فتحة CRT",
"crt-geom.glslp": " CRT geom",
"crt-mattias.glslp": "CRT mattias"
},
"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": " Gamepad",
"Keyboard": " لوحة المفاتيح",
"Set": " مجموعة",
"QUICK SAVE STATE": " حالة الحفظ السريع",
"QUICK LOAD STATE": " حالة التحميل السريع",
"CHANGE STATE SLOT": " تغيير فتحة الدولة",
"INSERT COIN": " أدخل عملة",
"Press escape (esc) to clear": " اضغط على مفتاح الهروب (esc) للمسح",
"Netplay": " نيت بلاي",
"Rooms": " الغرف",
"Players": " اللاعبين",
"Player": " لاعب",
"Room Name": " اسم الغرفة",
"Password": " كلمة المرور",
"Name": " الاسم",
"Quit Room": " قم بإنهاء الغرفة",
"Create a Room": " إنشاء غرفة",
"Set Player Name": " تعيين اسم اللاعب",
"Player Name": " اسم اللاعب",
"Password (optional)": " كلمة المرور (اختياري)",
"Select": " حدد",
"Start": " ابدأ",
"Menu": " القائمة",
"Decompress Game Core": " فك ضغط جوهر اللعبة",
"Decompress Game Data": " فك ضغط بيانات اللعبة",
"Decompress Game Patch": " فك ضغط لعبة التصحيح",
"Download Game Data": " تنزيل بيانات اللعبة",
"Download Game Core": " تحميل 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": " تمكين توربو",
"None": " لا شيء",
"Both": " كلاهما",
"Region": " المنطقة",
"SuperFX Overclock": " SuperFX فيركلوك",
"Sound Quality": " جودة الصوت",
"GB Colorization": " تلوين GB",
"auto": " تلقائي",
"internal": " داخلي",
"Internal Palette": " لوحة داخلية",
"GBC - Blue": " GBC Blue",
"GBC - Brown": " جي بي سي براون",
"GBC - Dark Blue": " GBC أزرق داكن",
"GBC - Dark Brown": " GBC بني غامق",
"GBC - Dark Green": " GBC أخضر غامق",
"GBC - Grayscale": " GBC Grayscale",
"GBC - Green": " GBC Green",
"GBC - Inverted": " GBC مقلوب",
"GBC - Orange": " GBC Orange",
"GBC - Red": " جي بي سي أحمر",
"GBC - Pastel Mix": " جي بي سي باستيل ميكس",
"GBC - Yellow": " GBC Yellow",
"Frameskip": " Frameskip",
"Solar sensor level": " مستوى استشعار الطاقة الشمسية",
"Enable Turbo Buttons": " تمكين أزرار Turbo",
"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 باك",
"Player 2 Pak": " اللاعب 2 باك",
"Player 3 Pak": " اللاعب 3 باك",
"Player 4 Pak": " اللاعب 4 باك",
"none": " لا شيء",
"memory": " الذاكرة",
"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": " السير",
"Enable second memory card": " تفعيل بطاقة الذاكرة الثانية",
"Pad 1 Type": " نوع الوسادة 1",
"Pad 2 Type": " نوع الوسادة 2",
"Pad 3 Type": " نوع الوسادة 3",
"Pad 4 Type": " نوع الوسادة 4",
"standard": " قياسي",
"analog": " التناظرية",
"negcon": " نيجكون",
"Enable Vibration": " تمكين الاهتزاز",
"Enable interlacing mode(s)": " تمكين وضع (أوضاع) التداخل",
"Enhanced resolution (slow)": " دقة محسنة (بطيئة)",
"Enhanced resolution speed hack": " تحسين دقة سرعة الاختراق",
"Aspect ratio": " نسبة العرض إلى الارتفاع",
"CPU overclock": " وحدة المعالجة المركزية فيركلوك",
"Force Neo Geo mode": " فرض الوضع الجغرافي الجديد",
"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 config",
"Stop Screen Recording": " إيقاف تسجيل الشاشة",
"Start Screen Recording": " بدء تسجيل الشاشة",
"Take Screenshot": " خذ لقطة شاشة",
"Quick Save": " حفظ سريع",
"Quick Load": " تحميل سريع"
}

View File

@ -0,0 +1,196 @@
{
"i18n": {
"restart": "আবার শুরু",
"play": "খেলা",
"pause": " বিরতি",
"played": " খেলেছে",
"volume": " ভলিউম",
"mute": "নিঃশব্দ (F9)",
"unmute": "আনমিউট (F9)",
"enterFullscreen": "পূর্ণ স্ক্রীনে প্রবেশ করুন",
"exitFullscreen": "ফুলস্ক্রিন থেকে প্রস্থান করুন",
"settings": "সেটিংস",
"saveState": "সেভ স্টেট (Shift + F2)",
"loadState": "লোড স্টেট (Shift + F4)",
"cacheManager": "Cache Manager",
"screenRecord": "স্ক্রিন রেকর্ডিং শুরু করুন",
"netplay": "নেটপ্লে",
"gamepad": "নিয়ন্ত্রণ সেটিংস",
"cheat": "প্রতারক",
"menuBack": "আগের মেনুতে ফিরে যান",
"normal": " স্বাভাবিক",
"all": "সব",
"reset": "রিসেট করুন",
"disabled": " প্রতিবন্ধী",
"enabled": "সক্রিয়",
"playNow": "এখন খেলুন"
},
"normalOptions": {
"shader": {
"label": "শাদের",
"options": {
"disabled": " প্রতিবন্ধী",
"2xScaleHQ.glslp": "2xScaleHQ",
"4xScaleHQ.glslp": "4xScaleHQ",
"crt-easymode.glslp": "সিআরটি ইজিমোড",
"crt-aperture.glslp": "সিআরটি অ্যাপারচার",
"crt-geom.glslp": "সিআরটি জিওম",
"crt-mattias.glslp": "CRT mattias"
},
"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 escape (esc) to clear": " সাফ করতে escape (esc) টিপুন",
"Netplay": "নেটপ্লে",
"Rooms": "রুম",
"Players": "খেলোয়াড়",
"Player": "খেলোয়াড়",
"Room Name": "রুমের নাম",
"Password": "পাসওয়ার্ড",
"Name": "নাম",
"Quit Room": " রুম ছেড়ে দাও",
"Create a Room": " একটি রুম তৈরি করুনপ্লেয়ারের নাম সেট করুন",
"Set Player Name": "খেলোয়াড়ের নাম",
"Player Name": "পাসওয়ার্ড (ঐচ্ছিক)",
"Password (optional)": " নির্বাচন করুন",
"Select": "শুরু",
"Start": "মেনু",
"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 প্লেয়ার সাপোর্ট",
"4 Players Support": "টার্বো সক্ষম",
"Turbo Enable": " কোনোটিই নয়",
"None": "দুটোই",
"Both": " অঞ্চল",
"Region": "SuperFX ওভারক্লক",
"SuperFX Overclock": " সাউন্ড কোয়ালিটি",
"Sound Quality": "জিবি কালারাইজেশন",
"GB Colorization": "অটো",
"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 - Green": "GBC উল্টানো",
"GBC - Inverted": "GBC কমলা",
"GBC - Orange": "GBC রেড",
"GBC - Red": "GBC প্যাস্টেল মিক্স",
"GBC - Pastel Mix": "GBC হলুদ",
"GBC - Yellow": "ফ্রেমস্কিপ",
"Frameskip": "সৌর সেন্সর স্তর",
"Solar sensor level": " টার্বো বোতাম সক্ষম করুন৷",
"Enable Turbo Buttons": "ফ্রেমে টার্বো বিলম্ব",
"Turbo Delay in frames": "অটো",
"Auto": "আসপেক্ট রেশিও (পৃষ্ঠা রিফ্রেশ করতে হবে)",
"Aspect Ratio (Need to refresh page)": "16:9 রেজোলিউশন",
"16:9 Resolution": "4:3 রেজোলিউশন",
"4:3 Resolution": "খেলোয়াড় 1 পাক",
"Player 1 Pak": "খেলোয়াড় 2 পাক",
"Player 2 Pak": "খেলোয়াড় ৩ পাক",
"Player 3 Pak": "প্লেয়ার 4 পাক",
"Player 4 Pak": " কোনোটিই নয়",
"none": "স্মৃতি",
"memory": "রম্বল",
"rumble": "স্ক্রিন লেআউট",
"Screen layout": "ডান/বাম",
"right/left": "বাম/ডান",
"left/right": "নিচে/উপরে",
"bottom/top": "শীর্ষ/নীচ",
"top/bottom": "শুধুমাত্র উপরে",
"top only": "শুধু নীচে",
"bottom only": " দ্রুত সুইচ",
"quick switch": "হাইব্রিড/নিচ",
"hybrid/bottom": "হাইব্রিড/টপ",
"hybrid/top": "স্ক্রিন ঘূর্ণন",
"Screen Rotation": " CPU গতি",
"CPU speed": " সাউন্ড আউটপুট",
"Sound output": "মনোস্টেরিও",
"mono": "বন্ধ",
"stereo": " চালু",
"OFF": "ফাস্ট ব্লিটার",
"ON": "বায়োস",
"Fast Blitter": "দ্বিতীয় মেমরি কার্ড সক্রিয় করুন",
"Bios": "প্যাড 1 প্রকার",
"Enable second memory card": "প্যাড 2 প্রকার",
"Pad 1 Type": "প্যাড 3 প্রকার",
"Pad 2 Type": "প্যাড 4 প্রকার",
"Pad 3 Type": "মান",
"Pad 4 Type": "অ্যানালগ",
"standard": "নেগকন",
"analog": "কম্পন সক্ষম করুন",
"negcon": "ইন্টারলেসিং মোড(গুলি) সক্ষম করুন",
"Enable Vibration": "বর্ধিত রেজোলিউশন (ধীরে)",
"Enable interlacing mode(s)": "বর্ধিত রেজোলিউশন গতি হ্যাক",
"Enhanced resolution (slow)": " আকৃতির অনুপাত",
"Enhanced resolution speed hack": "CPU ওভারক্লক",
"Aspect ratio": " নিও জিও মোড ফোর্স করুন",
"CPU overclock": "ডায়াগনস্টিক ইনপুট",
"Force Neo Geo mode": "ডাউনলোড করুনব্রাউজারে রাখুন",
"Diagnostic Input": "ওয়েবসেম্বলি সমর্থন এই ব্রাউজারে সনাক্ত করা হয়নি",
"download": "অনুগ্রহ করে আপনার ব্রাউজারটিকে সর্বশেষ সংস্করণে আপগ্রেড করুন৷",
"keep in browser": " mame কনফিগারেশন অনুপস্থিত",
"Webassembly support is not detected in this browser": "স্ক্রিন রেকর্ডিং বন্ধ করুন",
"Please upgrade your browser to the latest version": "স্ক্রিন রেকর্ডিং শুরু করুন",
"Missing mame config": "স্ক্রিনশট নিন",
"Stop Screen Recording": " দ্রুত সংরক্ষণ করুন",
"Start Screen Recording": " দ্রুত লোড",
"Take Screenshot": "",
"Quick Save": "undefined",
"Quick Load": "undefined"
}

View File

@ -0,0 +1,196 @@
{
"i18n": {
"restart": "Neu starten",
"play": "Spielen",
"pause": "Pause",
"played": "Gespielt",
"volume": "Lautstärke",
"mute": "Stumm (F9)",
"unmute": "Stumm aufheben (F9)",
"enterFullscreen": "Vollbild aufrufen",
"exitFullscreen": "Vollbild verlassen",
"settings": "Einstellungen",
"saveState": "Zustand speichern (Umschalt + F2)",
"loadState": "Zustand laden (Umschalt + F4)",
"cacheManager": "Cache Manager",
"screenRecord": "Bildschirmaufnahme starten",
"netplay": "Netzspiel",
"gamepad": "Steuerungseinstellungen",
"cheat": "Betrug",
"menuBack": "Zurück zum vorherigen Menü",
"normal": "Normal",
"all": "Alle",
"reset": "Zurücksetzen",
"disabled": "Deaktiviert",
"enabled": "Aktiviert",
"playNow": "Jetzt spielen"
},
"normalOptions": {
"shader": {
"label": "Shader",
"options": {
"disabled": "Deaktiviert",
"2xScaleHQ.glslp": "2xScaleHQ",
"4xScaleHQ.glslp": "4xScaleHQ",
"crt-easymode.glslp": "CRT Easymode",
"crt-aperture.glslp": "CRT-Öffnung",
"crt-geom.glslp": "Kathodengeom",
"crt-mattias.glslp": "CRT mattias"
},
"default": "disabled"
},
"virtual-gamepad": {
"label": "Virtuelles Gamepad",
"options": {
"disabled": "Deaktiviert",
"enabled": "Aktiviert"
},
"default": "enabled"
}
},
"Control Settings": "Steuerungseinstellungen",
"Player 1": "Spieler 1",
"Player 2": "Spieler 2",
"Player 3": "Spieler 3",
"Player 4": "Spieler 4",
"Update": "Aktualisieren",
"Reset": "Zurücksetzen",
"Clear": "Löschen",
"Cancel": "Abbrechen",
"Close": "Schließen",
"Empty": "Leer",
"Loading": "Wird geladen",
"Submit": "Senden",
"Description": "Beschreibung",
"Code": "Code",
"Add Cheat Code": "Cheat-Code hinzufügen",
"OK": "Okay",
"Add Cheat": "Cheat hinzufügen",
"Cache Manager": "Cache-Manager",
"Press keyboard or gamepad": "Taste oder Gamepad drücken",
"Gamepad": "Gamepad",
"Keyboard": "Tastatur",
"Set": "Setzen",
"QUICK SAVE STATE": "SCHNELLSPEICHERSTATUS",
"QUICK LOAD STATE": "SCHNELLER LADEZUSTAND",
"CHANGE STATE SLOT": "STATUS SLOT ÄNDERN",
"INSERT COIN": "MÜNZE EINWERFEN",
"Press escape (esc) to clear": "Drücken Sie zum Löschen die Escape-Taste (esc).",
"Netplay": "Netzspiel",
"Rooms": "Zimmer",
"Players": "Spieler",
"Player": "Spieler",
"Room Name": "Raumname",
"Password": "Passwort",
"Name": "Name",
"Quit Room": "Raum verlassen",
"Create a Room": "Erstelle einen Raum",
"Set Player Name": "Spielernamen festlegen",
"Player Name": "Spielername",
"Password (optional)": "Passwort (optional)",
"Select": "Auswählen",
"Start": "Starten",
"Menu": "Menü",
"Decompress Game Core": "Spielkern dekomprimieren",
"Decompress Game Data": "Spieldaten dekomprimieren",
"Decompress Game Patch": "Spiel-Patch dekomprimieren",
"Download Game Data": "Spieldaten herunterladen",
"Download Game Core": "Spielkern herunterladen",
"Network Error": "Netzwerkfehler",
"Default": "Standard",
"default": "Standard",
"Save State Location": "Zustandsstandort speichern",
"Save State Slot": "Zustandsplatz speichern",
"Color Palette": "Farbpalette",
"No Sprite Limit": "Kein Sprite-Limit",
"Enabled": "Aktiviert",
"Disabled": "Deaktiviert",
"enabled": "aktiviert",
"disabled": "deaktiviert",
"Low": "Niedrig",
"High": "Hoch",
"Very High": "Sehr hoch",
"4 Players Support": "Unterstützung für 4 Spieler",
"Turbo Enable": "Turbo aktivieren",
"None": "Keine",
"Both": "Beide",
"Region": "Region",
"SuperFX Overclock": "SuperFX-Übertaktung",
"Sound Quality": "Tonqualität",
"GB Colorization": "GB Kolorierung",
"auto": "automat",
"internal": "intern",
"Internal Palette": "Interne Palette",
"GBC - Blue": "GBC-Blau",
"GBC - Brown": "GBC Braun",
"GBC - Dark Blue": "GBC Dunkelblau",
"GBC - Dark Brown": "GBC Dunkelbraun",
"GBC - Dark Green": "GBC Dunkelgrün",
"GBC - Grayscale": "GBC Graustufen",
"GBC - Green": "GBC-Grün",
"GBC - Inverted": "GBC invertiert",
"GBC - Orange": "GBC-Orange",
"GBC - Red": "GBC-Rot",
"GBC - Pastel Mix": "GBC Pastellmischung",
"GBC - Yellow": "GBC-Gelb",
"Frameskip": "Frameskip",
"Solar sensor level": " Niveau Solarsensor",
"Enable Turbo Buttons": "Turbo-Schaltflächen aktivieren",
"Turbo Delay in frames": "Turbo Delay in Frames",
"Auto": "Autom",
"Aspect Ratio (Need to refresh page)": "Seitenverhältnis (Seite muss aktualisiert werden)",
"16:9 Resolution": "16:9-Auflösung",
"4:3 Resolution": "4:3-Auflösung",
"Player 1 Pak": "Spieler 1 Pak",
"Player 2 Pak": "Spieler 2 Pak",
"Player 3 Pak": "Spieler 3 Pak",
"Player 4 Pak": "Spieler 4 Pak",
"none": "keine",
"memory": "Erinnerung",
"rumble": "Grollen",
"Screen layout": "Bildschirmlayout",
"right/left": "rechts/links",
"left/right": "links/rechts",
"bottom/top": "unten/oben",
"top/bottom": "oben/unten",
"top only": "nur oben",
"bottom only": "nur unten",
"quick switch": "schneller Wechsel",
"hybrid/bottom": "hybrid/unten",
"hybrid/top": "hybrid/top",
"Screen Rotation": "Bildschirmrotation",
"CPU speed": "CPU-Geschwindigkeit",
"Sound output": "Tonausgabe",
"mono": "Mono",
"stereo": "Stereo",
"OFF": "AUS",
"ON": "EIN",
"Fast Blitter": "Schneller Blitter",
"Bios": "Bios",
"Enable second memory card": "Zweite Speicherkarte aktivieren",
"Pad 1 Type": "Pad 1 Typ",
"Pad 2 Type": "Pad 2-Typ",
"Pad 3 Type": "Pad-3-Typ",
"Pad 4 Type": "Pad-4-Typ",
"standard": "Standard",
"analog": "analog",
"negcon": "negkon",
"Enable Vibration": "Vibration aktivieren",
"Enable interlacing mode(s)": "Interlacing-Modus(s) aktivieren",
"Enhanced resolution (slow)": "Erhöhte Auflösung (langsam)",
"Enhanced resolution speed hack": "Verbesserter Auflösungsgeschwindigkeits-Hack",
"Aspect ratio": "Seitenverhältnis",
"CPU overclock": "CPU-Übertaktung",
"Force Neo Geo mode": "Neo-Geo-Modus erzwingen",
"Diagnostic Input": "Diagnoseeingang",
"download": "herunterladen",
"keep in browser": "im Browser bleiben",
"Webassembly support is not detected in this browser": "Webassembly-Unterstützung wird in diesem Browser nicht erkannt",
"Please upgrade your browser to the latest version": "Bitte aktualisieren Sie Ihren Browser auf die neueste Version",
"Missing mame config": "Fehlende Mame-Konfiguration",
"Stop Screen Recording": "Beenden Sie die Bildschirmaufzeichnung",
"Start Screen Recording": "Bildschirmaufnahme starten",
"Take Screenshot": "Screenshot machen",
"Quick Save": "Schnellspeichern",
"Quick Load": "Schnelles Laden"
}

View File

@ -0,0 +1,199 @@
{
"i18n": {
"restart": "Επανεκκίνηση",
"play": "Συνέχισε",
"pause": "Παύση",
"played": "Παίχτηκε",
"volume": "Ένταση",
"mute": "Σίγαση (F9)",
"unmute": "Αναίρεση σίγασης (F9)",
"enterFullscreen": "Πλήρης οθόνη",
"exitFullscreen": "Κλείσιμο πλήρους οθόνης",
"settings": "Ρυθμίσεις",
"saveState": "Αποθήκευση (Shift + F2)",
"loadState": "Φόρτωση (Shift + F4)",
"cacheManager": "Cache Manager",
"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": "Λειτουργία οθόνης παλαιού τύπου με θόλο",
"crt-mattias.glslp": "CRT mattias"
},
"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": "Γρήγορη Φόρτωση"
}

View File

@ -0,0 +1,199 @@
{
"i18n": {
"restart": "-Restart",
"play": "-Play",
"pause": "-Pause",
"played": "-Played",
"volume": "-Volume",
"mute": "-Mute (F9)",
"unmute": "-Unmute (F9)",
"enterFullscreen": "-Enter fullscreen",
"exitFullscreen": "-Exit fullscreen",
"settings": "-Settings",
"saveState": "-Save State (Shift + F2)",
"loadState": "-Load State (Shift + F4)",
"screenRecord": "-Start Screen Recording",
"cacheManager": "-Cache Manager",
"netplay": "-Netplay",
"gamepad": "-Control Settings",
"cheat": "-Cheats",
"menuBack": "-Go back to previous menu",
"normal": "-Normal",
"all": "-All",
"reset": "-Reset",
"disabled": "-Disabled",
"enabled": "-Enabled",
"playNow": "-Play Now"
},
"normalOptions": {
"shader": {
"label": "-Shader",
"options": {
"disabled": "-Disabled",
"2xScaleHQ.glslp": "-2xScaleHQ",
"4xScaleHQ.glslp": "-4xScaleHQ",
"crt-easymode.glslp": "-CRT easymode",
"crt-aperture.glslp": "-CRT aperture",
"crt-geom.glslp": "-CRT geom",
"crt-mattias.glslp": "-CRT mattias"
},
"default": "disabled"
},
"virtual-gamepad": {
"label": "-Virtual Gamepad",
"options": {
"disabled": "-Disabled",
"enabled": "-Enabled"
},
"default": "enabled"
}
},
"Control Settings": "-Control Settings",
"Player 1": "-Player 1",
"Player 2": "-Player 2",
"Player 3": "-Player 3",
"Player 4": "-Player 4",
"Update": "-Update",
"Reset": "-Reset",
"Clear": "-Clear",
"Cancel": "-Cancel",
"Close": "-Close",
"Empty": "-Empty",
"Loading": "-Loading",
"Submit": "-Submit",
"Description": "-Description",
"Code": "-Code",
"Add Cheat Code": "-Add Cheat Code",
"OK": "-OK",
"Add Cheat": "-Add Cheat",
"Cache Manager": "-Cache Manager",
"Press keyboard or gamepad": "-Press keyboard or gamepad",
"Gamepad": "-Gamepad",
"Keyboard": "-Keyboard",
"Set": "-Set",
"QUICK SAVE STATE": "-QUICK SAVE STATE",
"QUICK LOAD STATE": "-QUICK LOAD STATE",
"CHANGE STATE SLOT": "-CHANGE STATE SLOT",
"INSERT COIN": "-INSERT COIN",
"Press keyboard or gamepad": "-Press keyboard or gamepad",
"Press escape (esc) to clear": "-Press escape (esc) to clear",
"Netplay": "-Netplay",
"Rooms": "-Rooms",
"Players": "-Players",
"Player": "-Player",
"Room Name": "-Room Name",
"Password": "-Password",
"Name": "-Name",
"Quit Room": "-Quit Room",
"Create a Room": "-Create a Room",
"Set Player Name": "-Set Player Name",
"Player Name": "-Player Name",
"Room Name": "-Room Name",
"Create a Room": "-Create a Room",
"Password (optional)": "-Password (optional)",
"Select": "-Select",
"Start": "-Start",
"Menu": "-Menu",
"Decompress Game Core": "-Decompress Game Core",
"Decompress Game Data": "-Decompress Game Data",
"Decompress Game Patch": "-Decompress Game Patch",
"Download Game Data": "-Download Game Data",
"Download Game Core": "-Download Game Core",
"Network Error": "-Network Error",
"Default": "-Default",
"default": "-default",
"Save State Location": "-Save State Location",
"Save State Slot": "-Save State Slot",
"Color Palette": "-Color Palette",
"No Sprite Limit": "-No Sprite Limit",
"Enabled": "-Enabled",
"Disabled": "-Disabled",
"enabled": "-enabled",
"disabled": "-disabled",
"Low": "-Low",
"High": "-High",
"Very High": "-Very High",
"4 Players Support": "-4 Players Support",
"Turbo Enable": "-Turbo Enable",
"None": "-None",
"Both": "-Both",
"Region": "-Region",
"SuperFX Overclock": "-SuperFX Overclock",
"Sound Quality": "-Sound Quality",
"GB Colorization": "-GB Colorization",
"auto": "-auto",
"internal": "-internal",
"Internal Palette": "-Internal Palette",
"GBC - Blue": "-GBC - Blue",
"GBC - Brown": "-GBC - Brown",
"GBC - Dark Blue": "-GBC - Dark Blue",
"GBC - Dark Brown": "-GBC - Dark Brown",
"GBC - Dark Green": "-GBC - Dark Green",
"GBC - Grayscale": "-GBC - Grayscale",
"GBC - Green": "-GBC - Green",
"GBC - Inverted": "-GBC - Inverted",
"GBC - Orange": "-GBC - Orange",
"GBC - Red": "-GBC - Red",
"GBC - Pastel Mix": "-GBC - Pastel Mix",
"GBC - Yellow": "-GBC - Yellow",
"Frameskip": "-Frameskip",
"Solar sensor level": "-Solar sensor level",
"Enable Turbo Buttons": "-Enable Turbo Buttons",
"Turbo Delay in frames": "-Turbo Delay in frames",
"Auto": "-Auto",
"Aspect Ratio (Need to refresh page)": "-Aspect Ratio (Need to refresh page)",
"16:9 Resolution": "-16:9 Resolution",
"4:3 Resolution": "-4:3 Resolution",
"Player 1 Pak": "-Player 1 Pak",
"Player 2 Pak": "-Player 2 Pak",
"Player 3 Pak": "-Player 3 Pak",
"Player 4 Pak": "-Player 4 Pak",
"none": "-none",
"memory": "-memory",
"rumble": "-rumble",
"Screen layout": "-Screen layout",
"right/left": "-right/left",
"left/right": "-left/right",
"bottom/top": "-bottom/top",
"top/bottom": "-top/bottom",
"top only": "-top only",
"bottom only": "-bottom only",
"quick switch": "-quick switch",
"hybrid/bottom": "-hybrid/bottom",
"hybrid/top": "-hybrid/top",
"Screen Rotation": "-Screen Rotation",
"CPU speed": "-CPU speed",
"Sound output": "-Sound output",
"mono": "-mono",
"stereo": "-stereo",
"OFF": "-OFF",
"ON": "-ON",
"Fast Blitter": "-Fast Blitter",
"Bios": "-Bios",
"Enable second memory card": "-Enable second memory card",
"Pad 1 Type": "-Pad 1 Type",
"Pad 2 Type": "-Pad 2 Type",
"Pad 3 Type": "-Pad 3 Type",
"Pad 4 Type": "-Pad 4 Type",
"standard": "-standard",
"analog": "-analog",
"negcon": "-negcon",
"Enable Vibration": "-Enable Vibration",
"Enable interlacing mode(s)": "-Enable interlacing mode(s)",
"Enhanced resolution (slow)": "-Enhanced resolution (slow)",
"Enhanced resolution speed hack": "-Enhanced resolution speed hack",
"Aspect ratio": "-Aspect ratio",
"CPU overclock": "-CPU overclock",
"Force Neo Geo mode": "-Force Neo Geo mode",
"Diagnostic Input": "-Diagnostic Input",
"download": "-download",
"keep in browser": "-keep in browser",
"Webassembly support is not detected in this browser": "-Webassembly support is not detected in this browser",
"Please upgrade your browser to the latest version": "-Please upgrade your browser to the latest version",
"Missing mame config": "-Missing mame config",
"Stop Screen Recording": "-Stop Screen Recording",
"Start Screen Recording": "-Start Screen Recording",
"Take Screenshot": "-Take Screenshot",
"Quick Save": "-Quick Save",
"Quick Load": "-Quick Load"
}

View File

@ -0,0 +1,196 @@
{
"i18n": {
"restart": "Restart",
"play": "Jugar",
"pause": "Pausa",
"played": "Jugó",
"volume": "Volumen",
"mute": "Silencio (F9)",
"unmute": "Activar (F9)",
"enterFullscreen": "Pantalla completa",
"exitFullscreen": "Salir de pantalla completa",
"settings": "Ajustes",
"saveState": "Guardar Estado (Shift + F2)",
"loadState": "Cargar Estado (Shift + F4)",
"cacheManager": "Cache Manager",
"screenRecord": "Comenzar gravacion de pantalla",
"netplay": "Netplay",
"gamepad": "Ajustes de control",
"cheat": "Trampas",
"menuBack": "Volver al menú anterior",
"normal": "Normal",
"all": "Todo",
"reset": "Reset",
"disabled": "Desactivar",
"enabled": "Activar",
"playNow": "Jugar ahora"
},
"normalOptions": {
"shader": {
"label": "Sombreador",
"options": {
"disabled": "Discapacitado",
"2xScaleHQ.glslp": "2xScaleHQ",
"4xScaleHQ.glslp": "4xScaleHQ",
"crt-easymode.glslp": "CRT easymode",
"crt-aperture.glslp": "CRT aperture",
"crt-geom.glslp": "CRT geom",
"crt-mattias.glslp": "CRT mattias"
},
"default": "disabled"
},
"virtual-gamepad": {
"label": "Controles Virtuales",
"options": {
"disabled": "Discapacitado",
"enabled": "Activado"
},
"default": "enabled"
}
},
"Control Settings": "Ajustes de control",
"Player 1": "Jugador 1",
"Player 2": "Jugador 2",
"Player 3": "Jugador 3",
"Player 4": "Jugador 4",
"Update": "Actualizar",
"Reset": "Reiniciar",
"Clear": "Limpiar",
"Cancel": "Cancelar",
"Close": "Cerca",
"Empty": "Vacío",
"Loading": "Cargando",
"Submit": "Mandar",
"Description": "Descripción",
"Code": "Código",
"Add Cheat Code": "Agregar código de Trampa",
"OK": "OK",
"Add Cheat": "Agregar Trampa",
"Cache Manager": "Administrador de Cache",
"Press keyboard or gamepad": "Presione el teclado o el controlador",
"Gamepad": "Control",
"Keyboard": "Teclado",
"Set": "Definir",
"QUICK SAVE STATE": "GUARDAR ESTADO RÁPIDO",
"QUICK LOAD STATE": "CARGA ESTADO RÁPIDO",
"CHANGE STATE SLOT": "CAMBIAR SLOT DEL ESTADO",
"INSERT COIN": "INSERTE MONEDA",
"Press escape (esc) to clear": "Pressione (esc) para limpiar",
"Netplay": "Netplay",
"Rooms": "Salas",
"Players": "Jugadores",
"Player": "Jugador",
"Room Name": "Nombre de la Sala",
"Password": "Contraseña",
"Name": "Nombre",
"Quit Room": "Dejar Sala",
"Create a Room": "Crear una Sala",
"Set Player Name": "Configurar el nombre del jugador",
"Player Name": "Nombre del Jugador",
"Password (optional)": "Contraseña (opcional)",
"Select": "Select",
"Start": "Start",
"Menu": "Menu",
"Decompress Game Core": "Decompress Game Core",
"Decompress Game Data": "Decompress Game Data",
"Decompress Game Patch": "Decompress Game Patch",
"Download Game Data": "Download Game Data",
"Download Game Core": "Download Game Core",
"Network Error": "Network Error",
"Default": "Estándar",
"default": "estándar",
"Save State Location": "Guardar Estado Lugar",
"Save State Slot": "Cargar Slot del Lugar",
"Color Palette": "Paleta de Colores",
"No Sprite Limit": "Sin límite de Sprite",
"Enabled": "Activado",
"Disabled": "Discapacitado",
"enabled": "activado",
"disabled": "discapacitado",
"Low": "Bajo",
"High": "Alto",
"Very High": "Muy Alto",
"4 Players Support": "Soporte para 4 jugadores",
"Turbo Enable": "Activar Turbo",
"None": "Ninguna",
"Both": "Ambos",
"Region": "Región",
"SuperFX Overclock": "SuperFX Overclock",
"Sound Quality": "Calidad de Sonido",
"GB Colorization": "GB Coloración",
"auto": "auto",
"internal": "interno",
"Internal Palette": "Paleta Interna",
"GBC - Blue": "GBC - Azul",
"GBC - Brown": "GBC - Marrón",
"GBC - Dark Blue": "GBC - Azul Oscuro",
"GBC - Dark Brown": "GBC - Marrón Oscuro",
"GBC - Dark Green": "GBC - Verde Oscuro",
"GBC - Grayscale": "GBC - Gris",
"GBC - Green": "GBC - Verde",
"GBC - Inverted": "GBC - Invertido",
"GBC - Orange": "GBC - Naranja",
"GBC - Red": "GBC - Rojo",
"GBC - Pastel Mix": "GBC - Pastel Mix",
"GBC - Yellow": "GBC - Amarillo",
"Frameskip": "Frameskip",
"Solar sensor level": "Solar sensor level",
"Enable Turbo Buttons": "Permitir Botones Turbo",
"Turbo Delay in frames": "Turbo Delay en frames",
"Auto": "Auto",
"Aspect Ratio (Need to refresh page)": "Aspect Ratio (Necesita actualizar la página)",
"16:9 Resolution": "16:9 Resolución",
"4:3 Resolution": "4:3 Resolución",
"Player 1 Pak": "Jugador 1 Pak",
"Player 2 Pak": "Jugador 2 Pak",
"Player 3 Pak": "Jugador 3 Pak",
"Player 4 Pak": "Jugador 4 Pak",
"none": "ninguna",
"memory": "memoria",
"rumble": "rumble",
"Screen layout": "Diseño de Pantalla",
"right/left": "directo/izquierda",
"left/right": "izquierda/directo",
"bottom/top": "fondo/principal",
"top/bottom": "principal/fondo",
"top only": "principal algo",
"bottom only": "fondo algo",
"quick switch": "troca rapida",
"hybrid/bottom": "híbrido/fondo",
"hybrid/top": "híbrido/principal",
"Screen Rotation": "Rotación de tela",
"CPU speed": "Velocidad de CPU",
"Sound output": "Salida de Sonido",
"mono": "mono",
"stereo": "stereo",
"OFF": "Apagado",
"ON": "Encendido",
"Fast Blitter": "Fast Blitter",
"Bios": "Bios",
"Enable second memory card": "Habilitar segunda tarjeta de memoria",
"Pad 1 Type": "Pad Escribe 1",
"Pad 2 Type": "Pad Escribe 2",
"Pad 3 Type": "Pad Escribe 3",
"Pad 4 Type": "Pad Escribe 4",
"standard": "estándar",
"analog": "cosa análoga",
"negcon": "negcon",
"Enable Vibration": "Habilitar Vibración",
"Enable interlacing mode(s)": "Activar modo entrelazado(s)",
"Enhanced resolution (slow)": "Resolución mejorada (lento)",
"Enhanced resolution speed hack": "Velocidad de reproducción",
"Aspect ratio": "Aspect ratio",
"CPU overclock": "CPU overclock",
"Force Neo Geo mode": "Force Neo Geo mode",
"Diagnostic Input": "Diagnostic Input",
"download": "download",
"keep in browser": "mantener en el navegador",
"Webassembly support is not detected in this browser": "Suporte Webassembly no detectado en este navegador",
"Please upgrade your browser to the latest version": "Actualice su navegador a la última versión.",
"Missing mame config": "Falta la configuración de mame",
"Stop Screen Recording": "Detener Grabación de Pantalla",
"Start Screen Recording": "Começar Grabación de Pantalla",
"Take Screenshot": "Tomar Impresión",
"Quick Save": "Ahorrar rápido",
"Quick Load": "Cargar rápido"
}

View File

@ -0,0 +1,196 @@
{
"i18n": {
"restart": "पुनर्प्रारंभ करें",
"play": "चलाएं",
"pause": "रोकें",
"played": "खेला",
"volume": "वॉल्यूम",
"mute": "म्यूट (F9)",
"unmute": "अनम्यूट (F9)",
"enterFullscreen": "पूर्ण स्क्रीन दर्ज करें",
"exitFullscreen": "फुलस्क्रीन से बाहर निकलें",
"settings": "सेटिंग्स",
"saveState": "राज्य बचाओ (Shift + F2)",
"loadState": "लोड स्टेट (Shift + F4)",
"cacheManager": "Cache Manager",
"screenRecord": "स्क्रीन रिकॉर्डिंग शुरू करें",
"netplay": "नेटप्ले",
"gamepad": "नियंत्रण सेटिंग्स",
"cheat": "धोखा",
"menuBack": "पिछले मेनू पर वापस जाएं",
"normal": "सामान्य",
"all": "ऑल",
"reset": "रीसेट",
"disabled": "अक्षम",
"enabled": "सक्षम",
"playNow": "अभी खेलें"
},
"normalOptions": {
"shader": {
"label": "शदर",
"options": {
"disabled": "अक्षम",
"2xScaleHQ.glslp": "2xScaleHQ",
"4xScaleHQ.glslp": "4xScaleHQ",
"crt-easymode.glslp": "सीआरटी ईज़ीमोड",
"crt-aperture.glslp": "सीआरटी एपर्चर",
"crt-geom.glslp": "सीआरटी जियोम",
"crt-mattias.glslp": "CRT mattias"
},
"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 escape (esc) to clear": "साफ़ करने के लिए एस्केप (esc) दबाएं",
"Netplay": "नेटप्ले",
"Rooms": "कमरे",
"Players": "खिलाड़ी",
"Player": "खिलाड़ी",
"Room Name": "कमरे का नाम",
"Password": "पासवर्ड",
"Name": "नाम",
"Quit Room": "छोड़ो कमरा",
"Create a Room": "एक कमरा बनाएं",
"Set Player Name": "सेट प्लेयर का नाम",
"Player Name": "खिलाड़ी का नाम",
"Password (optional)": "पासवर्ड (वैकल्पिक)",
"Select": "चुनें",
"Start": "स्टार्ट",
"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": "टर्बो सक्षम",
"None": "कोई नहीं",
"Both": "दोनों",
"Region": "क्षेत्र",
"SuperFX Overclock": "सुपरएफएक्स ओवरक्लॉक",
"Sound Quality": "ध्वनि गुणवत्ता",
"GB Colorization": "जीबी रंगीकरण",
"auto": "ऑटो",
"internal": "आंतरिक",
"Internal Palette": "आंतरिक पैलेट",
"GBC - Blue": "जीबीसी ब्लू",
"GBC - Brown": "जीबीसी ब्राउन",
"GBC - Dark Blue": "जीबीसी डार्क ब्लू",
"GBC - Dark Brown": "जीबीसी डार्क ब्राउन",
"GBC - Dark Green": "जीबीसी डार्क ग्रीन",
"GBC - Grayscale": "जीबीसी ग्रेस्केल",
"GBC - Green": "जीबीसी ग्रीन",
"GBC - Inverted": "जीबीसी उलटा",
"GBC - Orange": "जीबीसी ऑरेंज",
"GBC - Red": "जीबीसी रेड",
"GBC - Pastel Mix": "जीबीसी पेस्टल मिक्स",
"GBC - Yellow": "जीबीसी पीला",
"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 पाक",
"Player 2 Pak": "खिलाड़ी 2 पाक",
"Player 3 Pak": "खिलाड़ी 3 पाक",
"Player 4 Pak": "खिलाड़ी 4 पाक",
"none": "कोई नहीं",
"memory": "स्मृति",
"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": "बायोस",
"Enable second memory card": "दूसरा मेमोरी कार्ड सक्षम करें",
"Pad 1 Type": "पैड 1 प्रकार",
"Pad 2 Type": "पैड 2 प्रकार",
"Pad 3 Type": "पैड 3 प्रकार",
"Pad 4 Type": "पैड 4 प्रकार",
"standard": "मानक",
"analog": "एनालॉग",
"negcon": "नेगकॉन",
"Enable Vibration": "कंपन सक्षम करें",
"Enable interlacing mode(s)": "इंटरलेसिंग मोड सक्षम करें",
"Enhanced resolution (slow)": "उन्नत संकल्प (धीमा)",
"Enhanced resolution speed hack": "एन्हांस्ड रेजोल्यूशन स्पीड हैक",
"Aspect ratio": "पहलू अनुपात",
"CPU overclock": "सीपीयू ओवरक्लॉक",
"Force Neo Geo mode": "फोर्स नियो जियो मोड",
"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": "मिसिंग मैम कॉन्फिग",
"Stop Screen Recording": "स्क्रीन रिकॉर्डिंग बंद करो",
"Start Screen Recording": "स्क्रीन रिकॉर्डिंग शुरू करें",
"Take Screenshot": "स्क्रीनशॉट लें",
"Quick Save": "क्विक सेव",
"Quick Load": "त्वरित लोड"
}

View File

@ -0,0 +1,196 @@
{
"i18n": {
"restart": "再起動",
"play": "再生",
"pause": "一時停止",
"played": "再生",
"volume": "ボリューム",
"mute": "ミュートF9",
"unmute": "ミュート解除F9",
"enterFullscreen": "フルスクリーンに入る",
"exitFullscreen": "フルスクリーンで終了",
"settings": "設定",
"saveState": "状態の保存Shift + F2",
"loadState": "ロード状態Shift + F4",
"cacheManager": "Cache Manager",
"screenRecord": "画面記録を開始します",
"netplay": "ネットプレイ",
"gamepad": "制御設定",
"cheat": "チート",
"menuBack": "前のメニューに戻る",
"normal": "通常",
"all": "すべて",
"reset": "リセット",
"disabled": "無効",
"enabled": "有効",
"playNow": "今すぐプレイ"
},
"normalOptions": {
"shader": {
"label": "シェーダー",
"options": {
"disabled": "無効",
"2xScaleHQ.glslp": " 2xScaleHQ",
"4xScaleHQ.glslp": " 4xScaleHQ",
"crt-easymode.glslp": " CRTイージーモード",
"crt-aperture.glslp": " CRTアパーチャ",
"crt-geom.glslp": " CRTジオメトリ",
"crt-mattias.glslp": "CRT mattias"
},
"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": " OK",
"Add Cheat": "チートを追加",
"Cache Manager": "キャッシュマネージャー",
"Press keyboard or gamepad": "キーボードまたはゲームパッドを押す",
"Gamepad": "ゲームパッド",
"Keyboard": "キーボード",
"Set": "セット",
"QUICK SAVE STATE": "クイック保存状態",
"QUICK LOAD STATE": "クイックロード状態",
"CHANGE STATE SLOT": "状態スロットの変更",
"INSERT COIN": "コインを挿入",
"Press escape (esc) to clear": "エスケープescを押してクリアします",
"Netplay": "ネットプレイ",
"Rooms": "部屋",
"Players": "プレイヤー",
"Player": "プレーヤー",
"Room Name": "部屋名",
"Password": "パスワード",
"Name": "名前",
"Quit Room": "終了室",
"Create a Room": "部屋を作成する",
"Set Player Name": "プレイヤー名を設定する",
"Player Name": "プレイヤー名",
"Password (optional)": "パスワード(オプション)",
"Select": "選択",
"Start": "開始",
"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": "ターボイネーブル",
"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": " 169解像度",
"4:3 Resolution": " 43解像度",
"Player 1 Pak": "プレーヤー1パック",
"Player 2 Pak": "プレーヤー2パック",
"Player 3 Pak": "プレーヤー3パック",
"Player 4 Pak": "プレーヤー4パック",
"none": "なし",
"memory": "メモリ",
"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": " CPU速度",
"Sound output": "サウンド出力",
"mono": "モノ",
"stereo": "ステレオ",
"OFF": "オフ",
"ON": "オン",
"Fast Blitter": "高速ブリッター",
"Bios": " BIOS",
"Enable second memory card": " 2番目のメモリカードを有効にする",
"Pad 1 Type": "パッド1タイプ",
"Pad 2 Type": "パッド2タイプ",
"Pad 3 Type": "パッド3タイプ",
"Pad 4 Type": "パッド4タイプ",
"standard": "標準",
"analog": "アナログ",
"negcon": "ネジコン",
"Enable Vibration": "バイブレーションを有効にする",
"Enable interlacing mode(s)": "インターレースモードを有効にする",
"Enhanced resolution (slow)": "強化された解像度(遅い)",
"Enhanced resolution speed hack": "強化された解決速度ハック",
"Aspect ratio": "アスペクト比",
"CPU overclock": " CPUオーバークロック",
"Force Neo Geo mode": "強制ネオジオモード",
"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": " mameconfigがありません",
"Stop Screen Recording": "画面の記録を停止します",
"Start Screen Recording": "画面記録を開始します",
"Take Screenshot": "スクリーンショットを撮る",
"Quick Save": "クイック保存",
"Quick Load": "クイックロード"
}

View File

@ -0,0 +1,196 @@
{
"i18n": {
"restart": "Baleni meneh",
"play": " Dolanan",
"pause": " Ngaso",
"played": " Diputer",
"volume": " Volume",
"mute": " Bisu (F9)",
"unmute": " Mbusak bisu (F9)",
"enterFullscreen": "Ketik layar wutuh",
"exitFullscreen": " Metu saka layar wutuh",
"settings": " Setelan",
"saveState": "Simpen Status (Shift + F2)",
"loadState": "Muat Status (Shift + F4)",
"cacheManager": "Cache Manager",
"screenRecord": " Miwiti Rekaman Layar",
"netplay": " Netplay",
"gamepad": " Setelan Kontrol",
"cheat": " Ngapusi",
"menuBack": " Bali menyang menu sadurungé",
"normal": " Biasa wae",
"all": " Kabeh",
"reset": " Reset",
"disabled": " Dipatèni",
"enabled": " Diaktifake",
"playNow": " Play Saiki"
},
"normalOptions": {
"shader": {
"label": " Shader",
"options": {
"disabled": " Dipatèni",
"2xScaleHQ.glslp": "2xSkalaHQ",
"4xScaleHQ.glslp": "4xSkalaHQ",
"crt-easymode.glslp": "CRT mode gampang",
"crt-aperture.glslp": " Bukaan CRT",
"crt-geom.glslp": " CRT geom",
"crt-mattias.glslp": "CRT mattias"
},
"default": "disabled"
},
"virtual-gamepad": {
"label": " Virtual Gamepad",
"options": {
"disabled": " Dipatèni",
"enabled": " Diaktifake"
},
"default": "enabled"
}
},
"Control Settings": " Setelan Kontrol",
"Player 1": " Pamuter 1",
"Player 2": " Pamuter 2",
"Player 3": " Pamuter 3",
"Player 4": " Pamuter 4",
"Update": " Nganyari",
"Reset": " Reset",
"Clear": " Cetha",
"Cancel": " Batal",
"Close": " Nutup",
"Empty": "Kosong",
"Loading": " Loading",
"Submit": " Ngirim",
"Description": " Katrangan",
"Code": " Kode",
"Add Cheat Code": "Tambah Kode Ngapusi",
"OK": " OKE",
"Add Cheat": " Tambah Ngapusi",
"Cache Manager": " Pangurus Cache",
"Press keyboard or gamepad": "Pencet keyboard utawa gamepad",
"Gamepad": " Gamepad",
"Keyboard": " Papan ketik",
"Set": " Setel",
"QUICK SAVE STATE": " CEPAT SIMPEN NEGARA",
"QUICK LOAD STATE": " NEGARA MUNGKIN CEPAT",
"CHANGE STATE SLOT": "GANTENG STATE SLOT",
"INSERT COIN": " INSERT COIN",
"Press escape (esc) to clear": "Pencet escape (esc) kanggo mbusak",
"Netplay": " Netplay",
"Rooms": " Kamar",
"Players": " Pamuter",
"Player": " Pamuter",
"Room Name": " Jeneng Kamar",
"Password": " Sandi",
"Name": " Jeneng",
"Quit Room": " Metu Kamar",
"Create a Room": " Gawe Kamar",
"Set Player Name": " Setel Jeneng Pamuter",
"Player Name": " Jeneng Pamuter",
"Password (optional)": " Sandi (opsional)",
"Select": " Pilih",
"Start": " Miwiti",
"Menu": " Menu",
"Decompress Game Core": "Decompress Game Core",
"Decompress Game Data": "Decompress Game Data",
"Decompress Game Patch": " Dekompres Game Patch",
"Download Game Data": "Download Game Data",
"Download Game Core": " Unduh Game Core",
"Network Error": " Kesalahan Jaringan",
"Default": " Default",
"default": " gawan",
"Save State Location": "Simpen Lokasi Negara",
"Save State Slot": " Simpen Slot Negara",
"Color Palette": " Palet Warna",
"No Sprite Limit": " Ora ana watesan Sprite",
"Enabled": " Diaktifake",
"Disabled": " Dipatèni",
"enabled": " diaktifake",
"disabled": " dipatèni",
"Low": " Sedheng",
"High": " Dhuwur",
"Very High": " Dhuwur Banget",
"4 Players Support": "4 Dhukungan Pemain",
"Turbo Enable": " Turbo Aktifake",
"None": " Ora ana",
"Both": " Loro-lorone",
"Region": " Wilayah",
"SuperFX Overclock": " SuperFX Overclock",
"Sound Quality": " Kualitas Swara",
"GB Colorization": "Warna GB",
"auto": " otomatis",
"internal": " internal",
"Internal Palette": " Palet Internal",
"GBC - Blue": " GBC Biru",
"GBC - Brown": " GBC Coklat",
"GBC - Dark Blue": "GBC Biru Tua",
"GBC - Dark Brown": "GBC Coklat Tua",
"GBC - Dark Green": " GBC Ijo peteng",
"GBC - Grayscale": "GBC Grayscale",
"GBC - Green": " GBC Green",
"GBC - Inverted": "GBC Walik",
"GBC - Orange": " GBC Oranye",
"GBC - Red": " GBC Abang",
"GBC - Pastel Mix": "GBC Pastel Mix",
"GBC - Yellow": " GBC Kuning",
"Frameskip": " Frameskip",
"Solar sensor level": " Tingkat sensor surya",
"Enable Turbo Buttons": "Aktifake Tombol Turbo",
"Turbo Delay in frames": "Tundha Turbo ing pigura",
"Auto": " Otomatis",
"Aspect Ratio (Need to refresh page)": "Rasio Aspek (Perlu refresh kaca)",
"16:9 Resolution": " 16:9 Résolusi",
"4:3 Resolution": "4:3 Résolusi",
"Player 1 Pak": "Pemain 1 Pak",
"Player 2 Pak": " Pamuter 2 Pak",
"Player 3 Pak": "Pemain 3 Pak",
"Player 4 Pak": " Pamuter 4 Pak",
"none": " ora ana",
"memory": " memori",
"rumble": " gumujeng",
"Screen layout": " Tata letak layar",
"right/left": " tengen / kiwa",
"left/right": " kiwa/tengen",
"bottom/top": " ngisor / ndhuwur",
"top/bottom": " ndhuwur / ngisor",
"top only": " mung ndhuwur",
"bottom only": " mung ngisor",
"quick switch": " ngalih cepet",
"hybrid/bottom": " hibrida / ngisor",
"hybrid/top": " hibrida / ndhuwur",
"Screen Rotation": " Rotasi Layar",
"CPU speed": " Kacepetan CPU",
"Sound output": " Output swara",
"mono": " mono",
"stereo": " stereo",
"OFF": " MATI",
"ON": " ON",
"Fast Blitter": " Cepet Blitter",
"Bios": " Bios",
"Enable second memory card": "Aktifake kertu memori kapindho",
"Pad 1 Type": "Pad 1 Tipe",
"Pad 2 Type": " Tipe Pad 2",
"Pad 3 Type": " Tipe Pad 3",
"Pad 4 Type": "Pad 4 Tipe",
"standard": " standar",
"analog": " analog",
"negcon": "negkon",
"Enable Vibration": " Aktifake Geter",
"Enable interlacing mode(s)": "Aktifake mode interlacing",
"Enhanced resolution (slow)": "Resolusi sing ditingkatake (alon)",
"Enhanced resolution speed hack": "Retas kacepetan résolusi sing ditingkatake",
"Aspect ratio": " Rasio aspek",
"CPU overclock": " CPU overclock",
"Force Neo Geo mode": " Mode Force Neo Geo",
"Diagnostic Input": " Input Diagnostik",
"download": "undhuh",
"keep in browser": " tetep ing browser",
"Webassembly support is not detected in this browser": "Dhukungan webassembly ora dideteksi ing browser iki",
"Please upgrade your browser to the latest version": "Mangga upgrade browser sampeyan menyang versi paling anyar",
"Missing mame config": "Konfigurasi mame ilang",
"Stop Screen Recording": " Mungkasi Rekaman Layar",
"Start Screen Recording": " Miwiti Rekaman Layar",
"Take Screenshot": " Njupuk Screenshot",
"Quick Save": " Cepet Simpen",
"Quick Load": " Muatan Cepet"
}

View File

@ -0,0 +1,196 @@
{
"i18n": {
"restart": "재시작",
"play": "플레이",
"pause": "일시 중지",
"played": "플레이",
"volume": "볼륨",
"mute": "음소거(F9)",
"unmute": "음소거 해제(F9)",
"enterFullscreen": "전체 화면으로 전환",
"exitFullscreen": "전체 화면 종료",
"settings": "설정",
"saveState": "상태 저장(Shift + F2)",
"loadState": "로드 상태(Shift + F4)",
"cacheManager": "Cache Manager",
"screenRecord": "화면 녹화 시작",
"netplay": "넷플레이",
"gamepad": "제어 설정",
"cheat": "치트",
"menuBack": "이전 메뉴로 돌아가기",
"normal": "일반",
"all": "모두",
"reset": "리셋",
"disabled": "장애인",
"enabled": "활성화됨",
"playNow": "지금 플레이"
},
"normalOptions": {
"shader": {
"label": "쉐이더",
"options": {
"disabled": "장애인",
"2xScaleHQ.glslp": "2xScaleHQ",
"4xScaleHQ.glslp": "4xScaleHQ",
"crt-easymode.glslp": "CRT 이지모드",
"crt-aperture.glslp": "CRT 조리개",
"crt-geom.glslp": "CRT 지오메트리",
"crt-mattias.glslp": "CRT mattias"
},
"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 escape (esc) to clear": "이스케이프(esc)를 눌러 지우십시오.",
"Netplay": "넷플레이",
"Rooms": "객실",
"Players": "선수",
"Player": "플레이어",
"Room Name": "방 이름",
"Password": "비밀번호",
"Name": "이름",
"Quit Room": "퇴장실",
"Create a Room": "방 만들기",
"Set Player Name": "플레이어 이름 설정",
"Player Name": "플레이어 이름",
"Password (optional)": "비밀번호(선택사항)",
"Select": "선택",
"Start": "시작",
"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": "터보 활성화",
"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 박",
"Player 2 Pak": "플레이어 2 박",
"Player 3 Pak": "플레이어 3 박",
"Player 4 Pak": "플레이어 4 박",
"none": "없음",
"memory": "기억",
"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": "CPU 속도",
"Sound output": "음향 출력",
"mono": "모노",
"stereo": "스테레오",
"OFF": "꺼짐",
"ON": "켜기",
"Fast Blitter": "빠른 블리터",
"Bios": "바이오스",
"Enable second memory card": "두 번째 메모리 카드 활성화",
"Pad 1 Type": "패드 1종",
"Pad 2 Type": "패드 2형",
"Pad 3 Type": "패드 3종",
"Pad 4 Type": "패드 4종",
"standard": "표준",
"analog": "아날로그",
"negcon": "네그콘",
"Enable Vibration": "진동 활성화",
"Enable interlacing mode(s)": "인터레이스 모드 활성화",
"Enhanced resolution (slow)": "향상된 해상도(느림)",
"Enhanced resolution speed hack": "향상된 해상도 속도 해킹",
"Aspect ratio": "종횡비",
"CPU overclock": "CPU 오버클럭",
"Force Neo Geo mode": "포스 네오지오 모드",
"Diagnostic Input": "진단 입력",
"download": "다운로드",
"keep in browser": "브라우저에 보관",
"Webassembly support is not detected in this browser": "이 브라우저에서는 웹어셈블리 지원이 감지되지 않습니다.",
"Please upgrade your browser to the latest version": "브라우저를 최신 버전으로 업그레이드하십시오.",
"Missing mame config": "mame 구성이 누락되었습니다.",
"Stop Screen Recording": "화면 녹화 중지",
"Start Screen Recording": "화면 녹화 시작",
"Take Screenshot": "스크린샷 찍기",
"Quick Save": "빠른 저장",
"Quick Load": "빠른 로드"
}

View File

@ -0,0 +1,196 @@
{
"i18n": {
"restart": "Restart",
"play": "Jogar",
"pause": "Pausar",
"played": "Jogado",
"volume": "Volume",
"mute": "Mudo (F9)",
"unmute": "Desmutar (F9)",
"enterFullscreen": "Tela cheia",
"exitFullscreen": "Sair da tela cheia",
"settings": "Configurações",
"saveState": "Salvar Estado (Shift + F2)",
"loadState": "Carregar Estado (Shift + F4)",
"cacheManager": "Cache Manager",
"screenRecord": "Começar Gravar Tela",
"netplay": "Netplay",
"gamepad": "Configurações do Controle",
"cheat": "Trapaças",
"menuBack": "Voltar ao menu anterior",
"normal": "Normal",
"all": "Todos",
"reset": "Reset",
"disabled": "Desativar",
"enabled": "Ativar",
"playNow": "Jogar agora"
},
"normalOptions": {
"shader": {
"label": "Sombreador",
"options": {
"disabled": "Desativado",
"2xScaleHQ.glslp": "2xScaleHQ",
"4xScaleHQ.glslp": "4xScaleHQ",
"crt-easymode.glslp": "CRT easymode",
"crt-aperture.glslp": "CRT aperture",
"crt-geom.glslp": "CRT geom",
"crt-mattias.glslp": "CRT mattias"
},
"default": "disabled"
},
"virtual-gamepad": {
"label": "Controle Virtual",
"options": {
"disabled": "Desativado",
"enabled": "Ativado"
},
"default": "enabled"
}
},
"Control Settings": "Configurações do Controle",
"Player 1": "Jogador 1",
"Player 2": "Jogador 2",
"Player 3": "Jogador 3",
"Player 4": "Jogador 4",
"Update": "Atualizar",
"Reset": "Resetar",
"Clear": "Limpar",
"Cancel": "Cancelar",
"Close": "Fechar",
"Empty": "Vazio",
"Loading": "Carregando",
"Submit": "Enviar",
"Description": "Descrição",
"Code": "Código",
"Add Cheat Code": "Adicionar Código da Trapaça",
"OK": "OK",
"Add Cheat": "Adicionar Trapaça",
"Cache Manager": "Administrador de Cache",
"Press keyboard or gamepad": "Pressione o teclado ou o controle",
"Gamepad": "Controle",
"Keyboard": "Teclado",
"Set": "Definir",
"QUICK SAVE STATE": "SALVAR ESTADO RÁPIDO",
"QUICK LOAD STATE": "CARREGAR ESTADO RÁPIDO",
"CHANGE STATE SLOT": "TROCAR SLOT DO ESTADO",
"INSERT COIN": "INSERIR MOEDA",
"Press escape (esc) to clear": "Pressione (esc) para limpar",
"Netplay": "Netplay",
"Rooms": "Salas",
"Players": "Jogadores",
"Player": "Jogador",
"Room Name": "Nome da Sala",
"Password": "Senha",
"Name": "Nome",
"Quit Room": "Sair da Sala",
"Create a Room": "Criar uma Sala",
"Set Player Name": "Configurar Nome do Jogador",
"Player Name": "Nome do Jogador",
"Password (optional)": "Senha (opcional)",
"Select": "Select",
"Start": "Start",
"Menu": "Menu",
"Decompress Game Core": "Decompress Game Core",
"Decompress Game Data": "Decompress Game Data",
"Decompress Game Patch": "Decompress Game Patch",
"Download Game Data": "Download Game Data",
"Download Game Core": "Download Game Core",
"Network Error": "Network Error",
"Default": "Padrão",
"default": "padrão",
"Save State Location": "Salvar Estado Local",
"Save State Slot": "Salvar Slot de Estado",
"Color Palette": "Paleta de Cores",
"No Sprite Limit": "Sem limite de Sprite",
"Enabled": "Ativado",
"Disabled": "Desativado",
"enabled": "ativado",
"disabled": "desativado",
"Low": "Baixo",
"High": "Alto",
"Very High": "Muito Alto",
"4 Players Support": "Suporte para 4 jogadores",
"Turbo Enable": "Ativar Turbo",
"None": "Nenhum",
"Both": "Ambos",
"Region": "Região",
"SuperFX Overclock": "SuperFX Overclock",
"Sound Quality": "Qualidade do Som",
"GB Colorization": "GB Colorização",
"auto": "auto",
"internal": "interna",
"Internal Palette": "Paleta Interna",
"GBC - Blue": "GBC - Azul",
"GBC - Brown": "GBC - Marrom",
"GBC - Dark Blue": "GBC - Azul Escuro",
"GBC - Dark Brown": "GBC - Marrom Escuro",
"GBC - Dark Green": "GBC - Verde Escuro",
"GBC - Grayscale": "GBC - Cinza",
"GBC - Green": "GBC - Verde",
"GBC - Inverted": "GBC - Invertido",
"GBC - Orange": "GBC - Laranja",
"GBC - Red": "GBC - Vermelho",
"GBC - Pastel Mix": "GBC - Pastel Mix",
"GBC - Yellow": "GBC - Amarelo",
"Frameskip": "Frameskip",
"Solar sensor level": "Solar sensor level",
"Enable Turbo Buttons": "Habilitar Botões Turbo",
"Turbo Delay in frames": "Turbo Delay em frames",
"Auto": "Auto",
"Aspect Ratio (Need to refresh page)": "Aspect Ratio (Precisa atualizar a página)",
"16:9 Resolution": "16:9 Resolução",
"4:3 Resolution": "4:3 Resolução",
"Player 1 Pak": "Jogador 1 Pak",
"Player 2 Pak": "Jogador 2 Pak",
"Player 3 Pak": "Jogador 3 Pak",
"Player 4 Pak": "Jogador 4 Pak",
"none": "nenhum",
"memory": "memória",
"rumble": "rumble",
"Screen layout": "Layout da tela",
"right/left": "direta/esquerda",
"left/right": "esquerda/direta",
"bottom/top": "fundo/principal",
"top/bottom": "principal/fundo",
"top only": "principal somente",
"bottom only": "fundo somente",
"quick switch": "troca rápida",
"hybrid/bottom": "híbrido/fundo",
"hybrid/top": "híbrido/principal",
"Screen Rotation": "Rotação da Tela",
"CPU speed": "Velocidade do CPU",
"Sound output": "Saída de Som",
"mono": "mono",
"stereo": "stereo",
"OFF": "Desligado",
"ON": "Ligado",
"Fast Blitter": "Fast Blitter",
"Bios": "Bios",
"Enable second memory card": "Habilitar segundo cartão de memória",
"Pad 1 Type": "Pad Tipo 1",
"Pad 2 Type": "Pad Tipo 2",
"Pad 3 Type": "Pad Tipo 3",
"Pad 4 Type": "Pad Tipo 4",
"standard": "padrão",
"analog": "analógico",
"negcon": "negcon",
"Enable Vibration": "Habilitar Vibração",
"Enable interlacing mode(s)": "Ativar o modo de entrelaçamento(s)",
"Enhanced resolution (slow)": "Resolução melhorada (lento)",
"Enhanced resolution speed hack": "Velocidade de Reprodução",
"Aspect ratio": "Aspect ratio",
"CPU overclock": "CPU overclock",
"Force Neo Geo mode": "Force Neo Geo mode",
"Diagnostic Input": "Diagnostic Input",
"download": "download",
"keep in browser": "manter no navegador",
"Webassembly support is not detected in this browser": "Suporte Webassembly não foi detectado neste navegador",
"Please upgrade your browser to the latest version": "Por favor atualize seu navegador para a última versão",
"Missing mame config": "Falta a configuração do mame",
"Stop Screen Recording": "Parar Gravar Tela",
"Start Screen Recording": "Começar Gravar Tela",
"Take Screenshot": "Tirar Print",
"Quick Save": "Salvar rápido",
"Quick Load": "Carregar rápido"
}

View File

@ -0,0 +1,47 @@
# Localization
Supported languages
`en-US` - English US<br>
`pt-BR` - Portuguese Brasil<br>
`es-ES` - Spanish<br>
`el-GR` - Greek<br>
`ja-JA` - Japanese<br>
`zh-CN` - Chinese<br>
`hi-HI` - Hindi<br>
`ar-AR` - Arabic<br>
`jv-JV` - Javanese<br>
`ben-BEN` - Bengali<br>
`ru-RU` - Russian<br>
`de-GER` - German<br>
`ko-KO` - Korean<br>
`af-FR` - French<br>
default: `en-US`
add the line to your code to use
```
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
Translated for `pt-BR` by [@cesarcristianodeoliveira](https://github.com/cesarcristianodeoliveira) <br>
Translated for `es-ES` by [@cesarcristianodeoliveira](https://github.com/cesarcristianodeoliveira) <br>
Translated for `el-GR` by [@imneckro](https://github.com/imneckro) <br>
Translated for `ja-JA`, `hi-HI`, `ar-AR`, `jv-JV`, `ben-BEN`, `ru-RU`, `de-GER`, `ko-KO`, `af-FR` by [@allancoding](https://github.com/allancoding) <br>
Translated for `zh-CN` originally by [@allancoding](https://github.com/allancoding) and updated by [@eric183](https://github.com/eric183)<br>
## 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
Please contribute!!
Enything that is incorrect or needs to be fix please perform a pull request!

View File

@ -0,0 +1,196 @@
{
"i18n": {
"restart": "Начать сначала",
"play": "Играть",
"pause": "Пауза",
"played": "Играл",
"volume": "Громкость",
"mute": "Отключить звук (F9)",
"unmute": "Включить звук (F9)",
"enterFullscreen": "Войти в полноэкранный режим",
"exitFullscreen": "Выйти из полноэкранного режима",
"settings": "Настройки",
"saveState": "Сохранить состояние (Shift + F2)",
"loadState": "Загрузить состояние (Shift + F4)",
"cacheManager": "Cache Manager",
"screenRecord": "Начать запись экрана",
"netplay": "Сетевая игра",
"gamepad": "Настройки управления",
"cheat": "Читы",
"menuBack": "Вернуться в предыдущее меню",
"normal": "Нормальный",
"all": "Все",
"reset": "Сбросить",
"disabled": "Отключено",
"enabled": "Включено",
"playNow": "Играть сейчас"
},
"normalOptions": {
"shader": {
"label": "Шейдер",
"options": {
"disabled": "Отключено",
"2xScaleHQ.glslp": "2xScaleHQ",
"4xScaleHQ.glslp": "4xScaleHQ",
"crt-easymode.glslp": "ЭЛТ простой режим",
"crt-aperture.glslp": "ЭЛТ-диафрагма",
"crt-geom.glslp": "ЭЛТ геометрия",
"crt-mattias.glslp": "CRT mattias"
},
"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 escape (esc) to clear": "Нажмите escape (esc)",
"Netplay": " чтобы очистить",
"Rooms": "Сетевая игра",
"Players": "Комнаты",
"Player": "Игроки",
"Room Name": "Игрок",
"Password": "Название комнаты",
"Name": "Пароль",
"Quit Room": "Имя",
"Create a Room": "Выйти из комнаты",
"Set Player Name": "Создать комнату",
"Player Name": "Установить имя игрока",
"Password (optional)": "Имя игрока",
"Select": "Пароль (необязательно)",
"Start": "Выбрать",
"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": "Очень высокий",
"Turbo Enable": "Поддержка 4 игроков",
"None": "Турбо включить",
"Both": "Нет",
"Region": "Оба",
"SuperFX Overclock": "Регион",
"Sound Quality": "Разгон SuperFX",
"GB Colorization": "Качество звука",
"auto": "GB раскрашивание",
"internal": "авто",
"Internal Palette": "внутренний",
"GBC - Blue": "Внутренняя палитра",
"GBC - Brown": "GBC Синий",
"GBC - Dark Blue": "ГБК Браун",
"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": "GBC Желтый",
"Solar sensor level": "Пропуск кадров",
"Enable Turbo Buttons": "Уровень солнечного датчика",
"Turbo Delay in frames": "Включить турбо-кнопки",
"Auto": " Турбо-задержка в кадрах",
"Aspect Ratio (Need to refresh page)": "Авто",
"16:9 Resolution": "Соотношение сторон (необходимо обновить страницу)",
"4:3 Resolution": "Разрешение 16:9",
"Player 1 Pak": "Разрешение 4:3",
"Player 2 Pak": "Игрок 1 пакет",
"Player 3 Pak": "Пакет игроков 2",
"Player 4 Pak": "Игрок 3 пакет",
"none": "Игрок 4 пакет",
"memory": "нет",
"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": "Быстрый налет",
"Enable second memory card": "биос",
"Pad 1 Type": "Включить вторую карту памяти",
"Pad 2 Type": "Пэд 1 Тип",
"Pad 3 Type": "Пэд 2 Тип",
"Pad 4 Type": "Пэд 3 Тип",
"standard": "Пэд 4 Тип",
"analog": "стандарт",
"negcon": "аналоговый",
"Enable Vibration": "негкон",
"Enable interlacing mode(s)": "Включить вибрацию",
"Enhanced resolution (slow)": "Включить режим чересстрочной развертки",
"Enhanced resolution speed hack": "Улучшенное разрешение (медленно)",
"Aspect ratio": "Хак с увеличенной скоростью разрешения",
"CPU overclock": "Соотношение сторон",
"Force Neo Geo mode": "Разгон процессора",
"Diagnostic Input": "Принудительный режим Neo Geo",
"download": "Диагностический ввод",
"keep in browser": "скачать",
"Webassembly support is not detected in this browser": "держать в браузере",
"Please upgrade your browser to the latest version": "Поддержка Webassembly не обнаружена в этом браузере",
"Missing mame config": "Пожалуйста",
"Stop Screen Recording": " обновите браузер до последней версии",
"Start Screen Recording": "Отсутствует конфигурация мамы",
"Take Screenshot": "Остановить запись экрана",
"Quick Save": "Начать запись экрана",
"Quick Load": "Сделать снимок экрана"
}

View File

@ -0,0 +1,195 @@
{
"i18n": {
"restart": "重新开始",
"play": "播放",
"pause": "暂停",
"played": "已玩",
"volume": "音量",
"mute": "静音 (F9)",
"unmute": "取消静音 (F9)",
"enterFullscreen": "进入全屏",
"exitFullscreen": "退出全屏",
"settings": "设置",
"saveState": "保存状态Shift + F2",
"loadState": "加载状态 (Shift + F4)",
"screenRecord": "开始录屏",
"netplay": "网络游戏",
"gamepad": "控制设置",
"cheat": "秘籍",
"menuBack": "返回上级菜单",
"normal": "正常",
"all": "全部",
"reset": "重置",
"disabled": "禁用",
"enabled": "启用",
"playNow": "开始游戏"
},
"normalOptions": {
"shader": {
"label": "着色器",
"options": {
"disabled": "禁用",
"2xScaleHQ.glslp": "2xScaleHQ",
"4xScaleHQ.glslp": "4xScaleHQ",
"crt-easymode.glslp": "CRT简易模式",
"crt-aperture.glslp": "CRT孔径",
"crt-geom.glslp": "CRT几何",
"crt-mattias.glslp": "CRT mattias"
},
"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 escape (esc) to clear": "按退出 (esc) 清除",
"Netplay": "网络游戏",
"Rooms": "房间",
"Players": "玩家集合",
"Player": "玩家",
"Room Name": "房间名称",
"Password": "密码",
"Name": "姓名",
"Quit Room": "退出房间",
"Create a Room": "创建房间",
"Set Player Name": "设置玩家姓名",
"Player Name": "玩家姓名",
"Password (optional)": "密码(可选)",
"Select": "选择",
"Start": "开始",
"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": "加速启用",
"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 按钮",
"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 震动",
"Player 2 Pak": "玩家 2 震动",
"Player 3 Pak": "玩家 3 震动",
"Player 4 Pak": "玩家 4 震动",
"none": "无",
"memory": "内存",
"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": "CPU 速度",
"Sound output": "声音输出",
"mono": "单声道",
"stereo": "立体声",
"OFF": "关闭",
"ON": "开",
"Fast Blitter": "快速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)": "启用隔行扫描模式",
"Enhanced resolution (slow)": "增强分辨率(慢)",
"Enhanced resolution speed hack": "增强的分辨率速度破解",
"Aspect ratio": "长宽比",
"CPU overclock": "CPU超频",
"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": "快速加载"
}

View File

@ -0,0 +1,35 @@
# Minifying
Before pushing the script files onto your production <br>
server it is recommended to minify them to save on <br>
load times as well as bandwidth.
<br>
## Requirements
- **[NodeJS]**
<br>
## Steps
1. Open a terminal in`/data/minify`.
2. Install the dependencies with:
```sh
npm install
```
3. Start the minification with:
```sh
node index.js
```
<!----------------------------------------------------------------------------->
[NodeJS]: https://nodejs.org/en/download/

View File

@ -0,0 +1,33 @@
const UglifyJS = require("uglify-js");
const fs = require('fs');
const uglifycss = require('uglifycss');
if (!String.prototype.replaceAll) {
String.prototype.replaceAll = function(a, b) {
return this.split(a).join(b);
}
}
let files = [
'nipplejs.js',
'shaders.js',
'storage.js',
'gamepad.js',
'GameManager.js',
'socket.io.min.js',
'emulator.js'
]
let code = "";
for (let i=0; i<files.length; i++) {
code += fs.readFileSync('../'+files[i], 'utf8') + "\n";
}
function minify(source){
const ast = UglifyJS.parse(source);
return UglifyJS.minify(ast).code;
}
console.log('minifying');
fs.writeFileSync('../emulator.min.css', uglifycss.processString(fs.readFileSync('../emulator.css', 'utf8')));
const min = minify(code);
console.log('done!');
fs.writeFileSync('../emulator.min.js', min);

18
static/data/minify/package-lock.json generated Normal file
View File

@ -0,0 +1,18 @@
{
"name": "emulatorjs-minify",
"version": "1.0.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"uglify-js": {
"version": "3.17.4",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
"integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g=="
},
"uglifycss": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/uglifycss/-/uglifycss-0.0.29.tgz",
"integrity": "sha512-J2SQ2QLjiknNGbNdScaNZsXgmMGI0kYNrXaDlr4obnPW9ni1jljb1NeEVWAiTgZ8z+EBWP2ozfT9vpy03rjlMQ=="
}
}
}

View File

@ -0,0 +1,22 @@
{
"name": "emulatorjs-minify",
"version": "1.0.1",
"description": "Minify the EmulatorJS javascript files",
"main": "index.js",
"scripts": {
"build": "node index.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/EmulatorJS/EmulatorJS.git"
},
"author": "Ethan O'Brien",
"bugs": {
"url": "https://github.com/EmulatorJS/EmulatorJS/issues"
},
"homepage": "https://github.com/EmulatorJS/EmulatorJS#readme",
"dependencies": {
"uglify-js": "^3.17.4",
"uglifycss": "0.0.29"
}
}

Some files were not shown because too many files have changed in this diff Show More