diff --git a/emulatorjs/data/controls.js b/emulatorjs/data/controls.js new file mode 100644 index 00000000..1b9bb02b --- /dev/null +++ b/emulatorjs/data/controls.js @@ -0,0 +1,358 @@ +let controls_ = "controller, keyboard\n"; +let controls = []; +let keyMap; +let x = 0; +let buttons; +function checkLoaded() { + if (typeof(EJS_emulator) == "object") { + const end1 = Date.now(); + console.log(`Load time: ${end1 - start1} ms`); + loadControls(); + } else { + setTimeout(() => { + checkLoaded(); + }, 20); + } +} +const start1 = Date.now(); +checkLoaded(); +function loadControls() { + const start = Date.now(); + controlscheme = EJS_emulator.getControlScheme(); + if (["nes", "gb"].includes(controlscheme)) { + buttons = [ + { id: 8, label: EJS_emulator.localization("A") }, + { id: 0, label: EJS_emulator.localization("B") }, + { id: 2, label: EJS_emulator.localization("SELECT") }, + { id: 3, label: EJS_emulator.localization("START") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + ]; + } else if ("snes" === controlscheme) { + buttons = [ + { id: 8, label: EJS_emulator.localization("A") }, + { id: 0, label: EJS_emulator.localization("B") }, + { id: 9, label: EJS_emulator.localization("X") }, + { id: 1, label: EJS_emulator.localization("Y") }, + { id: 2, label: EJS_emulator.localization("SELECT") }, + { id: 3, label: EJS_emulator.localization("START") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + { id: 10, label: EJS_emulator.localization("L") }, + { id: 11, label: EJS_emulator.localization("R") }, + ]; + } else if ("n64" === controlscheme) { + buttons = [ + { id: 0, label: EJS_emulator.localization("A") }, + { id: 1, label: EJS_emulator.localization("B") }, + { id: 3, label: EJS_emulator.localization("START") }, + { id: 4, label: EJS_emulator.localization("D-PAD UP") }, + { id: 5, label: EJS_emulator.localization("D-PAD DOWN") }, + { id: 6, label: EJS_emulator.localization("D-PAD LEFT") }, + { id: 7, label: EJS_emulator.localization("D-PAD RIGHT") }, + { id: 10, label: EJS_emulator.localization("L") }, + { id: 11, label: EJS_emulator.localization("R") }, + { id: 12, label: EJS_emulator.localization("Z") }, + { id: 19, label: EJS_emulator.localization("STICK UP") }, + { id: 18, label: EJS_emulator.localization("STICK DOWN") }, + { id: 17, label: EJS_emulator.localization("STICK LEFT") }, + { id: 16, label: EJS_emulator.localization("STICK RIGHT") }, + { id: 23, label: EJS_emulator.localization("C-PAD UP") }, + { id: 22, label: EJS_emulator.localization("C-PAD DOWN") }, + { id: 21, label: EJS_emulator.localization("C-PAD LEFT") }, + { id: 20, label: EJS_emulator.localization("C-PAD RIGHT") }, + ]; + } else if ("gba" === controlscheme) { + buttons = [ + { id: 8, label: EJS_emulator.localization("A") }, + { id: 0, label: EJS_emulator.localization("B") }, + { id: 10, label: EJS_emulator.localization("L") }, + { id: 11, label: EJS_emulator.localization("R") }, + { id: 2, label: EJS_emulator.localization("SELECT") }, + { id: 3, label: EJS_emulator.localization("START") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + ]; + } else if ("nds" === controlscheme) { + buttons = [ + { id: 8, label: EJS_emulator.localization("A") }, + { id: 0, label: EJS_emulator.localization("B") }, + { id: 9, label: EJS_emulator.localization("X") }, + { id: 1, label: EJS_emulator.localization("Y") }, + { id: 2, label: EJS_emulator.localization("SELECT") }, + { id: 3, label: EJS_emulator.localization("START") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + { id: 10, label: EJS_emulator.localization("L") }, + { id: 11, label: EJS_emulator.localization("R") }, + { id: 14, label: EJS_emulator.localization("Microphone") }, + ]; + } else if ("vb" === controlscheme) { + buttons = [ + { id: 8, label: EJS_emulator.localization("A") }, + { id: 0, label: EJS_emulator.localization("B") }, + { id: 10, label: EJS_emulator.localization("L") }, + { id: 11, label: EJS_emulator.localization("R") }, + { id: 2, label: EJS_emulator.localization("SELECT") }, + { id: 3, label: EJS_emulator.localization("START") }, + { id: 4, label: EJS_emulator.localization("LEFT D-PAD UP") }, + { id: 5, label: EJS_emulator.localization("LEFT D-PAD DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT D-PAD LEFT") }, + { id: 7, label: EJS_emulator.localization("LEFT D-PAD RIGHT") }, + { id: 19, label: EJS_emulator.localization("RIGHT D-PAD UP") }, + { id: 18, label: EJS_emulator.localization("RIGHT D-PAD DOWN") }, + { id: 17, label: EJS_emulator.localization("RIGHT D-PAD LEFT") }, + { id: 16, label: EJS_emulator.localization("RIGHT D-PAD RIGHT") }, + ]; + } else if (["segaMD", "segaCD", "sega32x"].includes(controlscheme)) { + buttons = [ + { id: 1, label: EJS_emulator.localization("A") }, + { id: 0, label: EJS_emulator.localization("B") }, + { id: 8, label: EJS_emulator.localization("C") }, + { id: 10, label: EJS_emulator.localization("X") }, + { id: 9, label: EJS_emulator.localization("Y") }, + { id: 11, label: EJS_emulator.localization("Z") }, + { id: 3, label: EJS_emulator.localization("START") }, + { id: 2, label: EJS_emulator.localization("MODE") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + ]; + } else if ("segaMS" === controlscheme) { + buttons = [ + { id: 0, label: EJS_emulator.localization("BUTTON 1 / START") }, + { id: 8, label: EJS_emulator.localization("BUTTON 2") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + ]; + } else if ("segaGG" === controlscheme) { + buttons = [ + { id: 0, label: EJS_emulator.localization("BUTTON 1") }, + { id: 8, label: EJS_emulator.localization("BUTTON 2") }, + { id: 3, label: EJS_emulator.localization("START") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + ]; + } else if ("segaSaturn" === controlscheme) { + buttons = [ + { id: 1, label: EJS_emulator.localization("A") }, + { id: 0, label: EJS_emulator.localization("B") }, + { id: 8, label: EJS_emulator.localization("C") }, + { id: 9, label: EJS_emulator.localization("X") }, + { id: 10, label: EJS_emulator.localization("Y") }, + { id: 11, label: EJS_emulator.localization("Z") }, + { id: 12, label: EJS_emulator.localization("L") }, + { id: 13, label: EJS_emulator.localization("R") }, + { id: 3, label: EJS_emulator.localization("START") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + ]; + } else if ("3do" === controlscheme) { + buttons = [ + { id: 1, label: EJS_emulator.localization("A") }, + { id: 0, label: EJS_emulator.localization("B") }, + { id: 8, label: EJS_emulator.localization("C") }, + { id: 10, label: EJS_emulator.localization("L") }, + { id: 11, label: EJS_emulator.localization("R") }, + { id: 2, label: EJS_emulator.localization("X") }, + { id: 3, label: EJS_emulator.localization("P") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + ]; + } else if ("atari2600" === controlscheme) { + buttons = [ + { id: 0, label: EJS_emulator.localization("FIRE") }, + { id: 2, label: EJS_emulator.localization("SELECT") }, + { id: 3, label: EJS_emulator.localization("RESET") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + { id: 10, label: EJS_emulator.localization("LEFT DIFFICULTY A") }, + { id: 12, label: EJS_emulator.localization("LEFT DIFFICULTY B") }, + { id: 11, label: EJS_emulator.localization("RIGHT DIFFICULTY A") }, + { id: 13, label: EJS_emulator.localization("RIGHT DIFFICULTY B") }, + { id: 14, label: EJS_emulator.localization("COLOR") }, + { id: 15, label: EJS_emulator.localization("B/W") }, + ]; + } else if ("atari7800" === controlscheme) { + buttons = [ + { id: 0, label: EJS_emulator.localization("BUTTON 1") }, + { id: 8, label: EJS_emulator.localization("BUTTON 2") }, + { id: 2, label: EJS_emulator.localization("SELECT") }, + { id: 3, label: EJS_emulator.localization("PAUSE") }, + { id: 9, label: EJS_emulator.localization("RESET") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + { id: 10, label: EJS_emulator.localization("LEFT DIFFICULTY") }, + { id: 11, label: EJS_emulator.localization("RIGHT DIFFICULTY") }, + ]; + } else if ("lynx" === controlscheme) { + buttons = [ + { id: 8, label: EJS_emulator.localization("A") }, + { id: 0, label: EJS_emulator.localization("B") }, + { id: 10, label: EJS_emulator.localization("OPTION 1") }, + { id: 11, label: EJS_emulator.localization("OPTION 2") }, + { id: 3, label: EJS_emulator.localization("START") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + ]; + } else if ("jaguar" === controlscheme) { + buttons = [ + { id: 8, label: EJS_emulator.localization("A") }, + { id: 0, label: EJS_emulator.localization("B") }, + { id: 1, label: EJS_emulator.localization("C") }, + { id: 2, label: EJS_emulator.localization("PAUSE") }, + { id: 3, label: EJS_emulator.localization("OPTION") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + ]; + } else if ("pce" === controlscheme) { + buttons = [ + { id: 8, label: EJS_emulator.localization("I") }, + { id: 0, label: EJS_emulator.localization("II") }, + { id: 2, label: EJS_emulator.localization("SELECT") }, + { id: 3, label: EJS_emulator.localization("RUN") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + ]; + } else if ("ngp" === controlscheme) { + buttons = [ + { id: 0, label: EJS_emulator.localization("A") }, + { id: 8, label: EJS_emulator.localization("B") }, + { id: 3, label: EJS_emulator.localization("OPTION") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + ]; + } else if ("ws" === controlscheme) { + buttons = [ + { id: 8, label: EJS_emulator.localization("A") }, + { id: 0, label: EJS_emulator.localization("B") }, + { id: 3, label: EJS_emulator.localization("START") }, + { id: 4, label: EJS_emulator.localization("X UP") }, + { id: 5, label: EJS_emulator.localization("X DOWN") }, + { id: 6, label: EJS_emulator.localization("X LEFT") }, + { id: 7, label: EJS_emulator.localization("X RIGHT") }, + { id: 13, label: EJS_emulator.localization("Y UP") }, + { id: 12, label: EJS_emulator.localization("Y DOWN") }, + { id: 10, label: EJS_emulator.localization("Y LEFT") }, + { id: 11, label: EJS_emulator.localization("Y RIGHT") }, + ]; + } else if ("coleco" === controlscheme) { + buttons = [ + { id: 8, label: EJS_emulator.localization("LEFT BUTTON") }, + { id: 0, label: EJS_emulator.localization("RIGHT BUTTON") }, + { id: 9, label: EJS_emulator.localization("1") }, + { id: 1, label: EJS_emulator.localization("2") }, + { id: 11, label: EJS_emulator.localization("3") }, + { id: 10, label: EJS_emulator.localization("4") }, + { id: 13, label: EJS_emulator.localization("5") }, + { id: 12, label: EJS_emulator.localization("6") }, + { id: 15, label: EJS_emulator.localization("7") }, + { id: 14, label: EJS_emulator.localization("8") }, + { id: 2, label: EJS_emulator.localization("*") }, + { id: 3, label: EJS_emulator.localization("#") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + ]; + } else if ("pcfx" === controlscheme) { + buttons = [ + { id: 8, label: EJS_emulator.localization("I") }, + { id: 0, label: EJS_emulator.localization("II") }, + { id: 9, label: EJS_emulator.localization("III") }, + { id: 1, label: EJS_emulator.localization("IV") }, + { id: 10, label: EJS_emulator.localization("V") }, + { id: 11, label: EJS_emulator.localization("VI") }, + { id: 3, label: EJS_emulator.localization("RUN") }, + { id: 2, label: EJS_emulator.localization("SELECT") }, + { id: 12, label: EJS_emulator.localization("MODE1") }, + { id: 13, label: EJS_emulator.localization("MODE2") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + ]; + } else { + buttons = [ + { id: 0, label: EJS_emulator.localization("B") }, + { id: 1, label: EJS_emulator.localization("Y") }, + { id: 2, label: EJS_emulator.localization("SELECT") }, + { id: 3, label: EJS_emulator.localization("START") }, + { id: 4, label: EJS_emulator.localization("UP") }, + { id: 5, label: EJS_emulator.localization("DOWN") }, + { id: 6, label: EJS_emulator.localization("LEFT") }, + { id: 7, label: EJS_emulator.localization("RIGHT") }, + { id: 8, label: EJS_emulator.localization("A") }, + { id: 9, label: EJS_emulator.localization("X") }, + { id: 10, label: EJS_emulator.localization("L") }, + { id: 11, label: EJS_emulator.localization("R") }, + { id: 12, label: EJS_emulator.localization("L2") }, + { id: 13, label: EJS_emulator.localization("R2") }, + { id: 14, label: EJS_emulator.localization("L3") }, + { id: 15, label: EJS_emulator.localization("R3") }, + { id: 19, label: EJS_emulator.localization("L STICK UP") }, + { id: 18, label: EJS_emulator.localization("L STICK DOWN") }, + { id: 17, label: EJS_emulator.localization("L STICK LEFT") }, + { id: 16, label: EJS_emulator.localization("L STICK RIGHT") }, + { id: 23, label: EJS_emulator.localization("R STICK UP") }, + { id: 22, label: EJS_emulator.localization("R STICK DOWN") }, + { id: 21, label: EJS_emulator.localization("R STICK LEFT") }, + { id: 20, label: EJS_emulator.localization("R STICK RIGHT") }, + ]; + } + buttons.push({ id: 24, label: EJS_emulator.localization("QUICK SAVE STATE") }, { id: 25, label: EJS_emulator.localization("QUICK LOAD STATE") }, { id: 26, label: EJS_emulator.localization("CHANGE STATE SLOT") }, { id: 27, label: EJS_emulator.localization("FAST FORWARD") }, { id: 29, label: EJS_emulator.localization("SLOW MOTION") }, { id: 28, label: EJS_emulator.localization("REWIND") }); + + for (let i = 0; i < buttons.length; i++) { + let temparray = []; + temparray.push(Object.values(buttons[i])[1]); + temparray.push(keyLookup(Object.values(EJS_emulator.controls[0][Object.values(buttons[i])[0]])[0])); + controls.push(temparray); + } + for (i = 0; i < controls.length; i++) { + controls_ = controls_ + controls[i][0] + ", " + controls[i][1] + "\n"; + } + console.log("loaded controls"); + const end = Date.now(); + console.log(`Execution time: ${end - start} ms`); + if(confirm("Do you want to see the controls?")) { + alert(controls_); + } +} +function keyLookup(controllerkey) { + keyMap = Object.entries(EJS_emulator.keyMap); + for (let i = 0; i < keyMap.length; i++) { + if (keyMap[i][0] == controllerkey) { + return keyMap[i][1]; + } + } + return -1; +} diff --git a/emulatorjs/data/loader.js b/emulatorjs/data/loader.js index d87062df..7b903ca5 100644 --- a/emulatorjs/data/loader.js +++ b/emulatorjs/data/loader.js @@ -35,6 +35,7 @@ if (('undefined' != typeof EJS_DEBUG_XX && true === EJS_DEBUG_XX)) { await loadScript('emulator.js'); + await loadScript('controls.js'); await loadScript('nipplejs.js'); await loadScript('shaders.js'); await loadScript('storage.js'); @@ -44,6 +45,7 @@ await loadStyle('emulator.css'); } else { await loadScript('emulator.min.js'); + await loadScript('controls.js'); await loadStyle('emulator.min.css'); } diff --git a/pokemon/silver/index.html b/pokemon/silver/index.html index a576914d..4354e93b 100644 --- a/pokemon/silver/index.html +++ b/pokemon/silver/index.html @@ -21,4 +21,4 @@ - + \ No newline at end of file diff --git a/supersmashbros/index.html b/supersmashbros/index.html new file mode 100644 index 00000000..fd9dbbab --- /dev/null +++ b/supersmashbros/index.html @@ -0,0 +1,37 @@ + + + + + + +
+
+
+ + + + + diff --git a/supersmashbros/smashbros.n64 b/supersmashbros/smashbros.n64 new file mode 100644 index 00000000..df8979c4 Binary files /dev/null and b/supersmashbros/smashbros.n64 differ