diff --git a/src/html/index.html b/src/html/index.html index c8901d44..c0bc060c 100644 --- a/src/html/index.html +++ b/src/html/index.html @@ -1,40 +1,41 @@ - - RuneScape 2 + + RuneScape 2 - - - - + + + + - + + - - - - - + touch-action: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + outline: none; + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); + z-index: -1; + } + + + + + \ No newline at end of file diff --git a/src/public/manifest.json b/src/public/manifest.json new file mode 100644 index 00000000..b7a1b70d --- /dev/null +++ b/src/public/manifest.json @@ -0,0 +1,16 @@ +{ + "name": "2004Scape", + "icons": [ + { + "src": "/manifest.png", + "type": "image/png", + "sizes": "144x144" + } + ], + "id": "/", + "start_url": "/", + "background_color": "#212121", + "display": "minimal-ui", + "scope": "/", + "theme_color": "#212121" +} \ No newline at end of file diff --git a/src/public/manifest.png b/src/public/manifest.png new file mode 100644 index 00000000..9fb2f4d8 Binary files /dev/null and b/src/public/manifest.png differ diff --git a/webpack.config.js b/webpack.config.js index 78fd8638..be2950f4 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -9,17 +9,13 @@ const TerserPlugin = require('terser-webpack-plugin'); const isProduction = process.env.NODE_ENV === 'production'; const stylesHandler = isProduction ? MiniCssExtractPlugin.loader : 'style-loader'; -const pages = [ - 'index', - 'playground', 'viewer', 'mesanim', 'items', 'sounds', - 'interface-editor', 'JagEd', 'mapview' -]; +const pages = ['index', 'playground', 'viewer', 'mesanim', 'items', 'sounds', 'interface-editor', 'JagEd', 'mapview']; const htmlPlugins = pages.map(name => { return new HtmlWebpackPlugin({ template: `src/html/${name}.html`, filename: `${name}.html`, chunks: [name] - }) + }); }); const config = { @@ -46,10 +42,7 @@ const config = { filename: '[name].css' }), new CopyPlugin({ - patterns: [ - { from: path.resolve(__dirname, 'src', 'public') }, - { from: path.resolve(__dirname, 'src', 'js', 'vendor', 'bz2.wasm') }, - ], + patterns: [{from: path.resolve(__dirname, 'src', 'public')}, {from: path.resolve(__dirname, 'src', 'js', 'vendor', 'bz2.wasm')}] }) ], @@ -80,34 +73,25 @@ const config = { }, { test: /\.s[ac]ss$/i, - use: [ - stylesHandler, - 'css-loader', - 'postcss-loader', - 'sass-loader' - ] + use: [stylesHandler, 'css-loader', 'postcss-loader', 'sass-loader'] }, { test: /\.(sf2|wasm)$/i, type: 'asset' - }, + } ] }, resolve: { extensions: ['.ts', '.js', '.scss', '...'], extensionAlias: { - '.js': ['.js', '.ts'], + '.js': ['.js', '.ts'] }, - modules: [ - path.resolve(__dirname, 'src'), - 'node_modules', - 'node_modules/foundation-sites/scss' - ], + modules: [path.resolve(__dirname, 'src'), 'node_modules', 'node_modules/foundation-sites/scss'], alias: { jagex2$: path.resolve(__dirname, 'src', 'js', 'jagex2'), vendor$: path.resolve(__dirname, 'src', 'js', 'vendor'), - style$: path.resolve(__dirname, 'src', 'style'), + style$: path.resolve(__dirname, 'src', 'style') } } }; @@ -117,296 +101,296 @@ module.exports = () => { config.mode = 'production'; config.plugins.push(new MiniCssExtractPlugin()); config.plugins.push( - new TerserPlugin({ - minify: TerserPlugin.terserMinify, - parallel: true, - terserOptions: { - mangle: { - properties: { - keep_quoted: true, // needed for tinymidipcm.mjs - reserved: [ - 'loadTinyMidiPCM', // needed for tinymidipcm.mjs - 'newBzip2State', // keeps renaming this to $S - 'portOffset', // idk why but has to - 'willReadFrequently', // terser removes this option from canvas - 'members', // terser messes this up - '__liftRecord5', // the rest is for vendor - '__lowerRecord5', - '__liftString', - '__liftArray', - '__lowerArray', - '__liftTypedArray', - '__lowerTypedArray', - '__liftStaticArray', - '__lowerStaticArray', - '__retain', - '__release', - '__notnull', - '__setU8', - '__setU32', - '__getU8', - '__getU32', - '__pin', - '__new', - '__unpin', - 'run', - 'UTF8ArrayToString', - 'UTF8ToString', - 'stringToUTF8Array', - 'stringToUTF8', - 'lengthBytesUTF8', - 'addOnPreRun', - 'addOnInit', - 'addOnPreMain', - 'addOnExit', - 'addOnPostRun', - 'addRunDependency', - 'removeRunDependency', - 'FS_createFolder', - 'FS_createPath', - 'FS_createDataFile', - 'FS_createPreloadedFile', - 'FS_createLazyFile', - 'FS_createLink', - 'FS_createDevice', - 'FS_unlink', - 'getLEB', - 'getFunctionTables', - 'alignFunctionTables', - 'registerFunctions', - 'prettyPrint', - 'getCompilerSetting', - 'print', - 'printErr', - 'callMain', - 'abort', - 'keepRuntimeAlive', - 'wasmMemory', - 'stackAlloc', - 'stackSave', - 'stackRestore', - 'getTempRet0', - 'setTempRet0', - 'writeStackCookie', - 'checkStackCookie', - 'ptrToString', - 'zeroMemory', - 'stringToNewUTF8', - 'exitJS', - 'getHeapMax', - 'emscripten_realloc_buffer', - 'ENV', - 'ERRNO_CODES', - 'ERRNO_MESSAGES', - 'setErrNo', - 'inetPton4', - 'inetNtop4', - 'inetPton6', - 'inetNtop6', - 'readSockaddr', - 'writeSockaddr', - 'DNS', - 'getHostByName', - 'Protocols', - 'Sockets', - 'getRandomDevice', - 'warnOnce', - 'traverseStack', - 'UNWIND_CACHE', - 'convertPCtoSourceLocation', - 'readAsmConstArgsArray', - 'readAsmConstArgs', - 'mainThreadEM_ASM', - 'jstoi_q', - 'jstoi_s', - 'getExecutableName', - 'listenOnce', - 'autoResumeAudioContext', - 'dynCallLegacy', - 'getDynCaller', - 'dynCall', - 'handleException', - 'runtimeKeepalivePush', - 'runtimeKeepalivePop', - 'callUserCallback', - 'maybeExit', - 'safeSetTimeout', - 'asmjsMangle', - 'asyncLoad', - 'alignMemory', - 'mmapAlloc', - 'writeI53ToI64', - 'writeI53ToI64Clamped', - 'writeI53ToI64Signaling', - 'writeI53ToU64Clamped', - 'writeI53ToU64Signaling', - 'readI53FromI64', - 'readI53FromU64', - 'convertI32PairToI53', - 'convertI32PairToI53Checked', - 'convertU32PairToI53', - 'getCFunc', - 'ccall', - 'cwrap', - 'uleb128Encode', - 'sigToWasmTypes', - 'generateFuncType', - 'convertJsFunctionToWasm', - 'freeTableIndexes', - 'functionsInTableMap', - 'getEmptyTableSlot', - 'updateTableMap', - 'addFunction', - 'removeFunction', - 'reallyNegative', - 'unSign', - 'strLen', - 'reSign', - 'formatString', - 'PATH', - 'PATH_FS', - 'intArrayFromString', - 'intArrayToString', - 'AsciiToString', - 'stringToAscii', - 'UTF16Decoder', - 'UTF16ToString', - 'stringToUTF16', - 'lengthBytesUTF16', - 'UTF32ToString', - 'stringToUTF32', - 'lengthBytesUTF32', - 'allocateUTF8', - 'allocateUTF8OnStack', - 'writeStringToMemory', - 'writeArrayToMemory', - 'writeAsciiToMemory', - 'SYSCALLS', - 'getSocketFromFD', - 'getSocketAddress', - 'JSEvents', - 'registerKeyEventCallback', - 'specialHTMLTargets', - 'maybeCStringToJsString', - 'findEventTarget', - 'findCanvasEventTarget', - 'getBoundingClientRect', - 'fillMouseEventData', - 'registerMouseEventCallback', - 'registerWheelEventCallback', - 'registerUiEventCallback', - 'registerFocusEventCallback', - 'fillDeviceOrientationEventData', - 'registerDeviceOrientationEventCallback', - 'fillDeviceMotionEventData', - 'registerDeviceMotionEventCallback', - 'screenOrientation', - 'fillOrientationChangeEventData', - 'registerOrientationChangeEventCallback', - 'fillFullscreenChangeEventData', - 'registerFullscreenChangeEventCallback', - 'JSEvents_requestFullscreen', - 'JSEvents_resizeCanvasForFullscreen', - 'registerRestoreOldStyle', - 'hideEverythingExceptGivenElement', - 'restoreHiddenElements', - 'setLetterbox', - 'currentFullscreenStrategy', - 'restoreOldWindowedStyle', - 'softFullscreenResizeWebGLRenderTarget', - 'doRequestFullscreen', - 'fillPointerlockChangeEventData', - 'registerPointerlockChangeEventCallback', - 'registerPointerlockErrorEventCallback', - 'requestPointerLock', - 'fillVisibilityChangeEventData', - 'registerVisibilityChangeEventCallback', - 'registerTouchEventCallback', - 'fillGamepadEventData', - 'registerGamepadEventCallback', - 'registerBeforeUnloadEventCallback', - 'fillBatteryEventData', - 'battery', - 'registerBatteryEventCallback', - 'setCanvasElementSize', - 'getCanvasElementSize', - 'demangle', - 'demangleAll', - 'jsStackTrace', - 'stackTrace', - 'ExitStatus', - 'getEnvStrings', - 'checkWasiClock', - 'flush_NO_FILESYSTEM', - 'dlopenMissingError', - 'createDyncallWrapper', - 'setImmediateWrapped', - 'clearImmediateWrapped', - 'polyfillSetImmediate', - 'uncaughtExceptionCount', - 'exceptionLast', - 'exceptionCaught', - 'ExceptionInfo', - 'exception_addRef', - 'exception_decRef', - 'Browser', - 'setMainLoop', - 'wget', - 'FS', - 'MEMFS', - 'TTY', - 'PIPEFS', - 'SOCKFS', - '_setNetworkCallback', - 'tempFixedLengthArray', - 'miniTempWebGLFloatBuffers', - 'heapObjectForWebGLType', - 'heapAccessShiftForWebGLHeap', - 'GL', - 'emscriptenWebGLGet', - 'computeUnpackAlignedImageSize', - 'emscriptenWebGLGetTexPixelData', - 'emscriptenWebGLGetUniform', - 'webglGetUniformLocation', - 'webglPrepareUniformLocationsBeforeFirstUse', - 'webglGetLeftBracePos', - 'emscriptenWebGLGetVertexAttrib', - 'writeGLArray', - 'AL', - 'SDL_unicode', - 'SDL_ttfContext', - 'SDL_audio', - 'SDL', - 'SDL_gfx', - 'GLUT', - 'EGL', - 'GLFW_Window', - 'GLFW', - 'GLEW', - 'IDBStore', - 'runAndAbortIfError', - 'ALLOC_NORMAL', - 'ALLOC_STACK', - 'allocate', - 'grow', - 'iceServers', - 'urls', - 'malloc_u8', - 'free_u8', - 'gzip_decompress', - 'gzip_compress', - 'error_message', - 'error_message_len', - 'deallocate_buffer', - ] - } - }, - format: { - quote_style: 3, // original - keep_quoted_props: true // needed for tinymidipcm.mjs - } - } - }) + new TerserPlugin({ + minify: TerserPlugin.terserMinify, + parallel: true, + terserOptions: { + mangle: { + properties: { + keep_quoted: true, // needed for tinymidipcm.mjs + reserved: [ + 'loadTinyMidiPCM', // needed for tinymidipcm.mjs + 'newBzip2State', // keeps renaming this to $S + 'portOffset', // idk why but has to + 'willReadFrequently', // terser removes this option from canvas + 'members', // terser messes this up + '__liftRecord5', // the rest is for vendor + '__lowerRecord5', + '__liftString', + '__liftArray', + '__lowerArray', + '__liftTypedArray', + '__lowerTypedArray', + '__liftStaticArray', + '__lowerStaticArray', + '__retain', + '__release', + '__notnull', + '__setU8', + '__setU32', + '__getU8', + '__getU32', + '__pin', + '__new', + '__unpin', + 'run', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'addOnPreRun', + 'addOnInit', + 'addOnPreMain', + 'addOnExit', + 'addOnPostRun', + 'addRunDependency', + 'removeRunDependency', + 'FS_createFolder', + 'FS_createPath', + 'FS_createDataFile', + 'FS_createPreloadedFile', + 'FS_createLazyFile', + 'FS_createLink', + 'FS_createDevice', + 'FS_unlink', + 'getLEB', + 'getFunctionTables', + 'alignFunctionTables', + 'registerFunctions', + 'prettyPrint', + 'getCompilerSetting', + 'print', + 'printErr', + 'callMain', + 'abort', + 'keepRuntimeAlive', + 'wasmMemory', + 'stackAlloc', + 'stackSave', + 'stackRestore', + 'getTempRet0', + 'setTempRet0', + 'writeStackCookie', + 'checkStackCookie', + 'ptrToString', + 'zeroMemory', + 'stringToNewUTF8', + 'exitJS', + 'getHeapMax', + 'emscripten_realloc_buffer', + 'ENV', + 'ERRNO_CODES', + 'ERRNO_MESSAGES', + 'setErrNo', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'DNS', + 'getHostByName', + 'Protocols', + 'Sockets', + 'getRandomDevice', + 'warnOnce', + 'traverseStack', + 'UNWIND_CACHE', + 'convertPCtoSourceLocation', + 'readAsmConstArgsArray', + 'readAsmConstArgs', + 'mainThreadEM_ASM', + 'jstoi_q', + 'jstoi_s', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'dynCallLegacy', + 'getDynCaller', + 'dynCall', + 'handleException', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'safeSetTimeout', + 'asmjsMangle', + 'asyncLoad', + 'alignMemory', + 'mmapAlloc', + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'freeTableIndexes', + 'functionsInTableMap', + 'getEmptyTableSlot', + 'updateTableMap', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'PATH', + 'PATH_FS', + 'intArrayFromString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16Decoder', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'writeStringToMemory', + 'writeArrayToMemory', + 'writeAsciiToMemory', + 'SYSCALLS', + 'getSocketFromFD', + 'getSocketAddress', + 'JSEvents', + 'registerKeyEventCallback', + 'specialHTMLTargets', + 'maybeCStringToJsString', + 'findEventTarget', + 'findCanvasEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'demangle', + 'demangleAll', + 'jsStackTrace', + 'stackTrace', + 'ExitStatus', + 'getEnvStrings', + 'checkWasiClock', + 'flush_NO_FILESYSTEM', + 'dlopenMissingError', + 'createDyncallWrapper', + 'setImmediateWrapped', + 'clearImmediateWrapped', + 'polyfillSetImmediate', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'ExceptionInfo', + 'exception_addRef', + 'exception_decRef', + 'Browser', + 'setMainLoop', + 'wget', + 'FS', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + '_setNetworkCallback', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'heapObjectForWebGLType', + 'heapAccessShiftForWebGLHeap', + 'GL', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + 'writeGLArray', + 'AL', + 'SDL_unicode', + 'SDL_ttfContext', + 'SDL_audio', + 'SDL', + 'SDL_gfx', + 'GLUT', + 'EGL', + 'GLFW_Window', + 'GLFW', + 'GLEW', + 'IDBStore', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'grow', + 'iceServers', + 'urls', + 'malloc_u8', + 'free_u8', + 'gzip_decompress', + 'gzip_compress', + 'error_message', + 'error_message_len', + 'deallocate_buffer' + ] + } + }, + format: { + quote_style: 3, // original + keep_quoted_props: true // needed for tinymidipcm.mjs + } + } + }) ); } else { config.mode = 'development';