diff --git a/package-lock.json b/package-lock.json index 6173901..1d322c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,7 +55,7 @@ "anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=", "requires": { "micromatch": "2.3.11", "normalize-path": "2.1.1" @@ -128,7 +128,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" }, "array-differ": { "version": "1.0.0", @@ -333,7 +333,7 @@ "browser-sync": { "version": "2.18.13", "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.18.13.tgz", - "integrity": "sha512-qhdrmgshVGwweogT/bdOKkZDxVxqiF4+9mibaDeAxvDBeoUtdgABk5x7YQ1KCcLRchAfv8AVtp9NuITl5CTNqg==", + "integrity": "sha1-wo3D6zvmfJepBwgrdyo3+RXBTX0=", "requires": { "browser-sync-client": "2.5.1", "browser-sync-ui": "0.6.3", @@ -657,7 +657,7 @@ "commander": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" + "integrity": "sha1-FXFS/R56bI2YpbcVzzdt+SgARWM=" }, "component-bind": { "version": "1.0.0", @@ -721,7 +721,7 @@ "cosmiconfig": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "integrity": "sha1-YXPOvVb6wELB9DkO33r2wHx8uJI=", "requires": { "is-directory": "0.3.1", "js-yaml": "3.7.0", @@ -751,7 +751,7 @@ "lru-cache": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "integrity": "sha1-Yi4y6CSItJJ5EUpPns9F581rulU=", "requires": { "pseudomap": "1.0.2", "yallist": "2.1.2" @@ -2411,7 +2411,7 @@ "ansi-styles": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "integrity": "sha1-wVm41b4PnlpvNG2rlPFs4CIWG4g=", "requires": { "color-convert": "1.9.0" } @@ -2419,7 +2419,7 @@ "chalk": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "integrity": "sha1-rFvs8U+iG5nGySynp9fP1bF+dD4=", "requires": { "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", @@ -2589,7 +2589,7 @@ "hosted-git-info": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" + "integrity": "sha1-bWDjSzq7yDEwYsO3mO+NkBoHrzw=" }, "html-comment-regex": { "version": "1.1.1", @@ -2800,7 +2800,7 @@ "is-number-like": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", - "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "integrity": "sha1-LhKWILUIkQQuROm7uzBZPnXPu+M=", "requires": { "lodash.isfinite": "3.3.2" } @@ -2813,7 +2813,7 @@ "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "requires": { "isobject": "3.0.1" }, @@ -3021,7 +3021,7 @@ "limiter": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.2.tgz", - "integrity": "sha512-JIKZ0xb6fZZYa3deZ0BgXCgX6HgV8Nx3mFGeFHmFWW8Fb2c08e0CyE+G3nalpD0xGvGssjGb1UdFr+PprxZEbw==" + "integrity": "sha1-Ip2AVYkcixGvng7lIA6OCbs9y+s=" }, "load-json-file": { "version": "1.1.0", @@ -3581,7 +3581,7 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -3647,7 +3647,7 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -3693,7 +3693,7 @@ "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", "requires": { "hosted-git-info": "2.5.0", "is-builtin-module": "1.0.0", @@ -3735,7 +3735,7 @@ "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=", "requires": { "are-we-there-yet": "1.1.4", "console-control-strings": "1.1.0", @@ -4449,7 +4449,7 @@ "randomatic": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=", "requires": { "is-number": "3.0.0", "kind-of": "4.0.0" @@ -4714,7 +4714,7 @@ "resolve": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", - "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", + "integrity": "sha1-p1vgHFPaJdk0qY69DkxKcxL5KoY=", "requires": { "path-parse": "1.0.5" } @@ -4758,7 +4758,7 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -4795,7 +4795,7 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" }, "sass-graph": { "version": "2.2.4", @@ -4826,7 +4826,7 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -4874,7 +4874,7 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=" }, "scss-tokenizer": { "version": "0.2.3", @@ -5267,11 +5267,6 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -5282,6 +5277,11 @@ "strip-ansi": "3.0.1" } }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", @@ -5523,7 +5523,7 @@ "uuid": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + "integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ=" }, "v8flags": { "version": "2.1.1", @@ -5651,7 +5651,7 @@ "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", "requires": { "isexe": "2.0.0" } @@ -5664,7 +5664,7 @@ "wide-align": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "integrity": "sha1-Vx4PGwYEY268DfwhsDObvjE0FxA=", "requires": { "string-width": "1.0.2" } diff --git a/scripts/games/package-lock.json b/scripts/games/package-lock.json index a4d6e1d..a561cbd 100644 --- a/scripts/games/package-lock.json +++ b/scripts/games/package-lock.json @@ -304,7 +304,7 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -595,7 +595,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { "brace-expansion": "1.1.8" } @@ -651,7 +651,7 @@ "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", @@ -735,7 +735,7 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" }, "sanitize-html": { "version": "1.14.1", @@ -798,7 +798,7 @@ "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", "requires": { "safe-buffer": "5.1.1" } @@ -866,7 +866,7 @@ "uuid": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + "integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ=" }, "verror": { "version": "1.10.0", @@ -888,7 +888,7 @@ "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", "requires": { "isexe": "2.0.0" } diff --git a/scripts/wiki/package-lock.json b/scripts/wiki/package-lock.json index 0e10536..add6aa4 100644 --- a/scripts/wiki/package-lock.json +++ b/scripts/wiki/package-lock.json @@ -148,7 +148,7 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -316,7 +316,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { "brace-expansion": "1.1.8" } @@ -352,7 +352,7 @@ "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", @@ -388,7 +388,7 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" }, "sanitize-html": { "version": "1.14.1", @@ -416,7 +416,7 @@ "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", "requires": { "safe-buffer": "5.1.1" } @@ -442,7 +442,7 @@ "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", "requires": { "isexe": "2.0.0" } diff --git a/site/content/entry/announcing-networking-support.md b/site/content/entry/announcing-networking-support.md new file mode 100644 index 0000000..d215b64 --- /dev/null +++ b/site/content/entry/announcing-networking-support.md @@ -0,0 +1,110 @@ ++++ +date = "2017-11-04T07:17:00-04:00" +title = "Announcing Networking Support" +tags = [ "feature-update" ] +author = "jmc47" +forum = 4744 ++++ + +_Networked Multiplayer_ is one of those features that was so surprising to see, that the lucky few chosen to test it were wondering if it was real. For the past year, several developers have banded together to bring this amazing implementation of online play to Citra. + +
+ +The Nintendo 3DS heavily relies on wireless for its slew of multiplayer compatible titles. Considering that so many games feel empty without their multiplayer features, we're excited to announce that in select titles, you'll be able to play together with your friends across the world in the latest Canary builds of Citra! + +{{< figure src="/images/entry/announcing-networking-support/LetsBattle.png" + title="Let's Battle!" >}} + +#### Bringing Multiplayer to Citra + +Emulating 3DS local wireless and bringing it to Citra was a huge endeavor shared by [subv](https://github.com/Subv), [B3N30](https://github.com/B3n30), [jroweboy](https://github.com/jroweboy), and [JayFoxRox](https://github.com/JayFoxRox). It went through several stages of development, from actually reverse-engineering how wireless worked in games, to implementing those features in Citra, and then implementing an infrastructure so that even casual users could easily take advantage of this feature. + +This emulates the 3DS' ability to do *local wireless* multiplayer. As such, it doesn't rely on Nintendo's server and does not require a Nintendo Network ID. While on a real 3DS you'd be limited to the people in your immediate vicinity, Citra boasts a complex server/client infrastructure that forwards a game's wireless communication across the internet. + +Unlike single console netplay used in most emulators, users won't have to worry about desyncs, synchronizing saves, or any other issues typical of netplay. Each user is using their instance of Citra as a unique emulated 3DS that is communicating with everyone else through that particular server. + +{{< figure src="/images/entry/announcing-networking-support/GameBrowser.png" + title="Join your friends!" >}} + +Currently, servers created in Citra can hold up to 16 players. High player counts should be avoided for now due to bandwidth issues. In this initial release, each connected Citra instance sends raw packets to the host (or server) and the server then forwards those packets to every single client. As such, with each player added, the bandwidth requirements increase greatly. + +While hundreds of games support wireless connectivity, compatibility is limited in the initial release. Tons of titles were tested, but only a handful came up as working properly. Note games may handle latency differently and your experience may vary. + +### The Server Browser + +In order to get together with other players, you're going to have to join the same room with Citra's server browser. Creating and joining servers is extremely easy in Citra and can be done in just a few clicks. If you're a verified user, you can create a public game through the traversal server for people to join. These public games can be seen by **anyone** on the server browser, but you are also able to put a password on publicly listed games. **Remember to port forward, otherwise your friends won't be able to connect!** + +Unverified users aren't left without options, though - they still have the ability to create unlisted games, direct connecting, and can join any hosted server. + +Do note that verified users **will** have their privileges revoked for violating any site policies while on the server chatroom. Please respect the *recommended game* listed in publicly hosted games, as even unrelated games will add to the bandwidth load. + +### Wireless Compatibility +#### Works Like a Charm +##### Super Smash Bros. for 3DS + +_Super Smash Brother's_ local wireless play works perfectly in Citra for up to four players. Because the game expects all players to be running in lockstep, users will need to maintain similar framerates for a stable connection. Some stages, such as the pictochat stage, can run full speed even on moderately powerful computers. + +{{< figure src="/images/entry/announcing-networking-support/SmashLocal.png" + title="1v1 me fox only no items final destination" >}} + +##### Pokémon X/Y, Pokémon Omega Ruby/Alpha Sapphire, and Pokémon Sun/Moon + +Almost everything works perfectly in the _Pokémon_ games. The only thing that fails is adding friends - so try to stay away from that. Users can battle, trade, and watch passerbys as they show up or leave on the local wireless server. + +Because of compatibility issues in general with X and Y, using wireless support may be problematic for those two titles. + +{{< figure src="/images/entry/announcing-networking-support/ChallengePok.png" + title="Challenge your friends in beautifully upscaled Pokémon battles!" >}} + +##### New Super Mario Bros. 2 + +_New Super Mario Bros. 2_ runs perfectly, and our testers were able to play together multiple worlds into the game flawlessly. Users on the same server can search for partners and join up just fine. + +{{< figure src="/images/entry/announcing-networking-support/NSMB2.jpg" + title="Your princess is in another castle? Save her together!" >}} + +#### Functional But Flawed + +##### Luigi's Mansion: Dark Moon + +This title has perfectly functional wireless support for trying to tackle the "Scarescraper"! Unfortunately, the game is so demanding that getting a fun experience out of it is near impossible. + +{{< figure src="/images/entry/announcing-networking-support/LuigisMansionLobby.png" + title="Happy Hallowe- oh, it's November. Whatever, Luigi doesn't care!" >}} + +##### Monster Hunter 3U and 4U + +The _Monster Hunter_ games are extremely demanding in Citra, but wireless support _does_ somewhat work. A second player can join a game, share quests and trade guild cards. But, the game supports up to four local players on console, and anything more than two causes disconnections in Citra. + +{{< figure src="/images/entry/announcing-networking-support/image.png" + title="Go out and hunt with all your friends! ... as long as that number is only 2." >}} + +#### Incompatible + +For various reasons, the following games were tested and do not work. Also note that Download Play and Spotpass titles do not work due to limitations in what Citra currently emulates. + + * Mario Party Island Tour + * Mario Party Star Rush + * The Legend of Zelda: TriForce Heroes + * Mario Kart 7 + * Tetris Ultimate + * Code of Princess + * Sonic Generations + * Asphalt Assault 3D + * Ridge Racer 3D + * Monster Hunter Generations + * Monster Hunter X + * Monster Hunter XX + * Street Fighter IV + * Kirby Triple Deluxe + * Dragon Quest Monsters: Terry's Wonderland 3D + * Resident Evil: The Mercenaries 3D + * Dragon Quest Monsters: Joker 3 Professional + * F1 2011 + * Kirby Fighters Deluxe + * Planet Crashers + +### Going Forward + +After the months of work put into making _Networked Multiplayer_ a reality, we're excited to see it finally brought into the public eye. While only a handful of games work in this initial release, we're hoping to bring support to more titles in the future, as well as optimizing the netcode for lower bandwidth usage, and allowing for even bigger user hosted servers. + diff --git a/site/content/entry/telemetry-and-why-thats-a-good-thing.md b/site/content/entry/telemetry-and-why-thats-a-good-thing.md index 636d9ae..ac9bf22 100644 --- a/site/content/entry/telemetry-and-why-thats-a-good-thing.md +++ b/site/content/entry/telemetry-and-why-thats-a-good-thing.md @@ -1,7 +1,7 @@ +++ date = "2017-08-26T21:04:00-04:00" title = "Telemetry (And Why That's A Good Thing)" -tags = [ "citra-release" ] +tags = [ "feature-update" ] author = "anodium" forum = 3095 +++ diff --git a/site/data/authors.json b/site/data/authors.json index 0506b6b..4ba665a 100644 --- a/site/data/authors.json +++ b/site/data/authors.json @@ -7,7 +7,7 @@ "tfarley": { "key": "tfarley", "name": "tfarley", "avatar": "https://community.citra-emu.org/user_avatar/community.citra-emu.org/citrabot/120/28_1.png" }, "merrymage": { "key": "merrymage", "name": "Merry Mage", "avatar": "https://community.citra-emu.org/user_avatar/community.citra-emu.org/citrabot/120/28_1.png" }, "jroweboy": { "key": "jroweboy", "name": "jroweboy", "avatar": "https://community.citra-emu.org/user_avatar/community.citra-emu.org/jroweboy/120/30_1.png" }, - "jmc47": { "key": "jmc47", "name": "JMC47", "avatar": "https://community.citra-emu.org/user_avatar/community.citra-emu.org/citrabot/120/28_1.png" }, + "jmc47": { "key": "jmc47", "name": "JMC47", "avatar": "https://community.citra-emu.org/user_avatar/community.citra-emu.org/jmc47/45/1487_1.png" }, "anodium": { "key": "anodium", "name": "anodium", "avatar": "https://community.citra-emu.org/user_avatar/community.citra-emu.org/anodium/120/485_1.png"}, "saphiresurf": {"key": "saphiresurf", "name": "saphiresurf", "avatar": "https://community.citra-emu.org/user_avatar/community.citra-emu.org/saphiresurf/120/695_1.png"} } diff --git a/site/static/images/banners/announcing-networking-support.png b/site/static/images/banners/announcing-networking-support.png new file mode 100644 index 0000000..8d75231 Binary files /dev/null and b/site/static/images/banners/announcing-networking-support.png differ diff --git a/site/static/images/entry/announcing-networking-support/ChallengePok.png b/site/static/images/entry/announcing-networking-support/ChallengePok.png new file mode 100644 index 0000000..6607e43 Binary files /dev/null and b/site/static/images/entry/announcing-networking-support/ChallengePok.png differ diff --git a/site/static/images/entry/announcing-networking-support/GameBrowser.png b/site/static/images/entry/announcing-networking-support/GameBrowser.png new file mode 100644 index 0000000..8e7e495 Binary files /dev/null and b/site/static/images/entry/announcing-networking-support/GameBrowser.png differ diff --git a/site/static/images/entry/announcing-networking-support/LetsBattle.png b/site/static/images/entry/announcing-networking-support/LetsBattle.png new file mode 100644 index 0000000..13106c7 Binary files /dev/null and b/site/static/images/entry/announcing-networking-support/LetsBattle.png differ diff --git a/site/static/images/entry/announcing-networking-support/LuigisMansionLobby.png b/site/static/images/entry/announcing-networking-support/LuigisMansionLobby.png new file mode 100644 index 0000000..7956444 Binary files /dev/null and b/site/static/images/entry/announcing-networking-support/LuigisMansionLobby.png differ diff --git a/site/static/images/entry/announcing-networking-support/NSMB2.jpg b/site/static/images/entry/announcing-networking-support/NSMB2.jpg new file mode 100644 index 0000000..7214740 Binary files /dev/null and b/site/static/images/entry/announcing-networking-support/NSMB2.jpg differ diff --git a/site/static/images/entry/announcing-networking-support/SmashLocal.png b/site/static/images/entry/announcing-networking-support/SmashLocal.png new file mode 100644 index 0000000..c8d3392 Binary files /dev/null and b/site/static/images/entry/announcing-networking-support/SmashLocal.png differ diff --git a/site/static/images/entry/announcing-networking-support/Wireless.md b/site/static/images/entry/announcing-networking-support/Wireless.md new file mode 100644 index 0000000..7f2d30f --- /dev/null +++ b/site/static/images/entry/announcing-networking-support/Wireless.md @@ -0,0 +1,95 @@ +_Wireless Support_ is one of those features that were so surprising to see that even the testers were wondering if it was real. But several developers have banded together to put together this amazing feature. + +
+ +The Nintendo 3DS heavily relies on wireless for its slew of multiplayer compatible titles. Considering that so many games feel empty without their multiplayer features, we're excited to announce that in select titles, you'll be able to play together with friends in the latest Canary builds of Citra! + +![](/content/images/2017/10/LetsBattle.png) + +#### Bringing Multiplayer to Citra + +Putting together this feature was a massive endeavor between subv, jroweboy and B3N30. It went through several stages of development, from actually reverse-engineering how wireless worked in games, to implementing those features in Citra, and then implementing an infrastructure so that even casual users can take advantage of multiplayer features. + +This emulates the 3DSes ability to do *local wireless* multiplayer. As such, it doesn't rely on Nintendo's server and does not require a Nintendo Network ID. Unlike real 3DSes, this feature can now be taken online thanks to a complex server infrastructure. + +Unlike single console netplay used in most emulators, users won't have to worry about desyncs, synchronizing saves, or any other issues typical of netplay. Each user is using their instance of Citra as a unique emulated 3DS that is communicating with everyone else through that particular server. + +![](/content/images/2017/10/GameBrowser.jpg) + +Currently, servers created in Citra can hold up to 16 players. Users are also provided with a dedicated server which allows for higher player counts. Extremely high player counts should be avoided for now due to bandwidth issues. In this initial release, each connected Citra instance sends raw packets to the host (or server) and the server then forwards those packets to every single client. As such, with each player added, the bandwidth requirements increase greatly. + +While hundreds of games support wireless connectivity, compatibility is limited in the initial release. Tons of titles were tested, but only a handful came up as working properly. Note games may handle latency differently and your experience may vary. + +### The Server Browser + +In order to get together with other players, you're going to have to join the same room with Citra's server browser. Creating and joining servers is extremely easy in Citra and can be done in just a few clicks. If you're a verified user, you can create a public game through the traversal server for people to join. These public games can be seen by **anyone** on the server browser. If you just want your friends to join without the hassle of port-forwarding and sending an IP, you can also put a password on publicly listed games. + +Unverified users aren't left without options, though - they still have the ability to create unlisted games directly connecting and can join any hosted server. + +Do note that verified users **will** have their privileges revoked for violating any site policies while on the server chatroom. Please respect the *recommended game* listed in publicly hosted games, as even unrelated games will add to the bandwidth load. + +### Wireless Compatibility +#### Works Like a Charm +##### Super Smash Bros. for 3DS + +_Super Smash Brother's_ local play works perfectly in Citra for up to four players. Because the game expects all players to be running in lockstep, users will need to maintain full speed for a stable connection. Some stages, such as the pictochat stage, can run full speed even on moderate computers. + +![](/content/images/2017/10/SmashLocal.png) + +##### Pokèmon X/Y, Pokèmon Omega Ruby/Alpha Sapphire, and Pokèmon Sun/Moon + +Almost everything works perfectly in the _Pokèmon_ games. The only thing that fails is adding friends - so try to stay away from that. Users can battle, trade, and watch passerbys as they show up or leave on the local wireless server. + +Because of compatibility issues in general with X and Y, using wireless support may be problematic for those two titles. + +![](/content/images/2017/10/ChallengePok.png) + +##### New Super Mario Bros. 2 + +_New Super Mario Bros. 2_ seems to be perfectly. Users on the same server can search for partners and join up just fine. + +![](/content/images/2017/10/NSMB2.jpg) + +#### Functional But Flawed + +##### Luigi's Mansion: Dark Moon + +This title has perfectly functional wireless support for trying to tackle the "Scarescraper"! Unfortunately, the game is so demanding that getting a fun experience out of it is near impossible. + +![](/content/images/2017/10/LuigisMansionLobby.png) + +##### Monster Hunter 3U and 4U + +The _Monster Hunter_ games are extremely demanding in Citra, but wireless support _does_ somewhat work. A second player can join a game, share quests and trade guild cards. But, the game supports up to four local players on console, and anything more than two causes disconnections in Citra. + +![](https://cdn.discordapp.com/attachments/334046137642254337/369924205975830528/image.png) + +#### Incompatible + +For various reasons, the following games were tested and do not work. Also note that Download Play and Spotpass titles do not work due to limitations in what Citra currently emulates. + + * Mario Party Island Tour + * Mario Party Star Rush + * The Legend of Zelda: TriForce Heroes + * Mario Kart 7 + * Tetris Ultimate + * Code of Princess + * Sonic Generations + * Asphalt Assault 3D + * Ridge Racer 3D + * Monster Hunter Generations + * Monster Hunter X + * Monster Hunter XX + * Street Fighter IV + * Kirby Triple Deluxe + * Dragon Quest Monsters: Terry + * Resident Evil Mercenaries 3D + * Dragon Quest Monsters: Joker 3 Pro + * Formula 1 2011 + * Kirby Fighters Deluxe + * Planet Crashers + +### Going Forward + +After the months of the work put into making _Wireless Support_ a reality, we're excited to see it finally brought into the public eye. While only a handful of games work in this initial release, we're hoping to bring support to more titles in the future, as well as optimizing the netcode for lower bandwidth usage and bringing even bigger servers to the table. + diff --git a/site/static/images/entry/announcing-networking-support/image.png b/site/static/images/entry/announcing-networking-support/image.png new file mode 100644 index 0000000..c0dcbd8 Binary files /dev/null and b/site/static/images/entry/announcing-networking-support/image.png differ