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';