From f956848fa12e9410c700ba8fa277c87fc90f285b Mon Sep 17 00:00:00 2001 From: Eyal Gruss Date: Thu, 21 Nov 2024 13:58:19 +0200 Subject: [PATCH] kmeotzag beta --- resen/pages.js | 7 +- resen/screen/README.md | 25 + .../assets/Assistant-VariableFont_wght.ttf | Bin 0 -> 79660 bytes resen/screen/assets/Assistant_OFL.txt | 95 ++ resen/screen/binjgb.js | 21 + resen/screen/binjgb.wasm | Bin 0 -> 133348 bytes resen/screen/css/style.css | 183 ++ resen/screen/css/style_keyboard_controls.css | 1259 ++++++++++++++ resen/screen/imgs/logo.png | Bin 0 -> 456 bytes resen/screen/index.html | 41 + resen/screen/index_keyboard_controls.html | 102 ++ resen/screen/js/additions.js | 18 + resen/screen/js/script.js | 1519 +++++++++++++++++ resen/screen/js/script_keyboard_controls.js | 1424 +++++++++++++++ resen/screen/rom/kmeot_zag.gb | Bin 0 -> 524288 bytes resen/screen/snippet | Bin 0 -> 100737 bytes 16 files changed, 4693 insertions(+), 1 deletion(-) create mode 100644 resen/screen/README.md create mode 100644 resen/screen/assets/Assistant-VariableFont_wght.ttf create mode 100644 resen/screen/assets/Assistant_OFL.txt create mode 100644 resen/screen/binjgb.js create mode 100644 resen/screen/binjgb.wasm create mode 100644 resen/screen/css/style.css create mode 100644 resen/screen/css/style_keyboard_controls.css create mode 100644 resen/screen/imgs/logo.png create mode 100644 resen/screen/index.html create mode 100644 resen/screen/index_keyboard_controls.html create mode 100644 resen/screen/js/additions.js create mode 100644 resen/screen/js/script.js create mode 100644 resen/screen/js/script_keyboard_controls.js create mode 100644 resen/screen/rom/kmeot_zag.gb create mode 100644 resen/screen/snippet diff --git a/resen/pages.js b/resen/pages.js index 812e9ed..7a3cefb 100644 --- a/resen/pages.js +++ b/resen/pages.js @@ -6,12 +6,13 @@ const pages = { "/": {title: "רֶסֶן", alt: "Resen", author: "resen", logo: "media/resen.svg", skip: true}, // "open-call-kmeot/": {title: "קול קורא: קמעות", alt: "Open call: Talismans", author: "resen"}, + "screen/": {title: "קמעות צג", alt: "Screen talismans", author: "eakoukli", kw: [1, "interactive", "live code", "poem", "software", "sound", "visual"]}, "fateful/": {title: "שהות הרת־גורל", alt: "Fateful stay", author: "shoeyraz", kw: [1]}, "psychosophy/": {title: "פסיכוסופיה: פתיחה", alt: "Psychsophy: a reading", author: ["avinoamsternheim", "menahemgoldenberg"], kw: [1, "visual"]}, "talismother/": {title: "אימא קמעית", alt: "Talis-Mother", author: "sandravalabregue", kw: [1, "visual"]}, "umbilical/": {title: "טבוּר", alt: "Umbilical", author: "nettalevtov", kw: [1, "live code", "poem", "visual"]}, "taase/": {title: "תעשה", alt: "Ta-a-se", author: "ayaamikam", kw: [1, "biblical", "cipher", "interactive", "visual"]}, - "kaddish/": {title: "קדיש (שלד)", alt: "Kaddish (skeleton)", author: "omridanino", kw: [1, "biblical", "interactive", "poem", "visual"]}, + "kaddish/": {title: "קדיש (שלד)", alt: "Kaddish (skeleton)", author: "omridanino", kw: [1, "biblical", "interactive", "poem", "sound", "visual"]}, "water/": {title: "קוד מים | תרשימי זרימה", alt: "Code of water | flow charts", author: "arikweiss", kw: [1, "2d 3d", "biblical", "interactive", "visual"]}, "talismetta/": {title: "טליס־מטא", alt: "Talis-Metta", author: ["neorashem", "nimrodkerrett"], kw: [1, "software", "visual"]}, "snark/": {title: "כרחש אבמ\"ח וכרחש אדו\"ש", alt: "ABMḤ snark and ADWŠ", author: "eyalgruss", kw: [1, "2d 3d", "combinatorial", "interactive", "new constraint", "pangram", "software", "sound", "visual"]}, @@ -72,6 +73,10 @@ const authors = { "brunogrife": { "name": {"": "עידן ברונו גרייף", "en": "Bruno Grife"}, }, + "eakoukli": { + "name": {"": "א. קוּקלי", "en": "E. A. Koukly"}, + "web": "toonsnake.net", + }, "eyalgruss": { "name": {"": "איל יהוה גרוּס", "en": "Eyal Yehowa Gruss"}, "mail": "@gmail.com", diff --git a/resen/screen/README.md b/resen/screen/README.md new file mode 100644 index 0000000..0679159 --- /dev/null +++ b/resen/screen/README.md @@ -0,0 +1,25 @@ +# binjgb + +Fork of binji's Game Boy emulator built as a WebAssembly module. + +It includes changes from [Daid's fork](https://github.com/daid/binjgb) and others to better support GB Studio. + +## License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/resen/screen/assets/Assistant-VariableFont_wght.ttf b/resen/screen/assets/Assistant-VariableFont_wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e4ad9382b6f1b0264996405acc9fd690ef6ccbe5 GIT binary patch literal 79660 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

#YC6SYx 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 z=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var wasmBinaryFile="binjgb.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["g"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["H"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _exit(status){exit(status)}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}var asmLibraryArg={"d":_emscripten_memcpy_big,"e":_emscripten_resize_heap,"b":_exit,"f":_fd_close,"c":_fd_seek,"a":_fd_write};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["h"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["i"]).apply(null,arguments)};var _emulator_set_builtin_palette=Module["_emulator_set_builtin_palette"]=function(){return(_emulator_set_builtin_palette=Module["_emulator_set_builtin_palette"]=Module["asm"]["j"]).apply(null,arguments)};var _emulator_was_ext_ram_updated=Module["_emulator_was_ext_ram_updated"]=function(){return(_emulator_was_ext_ram_updated=Module["_emulator_was_ext_ram_updated"]=Module["asm"]["k"]).apply(null,arguments)};var _emulator_read_ext_ram=Module["_emulator_read_ext_ram"]=function(){return(_emulator_read_ext_ram=Module["_emulator_read_ext_ram"]=Module["asm"]["l"]).apply(null,arguments)};var _emulator_write_ext_ram=Module["_emulator_write_ext_ram"]=function(){return(_emulator_write_ext_ram=Module["_emulator_write_ext_ram"]=Module["asm"]["m"]).apply(null,arguments)};var _file_data_delete=Module["_file_data_delete"]=function(){return(_file_data_delete=Module["_file_data_delete"]=Module["asm"]["n"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["o"]).apply(null,arguments)};var _emulator_delete=Module["_emulator_delete"]=function(){return(_emulator_delete=Module["_emulator_delete"]=Module["asm"]["p"]).apply(null,arguments)};var _emulator_get_PC=Module["_emulator_get_PC"]=function(){return(_emulator_get_PC=Module["_emulator_get_PC"]=Module["asm"]["q"]).apply(null,arguments)};var _emulator_get_A=Module["_emulator_get_A"]=function(){return(_emulator_get_A=Module["_emulator_get_A"]=Module["asm"]["r"]).apply(null,arguments)};var _emulator_get_BC=Module["_emulator_get_BC"]=function(){return(_emulator_get_BC=Module["_emulator_get_BC"]=Module["asm"]["s"]).apply(null,arguments)};var _emulator_get_DE=Module["_emulator_get_DE"]=function(){return(_emulator_get_DE=Module["_emulator_get_DE"]=Module["asm"]["t"]).apply(null,arguments)};var _emulator_get_HL=Module["_emulator_get_HL"]=function(){return(_emulator_get_HL=Module["_emulator_get_HL"]=Module["asm"]["u"]).apply(null,arguments)};var _emulator_get_F=Module["_emulator_get_F"]=function(){return(_emulator_get_F=Module["_emulator_get_F"]=Module["asm"]["v"]).apply(null,arguments)};var _emulator_get_SP=Module["_emulator_get_SP"]=function(){return(_emulator_get_SP=Module["_emulator_get_SP"]=Module["asm"]["w"]).apply(null,arguments)};var _emulator_set_PC=Module["_emulator_set_PC"]=function(){return(_emulator_set_PC=Module["_emulator_set_PC"]=Module["asm"]["x"]).apply(null,arguments)};var _emulator_set_breakpoint=Module["_emulator_set_breakpoint"]=function(){return(_emulator_set_breakpoint=Module["_emulator_set_breakpoint"]=Module["asm"]["y"]).apply(null,arguments)};var _emulator_clear_breakpoints=Module["_emulator_clear_breakpoints"]=function(){return(_emulator_clear_breakpoints=Module["_emulator_clear_breakpoints"]=Module["asm"]["z"]).apply(null,arguments)};var _emulator_render_vram=Module["_emulator_render_vram"]=function(){return(_emulator_render_vram=Module["_emulator_render_vram"]=Module["asm"]["A"]).apply(null,arguments)};var _emulator_render_background=Module["_emulator_render_background"]=function(){return(_emulator_render_background=Module["_emulator_render_background"]=Module["asm"]["B"]).apply(null,arguments)};var _emulator_get_wram_ptr=Module["_emulator_get_wram_ptr"]=function(){return(_emulator_get_wram_ptr=Module["_emulator_get_wram_ptr"]=Module["asm"]["C"]).apply(null,arguments)};var _emulator_get_hram_ptr=Module["_emulator_get_hram_ptr"]=function(){return(_emulator_get_hram_ptr=Module["_emulator_get_hram_ptr"]=Module["asm"]["D"]).apply(null,arguments)};var _emulator_read_mem=Module["_emulator_read_mem"]=function(){return(_emulator_read_mem=Module["_emulator_read_mem"]=Module["asm"]["E"]).apply(null,arguments)};var _emulator_write_mem=Module["_emulator_write_mem"]=function(){return(_emulator_write_mem=Module["_emulator_write_mem"]=Module["asm"]["F"]).apply(null,arguments)};var _set_audio_channel_mute=Module["_set_audio_channel_mute"]=function(){return(_set_audio_channel_mute=Module["_set_audio_channel_mute"]=Module["asm"]["G"]).apply(null,arguments)};var _joypad_new=Module["_joypad_new"]=function(){return(_joypad_new=Module["_joypad_new"]=Module["asm"]["I"]).apply(null,arguments)};var _joypad_delete=Module["_joypad_delete"]=function(){return(_joypad_delete=Module["_joypad_delete"]=Module["asm"]["J"]).apply(null,arguments)};var _rewind_append=Module["_rewind_append"]=function(){return(_rewind_append=Module["_rewind_append"]=Module["asm"]["K"]).apply(null,arguments)};var _rewind_delete=Module["_rewind_delete"]=function(){return(_rewind_delete=Module["_rewind_delete"]=Module["asm"]["L"]).apply(null,arguments)};var _emulator_new_simple=Module["_emulator_new_simple"]=function(){return(_emulator_new_simple=Module["_emulator_new_simple"]=Module["asm"]["M"]).apply(null,arguments)};var _emulator_get_ticks_f64=Module["_emulator_get_ticks_f64"]=function(){return(_emulator_get_ticks_f64=Module["_emulator_get_ticks_f64"]=Module["asm"]["N"]).apply(null,arguments)};var _emulator_run_until_f64=Module["_emulator_run_until_f64"]=function(){return(_emulator_run_until_f64=Module["_emulator_run_until_f64"]=Module["asm"]["O"]).apply(null,arguments)};var _rewind_get_newest_ticks_f64=Module["_rewind_get_newest_ticks_f64"]=function(){return(_rewind_get_newest_ticks_f64=Module["_rewind_get_newest_ticks_f64"]=Module["asm"]["P"]).apply(null,arguments)};var _rewind_get_oldest_ticks_f64=Module["_rewind_get_oldest_ticks_f64"]=function(){return(_rewind_get_oldest_ticks_f64=Module["_rewind_get_oldest_ticks_f64"]=Module["asm"]["Q"]).apply(null,arguments)};var _emulator_set_default_joypad_callback=Module["_emulator_set_default_joypad_callback"]=function(){return(_emulator_set_default_joypad_callback=Module["_emulator_set_default_joypad_callback"]=Module["asm"]["R"]).apply(null,arguments)};var _emulator_set_bw_palette_simple=Module["_emulator_set_bw_palette_simple"]=function(){return(_emulator_set_bw_palette_simple=Module["_emulator_set_bw_palette_simple"]=Module["asm"]["S"]).apply(null,arguments)};var _rewind_new_simple=Module["_rewind_new_simple"]=function(){return(_rewind_new_simple=Module["_rewind_new_simple"]=Module["asm"]["T"]).apply(null,arguments)};var _rewind_begin=Module["_rewind_begin"]=function(){return(_rewind_begin=Module["_rewind_begin"]=Module["asm"]["U"]).apply(null,arguments)};var _emulator_set_rewind_joypad_callback=Module["_emulator_set_rewind_joypad_callback"]=function(){return(_emulator_set_rewind_joypad_callback=Module["_emulator_set_rewind_joypad_callback"]=Module["asm"]["V"]).apply(null,arguments)};var _rewind_to_ticks_wrapper=Module["_rewind_to_ticks_wrapper"]=function(){return(_rewind_to_ticks_wrapper=Module["_rewind_to_ticks_wrapper"]=Module["asm"]["W"]).apply(null,arguments)};var _rewind_end=Module["_rewind_end"]=function(){return(_rewind_end=Module["_rewind_end"]=Module["asm"]["X"]).apply(null,arguments)};var _set_joyp_up=Module["_set_joyp_up"]=function(){return(_set_joyp_up=Module["_set_joyp_up"]=Module["asm"]["Y"]).apply(null,arguments)};var _set_joyp_down=Module["_set_joyp_down"]=function(){return(_set_joyp_down=Module["_set_joyp_down"]=Module["asm"]["Z"]).apply(null,arguments)};var _set_joyp_left=Module["_set_joyp_left"]=function(){return(_set_joyp_left=Module["_set_joyp_left"]=Module["asm"]["_"]).apply(null,arguments)};var _set_joyp_right=Module["_set_joyp_right"]=function(){return(_set_joyp_right=Module["_set_joyp_right"]=Module["asm"]["$"]).apply(null,arguments)};var _set_joyp_B=Module["_set_joyp_B"]=function(){return(_set_joyp_B=Module["_set_joyp_B"]=Module["asm"]["aa"]).apply(null,arguments)};var _set_joyp_A=Module["_set_joyp_A"]=function(){return(_set_joyp_A=Module["_set_joyp_A"]=Module["asm"]["ba"]).apply(null,arguments)};var _set_joyp_start=Module["_set_joyp_start"]=function(){return(_set_joyp_start=Module["_set_joyp_start"]=Module["asm"]["ca"]).apply(null,arguments)};var _set_joyp_select=Module["_set_joyp_select"]=function(){return(_set_joyp_select=Module["_set_joyp_select"]=Module["asm"]["da"]).apply(null,arguments)};var _get_frame_buffer_ptr=Module["_get_frame_buffer_ptr"]=function(){return(_get_frame_buffer_ptr=Module["_get_frame_buffer_ptr"]=Module["asm"]["ea"]).apply(null,arguments)};var _get_frame_buffer_size=Module["_get_frame_buffer_size"]=function(){return(_get_frame_buffer_size=Module["_get_frame_buffer_size"]=Module["asm"]["fa"]).apply(null,arguments)};var _get_sgb_frame_buffer_ptr=Module["_get_sgb_frame_buffer_ptr"]=function(){return(_get_sgb_frame_buffer_ptr=Module["_get_sgb_frame_buffer_ptr"]=Module["asm"]["ga"]).apply(null,arguments)};var _get_sgb_frame_buffer_size=Module["_get_sgb_frame_buffer_size"]=function(){return(_get_sgb_frame_buffer_size=Module["_get_sgb_frame_buffer_size"]=Module["asm"]["ha"]).apply(null,arguments)};var _get_audio_buffer_ptr=Module["_get_audio_buffer_ptr"]=function(){return(_get_audio_buffer_ptr=Module["_get_audio_buffer_ptr"]=Module["asm"]["ia"]).apply(null,arguments)};var _get_audio_buffer_capacity=Module["_get_audio_buffer_capacity"]=function(){return(_get_audio_buffer_capacity=Module["_get_audio_buffer_capacity"]=Module["asm"]["ja"]).apply(null,arguments)};var _ext_ram_file_data_new=Module["_ext_ram_file_data_new"]=function(){return(_ext_ram_file_data_new=Module["_ext_ram_file_data_new"]=Module["asm"]["ka"]).apply(null,arguments)};var _get_file_data_ptr=Module["_get_file_data_ptr"]=function(){return(_get_file_data_ptr=Module["_get_file_data_ptr"]=Module["asm"]["la"]).apply(null,arguments)};var _get_file_data_size=Module["_get_file_data_size"]=function(){return(_get_file_data_size=Module["_get_file_data_size"]=Module["asm"]["ma"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); + + + return Binjgb.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = Binjgb; +else if (typeof define === 'function' && define['amd']) + define([], function() { return Binjgb; }); +else if (typeof exports === 'object') + exports["Binjgb"] = Binjgb; diff --git a/resen/screen/binjgb.wasm b/resen/screen/binjgb.wasm new file mode 100644 index 0000000000000000000000000000000000000000..81fe205a40420f133498b92941ee80ce495cbc77 GIT binary patch literal 133348 zcmeFa4U}EiRp)s>-e!eQ^{;@yU4Wd*Y+<(f1@r zk4EoFkLqvCKY~Om%uk&k`yl6`_e7TONc5h_iXGD5BR)4jN8VFY<|q`3-qTP}5flEy z2P~77Kf>Sis8!H7dPu2?I8wknlDxSQ-yh!}ZQ}2@L@9s2HB!vCMRopuJAJr6{*EY0 ze=`1P9H;fkT2f2WG_BXuD4v>5D3L}OHz+|X~<5~YW4X2 z@zqz?8*#jxEGLaN7<6ZT{+XoH{E6hN}{GCxAe^>N_al8;+7cWL1j30=;Gk#z6 z-uSzthvWErq92Ik_eb9zFGb%L?~lGUelYr$_&{`j{1D@GF#6{Bd!zp`{y_9U#NQYF z_wn~f|6S~&Z;JOt|2+QM=-u(#qi>9FjqZzYi~d=BdvtGnM;yg>M&A&>Bl`OIuINqi z-O)SZcSg6xUl-jPzbkrsd{6YX@z+QD;%|st{7<7>;(Md7iT_#j)$x7N+v0DGZjRp_ zeO3I=qnqMyiuT6e9PNpBMPHfRe}D9rscyAAKxNzU%(zqj9oue{>>F7VnRKB2FH-Kl<@FdEfofkHzhsF>pIu zzV8Fyd+?zH`UJl2NoCR-})o*N8%rij~t#@{%rH3@vkRwd^9RbZfzJyyQu|sDy7yN{#;;b>KXK^p442=T%z7`SD zzLsSILs{xt3t4nSe9Fqa(mb>;IsSNFqmN4q3}?F3Z)7$1YP{r`k1<67!XQ5=VKbfm}h-V^Ptc0I~D|lKu6aJ zk$HXJvHD?;+B!c!T)%I&!0_?grldF;~LdVSEF+$I8WXUw-j%!^6?@Z z-!U}=oQV1~pgyu2*vb0XUYioImdBIJtR2ZN_*`R`|F0Q-H~iCTPjtGyU6YfOQ~h1j zyEa+D%`?be6|PY8O7qypG)Q)0r4r7EeQD1fR3m zz}fa1BXG+^YQ$;>AdqWd!u#F)eg^MNR9P~?3BH%ldM4PsuO_}0xyOho+2x}?;9^*C zHjy>gaKh8fL8C(m|We89!~ zZ`P-#{ao~~&UTqv%|(bPUdUs9pjgG+HG8uXiD=!~6H{g8(?%HTQ5ben{NvAbT#Nen zRejf`E7S+uzAk;`kGgq>#&qt5hn)LtS3It5+#-NA=1&WLT}9_qgKI5O6=5-#ZpmDz zxV<-}w*oP-HwAUVCS3^hof~cAnl^n|ERbw2rmrjfQqL zjds1!P+#I{3BKPvu-|t-bA8 z`ySx zo7u#nLDPM2mM$^`wS_#*YBY^d{~_A6(;az(6P3y34|16$#3{FvUt)bb+)5v1R6A@;-i)k?(VBTjFhx7J5);yCO8N=?*D^SZd0J$=?kmDbz1KT^woL)0=WYAF^6$^6Ay;}TY@4`{IxLG`zj!YW`Q+j|tdLj@o6 zLOr~ez@tUrfJ+p9B!rU#uBPyb5Ka#uz7T#mglh*}U*Y2+TtDD4g^z`BgC#3c#Bzve z9$Q~yR!rCMm77D5N;gUPv}wz(TVPo zB3=p+>5^J2lME&>i(RuiY4q#)KwMUX4t(J>6cbZ*MfWx3;&pZ`YP@a>|J4 z;ZGa>TtSm3LbxfM9S?z;aO5e^NbRK%4`JRS%!%OK@jvu6S;=D|P*l4d!m5b^Mvjk$ zIBNMVqiU#B?OAPKM}&AZX?0-!&-dZMv0I7QE1`;ciG0v$n9k4 z4b$%DtQ|&WCqmw`bw*#GC~6RTo(_ScAy0*HXo%6%g(^N@2!W!&^C27x81f>m7#Vb7|-%_|{dHK!Emx|58K+GkC9p$LSgJPHDoSTyB)2p3H`R_)w=dMtvP zuo*$sp|t4&3Pxdpu-75W(^P;?^Ba0<3*qO&D8vUB+%Nd=P-B=u)oAIu%IKAn`LsG& zBV(5k@#8tgo}}hhUPLz$xldh}HTpdl_hTvWb|+8Fqj{qm^kWAW+_{xV{SC$T2X2O< z+Haq<&zEMa{rJLL<4Bs|vGHso#>Fd^jZ~=AGO_;&LEA_FaS@~krWa(7!ZxCFq8^R1 zlVM2uKX{7NP93y=6NX3MYh+w_vhNY+E^)*wx?GEGlimQ2#5JmLBc#oDwKk-%+Q}w?|>ULm@d&)v|$J;m6x~oI4?-t zt0*R=bdC#z5Vx+T5M-K)*;+kR6cTM3=1R0Fn9B}Y);#k1W%li+O^&>NId!FenIWfN z)K==3*?;?(Qojs=`C~GE)fc+h zM&Nk?NNOSC2ukOdw=oC><%dZVII>~0!gFJ{<*r`h;tY+?Z=X1pEcIf4T(#x)p3SU_ zp0f+b{mtn5Hu^vOM>0)XyUI=XvnMxZ z?L{2om_I&y+?%1(=yGT1^<$Kz+^rVSq9yH~aUd7^Y)gy8A?j%8v_=f~r


IJ{+P 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
3YrEhdMEk!?q-E8CJF3A?N z2B5PD3o83im4V@PO|O zICaS3Y1|ffsm4vsDB9@cF32}d9y z(x>9dFTkZJeboX~zn-|-gX0hr=_j>&v~>e1cI5ST($^NMp zh_`=cUU%2QnRx_3eA0@BdV2j2XCU;G-`Yi$vCecvtk%sgce5~so3wRA1Pt<0e)}yf zk7FieRDXizVVxCP^}pr{2SuILb8)jyoBDGvhz?+V5QPb z=b%Q^uLtxF4)s?{XL`&@Q26);5SC^^eC?(rh4o`kfu!g*v!qa$PmMLV7a%8kkU;cc zGQdWP>li##2wGBHat>CQ)fvgba)h~Ukt{j2)UH&4#Aq?dr{aP`@ltTOcsar84+>z; zgqnx?5wsfZ_a!IL6aU(XRsr(SSVjrRW(ekxPrOQ*gOVlcPk!t|v7~v$<1(A&V|2DeZVpN*cwhWn70}U!!Ezz5koy7?d3@Z4V5iY@yZKGDQ3l+E= zYuWqXo=O2T*FpE|DGXi%2jtm?#-`kWf$ti$&%W;-{GR=W?El^ahC0pp_YE8V{(l)U z^1y>ejXwC0F=G!MH~z2*had5QiANsw!GC>C9o^!#9&>Elq}SAO$4@@t#3@rxdQF`? z?L+OSOrLS;YwE+NePrfGKlbrYyryQIK6}pGc^zlGrp`QT{({bhixw|Adudm9&$8v` zyr$0mLzuw`lec^)~j38x74@Qt?D-Q9razc zL48ksU;RMcuI^BGsvoK!sUNGKsDD#;sh_I5)jevXx>x;7-KXwX52y##&(%Zf7wVVl zRrT-cVf8EZh2d(eyx6k-><6Qs{c|?s^6)n)bBa`s(M;Iqc*E& z)pP23#Jr$hRDVz}sV(Y{>Q9{GW%Y`B4d&5uX+<4fsL}U&y7$))E-%rszsl)R^A+iD z3wtTEJWqyow6)6By%jj__f<4)h};Y$9Bez%e9a~>HCR5a%f6CS0j@L+A@qQa?U}yiB)U1RiaF0(`A5-fKaV_ZlqCGx!lbVS<36C57QoTJD)doDu zgj_Azd-(l@G#I+kMMW#Sg(#*I@B%7og_>i~65Pi$L;1+1Q69UOkZK=Y zfl$+gitdRT4f_MrQOagjRG@7#2(s2;>Qiwpn!eJAWu4Hh;PKvxS`>+AnCp8(@uDvM z#qE%xl$3put5Owuq3kh&6bdNeq_Gp@!Ic6znZZaR9BilKqf%7UAC>y$qk|0;=WFX` zIzyRWNNP;faA2qhb|+|E_W1(lP=otmIGzgu8N(3)RJq}JHmO+&P1s!w2Q^n4j?LVH z3JgaIi$N^0(9Zra8}O*0Eyptq0d&M9D*H4CXoFZ-6VZeHzG{NGX1BTW9*l4#_FzvX zRe^FU&gzi!GM6S{<9cwfN^SDx`GU(D{T@ZEY=*uhU-J(1LysC_8iQ9aH;qrOfGStUUnDhaH&;e#u2#l}w3{mbI3YGD zT^0iWJYfUQlG0?p5l5)7KV`f9XlpY#ZfH)V(X^B{)vyGSA_z{pQ$MD|Wv@|sXA88x z-i1VMwz~Y&V38;~cwm{rgah5-S{IUJRy<&KX|J2gP{!X zz_5Ymv?&a^B6Hd%{f>vf++yojI;`viRTEm;6)dyEC3(cA6i#L_m8J1jY;;iJBsLhC z>1~*T6&Ec&QOk6HQk$Zdsq`@6z5-^LVOg~cVLuB28Osy_RJmokH>p{>xn<%`jTgc; z2Bc{HG|o=Jvk>|eJz;<|e4ZiP^EPdyF_#T@_d)OP<~GwJ9jH-cW%;L7(?sfMxUwA4 z(}J~SAgQ45hti<$zbmOme89cJzW?8nfF#PZY!;>_Z>iy-VO0h5LLM>&3;Q@Nkp>sS z-RMLvq@tD%*3+zo>VDc^Nah8~bZi-(^YYsHPu_tf#xP~)kl0x3fW*-aijc@Z?mLmO zT4LmQ_g&f0M{oKdvan?S@;z;dWPikTB16fCE6s?Lw?VQ$teS>Z(v8+#?wlaiN96G)1=tMe_O`WkkrI~i{qP<3U5cL}z zze7Z&O273)y-_sKC+ZCx$D1P&qFyiKg#=$G;{{Q#mGOe8UzhQMsB1ZXhlom*e(Q<) zHPJwysMl~DuP8@|`c)Y(hN1yS)LJ2IO5f~c3tcp<@;%6LK4OE|voM2$>T3m247M>-vGshcH4@pYxj zk4G2)(QPMMkqFLJMB8a5-ahU>MLOcxw=Xap2SLgy822Ot*NdOgeS2Qz13HOECdY}d8%J( z<%eK1;`q`JPXchha|MjEe^&xdBlMXbiu7+y;1`bKks2(;Jz#9yST1}R(8(XpRil4j zNG1AeKS)DOQ%dL+P$ZJ@0-#3)jK1=k@A*0^FqSy+c%F_5>?EQ-rK189iKtKNsK7cR z>RcTabVi6e2T^@)FlJG5$FxXiZBfuYwr6u35p!lTTU$z>jfblG50q| zNW(2PTAP5tdCDASVWc4iGuf6v?U z57C>Iq_n>|yEq2X=(xY;07IYeXX?)9@9-q1ZVx?T0e?>P-T`Wzhr{@2i;%#M?#;bM&8j~dPhFq*wHwyI`eg7%t0Up_UN538F)KX59e z&#vR7aHlbiY>@&BOWCs>Wq|tzsZYS?l>zP>n?3=bTL!pqNcsePP8s07k?0ff*=2zH z2B1&CPbc7Sf4wdgbv*s3H8(2eHAc*lTqx!=0_TzUETRf_K337FghmMBs0^Rp(i^6q zD8?BKXtc6LMhI}7!`=hnN|No#@mkyZleRC2)Pz);M*;9`qH}2##c+YA41A{G<7F}X zn%HkAWByoK%)XlLY|I}mi`m!VosD^BSnR}C?TFt!oAW!Re9O~-3?Xp!*N#83JdkUdELFU^Q=|Wz4KZU zoJ*Knrsg=P=#9C0tmmf^Py*tgHKK(Fa(Naxw}(8YSI3w^SS=j({}{&XpO9JSmZ&`F^uJ6?DaZc-(bHYT^Ln7Fo80>FrCQ2@tQ z0>FrCQ2@tO0>FrCQ2?!#05IZO6o6X^03)tN0kjZ+Jy~4itq#QX=n|xho7R7&yu2S# zI0>TljneadJ@|-D@;_JxqCd4LKH)3|@u)Ho{V7A`5RWVa(Vq%b4sl``i2e}2a)=)& z1JTHS!b(grIvzm~-_{zDAgHBh>zWk7{ur-B9ZsZ3o|;dnno#!x!%={-B}t%# z1TGjVA_2<^NJe{PyxWZ(DjZBsu3>Oap;!$K8Eco5-yTR?CEkHbkpnGFCI?SeL5?vA z?CzAr7U8VNHM)mEY_r0_R^8 zr1}Ka4J|k2DS`l1FY0YKdr)=x$yT6~z$yO}nB?DHD#jvRPh864SH@$`HPa>hR|Qvp zi#cV%c$MyX?fvhaO99dVym`Q`F?Y-}rtcTi_loKJ#PmI4`u;ErykYL%zA&SnFdq|M zFr^1f>H9M3`I5X|z6!sWTh%u8-|BzVpVeQ~U)A5#cJ;dYyZVRvr+P#EuXYxr13Uf8>%kj9hhyG<|VDyIW)w(h5g?a0Z8N8z5raG1dyhG zeF3;G2_Vh>`U3EqNdRf`*B5{{Cjq3nUta*;L;xc_U)Y(52?!*CFoYw@Dz9l5-qWn8 zlQ7*Oj-trp`$gP$>0?=N(@&?Y@;D%iRs@}5q#fk#22Zq5Pp3#^(|8C9on48+yFWCp ziQV32OT{DNh?ek94yOf@|BVE$@$iuSgX*OgsYI(>GXjWd(TxePv|938HBd!%97w*1 z;D!mo<)!rUh9rormwkbFeG)`g%)UUpE(s!QW?vv)n*@6Myuqi5~qhBoxmzA|@xL22j%PLzn+^fpM zWyP%;?v-WXviepH_lmM`S&6HLyN2LaufcDv>NZ18qje6?9biF;q?Hah`0|Uq#T-P7 zj+Q)k!dvLB?`XeLf{myIH3}!h!-|`V(V#U+qc2YYN%ztUHCmfI&`29G?fwX@sOCw9 z(RxjX3iMq{|E|~ii%T$5YQ0~59u>1^UpOZ%rTbqj3OJz?CleRbbc|twIlvc^U`Yk{ z2LxqctxAF=)wx1gpHG4%mA67z7bU@xs#+ne&n3Z}=K(MNQpy%-wnmX}gR ze>AOnSOa(I82Ymb%!+llzF5n?R_e%S62O>2^C&Di0R+!&x#wOM)we*`KAi+d>srNd zdXwO2J*yawhb4rfOKDoiDu(lB5*)2x6~p=8Bsf~PDu(k0!Kq%aK#RBa{FFv@c&aN^ z**;eC#8j^ovD8ZGNMWt?p9vfqrN^&+PX=vZ9S{l?D8WA%1Q9xN*4M1%@-$TGw~dvX zp&56k**n^m=Qbl}zu0l<3jIH|V6hz(A8UW9R^cVg(S|6lhZT`kc72qIVjDW2taCZAOUH zjp}FSSogv^E`ABp8?53)OXz3a5=xMU6qI-=l)FM4qzeTl!Y9v)w1cF+pu~%%aFBc# zlz5?UQvBBU5qd8zPDvHz((@(gL8dvH`?(Uid1^t_Q_G`;o-I|#7oB*a&7}(Y(i1QA zOsPV?0L2UGXTK8U)R&=nA$q6Fj5Ol}*897~2=NpZs@@*%zLFHDO8B-|p*pfK#S1)H zij3xXyqk*2lYTEOfnmNp#S7^tx)KWc@)R$m-{VRsNoRAGU@KEZ!Xq-)dfOC@mGm#26k{iIVuAzz;2 zh4jl!359%liWhpMlxX<&DPHJTr3(4oT)fc3RA^6DMU| z3i_Z9r6fdM7Xh^{1%Tv4%zkskO$y2<6;p+^Aq-1%D7YLtX zC@c`zCk&p#eKT4c(2p-95Z^aY1*OER2Zd88U!n?1>30wkaQPxtQ0hCS^u)JO1*P;G z3JJJ;p(-eK>z-z%3RavMVwbuSTgJNrIKRbr8O^1$-Z#?4t|sx# zLKWL}OB3s8jgnaR4N$5^KbI*OdLt88a{GTnZr{L(lG`HjdQOzw7Kzt!qU5$n)UQQI zZi__yWQ63lNL))`E1}$Ob;RiZjoYA<&uw~`!f;#A?;2){!8!xsgSs2`t@+!l$espMX6Cvh8;^0`g#au{w4 z`sr6WB)7MQ+}2NXNN$Tn{XU1}wn(J6Gc5fmz3K5qqJHs0>b6LvCn@v-yDthNk)Dd! z%WdNkpis9#DWBW)o`vDIpdURjVXjpewmcJZ`_r5#xh)cVIZ<+3B=YMDQnf`IzqTNG zEz;;I1nzTvR*N+KCPI1d3Gd848-(&Xjh7+}qXqTotq7jZ`INmUNaLpzr1=(U^!UME>z!o1K`5Wgc)P)HSx~QwI3jJgX9aUE zei%V2vqauSz8D4)x4wr{vBsK*ZQ zC6`r~Ke1-l^peS85<88TJPwoCFS=xLn8XguC5OW#c0Vo|943+T@V)#^;;-tWGj2YM z;S1fcIHcd4xE`kh4$r0}$>A`G-G@sKhe_;1TXHx|V!zpv!(kFTww4?YlgRV*UJfU5 zI2GYAd}SLBhxB7F)>4Nv0f*VmwB&G@#D1V9hr=ZHcq};_Cb8dQ$>A`Gy%9?ehe_mP zcrS;OIGl-a7_O8JheP_c$91?i;4u3;mK+X~*o(2`aG1nyekF&)B=+blIUFXjuU^UF zFp0eI?&WY2hifAohQndQ;gEjpLs;r?F5obG2bLTTli2UC)n{ zv3py|;V_9D*Y4$T5{GjU4#P*U;c!U5*0>Hk0f${mk{k|`*j29NaG1otWF?2gBz7Gu zIUFXj4_L|JFo~SG?&WY2hn)zA;ilGbIHVstnw2`d(F$11E@LH&MH)MQl{^+{>S$GZJ8F{#YDcM zz99DukGW`FvWr;%@!XNbIO8LX-6|LJjaldzwGt1)+E+51Q97yJ$#X7RoJG$ji-VOH82&|K=8=dz(D_Ek09r2Z8(--f1}vi*FNVh zLT|Qp^}6v?cq#B%>QbrjsMcRut@>VRO;CWaHx7+}3DfP&qlR%1hmL<)>Obkt+M50jmmb9(m zfYAE&{k4b#2tT-c`@Qr7UFu!*13zQ0P!zF{mH8@vFM*2;yo{Zs!Kry=g7OqWfNB)? zRla{26YP(Bk*_G+J;Mg0b;(A@x4}aaNRU9<-PP#q;s+G>OQ6y_%N`AeJ$g?9C3bIl zsbo!%rU{sjkT+*m8}@RAIdWGNEB3sXc(sb<2&+vvSAi1vy8wUa^>Em% zwPdq`NA(uCP5i3(Kq4ENGnzuF>;MGAK^cr<6{9a>wEP z8pB2uxx&Xln-ZEE6$2L!ckRiFJOU!vm_Ui$Taly68`L%OY(&xkBl0i>d6CXG5Diw5 z!p3G?crK-OIh}IT?hm2QxM*$s9{C!MtFnF!-Bd#!Tz2$h*t-%v7vXz2a%hTZ-u=r~ zOZs5MB8E?__g$>ng$=U_116JlR++6&KwBvLb!DF;W2(`PO}!xzmh_tY<2RW<`i*x$ zc$JubW6Q{YAdALaJO0RBJsB`Cr~L73$U zC%j*eyU`+x-@m7;%j^zisU}rf@7?3=yD|ne@p;PJHTh-|dDg)cK8Vrx@{4rOZqBOE@_hSZPmwF%%) z@CB>HmOE%qG9TVdFLiM>wZtY`(k`}MP{a0icDb9y@Nd&bHhWwtvzZ-irJ2RIf|rpj zGX}$2E!8-iA6QfcfF`~N{E8_-A#NG~MPf70@v}ydfY@P}mxgy0wKK%o*&a zdfaWlWEG&U6wfCk4?%%4<}>I(^Ssuwxg}rI=F}_zvaY3WV~?IOk?uHTS7^BP0s_=Z zH7TDS66X0WO`c9PxuFN;kd=tC`?Wk1Z+X+MY5Ac_t-u_V*4LQ9AYo<& zk7|i>2sx^2fxG@*MI6D28)e&v5xGeiC~r&AyiN)NfLxm)ezZwp*>;UZh0~U@w<_R# zpXIiI+run+U35e$I|lSggF|_SPb9%z|74XKz*r zp~!^PFh~F}IKZ}zvN*`%vh)Kie97aF``n{XKiN-1Uk&Jk4D?(Kdd@({L>oD{(1cV* z!>87Kqs~eBz%6$pOBPikHvoEs^oI}wD&>Z_mfdUtL`&x|#M?vAUPFvLwFcmMkPX_} zV>k_}mg&KhQSO@c4n%rns`hYDKJBhHK{H8Jxe<28YPIkOC_bW#VlaCGxy8|6Br_U;Orz|ulShN?OuH7XCH?T_F18bn_dIcC9xR1T15sMHGgu9r0= z)HS`pJ%4E)PsUm)UUNK&G|o{|hcsA6!>;r=)?`AK%d|Bpn+iI7#6vaN?n9R=cMMm+ z?uY1Hqy8FXe-O4NjY4QRYP;qu3To7g2rtuQYf8R{DOuwxo7m~#Nh8q4{wyr?3Uy%$wbagWrc;HRYhZyvVG@lz zHPvdZ@6Fe=)?awRI(H189<^FM{JTz_3iYpPhQxxtIIgxXpUSj^C9z%T)-Q%|)-UWd z1ygR_iOm@&jdB?-qwLW@Fb$Ln%USE({!0T)=~a2iU%SaoHl!dodX^1aScM#Y1I231 zL`wZU1)+iE*hJ61L$%T*9}nZ866%q5uUA;vaYy6^?uUf*2qa8MJ)|HQAQX}xf;gq! zP3R6dYp&U~j&DFUMx>_TtRWddQcbAGDC-2*n!-HKxU;x_KzHFRZLWc>A}!J4PzHm>Z{fUr{Pe&BqKVRd6A=VOU_s18AI2d0U zrv_3))rW0d&|KrDFl$d^+yHOVdd#pwSM(^3b%`O_1vzx$)DAKO4(bd$WNR70F@q7Q zY(6uo0V3qCn9@Lx_+;3&=W9>QW04W|unsY`0NZa!XTH{{Lu+85KrlD!W)MjkDAK9z zr05za(@8w?>j4`Gn}U3hemr^INk`3+>ZAqVU2z-?7+69qN;Hs8O0!uLA2u~j97Yk) zlWnc#^mkK}h<)gq(6@C`Z;(dM#Jxcs=RGP{12fD0V2+s}>b=fUtU&T)QBb z%3A>)ftTn=Fh{0wsEY|c%xZ-#bgUt^mT6d8wzmBlTgKMkmi>M*?X|fgcT8ASSRq2*unj>m1l!h!r(1*J)?{NQ7X<-QM0tn_7d60~c__rWzB0e&4n& z_ja%yLIbO^{;;D^pw>QRc=yEN^CmjhAv3x=y1EZJd-k%PC5vWvA9Bu;uFgZ|%wN3V z%sGd2cg;PdW6`pOvwN0w9X!`^m(82M#F?|~j59jAoY@N(E}1*KXa17K&Ka}kFYK6i za6QHuwf5!e^oA#YKdtGuS2sSrt>NyiZ@$_+dwGY`-7~wV!#M*Po%!9)IbBN@pXqeZ z|5V3BXZXT-qnwU&&+eGp(=m@i0CZNz?0LYkXnyyi**$a5LZ)Rh&oX3TsFlKVd+Y5# z3?(D`t#5tHn=xaCXIT~n%ZA%M8Eh{AI(p&GlA}75Phqsm|8Qm7e#s zu6wyKweRMeZ}!^TQESuQ(&3vuZ_OI|-{db7{=);_BWqWBD?3MeGso5vI?pRne@Z^j z8|ztf9|-E>p*?FRPD~81Ui~!czdA9!0ACCq<69ZhcP^Slr10qx569~hFHihD?}TJ{ z1^L&;V`#PT)(+S7EyMh~=#{^{4XX!nfVF z(rfKLFW{foZFy^ie#XVuznZE|T zCR*MJ#va7!6{lxB49a_Vfabpb#PP?&aeEn0F9^r=BSt@&KQ8ay+;%k2^5){h^^1k? zxPt_2jd$D3R!%S12FhKMensdR$xi@E)Sr^e$xA``n7+p4As&wFdmLZUu#mq3{IT}L z<+WV?xIDzeGk*%AF#m`;_!pOlShyg68T%Q}Urzp``PX`DAVYK4bbA*1EUyUvW&1m+ zF7&Vcgiv1)^m)W-f}icwucNObn=b!F@(cQxlYgV)00phZumQ%^o4a+Zw|3=NZ|2OI z8b!>0`nY`Eh=*nSGyntJAdAR<5&A^w8PhKUDB8#H1$`(Sm)Cgyg8IhF$J5KfgC+6C z()a;=KK+ZAFQ;Ge{LwIAf^LDmD$>3J`K+WpCG=O~f9}sOcx#?N)|>SCOTBTUrg`PU zo_B|L-h=0PovT~DnIC9IZA*u@zx1H@>q{nk-#mP{H|~IGUb*n**Ee~qHlFQ`KkHPl zcCh1>3wv8VZ~Gmqy_MZ-y}`MhS2p~@&%CE@I@P=7^eJBJ$O)cTCj7`Fk9bS2ea34& z^AayNe4JM+>2W9N9Inh*ENg}uN2-uuh}Tg?H@is$BTu7d`Lv zOCR-?P21wlIe3a!F1*!y+Pm#HYrOW$yS>5VTcN(C!&a&ms~o*nZEpVJ<+B&gpXbb; zH?OOsyPMVroH6GPA2a@3T7}p)(r!@bz`~FF`2+32ioz7l-`M=XFZyS>8xFMTYvX}- zjV|MEI?%2Y#kU~?7JGURvg=YB2!Ojc9mK_MKPW7Q7;La?MobN1LS0Zq|K#9hqi_u~ zfS{{L;SiT)rBRbnc8!j9H;uCE!W`~~(YC^_!^Y8eO-5tbG}<1Ze`+uU9XYmzIeHJa z>%tuFwqIDbqGh9B;=4cg^6}kXD=I+{CL0R3pF9;L6(L@=apo?WM@u)$!laIKdz`M> zi~L0$q|k<<{TS#*^|36%ki*Bprv;y0e7N1nFp1WMXgSE~S+c~zqR+yG&WNs#rOW1b z={2EI&Y4SkXmMy{z11_nXCaX1haY@kcfQ`5d*&SHjD@q$M0L8cEEEaNo!!;r^nCJc zsw)z^mIU=fC{|;{m}RHAXLZc&>|VBLBFogF=Q}Lfv}q@|Pj5RmjB0QD(2U9Lh*`F{bMcaM7F*V3 z0JQpX%N}+u0G$#66of)R?nY!iX(Kkc9>?c7eEy0L{mUI}Swr!me-rS1y!kx`-(C1z zWWqP%`yPBY9eMPWLn!S2+6FIPnz-(5jC~-n6a_otaf*5k*Ha%?)2$x?Xkj#MsproBo|?g zf;2Hj@=l#Pbxfo_6poeVJQP=~eCsjeW=)?wwXMB$Vshzdd&b3a6a2)&heZn?R#=#$ zidPLuGp4pqflvng0(1P>qM$f`LUpE{e9Vb$(`Oyyf)=iT+3KEjtUGzuba$#Nt9$&6 zW5$VG2r}7&s=AkLw(P6a_%W8{;&T!{AH!z>KIh`I5}(WPS&I*G_ms&q+h&bB^u#bQ zVY~>8J@g0>I`ps!B6QeTS#0do5X7P4_jvL9h^Y|$XD#~;^$^fMiO-+#`3FAsSj&1Z zK5eH>XEJfMSo0$>Ko|+5a*;4KBoe{(kHk>(Eb9p1Iuf6gk-xqDC$!E8`_UG;Yc;iiP z#^Tv?V1avJd(WAV1$T!H=ZN9+MpA!z$Mcqbog(|~;M0qbML?CcsAJKRu1`9PW}oex zv7`$o)>#ZIJ%7>J3p*BdEXHy^O0#Lll7GjdvwJ@2huPGRAam|?pS5J!!gZMUsN2QAI{IVNANn`IYN|(iy1qZ^Ux&RBtF9mZ*j7I(LnYnsy@+E2qCht3i+^>E^w+{) zq&-7UHL~OU~u#meAi%3h$$@{0kBg&NW>WgyJo|Orhysm!}zWC!3iOJHxh(> Y@mW6=e=uBmgAy@by7(0os3$1@2ZJh7ga7~l literal 0 HcmV?d00001 diff --git a/resen/screen/css/style.css b/resen/screen/css/style.css new file mode 100644 index 0000000..ccf9d0c --- /dev/null +++ b/resen/screen/css/style.css @@ -0,0 +1,183 @@ +body { + --bg: #1d0212 !important; +} + +#game { + width: 100%; + max-width: 480px; + margin-inline: auto; +} + +canvas { + width: 100%; + margin-inline: auto; + image-rendering: crisp-edges; +} + +#controller { + display: block; + height: 230px; + width: 100%; + margin-inline: auto; + max-width: 480px; + touch-action: none; + text-align: center; + position: relative; + +} +#fullScreenButton span.material-symbols-outlined { + color: #f1dcab; + vertical-align: bottom; +} +#controller_dpad { + position: absolute; + bottom: 10px; + left: 0px; + width: 184px; + height: 184px; +} +#xyzLogo { + height: 100px; + padding: 25px 0; +} +#controller_left, +#controller_right, +#controller_up, +#controller_down, +#controller_a, +#controller_b, +#controller_start, +#controller_select { + cursor: pointer; +} + +#controller_dpad:before { + content: ""; + display: block; + width: 42px; + height: 42px; + background: #e38c89; + position: absolute; + left: 62px; + top: 68px; +} + +#controller_left { + position: absolute; + left: 20px; + top: 68px; + width: 42px; + height: 42px; + background: #e38c89; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +#controller_right { + position: absolute; + left: 104px; + top: 68px; + width: 42px; + height: 42px; + background: #e38c89; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +#controller_up { + position: absolute; + left: 62px; + top: 26px; + width: 42px; + height: 42px; + background: #e38c89; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +#controller_down { + position: absolute; + left: 62px; + top: 110px; + width: 42px; + height: 42px; + background: #e38c89; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +#controller_a { + position: absolute; + bottom: 110px; + right: 20px; +} + +#controller_b { + position: absolute; + bottom: 80px; + right: 90px; +} +ul.navigation { + width: 85%; + direction: rtl; + right: 0; + margin: 0; + padding: 0; +} +#logo, +ul.navigation { + display: inline-flex; +} +ul.navigation li { + margin: 0; + padding: 0; +} +.roundBtn { + display: flex; + justify-content: center; + align-items: center; + font-weight: bold; + font-size: 26px; + line-height: 56px; + width: 56px; + height: 56px; + border-radius: 56px; + color: #9e3230; + background: #e38c89; + border: 2px solid #9e3230; + + box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.2); +} + +.capsuleBtn { + font-weight: bold; + font-size: 10px; + color: #9e3230; + display: flex; + justify-content: center; + align-items: center; + line-height: 20px; + text-transform: uppercase; + width: 56px; + height: 25px; + border-radius: 40px; + background: #e38c89; + box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.2); + vertical-align: middle; +} + +#controller_start { + position: absolute; + bottom: 20px; + right: 15px; +} + +#controller_select { + position: absolute; + bottom: 20px; + right: 90px; +} + +.btnPressed { + opacity: 0.5; +} diff --git a/resen/screen/css/style_keyboard_controls.css b/resen/screen/css/style_keyboard_controls.css new file mode 100644 index 0000000..fba8e08 --- /dev/null +++ b/resen/screen/css/style_keyboard_controls.css @@ -0,0 +1,1259 @@ +body { + text-align: center; +} +body.he { + direction: rtl; + /* text-align: right; */ +} +body { + font-size: 16px; +} +body .ignore-content { + display: none; +} +p { + text-align: center; +} +body.ignore .ignore-content { + display: block; +} + +svg .cls-1 { + fill: #87c170; +} + +#main { + margin-top: 30px; + margin-bottom: 200px; + padding-top: 30px; + display: block; + position: relative; + max-width: 1200px; + width: 90vw; + float: none; + margin: 0 auto; +} + +svg .cls-2 { + fill: #3b0213; +} + +svg .cls-3 { + fill: #e1efd0; +} + +svg .cls-4 { + fill: #346958; +} + +svg.ignore { + height: 1.2em; + width: 1.2em; + display: inline; +} + +body.ignore .hebrew-content, +body.ignore .english-content { + display: none; +} + +.he p { + text-align: center; +} + +.en-US .hebrew-content { + display: none; +} + +.he .english-content { + display: none; +} + +img.ignore-image { + display: inline; +} + +img#xyzFist { + position: relative; + display: block; + width: 100px; + margin: 100px auto 20px; +} + +#mobilelogo { + display: none; +} + +.mobile-only, +.touch-only { + display: none; +} + +nav { + transition: height 200ms ease; +} + +#expand img, +#collapse img { + display: none; + width: 17px; + margin: 10px auto; + cursor: pointer; +} + +li.footnote { + list-style: none; + font-style: italic; + font-size: 0.8em; + color: #f1dcab; +} + +span.footnote { + color: #f1dcab; +} + +.footnote:before { + content: "* "; +} + +.date { + font-style: italic; + font-size: 0.8em; + display: block; +} + +#collapse img { + margin-top: 50px; +} + +nav.expanded #expand { + display: none; +} + +nav.expanded #collapse img { + display: block; +} + +.heb p { + text-align: right; +} + +body { + /* font-family: "Miriam Libre", sans-serif; */ + /* font-family: "pauza", sans-serif; */ + font-family: "narkiss-yair-variable", sans-serif; + color: #86c06c; + background-color: #3b0213; + overflow-x: hidden; + width: 100vw; +} + +ul.navigation li a.nav-active span { + font-weight: bold; + font-variation-settings: "MONO" 0, "wght" 600; + background-color: #86c06c; + color: #3b0213; + border-radius: 0px; +} + +ul.navigation li a span { + padding: 5px 20px; +} + +#logo { + position: fixed; +} + +#logo { + left: 0; +} + +#lang { + right: 0; +} + +#lang a { + text-align: center; + display: block; + border-radius: 7px; + font-weight: bold; + font-variation-settings: "MONO" 0, "wght" 600; +} + +#lang a.active { + color: #f1dcab; + box-shadow: inset 0 -200px 0 0 #9e3230; +} + +#lang a:not(.active):hover { + color: #9e3230; +} + +#lang a { + padding: 7px 10px; + box-shadow: inset 0 0 0 0 #9e3230; + color: #3b0213; + font-size: 1em; + text-decoration: none; +} + +#logo svg { + width: 100px; +} + +h1 { + margin-top: 0; + font-size: 0.9em; +} + +h2 { + font-size: 1.5em; +} + +.navigation a { + font-size: 0.9em; +} + +h1 span { + display: block; + /* font-weight: normal; */ + font-variation-settings: "MONO" 0, "wght" 400; + color: #86c06c; + text-shadow: 1px 1px #3b0213; +} + +#logo { + display: block; + height: fit-content; +} + +#logo > * { + display: inline-block; +} + +ul.team li img { + border: 4px solid #f1dcab; + border-radius: 10px; + width: 50%; + image-rendering: -moz-crisp-edges; + image-rendering: crisp-edges; + image-rendering: pixelated; +} + +h2, +h3, +h4, +h5, +h6, +strong { + color: #f1dcab; + text-shadow: 1px 1px #9e3230; + font-variation-settings: "MONO" 0, "wght" 600; + text-transform: none; +} + +.hero h2 { + text-shadow: 1px 1px #3b0213; +} +.hero h1 span { + font-variation-settings: "MONO" 0, "wght" 700; +} +h4 { + margin: 10px 0; + font-size: 1em; +} +h3 { + margin: 10px 0 15px; + font-size: 1.3em; +} + +a.nav-active { + color: #9e3230; +} + +a { + color: #86c06c; +} + +body { + position: relative; + font-size: 16px; + margin: 0; + padding: 0; +} + +a { + color: #f1dcab; +} + +ul.q-and-a { + list-style-type: square; + padding: 0; + margin: 30px auto 10px; + width: 75%; +} + +ul.q-and-a li:not(.question) { + margin-bottom: 30px; + line-height: 1.2; + text-align: justify; +} + +#contact a span { + text-decoration: underline; +} + +nav { + padding-left: 4vw; + display: block; + width: 85vw; + position: relative; + height: 100vh; + float: left; + max-width: 400px; + overflow-y: auto; + padding: 15px 2%; + height: 80px; + margin: 0 auto; + left: 50%; + transform: translateX(-50%); + max-width: 1200px; +} + +#main section { + width: 100%; + margin: 20px auto 100px; + display: block; + position: relative; + height: unset; +} +#main { + overflow: hidden; +} + +#main section#mailinglist { + margin-bottom: 300px; +} + +h2 { + margin: 10px 0; +} + +#logo img { + width: 100px; +} + +#staticlogo { + position: absolute; +} + +small { + font-style: italic; + color: #86bf6c63; +} + +.description { + /* background: #f1dcab; + border-color: #3b0213; + color: #3b0213; + text-shadow: 1px 1px #86c26c; */ + + font-size: 1.2em; + padding: 20px 15px; + width: 45%; + margin: 0 auto; +} + +.ignore-content object { + height: 1em; +} + +ul.navigation li { + list-style: none; + font-style: normal; +} + +ul.navigation li a { + text-decoration: none; + color: #3b0213; + font-variation-settings: "MONO" 0, "wght" 600; + position: relative; + top: 50%; + transform: translateY(-50%); + vertical-align: middle; + display: flex; + width: 100%; +} + +ul.navigation { + font-size: 1.2em; + display: flex; + position: relative; + margin: 0 auto; + height: 100%; + width: 70%; +} + +ul.navigation li { + flex: fit-content; + position: relative; + height: 100%; +} + +.heb * { + direction: rtl; + /* text-align: right; */ +} + +.heb ul.team li, +.heb ul.team li > * { + text-align: center; +} + +.heb nav { + padding-right: 4vw; + padding-left: 0; + float: right; + right: 0; +} + +@media screen and (min-width: 1400px) { + body { + font-size: 18px; + } +} + +@media screen and (min-width: 801px) { + #lang { + position: fixed; + font-size: 20px; + top: 50%; + transform: translateY(-50%); + } + + #staticlogo:hover { + opacity: 0; + } + + footer { + width: 100vw; + position: fixed; + bottom: calc(-100% + 200px); + bottom: 0; + background-color: #f1dcab; + z-index: 2; + } + + nav.expanded #collapse, + #expand { + display: none; + } +} + +@media screen and (max-width: 800px) { + nav:not(.expanded) #lang { + display: none; + } + + #iframe-container { + height: 480px; + } + + #lang a { + border-radius: 0; + } + + ul.navigation li a span { + padding: 0; + } + + ul.navigation li a.nav-active span { + padding: 15px; + } + + #swipe { + display: block; + text-align: center; + margin-bottom: 50px; + } + #swipe small { + color: rgba(255, 255, 255, 0.549); + } + nav.expanded #collapse, + #expand { + display: block; + position: fixed; + bottom: 76px; + left: 50%; + transform: translateX(-50%); + } + + nav { + width: 100vw; + position: fixed; + bottom: calc(-100% + 200px); + bottom: 0; + background-color: #f1dcab; + } + + nav.expanded, + .heb nav.expanded { + height: 100vh; + } + + .mobile-only { + display: block; + } + + .hero { + display: block; + /* margin-bottom: 110%; */ + } + + ul.navigation li a { + display: block; + font-size: 1.2em; + } + + .hero > img { + width: 100%; + object-fit: contain; + } + + .hero > * { + position: relative; + display: block; + } + + .description, + .mailchimp { + margin: 0 auto 20px; + display: block; + position: relative; + width: calc(80vw - 60px); + } + .brandingLogo img { + object-fit: fill; + max-width: 100%; + } + + .he p.description, + .en-US p.description { + text-align: center; + font-size: 1em; + padding: 30px 15px; + } + + .navigation a { + font-size: 0.8em; + } + + ul.team { + display: block; + padding: 0; + } + + .team li { + margin: 20px 0; + } + + #collapse { + display: none; + } + + nav.expanded #expand { + display: none; + } + + #expand { + display: block; + padding-top: 0; + } + + #collapse { + padding-bottom: 0; + } + + #expand img, + #collapse img { + display: block; + } + + #mobilelogo img { + width: 55px; + } + h2 { + font-size: 1.3em; + } + /* h1 { + font-size: 0.75em; + } */ + + .heb #lang { + direction: ltr; + } + p.brandingLogo { + width: 100%; + } + p { + width: 90%; + margin: 0 auto 15px; + } + + nav { + width: 100%; + max-width: 100%; + padding: 0; + position: fixed; + height: auto; + float: none; + font-size: 12px; + z-index: 999; + } + + nav, + nav .navigation li, + nav a, + #contact li { + text-align: center; + } + + #contact h2 { + text-align: center; + } + + #contact li a img, + .heb #contact li a img { + float: none; + height: 0.8em; + } + + nav, + .heb nav { + padding-right: 0; + padding-left: 0; + padding-bottom: 2vh; + overflow: hidden; + height: 100px; + } + + #lang { + text-align: center; + } + + #logo { + text-align: center; + display: block; + width: 50%; + margin: 0 auto; + } + + #xyz ul { + width: 85%; + margin: 0 auto; + } + + #lang { + position: fixed; + z-index: 999; + bottom: 125px; + } + + .he #lang { + right: 50%; + transform: translateX(50%); + width: 50%; + } + + .en-US #lang { + left: 50%; + transform: translateX(-50%); + width: 50%; + } + + #main section { + width: calc(90vw - 40px); + display: block; + position: relative; + padding: 0 20px; + margin: 0 0 50px 0; + right: 0; + } + + ul.navigation { + font-size: 20px; + padding: 50px 0; + width: 100%; + position: relative; + display: none; + text-align: center; + } + + nav.expanded ul.navigation { + display: flex; + width: 75%; + height: auto; + flex-direction: column; + top: 50%; + transform: translateY(-50%); + } + + nav.expanded ul.navigation li { + padding: 0 0 5px; + width: 100%; + position: relative; + display: block; + flex: 1 1 content; + flex: unset; + display: block; + width: 100%; + position: relative; + height: unset; + text-align: center; + margin-bottom: 30px; + } + + #logocontainer { + display: none; + } + + #mobilelogo { + display: block; + position: fixed; + bottom: 16px; + left: calc(50% + -4px); + transform: translateX(-50%); + } + + #lang a { + padding: 5px 10px; + box-shadow: unset; + -webkit-transition: ease 0.5s; + -moz-transition: ease 0.5s; + transition: ease 0.5s; + } + + #lang a.active { + background: #9e3230; + box-shadow: unset; + } + + #lang a { + padding: 5px 10px; + box-shadow: unset; + -webkit-transition: ease 0.5s; + transition: ease 0.5s; + font-size: 1.6em; + } +} + +@media screen and (max-height: 450px) { + nav.expanded ul.navigation li { + margin-bottom: 15px; + } + ul.navigation { + font-size: 15px; + } +} + +body { + background: #3b0213; + color: #fff; + /* font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", + Helvetica, Arial, "Lucida Grande", sans-serif; */ + font-family: "narkiss-yair-variable", sans-serif; + font-weight: 300; + margin: 0; + padding: 0; + touch-action: none; + -webkit-touch-callout: none; + user-select: none; + -webkit-user-select: none; + overflow: hidden; +} + +.cky-modal, +.cky-consent-container { + direction: ltr !important; +} + +footer { + color: #3b0213; +} +strong { + color: #3b0213; + text-shadow: none; +} +#char1Logo { + height: 70px; + padding: 15px 0; +} +#game { + display: flex; + flex-direction: column; + position: fixed; + width: 100%; + height: calc(100% - 300px); + touch-action: none; +} +body:not(.fullscreen) #game { + top: calc(50% - 55px); + transform: translateY(-50%); + height: calc( + 100% - 220px + ); /* Subtracting footer height and some extra space */ + /* max-height: calc(100vh - 160px); */ +} +.buttonIndicator, +span#fullScreenButton { + max-width: 50%; + margin: 0 auto 10px; + color: #9e3230; + background: #e38c89; + padding: 4px; + border-radius: 100%; + border: 2px solid #9e3230; + display: block; + line-height: 1.2em; + /* text-shadow: 0 1px #e1eacd; */ + font-weight: bold; + color: #9e3230; +} + +body.fullscreen #mainCanvas { + position: fixed; + width: 100%; + height: 100%; + top: 0; + right: 0; + bottom: 0; + left: 0; +} +body.fullscreen #gameFooter, +body.fullscreen #char1Logo { + display: none; +} + +.buttonIndicator:not(.square) { + width: 1.2em; + height: 1.2em; +} +/* .buttonIndicator.square { + border-radius: 4px; +} */ +.buttonIndicator.square, +span#fullScreenButton { + border-radius: 7px; + max-width: 120px; +} +span#fullScreenButton { + cursor: pointer; +} +#game canvas { + object-fit: contain; + image-rendering: -moz-crisp-edges; + image-rendering: -webkit-crisp-edges; + image-rendering: pixelated; + image-rendering: crisp-edges; + height: 100%; +} + +#controller { + display: none; + position: fixed; + bottom: 0px; + height: 230px; + width: 100%; + touch-action: none; +} +#fullScreenButton span.material-symbols-outlined { + color: #f1dcab; + vertical-align: bottom; +} +#controller_dpad { + position: absolute; + bottom: 10px; + left: 0px; + width: 184px; + height: 184px; +} +#xyzLogo { + height: 100px; + padding: 25px 0; +} +#controller_dpad:before { + /* content: ""; + display: block; + width: 48px; + height: 48px; + background: #e38c89; + + position: absolute; + left: 68px; + top: 68px; */ + content: ""; + display: block; + width: 42px; + height: 42px; + background: #e38c89; + position: absolute; + left: 62px; + top: 68px; +} + +#controller_left { + /* position: absolute; + left: 20px; + top: 68px; + width: 48px; + height: 48px; + background: #e38c89; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; */ + position: absolute; + left: 20px; + top: 68px; + width: 42px; + height: 42px; + background: #e38c89; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +#controller_right { + /* position: absolute; + left: 116px; + top: 68px; + width: 48px; + height: 48px; + background: #e38c89; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; */ + position: absolute; + left: 104px; + top: 68px; + width: 42px; + height: 42px; + background: #e38c89; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +#controller_up { + /* position: absolute; + left: 68px; + top: 20px; + width: 48px; + height: 48px; + background: #e38c89; + border-top-left-radius: 4px; + border-top-right-radius: 4px; */ + position: absolute; + left: 62px; + top: 26px; + width: 42px; + height: 42px; + background: #e38c89; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +#controller_down { + /* position: absolute; + left: 68px; + top: 116px; + width: 48px; + height: 48px; + background: #e38c89; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; */ + position: absolute; + left: 62px; + top: 110px; + width: 42px; + height: 42px; + background: #e38c89; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +#controller_a { + position: absolute; + bottom: 110px; + right: 20px; +} + +#controller_b { + position: absolute; + bottom: 80px; + right: 90px; +} +/* ul.navigation { + width: 85%; + direction: rtl; +} */ +ul.navigation { + width: 85%; + direction: rtl; + right: 0; + margin: 0; + padding: 0; +} +#logo, +ul.navigation { + display: inline-flex; +} +ul.navigation li { + margin: 0; + padding: 0; +} +.roundBtn { + display: flex; + justify-content: center; + align-items: center; + font-weight: bold; + font-size: 26px; + line-height: 56px; + width: 56px; + height: 56px; + border-radius: 56px; + color: #9e3230; + background: #e38c89; + border: 2px solid #9e3230; + + box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.2); +} + +.capsuleBtn { + font-weight: bold; + font-size: 10px; + color: #9e3230; + display: flex; + justify-content: center; + align-items: center; + line-height: 20px; + text-transform: uppercase; + width: 56px; + height: 25px; + border-radius: 40px; + background: #e38c89; + box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.2); + vertical-align: middle; +} + +#controller_start { + position: absolute; + bottom: 20px; + right: 15px; +} + +#controller_select { + position: absolute; + bottom: 20px; + right: 90px; +} + +.btnPressed { + opacity: 0.5; +} + +.spinner { + height: 50px; + width: 50px; + margin: 0px auto; + -webkit-animation: rotation 0.8s linear infinite; + -moz-animation: rotation 0.8s linear infinite; + -o-animation: rotation 0.8s linear infinite; + animation: rotation 0.8s linear infinite; + border-left: 10px solid #9e3230; + border-right: 10px solid #9e3230; + border-bottom: 10px solid #9e3230; + border-top: 10px solid #88c070; + border-radius: 100%; + background-color: #031921; +} +@-webkit-keyframes rotation { + from { + -webkit-transform: rotate(0deg); + } + to { + -webkit-transform: rotate(360deg); + } +} +@-moz-keyframes rotation { + from { + -moz-transform: rotate(0deg); + } + to { + -moz-transform: rotate(360deg); + } +} +@-o-keyframes rotation { + from { + -o-transform: rotate(0deg); + } + to { + -o-transform: rotate(360deg); + } +} +@keyframes rotation { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media only screen and (max-width: 560px) { + #game canvas { + margin-top: 0px; + width: 100%; + /* max-width: 512px; */ + border: 0px; + border-radius: 0px; + } + #game { + width: 100%; + height: calc(100% - 150px); + } + #char1Logo { + /* height: 70px; */ + padding: 15px 0; + } + nav { + height: 50px; + top: 0; + } +} +@media only screen and (max-width: 800px) { + nav { + display: none; + } +} +@media only screen and (max-device-width: 1080px) { + #char1Logo { + height: 50px; + padding: 10px; + } + + #mobile-notice { + display: block; + } + footer { + display: none; + } +} +@media only screen and (max-device-width: 1080px) and (orientation: landscape) { + #char1Logo { + display: none; + } + #game { + height: 100%; + } +} +@media only screen and (max-device-width: 845px) and (orientation: landscape) { + #char1Logo { + height: 50px; + } + #mobile-notice { + font-size: 0.67rem; + /* bottom: 0; */ + } + #game { + height: calc(100% - 100px); + } + footer { + display: none; + } +} + +@media only screen and (max-device-width: 845px) and (orientation: portrait) { + body { + margin: 0; + } + + #game { + width: 100%; + position: fixed; + touch-action: none; + } + + #game canvas { + margin: 0; + display: block; + width: 100% !important; + height: auto !important; + } +} + +@media only screen and (max-device-width: 320px) and (orientation: portrait) { + #controller_dpad { + left: -5px; + bottom: -5px; + } + + #controller_a { + right: 5px; + bottom: 95px; + } + + #controller_b { + right: 80px; + } + + #controller_start { + right: 5px; + } + + #controller_select { + right: 80px; + } +} + +@media only screen and (max-width: 500px) and (max-height: 400px) { + #controller { + display: none; + } +} + +/* Small devices in landscape */ +@media only screen and (max-device-width: 300px) and (orientation: landscape) { + html, + body { + height: 100%; + } + body { + display: flex; + justify-content: center; + align-items: center; + } + + #game:after { + content: "PLEASE ROTATE ↻"; + font-size: 24px; + font-weight: bold; + color: #fff; + } + + #game canvas { + display: none; + max-width: 480px; + } + + #controller { + display: none; + } +} + +/* Devices large enough for landscape */ +@media only screen and (min-width: 300px) and (orientation: landscape) { + #controller { + bottom: 50%; + transform: translateY(50%); + } + a#logo { + overflow: hidden; + height: 80px; + } +} diff --git a/resen/screen/imgs/logo.png b/resen/screen/imgs/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..76d7bb002cd8c2bb5d93d4a8dc7318aea6c3ce14 GIT binary patch literal 456 zcmeAS@N?(olHy`uVBq!ia0vp^H9+jo!3HEXKP=n}q!^2X+?^QKos)S9a~60+7Beu&wu3NZ|I?4DKn<~;E{-7;ac{3V@-;c|I0WV$ziA=PE*+fg zdwBtO_@)2xNitkB&$5?9I~iK^98BclOD>RTJ}e<~?12GWI|V{#Iv(8Kw)U|_ock}Z zQIfKMY|cO5`KvSX)XjbG-w)tGLd+fIUG@HREZR7HxCN=&q`wR}*IVULe7IF}!u4QLP W?omotOuP>aeFjfgKbLh*2~7Z0ptiFB literal 0 HcmV?d00001 diff --git a/resen/screen/index.html b/resen/screen/index.html new file mode 100644 index 0000000..c9415e7 --- /dev/null +++ b/resen/screen/index.html @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+
Select
+
Start
+
B
+
A
+
+ + + + + + + \ No newline at end of file diff --git a/resen/screen/index_keyboard_controls.html b/resen/screen/index_keyboard_controls.html new file mode 100644 index 0000000..476c440 --- /dev/null +++ b/resen/screen/index_keyboard_controls.html @@ -0,0 +1,102 @@ + + + + + + + + XYZ + + + + + + + + + + + +
+ No Canvas + Support +
+
+ +
+
+
+
+
+
+
Select
+
Start
+ +
B
+
A
+
+
+ + + + + + + + \ No newline at end of file diff --git a/resen/screen/js/additions.js b/resen/screen/js/additions.js new file mode 100644 index 0000000..1a8e831 --- /dev/null +++ b/resen/screen/js/additions.js @@ -0,0 +1,18 @@ +function fullScreen() { + const body = document.getElementById("gameBody"); // Replace 'canvas' with your canvas element's ID + + if (body) { + body.classList.add("fullscreen"); // Replace 'your-class-name' with the class you want to add + } +} + +// Function to remove a class from the canvas element when the "Esc" key is pressed +document.addEventListener("keydown", function (event) { + if (event.key === "Escape") { + const body = document.getElementById("gameBody"); // Replace 'canvas' with your canvas element's ID + + if (body) { + body.classList.remove("fullscreen"); // Replace 'your-class-name' with the class you want to remove + } + } +}); diff --git a/resen/screen/js/script.js b/resen/screen/js/script.js new file mode 100644 index 0000000..5665553 --- /dev/null +++ b/resen/screen/js/script.js @@ -0,0 +1,1519 @@ +/* + * Copyright (C) 2017 Ben Smith + * + * This software may be modified and distributed under the terms + * of the MIT license. See the LICENSE file for details. + */ +"use strict"; + +// User configurable. +let ROM_FILENAME = "rom/kmeot_zag.gb"; + +const ENABLE_REWIND = true; +const ENABLE_PAUSE = false; +const ENABLE_SWITCH_PALETTES = true; +const OSGP_DEADZONE = 0.1; // On screen gamepad deadzone range +const CGB_COLOR_CURVE = 2; // 0: none, 1: Sameboy "Emulate Hardware" 2: Gambatte/Gameboy Online + +// List of DMG palettes to switch between. By default it includes all 84 +// built-in palettes. If you want to restrict this, change it to an array of +// the palettes you want to use and change DEFAULT_PALETTE_IDX to the index of the +// default palette in that list. +// +// Example: (only allow one palette with index 16): +// const DEFAULT_PALETTE_IDX = 0; +// const PALETTES = [16]; +// +// Example: (allow three palettes, 16, 32, 64, with default 32): +// const DEFAULT_PALETTE_IDX = 1; +// const PALETTES = [16, 32, 64]; +// +const DEFAULT_PALETTE_IDX = 83; +const PALETTES = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, +]; + +const RESULT_OK = 0; +const RESULT_ERROR = 1; +const SCREEN_WIDTH = 160; +const SCREEN_HEIGHT = 144; +const SGB_SCREEN_WIDTH = 256; +const SGB_SCREEN_HEIGHT = 224; +const SGB_SCREEN_LEFT = (SGB_SCREEN_WIDTH - SCREEN_WIDTH) >> 1; +const SGB_SCREEN_RIGHT = (SGB_SCREEN_WIDTH + SCREEN_WIDTH) >> 1; +const SGB_SCREEN_TOP = (SGB_SCREEN_HEIGHT - SCREEN_HEIGHT) >> 1; +const SGB_SCREEN_BOTTOM = (SGB_SCREEN_HEIGHT + SCREEN_HEIGHT) >> 1; +const AUDIO_FRAMES = 4096; +const AUDIO_LATENCY_SEC = 0.1; +const MAX_UPDATE_SEC = 5 / 60; +const CPU_TICKS_PER_SECOND = 4194304; +const EVENT_NEW_FRAME = 1; +const EVENT_AUDIO_BUFFER_FULL = 2; +const EVENT_UNTIL_TICKS = 4; +const REWIND_FRAMES_PER_BASE_STATE = 45; +const REWIND_BUFFER_CAPACITY = 4 * 1024 * 1024; +const REWIND_FACTOR = 1.5; +const REWIND_UPDATE_MS = 16; +const GAMEPAD_POLLING_INTERVAL = 1000 / 60 / 4; // When activated, poll for gamepad input about ~4 times per gameboy frame (~240 times second) +const GAMEPAD_KEYMAP_STANDARD_STR = "standard"; // Try to use "standard" HTML5 mapping config if available + +const $ = document.querySelector.bind(document); +let emulator = null; + +const controllerEl = $("#controller"); +const dpadEl = $("#controller_dpad"); +const selectEl = $("#controller_select"); +const startEl = $("#controller_start"); +const bEl = $("#controller_b"); +const aEl = $("#controller_a"); + +const binjgbPromise = Binjgb(); + +const sgbEnabled = window.location.href.includes("sgb=true"); +if (sgbEnabled) { + $("canvas").width = SGB_SCREEN_WIDTH; + $("canvas").height = SGB_SCREEN_HEIGHT; +} else { + $("canvas").width = SCREEN_WIDTH; + $("canvas").height = SCREEN_HEIGHT; +} + +// Extract stuff from the vue.js implementation in demo.js. +class VM { + constructor() { + this.ticks = 0; + this.extRamUpdated = false; + this.paused_ = false; + this.volume = 0.5; + this.palIdx = DEFAULT_PALETTE_IDX; + this.canvas = { + show: true, + useSgbBorder: sgbEnabled, + scale: 3, + }; + this.rewind = { + minTicks: 0, + maxTicks: 0, + }; + setInterval(() => { + if (this.extRamUpdated) { + this.updateExtRam(); + this.extRamUpdated = false; + } + }, 1000); + } + + get paused() { + return this.paused_; + } + set paused(newPaused) { + let oldPaused = this.paused_; + this.paused_ = newPaused; + if (!emulator) return; + if (newPaused == oldPaused) return; + if (newPaused) { + emulator.pause(); + this.ticks = emulator.ticks; + this.rewind.minTicks = emulator.rewind.oldestTicks; + this.rewind.maxTicks = emulator.rewind.newestTicks; + } else { + emulator.resume(); + } + } + + togglePause() { + this.paused = !this.paused; + } + + updateExtRam() { + if (!emulator) return; + const extram = emulator.getExtRam(); + localStorage.setItem("extram", JSON.stringify(Array.from(extram))); + } +} +// // Function to detect if the user is using an iPhone or iPad +// function isIOS() { +// const userAgent = window.navigator.userAgent; +// return /iPad|iPhone|iPod/.test(userAgent); +// } + +const vm = new VM(); + +// Load a ROM. +(async function go() { + // if (isIOS()) { + // ROM_FILENAME = "rom/tzag_kmeot_ios.gb"; + // } + let response = await fetch(ROM_FILENAME); + let romBuffer = await response.arrayBuffer(); + const extRam = new Uint8Array(JSON.parse(localStorage.getItem("extram"))); + Emulator.start(await binjgbPromise, romBuffer, extRam); + emulator.setBuiltinPalette(vm.palIdx); +})(); + +function makeWasmBuffer(module, ptr, size) { + return new Uint8Array(module.HEAP8.buffer, ptr, size); +} + +class Emulator { + static start(module, romBuffer, extRamBuffer) { + Emulator.stop(); + emulator = new Emulator(module, romBuffer, extRamBuffer); + emulator.run(); + } + + static stop() { + if (emulator) { + emulator.destroy(); + emulator = null; + } + } + + constructor(module, romBuffer, extRamBuffer) { + this.module = module; + this.romDataPtr = this.module._malloc(romBuffer.byteLength); + makeWasmBuffer(this.module, this.romDataPtr, romBuffer.byteLength).set( + new Uint8Array(romBuffer) + ); + this.e = this.module._emulator_new_simple( + this.romDataPtr, + romBuffer.byteLength, + Audio.ctx.sampleRate, + AUDIO_FRAMES, + CGB_COLOR_CURVE + ); + if (this.e == 0) { + throw new Error("Invalid ROM."); + } + + this.gamepad = new Gamepad(module, this.e); + this.audio = new Audio(module, this.e); + this.video = new Video(module, this.e, $("canvas")); + this.rewind = new Rewind(module, this.e); + this.rewindIntervalId = 0; + + this.lastRafSec = 0; + this.leftoverTicks = 0; + this.fps = 60; + + if (extRamBuffer) { + this.loadExtRam(extRamBuffer); + } + + // this.bindKeys(); + this.bindTouch(); + + this.touchEnabled = "ontouchstart" in document.documentElement; + // this.updateOnscreenGamepad(); + + this.gamepad.init(); + } + + destroy() { + this.gamepad.shutdown(); + this.unbindTouch(); + // this.unbindKeys(); + this.cancelAnimationFrame(); + clearInterval(this.rewindIntervalId); + this.rewind.destroy(); + this.module._emulator_delete(this.e); + this.module._free(this.romDataPtr); + } + + withNewFileData(cb) { + const fileDataPtr = this.module._ext_ram_file_data_new(this.e); + const buffer = makeWasmBuffer( + this.module, + this.module._get_file_data_ptr(fileDataPtr), + this.module._get_file_data_size(fileDataPtr) + ); + const result = cb(fileDataPtr, buffer); + this.module._file_data_delete(fileDataPtr); + return result; + } + + loadExtRam(extRamBuffer) { + this.withNewFileData((fileDataPtr, buffer) => { + if (buffer.byteLength === extRamBuffer.byteLength) { + buffer.set(new Uint8Array(extRamBuffer)); + this.module._emulator_read_ext_ram(this.e, fileDataPtr); + } + }); + } + + getExtRam() { + return this.withNewFileData((fileDataPtr, buffer) => { + this.module._emulator_write_ext_ram(this.e, fileDataPtr); + return new Uint8Array(buffer); + }); + } + + get isPaused() { + return this.rafCancelToken === null; + } + + pause() { + if (!this.isPaused) { + this.cancelAnimationFrame(); + this.audio.pause(); + this.beginRewind(); + } + } + + resume() { + if (this.isPaused) { + this.endRewind(); + this.requestAnimationFrame(); + this.audio.resume(); + } + } + + setBuiltinPalette(palIdx) { + this.module._emulator_set_builtin_palette(this.e, PALETTES[palIdx]); + } + + get isRewinding() { + return this.rewind.isRewinding; + } + + beginRewind() { + this.rewind.beginRewind(); + } + + rewindToTicks(ticks) { + if (this.rewind.rewindToTicks(ticks)) { + this.runUntil(ticks); + this.video.renderTexture(); + } + } + + endRewind() { + this.rewind.endRewind(); + this.lastRafSec = 0; + this.leftoverTicks = 0; + this.audio.startSec = 0; + } + + set autoRewind(enabled) { + if (enabled) { + this.rewindIntervalId = setInterval(() => { + const oldest = this.rewind.oldestTicks; + const start = this.ticks; + const delta = + ((REWIND_FACTOR * REWIND_UPDATE_MS) / 1000) * CPU_TICKS_PER_SECOND; + const rewindTo = Math.max(oldest, start - delta); + this.rewindToTicks(rewindTo); + vm.ticks = emulator.ticks; + }, REWIND_UPDATE_MS); + } else { + clearInterval(this.rewindIntervalId); + this.rewindIntervalId = 0; + } + } + + requestAnimationFrame() { + this.rafCancelToken = requestAnimationFrame(this.rafCallback.bind(this)); + } + + cancelAnimationFrame() { + cancelAnimationFrame(this.rafCancelToken); + this.rafCancelToken = null; + } + + run() { + this.requestAnimationFrame(); + } + + get ticks() { + return this.module._emulator_get_ticks_f64(this.e); + } + + runUntil(ticks) { + while (true) { + const event = this.module._emulator_run_until_f64(this.e, ticks); + if (event & EVENT_NEW_FRAME) { + this.rewind.pushBuffer(); + this.video.uploadTexture(); + } + if (event & EVENT_AUDIO_BUFFER_FULL && !this.isRewinding) { + this.audio.pushBuffer(); + } + if (event & EVENT_UNTIL_TICKS) { + break; + } + } + if (this.module._emulator_was_ext_ram_updated(this.e)) { + vm.extRamUpdated = true; + } + } + + rafCallback(startMs) { + this.requestAnimationFrame(); + let deltaSec = 0; + if (!this.isRewinding) { + const startSec = startMs / 1000; + deltaSec = Math.max(startSec - (this.lastRafSec || startSec), 0); + const startTicks = this.ticks; + const deltaTicks = + Math.min(deltaSec, MAX_UPDATE_SEC) * CPU_TICKS_PER_SECOND; + const runUntilTicks = startTicks + deltaTicks - this.leftoverTicks; + this.runUntil(runUntilTicks); + this.leftoverTicks = (this.ticks - runUntilTicks) | 0; + this.lastRafSec = startSec; + } + const lerp = (from, to, alpha) => alpha * from + (1 - alpha) * to; + this.fps = lerp(this.fps, Math.min(1 / deltaSec, 10000), 0.3); + this.video.renderTexture(); + } + + updateOnscreenGamepad() { + $("#controller").style.display = this.touchEnabled ? "block" : "none"; + } + + bindTouch() { + console.log("bindTouch"); + this.touchFuncs = { + controller_b: this.setJoypB.bind(this), + controller_a: this.setJoypA.bind(this), + controller_start: this.setJoypStart.bind(this), + controller_select: this.setJoypSelect.bind(this), + }; + + this.boundButtonTouchStart = this.buttonTouchStart.bind(this); + this.boundButtonTouchEnd = this.buttonTouchEnd.bind(this); + selectEl.addEventListener("touchstart", this.boundButtonTouchStart); + selectEl.addEventListener("touchend", this.boundButtonTouchEnd); + selectEl.addEventListener("mousedown", this.boundButtonTouchStart); + selectEl.addEventListener("mouseup", this.boundButtonTouchEnd); + + startEl.addEventListener("touchstart", this.boundButtonTouchStart); + startEl.addEventListener("touchend", this.boundButtonTouchEnd); + startEl.addEventListener("mousedown", this.boundButtonTouchStart); + startEl.addEventListener("mouseup", this.boundButtonTouchEnd); + + bEl.addEventListener("touchstart", this.boundButtonTouchStart); + bEl.addEventListener("touchend", this.boundButtonTouchEnd); + bEl.addEventListener("mousedown", this.boundButtonTouchStart); + bEl.addEventListener("mouseup", this.boundButtonTouchEnd); + + aEl.addEventListener("touchstart", this.boundButtonTouchStart); + aEl.addEventListener("touchend", this.boundButtonTouchEnd); + aEl.addEventListener("mousedown", this.boundButtonTouchStart); + aEl.addEventListener("mouseup", this.boundButtonTouchEnd); + + this.boundDpadTouchStartMove = this.dpadTouchStartMove.bind(this); + this.boundDpadTouchEnd = this.dpadTouchEnd.bind(this); + dpadEl.addEventListener("touchstart", this.boundDpadTouchStartMove); + dpadEl.addEventListener("touchmove", this.boundDpadTouchStartMove); + dpadEl.addEventListener("touchend", this.boundDpadTouchEnd); + dpadEl.addEventListener("mousedown", this.boundDpadTouchStartMove); + dpadEl.addEventListener("mousemove", this.boundDpadTouchStartMove); + dpadEl.addEventListener("mouseup", this.boundDpadTouchEnd); + + this.boundTouchRestore = this.touchRestore.bind(this); + window.addEventListener("touchstart", this.boundTouchRestore); + window.addEventListener("mousedown", this.boundTouchRestore); + } + + unbindTouch() { + console.log("unbindTouch"); + + selectEl.removeEventListener("touchstart", this.boundButtonTouchStart); + selectEl.removeEventListener("touchend", this.boundButtonTouchEnd); + startEl.removeEventListener("touchstart", this.boundButtonTouchStart); + startEl.removeEventListener("touchend", this.boundButtonTouchEnd); + bEl.removeEventListener("touchstart", this.boundButtonTouchStart); + bEl.removeEventListener("touchend", this.boundButtonTouchEnd); + aEl.removeEventListener("touchstart", this.boundButtonTouchStart); + aEl.removeEventListener("touchend", this.boundButtonTouchEnd); + + dpadEl.removeEventListener("touchstart", this.boundDpadTouchStartMove); + dpadEl.removeEventListener("touchmove", this.boundDpadTouchStartMove); + dpadEl.removeEventListener("touchend", this.boundDpadTouchEnd); + + window.removeEventListener("touchstart", this.boundTouchRestore); + dpadEl.addEventListener("mousedown", this.boundDpadTouchStartMove); + dpadEl.addEventListener("mousemove", this.boundDpadTouchStartMove); + dpadEl.addEventListener("mouseup", this.boundDpadTouchEnd); + dpadEl.addEventListener("mouseleave", this.boundDpadTouchEnd); + } + + buttonTouchStart(event) { + if (event.currentTarget.id in this.touchFuncs) { + this.touchFuncs[event.currentTarget.id](true); + event.currentTarget.classList.add("btnPressed"); + event.preventDefault(); + } + } + + buttonTouchEnd(event) { + if (event.currentTarget.id in this.touchFuncs) { + this.touchFuncs[event.currentTarget.id](false); + event.currentTarget.classList.remove("btnPressed"); + event.preventDefault(); + } + } + // original code + // dpadTouchStartMove(event) { + // const rect = event.currentTarget.getBoundingClientRect(); + + // const x = + // (2 * (event.targetTouches[0].clientX - rect.left)) / rect.width - 1; + // const y = + // (2 * (event.targetTouches[0].clientY - rect.top)) / rect.height - 1; + // if (event.targetTouches && event.targetTouches[0]) { + // x = (2 * (event.targetTouches[0].clientX - rect.left)) / rect.width - 1; + // y = (2 * (event.targetTouches[0].clientY - rect.top)) / rect.height - 1; + // } else if (event.clientX && event.clientY) { + // // Handle mouse events + // x = (2 * (event.clientX - rect.left)) / rect.width - 1; + // y = (2 * (event.clientY - rect.top)) / rect.height - 1; + // } else { + // return; // Exit if we can't get coordinates + // } + + // // Rest of the function using x and y... + + // if (Math.abs(x) > OSGP_DEADZONE) { + // if (y > x && y < -x) { + // this.setJoypLeft(true); + // this.setJoypRight(false); + // } else if (y < x && y > -x) { + // this.setJoypLeft(false); + // this.setJoypRight(true); + // } + // } else { + // this.setJoypLeft(false); + // this.setJoypRight(false); + // } + + // if (Math.abs(y) > OSGP_DEADZONE) { + // if (x > y && x < -y) { + // this.setJoypUp(true); + // this.setJoypDown(false); + // } else if (x < y && x > -y) { + // this.setJoypUp(false); + // this.setJoypDown(true); + // } + // } else { + // this.setJoypUp(false); + // this.setJoypDown(false); + // } + // event.preventDefault(); + // } + + dpadTouchStartMove(event) { + // works but has unwanted diagonal movement + // Ignore mousemove events if the mouse button isn't pressed + if (event.type === "mousemove" && event.buttons !== 1) { + return; + } + + const rect = event.currentTarget.getBoundingClientRect(); + let x, y; + + if (event.targetTouches && event.targetTouches[0]) { + x = (2 * (event.targetTouches[0].clientX - rect.left)) / rect.width - 1; + y = (2 * (event.targetTouches[0].clientY - rect.top)) / rect.height - 1; + } else if (event.clientX && event.clientY) { + x = (2 * (event.clientX - rect.left)) / rect.width - 1; + y = (2 * (event.clientY - rect.top)) / rect.height - 1; + } else { + return; // Exit if we can't get coordinates + } + + // Rest of the function using x and y... + if (Math.abs(x) > OSGP_DEADZONE) { + if (y > x && y < -x) { + this.setJoypLeft(true); + this.setJoypRight(false); + } else if (y < x && y > -x) { + this.setJoypLeft(false); + this.setJoypRight(true); + } + } else { + this.setJoypLeft(false); + this.setJoypRight(false); + } + + if (Math.abs(y) > OSGP_DEADZONE) { + if (x > y && x < -y) { + this.setJoypUp(true); + this.setJoypDown(false); + } else if (x < y && x > -y) { + this.setJoypUp(false); + this.setJoypDown(true); + } + } else { + this.setJoypUp(false); + this.setJoypDown(false); + } + event.preventDefault(); + } + + //original code + // dpadTouchEnd(event) { + // this.setJoypLeft(false); + // this.setJoypRight(false); + // this.setJoypUp(false); + // this.setJoypDown(false); + // event.preventDefault(); + // } + dpadTouchEnd(event) { + this.setJoypLeft(false); + this.setJoypRight(false); + this.setJoypUp(false); + this.setJoypDown(false); + event.preventDefault(); + } + touchRestore() { + this.touchEnabled = true; + // this.updateOnscreenGamepad(); + } + + bindKeys() { + console.log("bindKeys"); + + this.keyFuncs = { + Backspace: this.keyRewind.bind(this), + " ": this.keyPause.bind(this), + "[": this.keyPrevPalette.bind(this), + "]": this.keyNextPalette.bind(this), + }; + + if (customControls.down && customControls.down.length > 0) { + customControls.down.forEach((k) => { + this.keyFuncs[k] = this.setJoypDown.bind(this); + }); + } else { + // keys assigned to DOWN button on game boy + this.keyFuncs["ArrowDown"] = this.setJoypDown.bind(this); + this.keyFuncs["s"] = this.setJoypDown.bind(this); + this.keyFuncs["S"] = this.setJoypDown.bind(this); + + this.keyFuncs["ד"] = this.setJoypDown.bind(this); + } + + if (customControls.left && customControls.left.length > 0) { + customControls.left.forEach((k) => { + this.keyFuncs[k] = this.setJoypLeft.bind(this); + }); + } else { + // keys assigned to LEFT button on game boy + this.keyFuncs["ArrowLeft"] = this.setJoypLeft.bind(this); + this.keyFuncs["a"] = this.setJoypLeft.bind(this); + this.keyFuncs["ש"] = this.setJoypLeft.bind(this); + this.keyFuncs["A"] = this.setJoypDown.bind(this); + } + + if (customControls.right && customControls.right.length > 0) { + customControls.right.forEach((k) => { + this.keyFuncs[k] = this.setJoypRight.bind(this); + }); + } else { + // keys assigned to RIGHT button on game boy + this.keyFuncs["ArrowRight"] = this.setJoypRight.bind(this); + this.keyFuncs["d"] = this.setJoypRight.bind(this); + this.keyFuncs["ג"] = this.setJoypRight.bind(this); + this.keyFuncs["D"] = this.setJoypDown.bind(this); + } + + if (customControls.up && customControls.up.length > 0) { + customControls.up.forEach((k) => { + this.keyFuncs[k] = this.setJoypUp.bind(this); + }); + } else { + // keys assigned to UP button on game boy + + this.keyFuncs["ArrowUp"] = this.setJoypUp.bind(this); + this.keyFuncs["w"] = this.setJoypUp.bind(this); + this.keyFuncs["W"] = this.setJoypUp.bind(this); + this.keyFuncs["'"] = this.setJoypUp.bind(this); + } + + if (customControls.a && customControls.a.length > 0) { + customControls.a.forEach((k) => { + this.keyFuncs[k] = this.setJoypA.bind(this); + }); + } else { + // keys assigned to A button on game boy + + this.keyFuncs["z"] = this.setJoypA.bind(this); + this.keyFuncs["ז"] = this.setJoypA.bind(this); + this.keyFuncs["ח"] = this.setJoypA.bind(this); + this.keyFuncs["j"] = this.setJoypA.bind(this); + this.keyFuncs["Z"] = this.setJoypA.bind(this); + this.keyFuncs["j"] = this.setJoypA.bind(this); + // this.keyFuncs["Alt"] = this.setJoypA.bind(this); + } + + if (customControls.b && customControls.b.length > 0) { + customControls.b.forEach((k) => { + this.keyFuncs[k] = this.setJoypB.bind(this); + }); + } else { + // keys assigned to B button on game boy + this.keyFuncs["x"] = this.setJoypB.bind(this); + this.keyFuncs["X"] = this.setJoypB.bind(this); + this.keyFuncs["ס"] = this.setJoypB.bind(this); + this.keyFuncs["ל"] = this.setJoypB.bind(this); + this.keyFuncs["k"] = this.setJoypB.bind(this); + this.keyFuncs["K"] = this.setJoypB.bind(this); + // this.keyFuncs["Control"] = this.setJoypB.bind(this); + } + + if (customControls.start && customControls.start.length > 0) { + customControls.start.forEach((k) => { + this.keyFuncs[k] = this.setJoypStart.bind(this); + }); + } else { + // keys assigned to START button on game boy + + this.keyFuncs["Enter"] = this.setJoypStart.bind(this); + } + + if (customControls.select && customControls.select.length > 0) { + customControls.select.forEach((k) => { + this.keyFuncs[k] = this.setJoypSelect.bind(this); + }); + } else { + // keys assigned to SELECT button on game boy + + this.keyFuncs["Shift"] = this.setJoypSelect.bind(this); + } + + this.boundKeyDown = this.keyDown.bind(this); + this.boundKeyUp = this.keyUp.bind(this); + + window.addEventListener("keydown", this.boundKeyDown); + window.addEventListener("keyup", this.boundKeyUp); + } + + unbindKeys() { + console.log("unbindKeys"); + + window.removeEventListener("keydown", this.boundKeyDown); + window.removeEventListener("keyup", this.boundKeyUp); + } + + keyDown(event) { + if (event.key === "w" && (event.metaKey || event.ctrlKey)) { + return; + } + if (event.key in this.keyFuncs) { + if (this.touchEnabled) { + this.touchEnabled = false; + // this.updateOnscreenGamepad(); + } + this.keyFuncs[event.key](true); + event.preventDefault(); + } + } + + keyUp(event) { + if (event.key in this.keyFuncs) { + this.keyFuncs[event.key](false); + event.preventDefault(); + } + } + + keyRewind(isKeyDown) { + if (!ENABLE_REWIND) { + return; + } + if (this.isRewinding !== isKeyDown) { + if (isKeyDown) { + vm.paused = true; + this.autoRewind = true; + } else { + this.autoRewind = false; + vm.paused = false; + } + } + } + + keyPause(isKeyDown) { + if (!ENABLE_PAUSE) { + return; + } + if (isKeyDown) vm.togglePause(); + } + + keyPrevPalette(isKeyDown) { + if (!ENABLE_SWITCH_PALETTES) { + return; + } + if (isKeyDown) { + vm.palIdx = (vm.palIdx + PALETTES.length - 1) % PALETTES.length; + emulator.setBuiltinPalette(vm.palIdx); + } + } + + keyNextPalette(isKeyDown) { + if (!ENABLE_SWITCH_PALETTES) { + return; + } + if (isKeyDown) { + vm.palIdx = (vm.palIdx + 1) % PALETTES.length; + emulator.setBuiltinPalette(vm.palIdx); + } + } + + setJoypDown(set) { + this.module._set_joyp_down(this.e, set); + } + setJoypUp(set) { + this.module._set_joyp_up(this.e, set); + } + setJoypLeft(set) { + this.module._set_joyp_left(this.e, set); + } + setJoypRight(set) { + this.module._set_joyp_right(this.e, set); + } + setJoypSelect(set) { + this.module._set_joyp_select(this.e, set); + } + setJoypStart(set) { + this.module._set_joyp_start(this.e, set); + } + setJoypB(set) { + this.module._set_joyp_B(this.e, set); + } + setJoypA(set) { + this.module._set_joyp_A(this.e, set); + } +} + +class Gamepad { + constructor(module, e) { + this.module = module; + this.e = e; + } + + // Load a key map for gamepad-to-gameboy buttons + // bindKeys(strMapping) { + // this.GAMEPAD_KEYMAP_STANDARD = [ + // { + // gb_key: "b", + // gp_button: 0, + // type: "button", + // gp_bind: this.module._set_joyp_B.bind(null, this.e), + // }, + // { + // gb_key: "a", + // gp_button: 1, + // type: "button", + // gp_bind: this.module._set_joyp_A.bind(null, this.e), + // }, + // { + // gb_key: "select", + // gp_button: 8, + // type: "button", + // gp_bind: this.module._set_joyp_select.bind(null, this.e), + // }, + // { + // gb_key: "start", + // gp_button: 9, + // type: "button", + // gp_bind: this.module._set_joyp_start.bind(null, this.e), + // }, + // { + // gb_key: "up", + // gp_button: 12, + // type: "button", + // gp_bind: this.module._set_joyp_up.bind(null, this.e), + // }, + // { + // gb_key: "down", + // gp_button: 13, + // type: "button", + // gp_bind: this.module._set_joyp_down.bind(null, this.e), + // }, + // { + // gb_key: "left", + // gp_button: 14, + // type: "button", + // gp_bind: this.module._set_joyp_left.bind(null, this.e), + // }, + // { + // gb_key: "right", + // gp_button: 15, + // type: "button", + // gp_bind: this.module._set_joyp_right.bind(null, this.e), + // }, + // ]; + + // this.GAMEPAD_KEYMAP_DEFAULT = [ + // { + // gb_key: "a", + // gp_button: 0, + // type: "button", + // gp_bind: this.module._set_joyp_A.bind(null, this.e), + // }, + // { + // gb_key: "b", + // gp_button: 1, + // type: "button", + // gp_bind: this.module._set_joyp_B.bind(null, this.e), + // }, + // { + // gb_key: "select", + // gp_button: 2, + // type: "button", + // gp_bind: this.module._set_joyp_select.bind(null, this.e), + // }, + // { + // gb_key: "start", + // gp_button: 3, + // type: "button", + // gp_bind: this.module._set_joyp_start.bind(null, this.e), + // }, + // { + // gb_key: "up", + // gp_button: 2, + // type: "axis", + // gp_bind: this.module._set_joyp_up.bind(null, this.e), + // }, + // { + // gb_key: "down", + // gp_button: 3, + // type: "axis", + // gp_bind: this.module._set_joyp_down.bind(null, this.e), + // }, + // { + // gb_key: "left", + // gp_button: 0, + // type: "axis", + // gp_bind: this.module._set_joyp_left.bind(null, this.e), + // }, + // { + // gb_key: "right", + // gp_button: 1, + // type: "axis", + // gp_bind: this.module._set_joyp_right.bind(null, this.e), + // }, + // ]; + + // // Try to use the w3c "standard" gamepad mapping if available + // // (Chrome/V8 seems to do that better than Firefox) + // // + // // Otherwise use a default mapping that assigns + // // A/B/Select/Start to the first four buttons, + // // and U/D/L/R to the first two axes. + // if (strMapping === GAMEPAD_KEYMAP_STANDARD_STR) { + // this.gp.keybinds = this.GAMEPAD_KEYMAP_STANDARD; + // } else { + // this.gp.keybinds = this.GAMEPAD_KEYMAP_DEFAULT; + // } + // } + + cacheValues(gamepad) { + // Read Buttons + for (let k = 0; k < gamepad.buttons.length; k++) { + // .value is for analog, .pressed is for boolean buttons + this.gp.buttons.cur[k] = + gamepad.buttons[k].value > 0 || gamepad.buttons[k].pressed == true; + + // Update state changed if not on first input pass + if (this.gp.buttons.last !== undefined) { + this.gp.buttons.changed[k] = + this.gp.buttons.cur[k] != this.gp.buttons.last[k]; + } + } + + // Read Axes + for (let k = 0; k < gamepad.axes.length; k++) { + // Decode each dpad axis into two buttons, one for each direction + this.gp.axes.cur[k * 2] = gamepad.axes[k] < 0; + this.gp.axes.cur[k * 2 + 1] = gamepad.axes[k] > 0; + + // Update state changed if not on first input pass + if (this.gp.axes.last !== undefined) { + this.gp.axes.changed[k * 2] = + this.gp.axes.cur[k * 2] != this.gp.axes.last[k * 2]; + this.gp.axes.changed[k * 2 + 1] = + this.gp.axes.cur[k * 2 + 1] != this.gp.axes.last[k * 2 + 1]; + } + } + + // Save current state for comparison on next input + this.gp.axes.last = this.gp.axes.cur.slice(0); + this.gp.buttons.last = this.gp.buttons.cur.slice(0); + } + + handleButton(keyBind) { + let buttonCache; + + // Select button / axis cache based on key bind type + if (keyBind.type === "button") { + buttonCache = this.gp.buttons; + } else if (keyBind.type === "axis") { + buttonCache = this.gp.axes; + } + + // Make sure the button exists in the cache array + if (keyBind.gp_button < buttonCache.changed.length) { + // Send the button state if it's changed + if (buttonCache.changed[keyBind.gp_button]) { + if (buttonCache.cur[keyBind.gp_button]) { + // Gamepad Button Down + keyBind.gp_bind(true); + } else { + // Gamepad Button Up + keyBind.gp_bind(false); + } + } + } + } + + getCurrent() { + // Chrome requires retrieving a new gamepad object + // every time button state is queried (the existing object + // will have stale button state). Just do that for all browsers + let gamepad = navigator.getGamepads()[this.gp.apiID]; + + if (gamepad) { + if (gamepad.connected) { + return gamepad; + } + } + + return undefined; + } + + update() { + let gamepad = this.getCurrent(); + + if (gamepad !== undefined) { + // Cache gamepad input values + this.cacheValues(gamepad); + + // Loop through buttons and send changes if needed + for (let i = 0; i < this.gp.keybinds.length; i++) { + this.handleButton(this.gp.keybinds[i]); + } + } else { + // Gamepad is no longer present, disconnect + this.releaseGamepad(); + } + } + + startGamepad(gamepad) { + // Make sure it has enough buttons and axes + if ( + gamepad.mapping === GAMEPAD_KEYMAP_STANDARD_STR || + (gamepad.axes.length >= 2 && gamepad.buttons.length >= 4) + ) { + // Save API index for polling (required by Chrome/V8) + this.gp.apiID = gamepad.index; + + // Assign gameboy keys to the gamepad + this.bindKeys(gamepad.mapping); + + // Start polling the gamepad for input + this.gp.timerID = setInterval( + () => this.update(), + GAMEPAD_POLLING_INTERVAL + ); + } + } + + releaseGamepad() { + // Stop polling the gamepad for input + if (this.gp.timerID !== undefined) { + clearInterval(this.gp.timerID); + } + + // Clear previous button history and controller info + this.gp.axes.last = undefined; + this.gp.buttons.last = undefined; + this.gp.keybinds = undefined; + + this.gp.apiID = undefined; + } + + // If a gamepad was already connected on this page + // and released, it won't fire another connect event. + // So try to find any that might be present + checkAlreadyConnected() { + let gamepads = navigator.getGamepads(); + + // If any gamepads are already attached to the page, + // use the first one that is connected + for (let idx = 0; idx < gamepads.length; idx++) { + if (gamepads[idx] !== undefined && gamepads[idx] !== null) { + if (gamepads[idx].connected === true) { + this.startGamepad(gamepads[idx]); + } + } + } + } + + // Event handler for when a gamepad is connected + eventConnected(event) { + this.startGamepad(navigator.getGamepads()[event.gamepad.index]); + } + + // Event handler for when a gamepad is disconnected + eventDisconnected(event) { + this.releaseGamepad(); + } + + // Register event connection handlers for gamepads + init() { + // gamepad related vars + this.gp = { + apiID: undefined, + timerID: undefined, + keybinds: undefined, + axes: { last: undefined, cur: [], changed: [] }, + buttons: { last: undefined, cur: [], changed: [] }, + }; + + // Check for previously attached gamepads that might + // not emit a gamepadconnected() event + this.checkAlreadyConnected(); + + this.boundGamepadConnected = this.eventConnected.bind(this); + this.boundGamepadDisconnected = this.eventDisconnected.bind(this); + + // When a gamepad connects, start polling it for input + window.addEventListener("gamepadconnected", this.boundGamepadConnected); + + // When a gamepad disconnects, shut down polling for input + window.addEventListener( + "gamepaddisconnected", + this.boundGamepadDisconnected + ); + } + + // Release event connection handlers and settings + shutdown() { + this.releaseGamepad(); + window.removeEventListener("gamepadconnected", this.boundGamepadConnected); + window.removeEventListener( + "gamepaddisconnected", + this.boundGamepadDisconnected + ); + } +} + +class Audio { + constructor(module, e) { + this.started = false; + this.module = module; + this.buffer = makeWasmBuffer( + this.module, + this.module._get_audio_buffer_ptr(e), + this.module._get_audio_buffer_capacity(e) + ); + this.startSec = 0; + this.resume(); + + this.boundStartPlayback = this.startPlayback.bind(this); + window.addEventListener("keydown", this.boundStartPlayback, true); + window.addEventListener("click", this.boundStartPlayback, true); + window.addEventListener("touchend", this.boundStartPlayback, true); + } + + startPlayback() { + window.removeEventListener("touchend", this.boundStartPlayback, true); + window.removeEventListener("keydown", this.boundStartPlayback, true); + window.removeEventListener("click", this.boundStartPlayback, true); + this.started = true; + this.resume(); + } + + get sampleRate() { + return Audio.ctx.sampleRate; + } + + pushBuffer() { + if (!this.started) { + return; + } + const nowSec = Audio.ctx.currentTime; + const nowPlusLatency = nowSec + AUDIO_LATENCY_SEC; + const volume = vm.volume; + this.startSec = this.startSec || nowPlusLatency; + if (this.startSec >= nowSec) { + const buffer = Audio.ctx.createBuffer(2, AUDIO_FRAMES, this.sampleRate); + const channel0 = buffer.getChannelData(0); + const channel1 = buffer.getChannelData(1); + for (let i = 0; i < AUDIO_FRAMES; i++) { + channel0[i] = (this.buffer[2 * i] * volume) / 255; + channel1[i] = (this.buffer[2 * i + 1] * volume) / 255; + } + const bufferSource = Audio.ctx.createBufferSource(); + bufferSource.buffer = buffer; + bufferSource.connect(Audio.ctx.destination); + bufferSource.start(this.startSec); + const bufferSec = AUDIO_FRAMES / this.sampleRate; + this.startSec += bufferSec; + } else { + console.log( + "Resetting audio (" + + this.startSec.toFixed(2) + + " < " + + nowSec.toFixed(2) + + ")" + ); + this.startSec = nowPlusLatency; + } + } + + pause() { + if (!this.started) { + return; + } + Audio.ctx.suspend(); + } + + resume() { + if (!this.started) { + return; + } + Audio.ctx.resume(); + } +} + +Audio.ctx = new AudioContext(); + +class Video { + constructor(module, e, el) { + this.module = module; + // Both iPhone and Desktop Safari dont't upscale using image-rendering: pixelated + // on webgl canvases. See https://bugs.webkit.org/show_bug.cgi?id=193895. + // For now, default to Canvas2D. + if (window.navigator.userAgent.match(/iPhone|iPad|15.[0-9] Safari/)) { + this.renderer = new Canvas2DRenderer(el); + } else { + try { + this.renderer = new WebGLRenderer(el); + } catch (error) { + console.log(`Error creating WebGLRenderer: ${error}`); + this.renderer = new Canvas2DRenderer(el); + } + } + this.buffer = makeWasmBuffer( + this.module, + this.module._get_frame_buffer_ptr(e), + this.module._get_frame_buffer_size(e) + ); + this.sgbBuffer = makeWasmBuffer( + this.module, + this.module._get_sgb_frame_buffer_ptr(e), + this.module._get_sgb_frame_buffer_size(e) + ); + } + + uploadTexture() { + this.renderer.uploadTextures(this.buffer, this.sgbBuffer); + } + + renderTexture() { + this.renderer.renderTextures(); + } +} + +class Canvas2DRenderer { + constructor(el) { + this.ctx = el.getContext("2d"); + this.imageData = this.ctx.createImageData(SCREEN_WIDTH, SCREEN_HEIGHT); + this.sgbImageData = this.ctx.createImageData( + SGB_SCREEN_WIDTH, + SGB_SCREEN_HEIGHT + ); + + this.overlayCanvas = document.createElement("canvas"); + this.overlayCanvas.width = SGB_SCREEN_WIDTH; + this.overlayCanvas.height = SGB_SCREEN_HEIGHT; + this.overlayCtx = this.overlayCanvas.getContext("2d"); + } + + uploadTextures(buffer, sgbBuffer) { + this.imageData.data.set(buffer); + this.sgbImageData.data.set(sgbBuffer); + } + + renderTextures() { + if (vm.canvas.useSgbBorder) { + this.ctx.putImageData(this.imageData, SGB_SCREEN_LEFT, SGB_SCREEN_TOP); + this.overlayCtx.putImageData(this.sgbImageData, 0, 0); + this.ctx.drawImage(this.overlayCanvas, 0, 0); + } else { + this.ctx.putImageData(this.imageData, 0, 0); + } + } +} + +class WebGLRenderer { + constructor(el) { + const gl = (this.gl = el.getContext("webgl", { + preserveDrawingBuffer: true, + })); + if (gl === null) { + throw new Error("unable to create webgl context"); + } + + function compileShader(type, source) { + const shader = gl.createShader(type); + gl.shaderSource(shader, source); + gl.compileShader(shader); + if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { + throw new Error(`compileShader failed: ${gl.getShaderInfoLog(shader)}`); + } + return shader; + } + + const vertexShader = compileShader( + gl.VERTEX_SHADER, + `attribute vec2 aPos; + attribute vec2 aTexCoord; + varying highp vec2 vTexCoord; + void main(void) { + gl_Position = vec4(aPos, 0.0, 1.0); + vTexCoord = aTexCoord; + }` + ); + const fragmentShader = compileShader( + gl.FRAGMENT_SHADER, + `varying highp vec2 vTexCoord; + uniform sampler2D uSampler; + void main(void) { + gl_FragColor = texture2D(uSampler, vTexCoord); + }` + ); + + const program = gl.createProgram(); + gl.attachShader(program, vertexShader); + gl.attachShader(program, fragmentShader); + gl.linkProgram(program); + if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { + throw new Error(`program link failed: ${gl.getProgramInfoLog(program)}`); + } + gl.useProgram(program); + + this.aPos = gl.getAttribLocation(program, "aPos"); + this.aTexCoord = gl.getAttribLocation(program, "aTexCoord"); + this.uSampler = gl.getUniformLocation(program, "uSampler"); + + this.fbTexture = this.createTexture(); + this.sgbFbTexture = this.createTexture(); + + const invLerpClipSpace = (x, max) => 2 * (x / max) - 1; + const l = invLerpClipSpace(SGB_SCREEN_LEFT, SGB_SCREEN_WIDTH); + const r = invLerpClipSpace(SGB_SCREEN_RIGHT, SGB_SCREEN_WIDTH); + const t = -invLerpClipSpace(SGB_SCREEN_TOP, SGB_SCREEN_HEIGHT); + const b = -invLerpClipSpace(SGB_SCREEN_BOTTOM, SGB_SCREEN_HEIGHT); + const w = SCREEN_WIDTH / 256, + sw = SGB_SCREEN_WIDTH / 256; + const h = SCREEN_HEIGHT / 256, + sh = SGB_SCREEN_HEIGHT / 256; + + const verts = new Float32Array([ + // fb only + -1, + -1, + 0, + h, + +1, + -1, + w, + h, + -1, + +1, + 0, + 0, + +1, + +1, + w, + 0, + + // sgb fb + l, + b, + 0, + h, + r, + b, + w, + h, + l, + t, + 0, + 0, + r, + t, + w, + 0, + + // sgb border + -1, + -1, + 0, + sh, + +1, + -1, + sw, + sh, + -1, + +1, + 0, + 0, + +1, + +1, + sw, + 0, + ]); + + const buffer = gl.createBuffer(); + this.gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + gl.bufferData(gl.ARRAY_BUFFER, verts, gl.STATIC_DRAW); + + gl.enableVertexAttribArray(this.aPos); + gl.enableVertexAttribArray(this.aTexCoord); + gl.vertexAttribPointer(this.aPos, 2, gl.FLOAT, gl.FALSE, 16, 0); + gl.vertexAttribPointer(this.aTexCoord, 2, gl.FLOAT, gl.FALSE, 16, 8); + gl.uniform1i(this.uSampler, 0); + } + + createTexture() { + const gl = this.gl; + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.texImage2D( + gl.TEXTURE_2D, + 0, + gl.RGBA, + 256, + 256, + 0, + gl.RGBA, + gl.UNSIGNED_BYTE, + null + ); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + return texture; + } + + uploadTextures(buffer, sgbBuffer) { + const gl = this.gl; + gl.bindTexture(gl.TEXTURE_2D, this.fbTexture); + gl.texSubImage2D( + gl.TEXTURE_2D, + 0, + 0, + 0, + SCREEN_WIDTH, + SCREEN_HEIGHT, + gl.RGBA, + gl.UNSIGNED_BYTE, + buffer + ); + + gl.bindTexture(gl.TEXTURE_2D, this.sgbFbTexture); + gl.texSubImage2D( + gl.TEXTURE_2D, + 0, + 0, + 0, + SGB_SCREEN_WIDTH, + SGB_SCREEN_HEIGHT, + gl.RGBA, + gl.UNSIGNED_BYTE, + sgbBuffer + ); + } + + renderTextures() { + const gl = this.gl; + gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl.clearColor(0.5, 0.5, 0.5, 1.0); + gl.clear(gl.COLOR_BUFFER_BIT); + + if (vm.canvas.useSgbBorder) { + gl.bindTexture(gl.TEXTURE_2D, this.fbTexture); + gl.drawArrays(gl.TRIANGLE_STRIP, 4, 4); + + gl.enable(gl.BLEND); + gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl.bindTexture(gl.TEXTURE_2D, this.sgbFbTexture); + gl.drawArrays(gl.TRIANGLE_STRIP, 8, 4); + gl.disable(gl.BLEND); + } else { + gl.bindTexture(gl.TEXTURE_2D, this.fbTexture); + gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); + } + } +} + +class Rewind { + constructor(module, e) { + this.module = module; + this.e = e; + this.joypadBufferPtr = this.module._joypad_new(); + this.statePtr = 0; + this.bufferPtr = this.module._rewind_new_simple( + e, + REWIND_FRAMES_PER_BASE_STATE, + REWIND_BUFFER_CAPACITY + ); + this.module._emulator_set_default_joypad_callback(e, this.joypadBufferPtr); + } + + destroy() { + this.module._rewind_delete(this.bufferPtr); + this.module._joypad_delete(this.joypadBufferPtr); + } + + get oldestTicks() { + return this.module._rewind_get_oldest_ticks_f64(this.bufferPtr); + } + + get newestTicks() { + return this.module._rewind_get_newest_ticks_f64(this.bufferPtr); + } + + pushBuffer() { + if (!this.isRewinding) { + this.module._rewind_append(this.bufferPtr, this.e); + } + } + + get isRewinding() { + return this.statePtr !== 0; + } + + beginRewind() { + if (this.isRewinding) return; + this.statePtr = this.module._rewind_begin( + this.e, + this.bufferPtr, + this.joypadBufferPtr + ); + } + + rewindToTicks(ticks) { + if (!this.isRewinding) return; + return ( + this.module._rewind_to_ticks_wrapper(this.statePtr, ticks) === RESULT_OK + ); + } + + endRewind() { + if (!this.isRewinding) return; + this.module._emulator_set_default_joypad_callback( + this.e, + this.joypadBufferPtr + ); + this.module._rewind_end(this.statePtr); + this.statePtr = 0; + } +} diff --git a/resen/screen/js/script_keyboard_controls.js b/resen/screen/js/script_keyboard_controls.js new file mode 100644 index 0000000..8685469 --- /dev/null +++ b/resen/screen/js/script_keyboard_controls.js @@ -0,0 +1,1424 @@ +/* + * Copyright (C) 2017 Ben Smith + * + * This software may be modified and distributed under the terms + * of the MIT license. See the LICENSE file for details. + */ +"use strict"; + +// User configurable. +let ROM_FILENAME = "rom/kmeot_zag.gb"; + +const ENABLE_REWIND = true; +const ENABLE_PAUSE = false; +const ENABLE_SWITCH_PALETTES = true; +const OSGP_DEADZONE = 0.1; // On screen gamepad deadzone range +const CGB_COLOR_CURVE = 2; // 0: none, 1: Sameboy "Emulate Hardware" 2: Gambatte/Gameboy Online + +// List of DMG palettes to switch between. By default it includes all 84 +// built-in palettes. If you want to restrict this, change it to an array of +// the palettes you want to use and change DEFAULT_PALETTE_IDX to the index of the +// default palette in that list. +// +// Example: (only allow one palette with index 16): +// const DEFAULT_PALETTE_IDX = 0; +// const PALETTES = [16]; +// +// Example: (allow three palettes, 16, 32, 64, with default 32): +// const DEFAULT_PALETTE_IDX = 1; +// const PALETTES = [16, 32, 64]; +// +const DEFAULT_PALETTE_IDX = 83; +const PALETTES = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, +]; + +const RESULT_OK = 0; +const RESULT_ERROR = 1; +const SCREEN_WIDTH = 160; +const SCREEN_HEIGHT = 144; +const SGB_SCREEN_WIDTH = 256; +const SGB_SCREEN_HEIGHT = 224; +const SGB_SCREEN_LEFT = (SGB_SCREEN_WIDTH - SCREEN_WIDTH) >> 1; +const SGB_SCREEN_RIGHT = (SGB_SCREEN_WIDTH + SCREEN_WIDTH) >> 1; +const SGB_SCREEN_TOP = (SGB_SCREEN_HEIGHT - SCREEN_HEIGHT) >> 1; +const SGB_SCREEN_BOTTOM = (SGB_SCREEN_HEIGHT + SCREEN_HEIGHT) >> 1; +const AUDIO_FRAMES = 4096; +const AUDIO_LATENCY_SEC = 0.1; +const MAX_UPDATE_SEC = 5 / 60; +const CPU_TICKS_PER_SECOND = 4194304; +const EVENT_NEW_FRAME = 1; +const EVENT_AUDIO_BUFFER_FULL = 2; +const EVENT_UNTIL_TICKS = 4; +const REWIND_FRAMES_PER_BASE_STATE = 45; +const REWIND_BUFFER_CAPACITY = 4 * 1024 * 1024; +const REWIND_FACTOR = 1.5; +const REWIND_UPDATE_MS = 16; +const GAMEPAD_POLLING_INTERVAL = 1000 / 60 / 4; // When activated, poll for gamepad input about ~4 times per gameboy frame (~240 times second) +const GAMEPAD_KEYMAP_STANDARD_STR = "standard"; // Try to use "standard" HTML5 mapping config if available + +const $ = document.querySelector.bind(document); +let emulator = null; + +const controllerEl = $("#controller"); +const dpadEl = $("#controller_dpad"); +const selectEl = $("#controller_select"); +const startEl = $("#controller_start"); +const bEl = $("#controller_b"); +const aEl = $("#controller_a"); + +const binjgbPromise = Binjgb(); + +const sgbEnabled = window.location.href.includes("sgb=true"); +if (sgbEnabled) { + $("canvas").width = SGB_SCREEN_WIDTH; + $("canvas").height = SGB_SCREEN_HEIGHT; +} else { + $("canvas").width = SCREEN_WIDTH; + $("canvas").height = SCREEN_HEIGHT; +} + +// Extract stuff from the vue.js implementation in demo.js. +class VM { + constructor() { + this.ticks = 0; + this.extRamUpdated = false; + this.paused_ = false; + this.volume = 0.5; + this.palIdx = DEFAULT_PALETTE_IDX; + this.canvas = { + show: true, + useSgbBorder: sgbEnabled, + scale: 3, + }; + this.rewind = { + minTicks: 0, + maxTicks: 0, + }; + setInterval(() => { + if (this.extRamUpdated) { + this.updateExtRam(); + this.extRamUpdated = false; + } + }, 1000); + } + + get paused() { + return this.paused_; + } + set paused(newPaused) { + let oldPaused = this.paused_; + this.paused_ = newPaused; + if (!emulator) return; + if (newPaused == oldPaused) return; + if (newPaused) { + emulator.pause(); + this.ticks = emulator.ticks; + this.rewind.minTicks = emulator.rewind.oldestTicks; + this.rewind.maxTicks = emulator.rewind.newestTicks; + } else { + emulator.resume(); + } + } + + togglePause() { + this.paused = !this.paused; + } + + updateExtRam() { + if (!emulator) return; + const extram = emulator.getExtRam(); + localStorage.setItem("extram", JSON.stringify(Array.from(extram))); + } +} +// // Function to detect if the user is using an iPhone or iPad +// function isIOS() { +// const userAgent = window.navigator.userAgent; +// return /iPad|iPhone|iPod/.test(userAgent); +// } + +const vm = new VM(); + +// Load a ROM. +(async function go() { + // if (isIOS()) { + // ROM_FILENAME = "rom/tzag_kmeot_ios.gb"; + // } + let response = await fetch(ROM_FILENAME); + let romBuffer = await response.arrayBuffer(); + const extRam = new Uint8Array(JSON.parse(localStorage.getItem("extram"))); + Emulator.start(await binjgbPromise, romBuffer, extRam); + emulator.setBuiltinPalette(vm.palIdx); +})(); + +function makeWasmBuffer(module, ptr, size) { + return new Uint8Array(module.HEAP8.buffer, ptr, size); +} + +class Emulator { + static start(module, romBuffer, extRamBuffer) { + Emulator.stop(); + emulator = new Emulator(module, romBuffer, extRamBuffer); + emulator.run(); + } + + static stop() { + if (emulator) { + emulator.destroy(); + emulator = null; + } + } + + constructor(module, romBuffer, extRamBuffer) { + this.module = module; + this.romDataPtr = this.module._malloc(romBuffer.byteLength); + makeWasmBuffer(this.module, this.romDataPtr, romBuffer.byteLength).set( + new Uint8Array(romBuffer) + ); + this.e = this.module._emulator_new_simple( + this.romDataPtr, + romBuffer.byteLength, + Audio.ctx.sampleRate, + AUDIO_FRAMES, + CGB_COLOR_CURVE + ); + if (this.e == 0) { + throw new Error("Invalid ROM."); + } + + this.gamepad = new Gamepad(module, this.e); + this.audio = new Audio(module, this.e); + this.video = new Video(module, this.e, $("canvas")); + this.rewind = new Rewind(module, this.e); + this.rewindIntervalId = 0; + + this.lastRafSec = 0; + this.leftoverTicks = 0; + this.fps = 60; + + if (extRamBuffer) { + this.loadExtRam(extRamBuffer); + } + + this.bindKeys(); + this.bindTouch(); + + this.touchEnabled = "ontouchstart" in document.documentElement; + this.updateOnscreenGamepad(); + + this.gamepad.init(); + } + + destroy() { + this.gamepad.shutdown(); + this.unbindTouch(); + this.unbindKeys(); + this.cancelAnimationFrame(); + clearInterval(this.rewindIntervalId); + this.rewind.destroy(); + this.module._emulator_delete(this.e); + this.module._free(this.romDataPtr); + } + + withNewFileData(cb) { + const fileDataPtr = this.module._ext_ram_file_data_new(this.e); + const buffer = makeWasmBuffer( + this.module, + this.module._get_file_data_ptr(fileDataPtr), + this.module._get_file_data_size(fileDataPtr) + ); + const result = cb(fileDataPtr, buffer); + this.module._file_data_delete(fileDataPtr); + return result; + } + + loadExtRam(extRamBuffer) { + this.withNewFileData((fileDataPtr, buffer) => { + if (buffer.byteLength === extRamBuffer.byteLength) { + buffer.set(new Uint8Array(extRamBuffer)); + this.module._emulator_read_ext_ram(this.e, fileDataPtr); + } + }); + } + + getExtRam() { + return this.withNewFileData((fileDataPtr, buffer) => { + this.module._emulator_write_ext_ram(this.e, fileDataPtr); + return new Uint8Array(buffer); + }); + } + + get isPaused() { + return this.rafCancelToken === null; + } + + pause() { + if (!this.isPaused) { + this.cancelAnimationFrame(); + this.audio.pause(); + this.beginRewind(); + } + } + + resume() { + if (this.isPaused) { + this.endRewind(); + this.requestAnimationFrame(); + this.audio.resume(); + } + } + + setBuiltinPalette(palIdx) { + this.module._emulator_set_builtin_palette(this.e, PALETTES[palIdx]); + } + + get isRewinding() { + return this.rewind.isRewinding; + } + + beginRewind() { + this.rewind.beginRewind(); + } + + rewindToTicks(ticks) { + if (this.rewind.rewindToTicks(ticks)) { + this.runUntil(ticks); + this.video.renderTexture(); + } + } + + endRewind() { + this.rewind.endRewind(); + this.lastRafSec = 0; + this.leftoverTicks = 0; + this.audio.startSec = 0; + } + + set autoRewind(enabled) { + if (enabled) { + this.rewindIntervalId = setInterval(() => { + const oldest = this.rewind.oldestTicks; + const start = this.ticks; + const delta = + ((REWIND_FACTOR * REWIND_UPDATE_MS) / 1000) * CPU_TICKS_PER_SECOND; + const rewindTo = Math.max(oldest, start - delta); + this.rewindToTicks(rewindTo); + vm.ticks = emulator.ticks; + }, REWIND_UPDATE_MS); + } else { + clearInterval(this.rewindIntervalId); + this.rewindIntervalId = 0; + } + } + + requestAnimationFrame() { + this.rafCancelToken = requestAnimationFrame(this.rafCallback.bind(this)); + } + + cancelAnimationFrame() { + cancelAnimationFrame(this.rafCancelToken); + this.rafCancelToken = null; + } + + run() { + this.requestAnimationFrame(); + } + + get ticks() { + return this.module._emulator_get_ticks_f64(this.e); + } + + runUntil(ticks) { + while (true) { + const event = this.module._emulator_run_until_f64(this.e, ticks); + if (event & EVENT_NEW_FRAME) { + this.rewind.pushBuffer(); + this.video.uploadTexture(); + } + if (event & EVENT_AUDIO_BUFFER_FULL && !this.isRewinding) { + this.audio.pushBuffer(); + } + if (event & EVENT_UNTIL_TICKS) { + break; + } + } + if (this.module._emulator_was_ext_ram_updated(this.e)) { + vm.extRamUpdated = true; + } + } + + rafCallback(startMs) { + this.requestAnimationFrame(); + let deltaSec = 0; + if (!this.isRewinding) { + const startSec = startMs / 1000; + deltaSec = Math.max(startSec - (this.lastRafSec || startSec), 0); + const startTicks = this.ticks; + const deltaTicks = + Math.min(deltaSec, MAX_UPDATE_SEC) * CPU_TICKS_PER_SECOND; + const runUntilTicks = startTicks + deltaTicks - this.leftoverTicks; + this.runUntil(runUntilTicks); + this.leftoverTicks = (this.ticks - runUntilTicks) | 0; + this.lastRafSec = startSec; + } + const lerp = (from, to, alpha) => alpha * from + (1 - alpha) * to; + this.fps = lerp(this.fps, Math.min(1 / deltaSec, 10000), 0.3); + this.video.renderTexture(); + } + + updateOnscreenGamepad() { + $("#controller").style.display = this.touchEnabled ? "block" : "none"; + } + + bindTouch() { + this.touchFuncs = { + controller_b: this.setJoypB.bind(this), + controller_a: this.setJoypA.bind(this), + controller_start: this.setJoypStart.bind(this), + controller_select: this.setJoypSelect.bind(this), + }; + + this.boundButtonTouchStart = this.buttonTouchStart.bind(this); + this.boundButtonTouchEnd = this.buttonTouchEnd.bind(this); + selectEl.addEventListener("touchstart", this.boundButtonTouchStart); + selectEl.addEventListener("touchend", this.boundButtonTouchEnd); + startEl.addEventListener("touchstart", this.boundButtonTouchStart); + startEl.addEventListener("touchend", this.boundButtonTouchEnd); + bEl.addEventListener("touchstart", this.boundButtonTouchStart); + bEl.addEventListener("touchend", this.boundButtonTouchEnd); + aEl.addEventListener("touchstart", this.boundButtonTouchStart); + aEl.addEventListener("touchend", this.boundButtonTouchEnd); + + this.boundDpadTouchStartMove = this.dpadTouchStartMove.bind(this); + this.boundDpadTouchEnd = this.dpadTouchEnd.bind(this); + dpadEl.addEventListener("touchstart", this.boundDpadTouchStartMove); + dpadEl.addEventListener("touchmove", this.boundDpadTouchStartMove); + dpadEl.addEventListener("touchend", this.boundDpadTouchEnd); + + this.boundTouchRestore = this.touchRestore.bind(this); + window.addEventListener("touchstart", this.boundTouchRestore); + } + + unbindTouch() { + selectEl.removeEventListener("touchstart", this.boundButtonTouchStart); + selectEl.removeEventListener("touchend", this.boundButtonTouchEnd); + startEl.removeEventListener("touchstart", this.boundButtonTouchStart); + startEl.removeEventListener("touchend", this.boundButtonTouchEnd); + bEl.removeEventListener("touchstart", this.boundButtonTouchStart); + bEl.removeEventListener("touchend", this.boundButtonTouchEnd); + aEl.removeEventListener("touchstart", this.boundButtonTouchStart); + aEl.removeEventListener("touchend", this.boundButtonTouchEnd); + + dpadEl.removeEventListener("touchstart", this.boundDpadTouchStartMove); + dpadEl.removeEventListener("touchmove", this.boundDpadTouchStartMove); + dpadEl.removeEventListener("touchend", this.boundDpadTouchEnd); + + window.removeEventListener("touchstart", this.boundTouchRestore); + } + + buttonTouchStart(event) { + if (event.currentTarget.id in this.touchFuncs) { + this.touchFuncs[event.currentTarget.id](true); + event.currentTarget.classList.add("btnPressed"); + event.preventDefault(); + } + } + + buttonTouchEnd(event) { + if (event.currentTarget.id in this.touchFuncs) { + this.touchFuncs[event.currentTarget.id](false); + event.currentTarget.classList.remove("btnPressed"); + event.preventDefault(); + } + } + + dpadTouchStartMove(event) { + const rect = event.currentTarget.getBoundingClientRect(); + const x = + (2 * (event.targetTouches[0].clientX - rect.left)) / rect.width - 1; + const y = + (2 * (event.targetTouches[0].clientY - rect.top)) / rect.height - 1; + + if (Math.abs(x) > OSGP_DEADZONE) { + if (y > x && y < -x) { + this.setJoypLeft(true); + this.setJoypRight(false); + } else if (y < x && y > -x) { + this.setJoypLeft(false); + this.setJoypRight(true); + } + } else { + this.setJoypLeft(false); + this.setJoypRight(false); + } + + if (Math.abs(y) > OSGP_DEADZONE) { + if (x > y && x < -y) { + this.setJoypUp(true); + this.setJoypDown(false); + } else if (x < y && x > -y) { + this.setJoypUp(false); + this.setJoypDown(true); + } + } else { + this.setJoypUp(false); + this.setJoypDown(false); + } + event.preventDefault(); + } + + dpadTouchEnd(event) { + this.setJoypLeft(false); + this.setJoypRight(false); + this.setJoypUp(false); + this.setJoypDown(false); + event.preventDefault(); + } + + touchRestore() { + this.touchEnabled = true; + this.updateOnscreenGamepad(); + } + + bindKeys() { + this.keyFuncs = { + Backspace: this.keyRewind.bind(this), + " ": this.keyPause.bind(this), + "[": this.keyPrevPalette.bind(this), + "]": this.keyNextPalette.bind(this), + }; + + if (customControls.down && customControls.down.length > 0) { + customControls.down.forEach((k) => { + this.keyFuncs[k] = this.setJoypDown.bind(this); + }); + } else { + // keys assigned to DOWN button on game boy + this.keyFuncs["ArrowDown"] = this.setJoypDown.bind(this); + this.keyFuncs["s"] = this.setJoypDown.bind(this); + this.keyFuncs["S"] = this.setJoypDown.bind(this); + + this.keyFuncs["ד"] = this.setJoypDown.bind(this); + } + + if (customControls.left && customControls.left.length > 0) { + customControls.left.forEach((k) => { + this.keyFuncs[k] = this.setJoypLeft.bind(this); + }); + } else { + // keys assigned to LEFT button on game boy + this.keyFuncs["ArrowLeft"] = this.setJoypLeft.bind(this); + this.keyFuncs["a"] = this.setJoypLeft.bind(this); + this.keyFuncs["ש"] = this.setJoypLeft.bind(this); + this.keyFuncs["A"] = this.setJoypDown.bind(this); + } + + if (customControls.right && customControls.right.length > 0) { + customControls.right.forEach((k) => { + this.keyFuncs[k] = this.setJoypRight.bind(this); + }); + } else { + // keys assigned to RIGHT button on game boy + this.keyFuncs["ArrowRight"] = this.setJoypRight.bind(this); + this.keyFuncs["d"] = this.setJoypRight.bind(this); + this.keyFuncs["ג"] = this.setJoypRight.bind(this); + this.keyFuncs["D"] = this.setJoypDown.bind(this); + } + + if (customControls.up && customControls.up.length > 0) { + customControls.up.forEach((k) => { + this.keyFuncs[k] = this.setJoypUp.bind(this); + }); + } else { + // keys assigned to UP button on game boy + + this.keyFuncs["ArrowUp"] = this.setJoypUp.bind(this); + this.keyFuncs["w"] = this.setJoypUp.bind(this); + this.keyFuncs["W"] = this.setJoypUp.bind(this); + this.keyFuncs["'"] = this.setJoypUp.bind(this); + } + + if (customControls.a && customControls.a.length > 0) { + customControls.a.forEach((k) => { + this.keyFuncs[k] = this.setJoypA.bind(this); + }); + } else { + // keys assigned to A button on game boy + + this.keyFuncs["z"] = this.setJoypA.bind(this); + this.keyFuncs["ז"] = this.setJoypA.bind(this); + this.keyFuncs["ח"] = this.setJoypA.bind(this); + this.keyFuncs["j"] = this.setJoypA.bind(this); + this.keyFuncs["Z"] = this.setJoypA.bind(this); + this.keyFuncs["j"] = this.setJoypA.bind(this); + // this.keyFuncs["Alt"] = this.setJoypA.bind(this); + } + + if (customControls.b && customControls.b.length > 0) { + customControls.b.forEach((k) => { + this.keyFuncs[k] = this.setJoypB.bind(this); + }); + } else { + // keys assigned to B button on game boy + this.keyFuncs["x"] = this.setJoypB.bind(this); + this.keyFuncs["X"] = this.setJoypB.bind(this); + this.keyFuncs["ס"] = this.setJoypB.bind(this); + this.keyFuncs["ל"] = this.setJoypB.bind(this); + this.keyFuncs["k"] = this.setJoypB.bind(this); + this.keyFuncs["K"] = this.setJoypB.bind(this); + // this.keyFuncs["Control"] = this.setJoypB.bind(this); + } + + if (customControls.start && customControls.start.length > 0) { + customControls.start.forEach((k) => { + this.keyFuncs[k] = this.setJoypStart.bind(this); + }); + } else { + // keys assigned to START button on game boy + + this.keyFuncs["Enter"] = this.setJoypStart.bind(this); + } + + if (customControls.select && customControls.select.length > 0) { + customControls.select.forEach((k) => { + this.keyFuncs[k] = this.setJoypSelect.bind(this); + }); + } else { + // keys assigned to SELECT button on game boy + + this.keyFuncs["Shift"] = this.setJoypSelect.bind(this); + } + + this.boundKeyDown = this.keyDown.bind(this); + this.boundKeyUp = this.keyUp.bind(this); + + window.addEventListener("keydown", this.boundKeyDown); + window.addEventListener("keyup", this.boundKeyUp); + } + + unbindKeys() { + window.removeEventListener("keydown", this.boundKeyDown); + window.removeEventListener("keyup", this.boundKeyUp); + } + + keyDown(event) { + if (event.key === "w" && (event.metaKey || event.ctrlKey)) { + return; + } + if (event.key in this.keyFuncs) { + if (this.touchEnabled) { + this.touchEnabled = false; + this.updateOnscreenGamepad(); + } + this.keyFuncs[event.key](true); + event.preventDefault(); + } + } + + keyUp(event) { + if (event.key in this.keyFuncs) { + this.keyFuncs[event.key](false); + event.preventDefault(); + } + } + + keyRewind(isKeyDown) { + if (!ENABLE_REWIND) { + return; + } + if (this.isRewinding !== isKeyDown) { + if (isKeyDown) { + vm.paused = true; + this.autoRewind = true; + } else { + this.autoRewind = false; + vm.paused = false; + } + } + } + + keyPause(isKeyDown) { + if (!ENABLE_PAUSE) { + return; + } + if (isKeyDown) vm.togglePause(); + } + + keyPrevPalette(isKeyDown) { + if (!ENABLE_SWITCH_PALETTES) { + return; + } + if (isKeyDown) { + vm.palIdx = (vm.palIdx + PALETTES.length - 1) % PALETTES.length; + emulator.setBuiltinPalette(vm.palIdx); + } + } + + keyNextPalette(isKeyDown) { + if (!ENABLE_SWITCH_PALETTES) { + return; + } + if (isKeyDown) { + vm.palIdx = (vm.palIdx + 1) % PALETTES.length; + emulator.setBuiltinPalette(vm.palIdx); + } + } + + setJoypDown(set) { + this.module._set_joyp_down(this.e, set); + } + setJoypUp(set) { + this.module._set_joyp_up(this.e, set); + } + setJoypLeft(set) { + this.module._set_joyp_left(this.e, set); + } + setJoypRight(set) { + this.module._set_joyp_right(this.e, set); + } + setJoypSelect(set) { + this.module._set_joyp_select(this.e, set); + } + setJoypStart(set) { + this.module._set_joyp_start(this.e, set); + } + setJoypB(set) { + this.module._set_joyp_B(this.e, set); + } + setJoypA(set) { + this.module._set_joyp_A(this.e, set); + } +} + +class Gamepad { + constructor(module, e) { + this.module = module; + this.e = e; + } + + // Load a key map for gamepad-to-gameboy buttons + bindKeys(strMapping) { + this.GAMEPAD_KEYMAP_STANDARD = [ + { + gb_key: "b", + gp_button: 0, + type: "button", + gp_bind: this.module._set_joyp_B.bind(null, this.e), + }, + { + gb_key: "a", + gp_button: 1, + type: "button", + gp_bind: this.module._set_joyp_A.bind(null, this.e), + }, + { + gb_key: "select", + gp_button: 8, + type: "button", + gp_bind: this.module._set_joyp_select.bind(null, this.e), + }, + { + gb_key: "start", + gp_button: 9, + type: "button", + gp_bind: this.module._set_joyp_start.bind(null, this.e), + }, + { + gb_key: "up", + gp_button: 12, + type: "button", + gp_bind: this.module._set_joyp_up.bind(null, this.e), + }, + { + gb_key: "down", + gp_button: 13, + type: "button", + gp_bind: this.module._set_joyp_down.bind(null, this.e), + }, + { + gb_key: "left", + gp_button: 14, + type: "button", + gp_bind: this.module._set_joyp_left.bind(null, this.e), + }, + { + gb_key: "right", + gp_button: 15, + type: "button", + gp_bind: this.module._set_joyp_right.bind(null, this.e), + }, + ]; + + this.GAMEPAD_KEYMAP_DEFAULT = [ + { + gb_key: "a", + gp_button: 0, + type: "button", + gp_bind: this.module._set_joyp_A.bind(null, this.e), + }, + { + gb_key: "b", + gp_button: 1, + type: "button", + gp_bind: this.module._set_joyp_B.bind(null, this.e), + }, + { + gb_key: "select", + gp_button: 2, + type: "button", + gp_bind: this.module._set_joyp_select.bind(null, this.e), + }, + { + gb_key: "start", + gp_button: 3, + type: "button", + gp_bind: this.module._set_joyp_start.bind(null, this.e), + }, + { + gb_key: "up", + gp_button: 2, + type: "axis", + gp_bind: this.module._set_joyp_up.bind(null, this.e), + }, + { + gb_key: "down", + gp_button: 3, + type: "axis", + gp_bind: this.module._set_joyp_down.bind(null, this.e), + }, + { + gb_key: "left", + gp_button: 0, + type: "axis", + gp_bind: this.module._set_joyp_left.bind(null, this.e), + }, + { + gb_key: "right", + gp_button: 1, + type: "axis", + gp_bind: this.module._set_joyp_right.bind(null, this.e), + }, + ]; + + // Try to use the w3c "standard" gamepad mapping if available + // (Chrome/V8 seems to do that better than Firefox) + // + // Otherwise use a default mapping that assigns + // A/B/Select/Start to the first four buttons, + // and U/D/L/R to the first two axes. + if (strMapping === GAMEPAD_KEYMAP_STANDARD_STR) { + this.gp.keybinds = this.GAMEPAD_KEYMAP_STANDARD; + } else { + this.gp.keybinds = this.GAMEPAD_KEYMAP_DEFAULT; + } + } + + cacheValues(gamepad) { + // Read Buttons + for (let k = 0; k < gamepad.buttons.length; k++) { + // .value is for analog, .pressed is for boolean buttons + this.gp.buttons.cur[k] = + gamepad.buttons[k].value > 0 || gamepad.buttons[k].pressed == true; + + // Update state changed if not on first input pass + if (this.gp.buttons.last !== undefined) { + this.gp.buttons.changed[k] = + this.gp.buttons.cur[k] != this.gp.buttons.last[k]; + } + } + + // Read Axes + for (let k = 0; k < gamepad.axes.length; k++) { + // Decode each dpad axis into two buttons, one for each direction + this.gp.axes.cur[k * 2] = gamepad.axes[k] < 0; + this.gp.axes.cur[k * 2 + 1] = gamepad.axes[k] > 0; + + // Update state changed if not on first input pass + if (this.gp.axes.last !== undefined) { + this.gp.axes.changed[k * 2] = + this.gp.axes.cur[k * 2] != this.gp.axes.last[k * 2]; + this.gp.axes.changed[k * 2 + 1] = + this.gp.axes.cur[k * 2 + 1] != this.gp.axes.last[k * 2 + 1]; + } + } + + // Save current state for comparison on next input + this.gp.axes.last = this.gp.axes.cur.slice(0); + this.gp.buttons.last = this.gp.buttons.cur.slice(0); + } + + handleButton(keyBind) { + let buttonCache; + + // Select button / axis cache based on key bind type + if (keyBind.type === "button") { + buttonCache = this.gp.buttons; + } else if (keyBind.type === "axis") { + buttonCache = this.gp.axes; + } + + // Make sure the button exists in the cache array + if (keyBind.gp_button < buttonCache.changed.length) { + // Send the button state if it's changed + if (buttonCache.changed[keyBind.gp_button]) { + if (buttonCache.cur[keyBind.gp_button]) { + // Gamepad Button Down + keyBind.gp_bind(true); + } else { + // Gamepad Button Up + keyBind.gp_bind(false); + } + } + } + } + + getCurrent() { + // Chrome requires retrieving a new gamepad object + // every time button state is queried (the existing object + // will have stale button state). Just do that for all browsers + let gamepad = navigator.getGamepads()[this.gp.apiID]; + + if (gamepad) { + if (gamepad.connected) { + return gamepad; + } + } + + return undefined; + } + + update() { + let gamepad = this.getCurrent(); + + if (gamepad !== undefined) { + // Cache gamepad input values + this.cacheValues(gamepad); + + // Loop through buttons and send changes if needed + for (let i = 0; i < this.gp.keybinds.length; i++) { + this.handleButton(this.gp.keybinds[i]); + } + } else { + // Gamepad is no longer present, disconnect + this.releaseGamepad(); + } + } + + startGamepad(gamepad) { + // Make sure it has enough buttons and axes + if ( + gamepad.mapping === GAMEPAD_KEYMAP_STANDARD_STR || + (gamepad.axes.length >= 2 && gamepad.buttons.length >= 4) + ) { + // Save API index for polling (required by Chrome/V8) + this.gp.apiID = gamepad.index; + + // Assign gameboy keys to the gamepad + this.bindKeys(gamepad.mapping); + + // Start polling the gamepad for input + this.gp.timerID = setInterval( + () => this.update(), + GAMEPAD_POLLING_INTERVAL + ); + } + } + + releaseGamepad() { + // Stop polling the gamepad for input + if (this.gp.timerID !== undefined) { + clearInterval(this.gp.timerID); + } + + // Clear previous button history and controller info + this.gp.axes.last = undefined; + this.gp.buttons.last = undefined; + this.gp.keybinds = undefined; + + this.gp.apiID = undefined; + } + + // If a gamepad was already connected on this page + // and released, it won't fire another connect event. + // So try to find any that might be present + checkAlreadyConnected() { + let gamepads = navigator.getGamepads(); + + // If any gamepads are already attached to the page, + // use the first one that is connected + for (let idx = 0; idx < gamepads.length; idx++) { + if (gamepads[idx] !== undefined && gamepads[idx] !== null) { + if (gamepads[idx].connected === true) { + this.startGamepad(gamepads[idx]); + } + } + } + } + + // Event handler for when a gamepad is connected + eventConnected(event) { + this.startGamepad(navigator.getGamepads()[event.gamepad.index]); + } + + // Event handler for when a gamepad is disconnected + eventDisconnected(event) { + this.releaseGamepad(); + } + + // Register event connection handlers for gamepads + init() { + // gamepad related vars + this.gp = { + apiID: undefined, + timerID: undefined, + keybinds: undefined, + axes: { last: undefined, cur: [], changed: [] }, + buttons: { last: undefined, cur: [], changed: [] }, + }; + + // Check for previously attached gamepads that might + // not emit a gamepadconnected() event + this.checkAlreadyConnected(); + + this.boundGamepadConnected = this.eventConnected.bind(this); + this.boundGamepadDisconnected = this.eventDisconnected.bind(this); + + // When a gamepad connects, start polling it for input + window.addEventListener("gamepadconnected", this.boundGamepadConnected); + + // When a gamepad disconnects, shut down polling for input + window.addEventListener( + "gamepaddisconnected", + this.boundGamepadDisconnected + ); + } + + // Release event connection handlers and settings + shutdown() { + this.releaseGamepad(); + window.removeEventListener("gamepadconnected", this.boundGamepadConnected); + window.removeEventListener( + "gamepaddisconnected", + this.boundGamepadDisconnected + ); + } +} + +class Audio { + constructor(module, e) { + this.started = false; + this.module = module; + this.buffer = makeWasmBuffer( + this.module, + this.module._get_audio_buffer_ptr(e), + this.module._get_audio_buffer_capacity(e) + ); + this.startSec = 0; + this.resume(); + + this.boundStartPlayback = this.startPlayback.bind(this); + window.addEventListener("keydown", this.boundStartPlayback, true); + window.addEventListener("click", this.boundStartPlayback, true); + window.addEventListener("touchend", this.boundStartPlayback, true); + } + + startPlayback() { + window.removeEventListener("touchend", this.boundStartPlayback, true); + window.removeEventListener("keydown", this.boundStartPlayback, true); + window.removeEventListener("click", this.boundStartPlayback, true); + this.started = true; + this.resume(); + } + + get sampleRate() { + return Audio.ctx.sampleRate; + } + + pushBuffer() { + if (!this.started) { + return; + } + const nowSec = Audio.ctx.currentTime; + const nowPlusLatency = nowSec + AUDIO_LATENCY_SEC; + const volume = vm.volume; + this.startSec = this.startSec || nowPlusLatency; + if (this.startSec >= nowSec) { + const buffer = Audio.ctx.createBuffer(2, AUDIO_FRAMES, this.sampleRate); + const channel0 = buffer.getChannelData(0); + const channel1 = buffer.getChannelData(1); + for (let i = 0; i < AUDIO_FRAMES; i++) { + channel0[i] = (this.buffer[2 * i] * volume) / 255; + channel1[i] = (this.buffer[2 * i + 1] * volume) / 255; + } + const bufferSource = Audio.ctx.createBufferSource(); + bufferSource.buffer = buffer; + bufferSource.connect(Audio.ctx.destination); + bufferSource.start(this.startSec); + const bufferSec = AUDIO_FRAMES / this.sampleRate; + this.startSec += bufferSec; + } else { + console.log( + "Resetting audio (" + + this.startSec.toFixed(2) + + " < " + + nowSec.toFixed(2) + + ")" + ); + this.startSec = nowPlusLatency; + } + } + + pause() { + if (!this.started) { + return; + } + Audio.ctx.suspend(); + } + + resume() { + if (!this.started) { + return; + } + Audio.ctx.resume(); + } +} + +Audio.ctx = new AudioContext(); + +class Video { + constructor(module, e, el) { + this.module = module; + // Both iPhone and Desktop Safari dont't upscale using image-rendering: pixelated + // on webgl canvases. See https://bugs.webkit.org/show_bug.cgi?id=193895. + // For now, default to Canvas2D. + if (window.navigator.userAgent.match(/iPhone|iPad|15.[0-9] Safari/)) { + this.renderer = new Canvas2DRenderer(el); + } else { + try { + this.renderer = new WebGLRenderer(el); + } catch (error) { + console.log(`Error creating WebGLRenderer: ${error}`); + this.renderer = new Canvas2DRenderer(el); + } + } + this.buffer = makeWasmBuffer( + this.module, + this.module._get_frame_buffer_ptr(e), + this.module._get_frame_buffer_size(e) + ); + this.sgbBuffer = makeWasmBuffer( + this.module, + this.module._get_sgb_frame_buffer_ptr(e), + this.module._get_sgb_frame_buffer_size(e) + ); + } + + uploadTexture() { + this.renderer.uploadTextures(this.buffer, this.sgbBuffer); + } + + renderTexture() { + this.renderer.renderTextures(); + } +} + +class Canvas2DRenderer { + constructor(el) { + this.ctx = el.getContext("2d"); + this.imageData = this.ctx.createImageData(SCREEN_WIDTH, SCREEN_HEIGHT); + this.sgbImageData = this.ctx.createImageData( + SGB_SCREEN_WIDTH, + SGB_SCREEN_HEIGHT + ); + + this.overlayCanvas = document.createElement("canvas"); + this.overlayCanvas.width = SGB_SCREEN_WIDTH; + this.overlayCanvas.height = SGB_SCREEN_HEIGHT; + this.overlayCtx = this.overlayCanvas.getContext("2d"); + } + + uploadTextures(buffer, sgbBuffer) { + this.imageData.data.set(buffer); + this.sgbImageData.data.set(sgbBuffer); + } + + renderTextures() { + if (vm.canvas.useSgbBorder) { + this.ctx.putImageData(this.imageData, SGB_SCREEN_LEFT, SGB_SCREEN_TOP); + this.overlayCtx.putImageData(this.sgbImageData, 0, 0); + this.ctx.drawImage(this.overlayCanvas, 0, 0); + } else { + this.ctx.putImageData(this.imageData, 0, 0); + } + } +} + +class WebGLRenderer { + constructor(el) { + const gl = (this.gl = el.getContext("webgl", { + preserveDrawingBuffer: true, + })); + if (gl === null) { + throw new Error("unable to create webgl context"); + } + + function compileShader(type, source) { + const shader = gl.createShader(type); + gl.shaderSource(shader, source); + gl.compileShader(shader); + if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { + throw new Error(`compileShader failed: ${gl.getShaderInfoLog(shader)}`); + } + return shader; + } + + const vertexShader = compileShader( + gl.VERTEX_SHADER, + `attribute vec2 aPos; + attribute vec2 aTexCoord; + varying highp vec2 vTexCoord; + void main(void) { + gl_Position = vec4(aPos, 0.0, 1.0); + vTexCoord = aTexCoord; + }` + ); + const fragmentShader = compileShader( + gl.FRAGMENT_SHADER, + `varying highp vec2 vTexCoord; + uniform sampler2D uSampler; + void main(void) { + gl_FragColor = texture2D(uSampler, vTexCoord); + }` + ); + + const program = gl.createProgram(); + gl.attachShader(program, vertexShader); + gl.attachShader(program, fragmentShader); + gl.linkProgram(program); + if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { + throw new Error(`program link failed: ${gl.getProgramInfoLog(program)}`); + } + gl.useProgram(program); + + this.aPos = gl.getAttribLocation(program, "aPos"); + this.aTexCoord = gl.getAttribLocation(program, "aTexCoord"); + this.uSampler = gl.getUniformLocation(program, "uSampler"); + + this.fbTexture = this.createTexture(); + this.sgbFbTexture = this.createTexture(); + + const invLerpClipSpace = (x, max) => 2 * (x / max) - 1; + const l = invLerpClipSpace(SGB_SCREEN_LEFT, SGB_SCREEN_WIDTH); + const r = invLerpClipSpace(SGB_SCREEN_RIGHT, SGB_SCREEN_WIDTH); + const t = -invLerpClipSpace(SGB_SCREEN_TOP, SGB_SCREEN_HEIGHT); + const b = -invLerpClipSpace(SGB_SCREEN_BOTTOM, SGB_SCREEN_HEIGHT); + const w = SCREEN_WIDTH / 256, + sw = SGB_SCREEN_WIDTH / 256; + const h = SCREEN_HEIGHT / 256, + sh = SGB_SCREEN_HEIGHT / 256; + + const verts = new Float32Array([ + // fb only + -1, + -1, + 0, + h, + +1, + -1, + w, + h, + -1, + +1, + 0, + 0, + +1, + +1, + w, + 0, + + // sgb fb + l, + b, + 0, + h, + r, + b, + w, + h, + l, + t, + 0, + 0, + r, + t, + w, + 0, + + // sgb border + -1, + -1, + 0, + sh, + +1, + -1, + sw, + sh, + -1, + +1, + 0, + 0, + +1, + +1, + sw, + 0, + ]); + + const buffer = gl.createBuffer(); + this.gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + gl.bufferData(gl.ARRAY_BUFFER, verts, gl.STATIC_DRAW); + + gl.enableVertexAttribArray(this.aPos); + gl.enableVertexAttribArray(this.aTexCoord); + gl.vertexAttribPointer(this.aPos, 2, gl.FLOAT, gl.FALSE, 16, 0); + gl.vertexAttribPointer(this.aTexCoord, 2, gl.FLOAT, gl.FALSE, 16, 8); + gl.uniform1i(this.uSampler, 0); + } + + createTexture() { + const gl = this.gl; + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.texImage2D( + gl.TEXTURE_2D, + 0, + gl.RGBA, + 256, + 256, + 0, + gl.RGBA, + gl.UNSIGNED_BYTE, + null + ); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + return texture; + } + + uploadTextures(buffer, sgbBuffer) { + const gl = this.gl; + gl.bindTexture(gl.TEXTURE_2D, this.fbTexture); + gl.texSubImage2D( + gl.TEXTURE_2D, + 0, + 0, + 0, + SCREEN_WIDTH, + SCREEN_HEIGHT, + gl.RGBA, + gl.UNSIGNED_BYTE, + buffer + ); + + gl.bindTexture(gl.TEXTURE_2D, this.sgbFbTexture); + gl.texSubImage2D( + gl.TEXTURE_2D, + 0, + 0, + 0, + SGB_SCREEN_WIDTH, + SGB_SCREEN_HEIGHT, + gl.RGBA, + gl.UNSIGNED_BYTE, + sgbBuffer + ); + } + + renderTextures() { + const gl = this.gl; + gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl.clearColor(0.5, 0.5, 0.5, 1.0); + gl.clear(gl.COLOR_BUFFER_BIT); + + if (vm.canvas.useSgbBorder) { + gl.bindTexture(gl.TEXTURE_2D, this.fbTexture); + gl.drawArrays(gl.TRIANGLE_STRIP, 4, 4); + + gl.enable(gl.BLEND); + gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl.bindTexture(gl.TEXTURE_2D, this.sgbFbTexture); + gl.drawArrays(gl.TRIANGLE_STRIP, 8, 4); + gl.disable(gl.BLEND); + } else { + gl.bindTexture(gl.TEXTURE_2D, this.fbTexture); + gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); + } + } +} + +class Rewind { + constructor(module, e) { + this.module = module; + this.e = e; + this.joypadBufferPtr = this.module._joypad_new(); + this.statePtr = 0; + this.bufferPtr = this.module._rewind_new_simple( + e, + REWIND_FRAMES_PER_BASE_STATE, + REWIND_BUFFER_CAPACITY + ); + this.module._emulator_set_default_joypad_callback(e, this.joypadBufferPtr); + } + + destroy() { + this.module._rewind_delete(this.bufferPtr); + this.module._joypad_delete(this.joypadBufferPtr); + } + + get oldestTicks() { + return this.module._rewind_get_oldest_ticks_f64(this.bufferPtr); + } + + get newestTicks() { + return this.module._rewind_get_newest_ticks_f64(this.bufferPtr); + } + + pushBuffer() { + if (!this.isRewinding) { + this.module._rewind_append(this.bufferPtr, this.e); + } + } + + get isRewinding() { + return this.statePtr !== 0; + } + + beginRewind() { + if (this.isRewinding) return; + this.statePtr = this.module._rewind_begin( + this.e, + this.bufferPtr, + this.joypadBufferPtr + ); + } + + rewindToTicks(ticks) { + if (!this.isRewinding) return; + return ( + this.module._rewind_to_ticks_wrapper(this.statePtr, ticks) === RESULT_OK + ); + } + + endRewind() { + if (!this.isRewinding) return; + this.module._emulator_set_default_joypad_callback( + this.e, + this.joypadBufferPtr + ); + this.module._rewind_end(this.statePtr); + this.statePtr = 0; + } +} diff --git a/resen/screen/rom/kmeot_zag.gb b/resen/screen/rom/kmeot_zag.gb new file mode 100644 index 0000000000000000000000000000000000000000..9b605776c6e9db2f51f99726b493bfa3db816ea9 GIT binary patch literal 524288 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 z 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%0Aux&6ifyf;wrsa+#cg-{ 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 z$T9iTy7-a3-(Tpb^*wT3V|;=D2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p z2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 l00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2%I~C{{?HcAT|I1 literal 0 HcmV?d00001 diff --git a/resen/screen/snippet b/resen/screen/snippet new file mode 100644 index 0000000000000000000000000000000000000000..01482edb8238e39e8498308167962378b4a9b4f1 GIT binary patch literal 100737 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