Merge pull request #20 from BitPatty/feat/multi-lang

Add multi-language support and merge codes into a single xml file, fixes #17
This commit is contained in:
Matteias Collet 2020-07-16 22:11:01 +02:00 committed by GitHub
commit 7ed289c7d9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
50 changed files with 4495 additions and 17419 deletions

View file

@ -1,4 +1,4 @@
name: Build
name: Pull Request
on:
- pull_request

View file

@ -3,5 +3,25 @@
"singleQuote": true,
"useTabs": false,
"tabWidth": 2,
"trailingComma": "all"
"trailingComma": "all",
"overrides": [
{
"files": "*.js",
"options": {
"parser": "babel"
}
},
{
"files": "*.md",
"options": {
"parser": "markdown"
}
},
{
"files": "*.json",
"options": {
"parser": "json"
}
}
]
}

7
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,7 @@
{
"search.exclude": {
"**/dist": true,
"**/node_modules": true,
"yarn.lock": true
}
}

2657
Codes.xml Normal file

File diff suppressed because it is too large Load diff

View file

@ -19,11 +19,7 @@ This repository contains the code behind the Super Mario Sunshine Cheatfile Gene
### Updating Practice Codes
The codes are stored as XML files (one for each game version) in the [/codes](https://github.com/BitPatty/gctGenerator/tree/master/codes) directory. If you want to add or change codes edit the corresponding XML file. Note that GMSJ0A refers to the NTSC-J 1.1 release of Super Mario Sunshine. (It's not actually called version A but that's what we've been calling it for years due to a misconception on what the A on the back of the box means).
#### Code Removal
Codes are generally not deleted. If you want to remove a code, please comment it out in the corresponding XML file.
The codes are stored in the `Codes.xml` file. If you want to add or change codes edit the XML file. Note that GMSJ0A refers to the NTSC-J 1.1 release of Super Mario Sunshine. (It's not actually called version A but that's what we've been calling it for years due to a misconception on what the A on the back of the box means).
### Updating Guides
@ -33,7 +29,7 @@ Note that in the code reference files everything following the `<!-- injectionpo
### Site Development
If you intend to change site code you need [NodeJS](https://nodejs.org/en/) version 12.18.1 or greater installed on your local.
If you intend to change site code you need [NodeJS](https://nodejs.org/en/) version 12.18.1 or any later 12.x LTS version installed on your local.
```sh
# Install yarn
@ -57,6 +53,8 @@ The XML codes will be written automatically to the json file and code reference
If you want to inject the codes at any given point you can use `yarn codes:inject`.
**!!! Note that if yarn was used, `yarn codes:clean` is ran automatically as a pre-commit hook, removing all injected codes and staging ALL changes.** If you want to commit changes without cleaning codes first you have to commit through `git commit --no-verify`.
### Build and preview the site (Docker)
The project root provides a [docker-compose](https://docs.docker.com/compose/) file, which creates a clean build (with the same configuration as the production build) and spins up a minimal Apache server on your local, serving the resulting build on port 8080.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,941 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<codes>
<code>
<title lang="en">DPad Functions</title>
<author>Psychonauter, Noki Doki, Dan Salvato, Link Master, James0x57</author>
<version>2.5</version>
<description><![CDATA[Allows various game modifications. Button combinations:<br/><table><tr><th>Combination</th><th>Result</th></tr><tr><td>D-Pad left</td><td>Save Mario's position</td></tr><tr><td>D-Pad right</td><td>Load Mario's position</td></tr><tr><td>D-Pad up</td><td>Replace all dialog with a single "!!!" line</td></tr><tr><td>D-Pad down</td><td>Restore dialog boxes</td></tr><tr><td>B+D-Pad left</td><td>Lock rocket nozzle</td></tr><tr><td>B+D-Pad right</td><td>Lock turbo nozzle</td></tr><tr><td>B+D-Pad up</td><td>Lock hover nozzle</td></tr><tr><td>B+D-Pad down</td><td>Release nozzle lock</td></tr><tr><td>X+D-Pad left</td><td>No FLUDD in secrets</td></tr><tr><td>X+D-Pad right</td><td>FLUDD in all secrets</td></tr><tr><td>X+D-Pad up</td><td>Regrab last held object</td></tr><tr><td>X+D-Pad down</td><td>FLUDD in completed secrets (default)</td></tr></table>]]></description>
<date>Apr 3, 2019</date>
<source>
243FEFAC 80000000
82200000 803FEFAC
80000001 817F0008
82200002 803FEFB4
82200003 803FFA38
86000003 000000A6
283F5429 00000001
8A000C01 00000000
8A000221 0000000C
8A000631 0000000E
283F5429 00000002
8A000C10 00000000
8C000212 0000000C
8C000613 0000000E
283F5429 00000004
041351C4 801C0004
04134524 A81C0340
04271090 88030214
283F5429 00000008
041351C4 38000000
04134524 38005000
04271090 88030214
283F5429 00000208
04249CA0 3BE00004
283F5429 00000204
04249CA0 8BFE1C85
283F5429 00000201
04249CA0 3BE00001
283F5429 00000202
04249CA0 3BE00005
283F5429 00000401
041A0698 60000000
04278830 60000000
283F5429 00000402
C61A0698 801A06B0
C6278830 80278844
283F5429 00000404
041A0698 40820018
04278830 40820014
283F5429 00000408
48000000 803FEFA8
1400007C 00000383
E0000000 00000000
028CD55E 00028149
048CD564 00000000
0421F71C 60000000
</source>
</code>
<code>
<title lang="en">Infinite Lives</title>
<author>Noki Doki</author>
<version>2.0</version>
<date>Feb 28, 2020</date>
<description>Prevents the life counter from decreasing.</description>
<source>
042784BC 60000000
</source>
</code>
<code>
<title lang="en">Disable Blue Coin Flag</title>
<author>Psychonauter, Noki Doki</author>
<version>1.1</version>
<date>Sep 05, 2018</date>
<description>Prevents the game from setting the blue coin flag, which makes them respawn after reentering the level.</description>
<source>
04274220 60000000
C2286584 00000003
7CA00039 80AD9E60
38800000 908500D4
60000000 00000000
</source>
</code>
<code>
<title lang="en">FMV Skips</title>
<author>Psychonauter, Noki Doki</author>
<version>1.0</version>
<date>Jan 17, 2018</date>
<description>Allows skipping FMVs without having to watch them once first.</description>
<source>
04295AB4 38600001
04295B18 38600001
</source>
</code>
<code>
<title lang="en">Mute Background Music</title>
<author>Psychonauter, Noki Doki</author>
<version>1.0</version>
<date>Jan 17, 2018</date>
<description>Mutes background music, but keeps SFX on.</description>
<source>
04016A90 FC210828
</source>
</code>
<code>
<title lang="en">Remove Save Boxes</title>
<author>Psychonauter, Noki Doki</author>
<version>1.0</version>
<date>Jan 18, 2018</date>
<description>Removes all saveboxes.</description>
<source>
0413934C 48000020
04143178 4E800020
</source>
</code>
<code>
<title lang="en">Unlock Yoshi</title>
<author>Noki Doki</author>
<version>1.0</version>
<date>Feb 10, 2018</date>
<description>Unlocks Yoshi everywhere.</description>
<source>
C619BCF8 8019BD2C
C619BD3C 8019BD58
</source>
</code>
<code>
<title lang="en">Unlock Nozzles</title>
<author>Noki Doki</author>
<version>1.0</version>
<date>Feb 12, 2018</date>
<description>Unlocks all nozzle boxes.</description>
<source>
042740F8 38600001
042740FC 4E800020
</source>
</code>
<code>
<title lang="en">Free Pause</title>
<author>Noki Doki</author>
<version>1.1</version>
<date>Jan 17, 2018</date>
<description>Allows you to pause mid-air and during cutscenes.</description>
<source>
C6277758 80277764
C227767C 00000007
887F007C 2803000F
41820028 807F0018
80630000 806300D4
546307FF 41820014
3C608027 60637724
7C6803A6 4E800020
881F0124 00000000
</source>
</code>
<code>
<title lang="en">Enable Exit Area Everywhere</title>
<author>Noki Doki</author>
<version>1.0</version>
<date>Jan 17, 2018</date>
<description>Enables 'Exit Area' on Plaza and Airstrip.</description>
<source>
C6137F98 80137FA4
</source>
</code>
<!--<code>
<title lang="en">Shine Touch Timer</title>
<author>Psychonauter, Noki Doki</author>
<version>3.0</version>
<date>Oct 11, 2019</date>
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame before you gain control of Mario and ending when you touch a Shine.<br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>]]></description>
<source>
C2278848 0000000F
3CC0817F 60C60100
88860000 2C040001
4182002C 88860001
2C040001 40A20050
3CA0803D 60A5A8F0
88850002 2C040007
4182003C 2C040009
41810034 3C608032
60638DD8 7C6803A6
4E800021 80AD9E78
38A500E8 90650028
90660004 9085002C
90860008 38600000
98660000 800100B4
60000000 00000000
C219D160 00000007
7DE802A6 3C608056
6063DD00 7FB0EB78
3FA08026 63BDE354
7FA803A6 4E800021
7DE803A6 7E1D8378
39E00000 3A000000
4E800020 00000000
C232792C 00000007
3DE0817F 61EF0100
8A0F0000 2C100001
4182000C 806F0004
808F0008 3A000000
9A0F0000 906F0004
908F0008 909F002C
39E00000 00000000
C212A528 00000013
7C6F1B78 7FB0EB78
3C60817F 60630100
88830001 2C040001
40A20064 38800000
98830001 3C60803D
6063A8F0 A0630002
2C030805 41820048
2C030605 41820040
2C031E00 41820038
3C608056 6063DD00
3FA08026 63BDE6E8
7FA803A6 4E800021
3C608056 6063DD00
3FA08026 63BDE57C
39800000 7FA803A6
4E800021 7DE37B78
7E1D8378 39E00000
3A000000 800100CC
60000000 00000000
C226E65C 00000003
558C0001 4082000C
38800000 38600000
909E00CC 00000000
C21528FC 00000003
3C60817F 60630100
38800101 B0830000
807F0268 00000000
04327948 4E800020
0412BD90 60000000
0412E6F8 60000000
0426E718 60000000
0426E5A4 60000000
0426E374 60000000
0456DD00 00000000
0456DD04 00000000
0456DD18 00000003
0456DD1C 00000002
0456DD20 8056DD24
0456DD24 00000000
0456DD28 00000001
0456DD2C 00000000
0456DD30 000000B4
0412C00C 4800006C
077F00C0 00000040
38000000 60000001
7D0D42E6 7D2C42E6
7C6D42E6 7C081800
4082FFF0 3D40817F
806A0108 7C634810
906A0108 806A0104
7C634110 906A0104
3860001C 4E800020
04276B24 495795A5
0427956C 49576B55
04295880 4955A845
04296B24 4955959D
</source>
</code>-->
<code>
<title lang="en">Shine Get Timer</title>
<author>Psychonauter, Noki Doki</author>
<version>2.0</version>
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (similar to the x-cam timer of SM64). The timer pauses during loading times.<br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>]]></description>
<date>Oct 11, 2019</date>
<source>
C2363E70 0000000F
3CC0817F 60C60100
88860000 2C040001
4182002C 88860001
2C040001 40A20050
3CA0803D 60A5A8F0
88850002 2C040007
4182003C 2C040009
41810034 3C608032
60638DD8 7C6803A6
4E800021 80AD9E78
38A500E8 90650028
90660004 9085002C
90860008 38600000
98660000 80010024
60000000 00000000
C219D160 00000003
3C60817F 60630100
38800001 9083000C
4E800020 00000000
C2277680 0000000C
2C000003 40A20050
3C60817F 60630100
8083000C 2C040000
41A2003C 38800000
9083000C 7DE802A6
3C608056 6063DD00
7FB0EB78 3FA08026
63BDE354 7FA803A6
4E800021 7DE803A6
7E1D8378 39E00000
3A000000 3C608039
60000000 00000000
C232792C 00000007
3DE0817F 61EF0100
8A0F0000 2C100001
4182000C 806F0004
808F0008 3A000000
9A0F0000 906F0004
908F0008 909F002C
39E00000 00000000
C212A528 00000013
7C6F1B78 7FB0EB78
3C60817F 60630100
88830001 2C040001
40A20064 38800000
98830001 3C60803D
6063A8F0 A0630002
2C030805 41820048
2C030605 41820040
2C031E00 41820038
3C608056 6063DD00
3FA08026 63BDE6E8
7FA803A6 4E800021
3C608056 6063DD00
3FA08026 63BDE57C
39800000 7FA803A6
4E800021 7DE37B78
7E1D8378 39E00000
3A000000 800100CC
60000000 00000000
C226E65C 00000003
558C0001 4082000C
38800000 38600000
909E00CC 00000000
C21528FC 00000003
3C60817F 60630100
38800101 B0830000
807F0268 00000000
C2363E74 0000000A
3C60803D 6063A8F0
A083FFFE 2C043C00
40A20038 A0830002
2C040FFF 40A2002C
7C1E0378 7FE802A6
3C608056 6063DD00
3C808026 6084E354
7C8803A6 4E800021
7FE803A6 7FC0F378
83E1001C 00000000
04327948 4E800020
0412BD90 60000000
0412E6F8 60000000
0426E718 60000000
0426E5A4 60000000
0426E374 60000000
0456DD00 00000000
0456DD04 00000000
0456DD18 00000003
0456DD1C 00000002
0456DD20 8056DD24
0456DD24 00000000
0456DD28 00000001
0456DD2C 00000000
0456DD30 000000B4
0412C00C 4800006C
077F00C0 00000040
38000000 60000001
7D0D42E6 7D2C42E6
7C6D42E6 7C081800
4082FFF0 3D40817F
806A0108 7C634810
906A0108 806A0104
7C634110 906A0104
3860001C 4E800020
04276B24 495795A5
0427956C 49576B55
04295880 4955A845
04296B24 4955959D
</source>
</code>
<code>
<title lang="en">Level Select</title>
<author>Psychonauter, Dan Salvato, ParadoxKarl, Noki Doki</author>
<version>1.14</version>
<date>May 8, 2020</date>
<description><![CDATA[Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. This code is not compatible with the Fast Any% or Stage Loader code. Codes:<br /><br /><div><img src="/img/levelselect.png" width="500px"></div>]]></description>
<source>
C228656C 00000073
3C60817F 3CA0803F
60A55458 38E00000
90E3010C 38E00001
98E30101 A09F0012
2C040D05 41810318
2C040109 41810308
2C040001 41820308
38E00001 98E30100
A0E50002 54E6C6F6
7CC73B78 70E70C70
88C50001 2C860000
40860024 418202E0
2C070800 A1030000
418202BC 2C070010
408201D4 A1030002
480002B8 2C060009
418201C4 2C060008
4082000C 39000200
48000060 2C06000A
4082000C 39000300
48000050 2C060002
4082000C 39000400
48000040 2C060006
4082000C 39000500
48000030 2C060004
4082000C 39000600
48000020 2C060005
4082000C 39000800
48000010 2C060001
40820254 39000900
2C070000 41820230
2C070040 4082000C
39080001 48000220
2C070020 4082000C
39080002 48000210
2C070060 4082000C
39080003 48000200
2C070010 4082000C
39080004 480001F0
2C070050 4082000C
39080005 480001E0
2C070030 4082000C
39080006 480001D0
2C070070 4082000C
39080007 480001C0
2C070400 40820068
2C060004 4082000C
39000E01 480001B0
2C06000A 4082000C
39001E00 480001A0
2C060002 4082000C
39002100 48000190
2C060001 4082000C
39003900 48000180
2C060008 4082000C
39003700 48000170
2C060005 39003A00
40820164 39002C00
4800015C 2C070800
40820164 2C060008
4082000C 39000100
48000144 2C06000A
4082000C 39000101
48000134 2C060002
4082000C 39000105
48000124 2C060006
4082000C 39000107
48000114 2C060004
4082000C 39000108
48000104 2C060005
4082000C 39000109
480000F4 39000102
480000EC 2C070040
40820010 39001400
39202E00 480000C4
2C070020 40820010
39001500 39203000
480000B0 2C070060
40820010 39001600
39202000 4800009C
2C070050 40820010
39001700 39202900
48000088 2C070030
40820010 39001800
39203300 48000074
2C070070 40820010
39001D00 39202800
48000060 2C070400
40820010 39003400
39202A00 4800004C
2C070440 40820010
39000000 39201F00
48000038 2C070800
4082000C 39203A01
48000028 2C070840
40820010 39001000
39203C00 48000014
2C070010 39203200
41820008 39202F00
2C060009 40A20010
7D284B78 80AD9E60
990500DF B1030000
B11F0012 A09F0012
B0830002 2C041E00
4182002C 2C040404
41820024 2C040801
4182001C 2C040904
41820014 2C040605
4182000C 2C040805
40A2000C 38800000
B0830100 807F0020
889F0012 2C040007
4182000C 2C04000E
40A2000C 3880003B
B08300E4 00000000
0627735C 00000008
3C600003 38830005
C22990F0 00000003
5460063F 41820010
881D000F 2C000007
60000000 00000000
C2299244 00000003
806D9E60 880300CC
54000734 980300CC
4E800020 00000000
</source>
</code>
<code>
<title lang="en">Fast Any%</title>
<author>Psychonauter, Noki Doki</author>
<version>1.4</version>
<date>Feb 16, 2018</date>
<description>Loads stages in any% order, skips all save boxes, replaces all dialog with "!!!" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select or Stage Loader code.</description>
<source>
C22865F4 00000064
3C60817F 60630100
38000000 9003000C
38000001 98030001
80AD9E60 889F0012
2C040001 418102F4
98030000 88850007
70800001 41A2000C
38803400 480002D4
88850006 70800080
41A2000C 38800906
480002C0 70800040
41A2000C 38800905
480002B0 70800020
41A2000C 38800904
480002A0 70800010
41A2000C 38800903
48000290 70800008
41A2000C 38800902
48000280 70800004
41A2000C 38800901
48000270 88850005
70800040 41A2000C
38800900 4800025C
70800020 41A2000C
38800606 4800024C
70800010 41A2000C
38800605 4800023C
70800008 41A2000C
38800604 4800022C
70800004 41A2000C
38800603 4800021C
70800002 41A2000C
38800602 4800020C
70800001 41A2000C
38800601 480001FC
88850000 70800040
41A2000C 38800600
480001E8 70800020
41A2000C 38800206
480001D8 88850002
70800001 41A2000C
38800205 480001C4
88850001 70800080
41A2000C 38800306
480001B0 70800040
41A2000C 38800305
480001A0 70800020
41A2000C 38800304
48000190 70800010
41A2000C 38800303
48000180 70800008
41A2000C 38800302
48000170 70800004
41A2000C 38800301
48000160 88850004
70800010 41A2000C
38800300 4800014C
70800008 41A2000C
38800506 4800013C
70800002 41A2000C
38800502 4800012C
70800001 41A2000C
38800503 4800011C
88850003 70800080
41A2000C 38800502
48000108 70800040
41A2000C 38800501
480000F8 88850008
70800004 41A2000C
38800500 480000E4
88850007 70800080
41A2000C 38800806
480000D0 88850008
70800001 41A2000C
38800805 480000BC
88850007 70800020
41A2000C 38800804
480000A8 70800040
41A2000C 38800803
48000098 88850008
70800002 41A2000C
38800802 48000084
88850007 70800010
41A2000C 38800801
48000070 88850003
70800004 41A2000C
38800800 4800005C
70800008 41A2000C
38800406 4800004C
88850000 70800010
41A2000C 38800400
48000038 70800008
41A2000C 38800204
48000028 70800004
41A2000C 38800203
48000018 70800002
41A2000C 38800202
48000008 38800200
B09F0012 988500DF
807F0020 00000000
0413934C 48000020
04143178 4E800020
048CD55C D6008149
048CD560 81498149
048CD564 00000000
283DA8F2 00002A00
041351C4 801C0004
04134524 A81C0340
E2000001 00000000
2A3DA8F2 00002A00
041351C4 38000000
04134524 38005000
E2000001 00000000
C2295AB0 00000004
38840391 5480043C
2C000398 4182000C
3C800001 6084039A
60000000 00000000
C2295B14 00000004
38840391 5480043C
2C000398 4182000C
3C800001 6084039A
60000000 00000000
</source>
</code>
<code>
<title lang="en">Replace Episode names with their ID</title>
<author>Psychonauter, Noki Doki</author>
<version>1.1</version>
<description>Replaces the Episode names with the episode number in the demo screen. (Useful for the stage loader.)</description>
<date>Feb 13, 2018</date>
<source>
C2153548 00000004
80AD9E60 88A500DF
38A50031 54A5403E
B0A60000 38800080
60000000 00000000
</source>
</code>
<code>
<title lang="en">Shine Outfit</title>
<author>Ralf, Noki Doki</author>
<version>1.0</version>
<date>Jan 17, 2018</date>
<description>Always wear shine outfit and sunglasses.</description>
<source>
04221924 60000004
04221928 B01D0004
0422D22C 60000000
</source>
</code>
<!--<code>
<title lang="en">Persistent FMV Skips</title>
<author>Noki Doki</author>
<version>1.0</version>
<date>Jul 26, 2018</date>
<description>Allows skipping FMVs without having to watch them once first, except Shadow Mario taking Peach to Pinna Island and the Mecha-Bowser cutscenes. This code activates when starting an empty file and its effects persist on that save file until it is deleted.</description>
<source>
C2273A90 00000004
7FE3FB78 A0830072
6084FC58 B0830072
88830074 60840018
98830074 00000000
</source>
</code>-->
<code>
<title lang="en">Any Fruit Opens Yoshi Eggs</title>
<author>Unknown, Noki Doki</author>
<version>1.0</version>
<date>Aug 19, 2018</date>
<description>Allows opening Yoshi eggs with a different fruit than the one depicted.</description>
<source>
0419C688 60000000
</source>
</code>
<code>
<title lang="en">Infinite Juice</title>
<author>Noki Doki</author>
<version>1.0</version>
<date>Apr 5, 2019</date>
<description>Prevents Yoshi from despawning by running out of juice.</description>
<source>
0424E560 60000000
</source>
</code>
<code>
<title lang="en">Position/angle/speed display</title>
<author>Noki Doki</author>
<version>1.3</version>
<date>Oct 28, 2019</date>
<description>Shows Mario's position, angle and speed at any given time.</description>
<source>
06285FBC 00000010
495740BD 60000000
60000000 60000000
04279568 49580A99
041252A0 496D4E7D
077FA000 000001E8
9421FFE0 7C0802A6
90010024 93E1001C
4AA9CEF5 38E00200
38C00320 38A0FFD8
3880000A 38610008
4AAAF9C9 814D9E88
3FE08180 3BFFA1EC
39200000 39000002
3CE08180 38E7A164
80CA0048 38A10008
38800000 7FE3FB78
4AAB6001 39200001
913F01B0 80010024
7C0803A6 83E1001C
38210020 4E800020
9421FFE8 7C0802A6
9001001C 93A1000C
93C10010 93E10014
7C7F1B78 81230000
83A90064 3D208180
8129A39C 2F890000
409E002C 7FE3FB78
7FA903A6 4E800421
8001001C 7C0803A6
83A1000C 83C10010
83E10014 38210018
4E800020 3D20803F
6129EF88 83C90000
3C608180 3863A1EC
4AAB6389 C0BE00A8
C09E00B0 A0DE0096
C07E0018 C05E0014
C03E0010 3CA08180
38A5A164 38800080
4CC63242 4AB1EF91
4BFFFF94 9421FFF0
7C0802A6 90010014
93E1000C 7C7F1B78
4AAD0D9D 38E00081
7FE6FB78 38A00000
38800000 3C608180
3863A1EC 4AAB546D
80010014 7C0803A6
83E1000C 38210010
4E800020 5820506F
7320252E 30660A59
20506F73 20252E30
660A5A20 506F7320
252E3066 0A416E67
6C652025 68750A48
20537064 20252E32
660A5620 53706420
252E3266 20202020
20202020 20202020
20202020 20202020
20202020 20202020
20202020 20202020
20202020 20202020
20202020 20202020
20202020 20202020
20202000 00000000
C2286550 00000003
38600000 3D808180
906CA39C 807F0040
60000000 00000000
</source>
</code>
<code>
<title lang="en">Intro skip</title>
<author>Noki Doki</author>
<version>1.0</version>
<date>Jun 19, 2019</date>
<description>Removes the logos and cutscene that normally play before the title screen when loading or resetting the game.</description>
<source>
04275374 4800027C
042757C8 48000014
0628643C 00000014
38600F00 38000000
B07F000E B01F0010
4BFFFEB0 00000000
</source>
</code>
<code>
<title lang="en">Respawn One-Time Shines</title>
<author>Noki Doki</author>
<version>1.0</version>
<date>Aug 19, 2019</date>
<description>Allows Shines obtained by cleaning graffiti, the Shine Gate or the bells to respawn.</description>
<source>
041C76A4 48000050
021C7D74 00004800
021DF600 00004800
</source>
</code>
<code>
<title lang="en">Force Plaza Events</title>
<author>Noki Doki</author>
<version>1.0</version>
<date>Mar 8, 2020</date>
<description>Forces the unlock events for Ricco, Gelato and Yoshi to happen any time the correct version of the plaza is loaded. Nozzle unlock events take precedence over Yoshi's if their conditions are met.</description>
<source>
04297020 48000018
0429706C 48000018
042970D4 48000018
04297100 60000000
04297150 60000000
</source>
</code>
<code>
<title lang="en">Fix Memory Card Encoding</title>
<author>Noki Doki</author>
<version>2.0</version>
<date>Jun 25, 2020</date>
<description>Enable this if your Nintendont saves do not work on your other loader (e.g. Gecko OS on a non-Japanese console).</description>
<source>
023FDDB0 00000000
</source>
</code>
<!--
<code>
<title lang="en">Fade-in Timer</title>
<author>Psychonauter, Noki Doki</author>
<version>1.0</version>
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame before taking control of Mario and ending as soon as the 'Shine Get' animation starts (Similiar to the x-cam timer of SM64).<br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>]]></description>
<date>Nov 3, 2018</date>
<source>
C2278848 0000000F
3CC0817F 60C60100
88860000 2C040001
4182002C 88860001
2C040001 40A20050
3CA0803D 60A5A8F0
88850002 2C040007
4182003C 2C040009
41810034 3C608032
60638DD8 7C6803A6
4E800021 3CA0808F
60A5C788 90650028
90660004 9085002C
90860008 38600000
98660000 800100B4
60000000 00000000
C219D160 00000003
3C60817F 60630100
38800001 9083000C
4E800020 00000000
C2277680 0000000C
2C000003 40A20050
3C60817F 60630100
8083000C 2C040000
41A2003C 38800000
9083000C 7DE802A6
3C608056 6063DD00
7FB0EB78 3FA08026
63BDE354 7FA803A6
4E800021 7DE803A6
7E1D8378 39E00000
3A000000 3C608039
60000000 00000000
C232792C 00000007
3DE0817F 61EF0100
8A0F0000 2C100001
4182000C 806F0004
808F0008 3A000000
9A0F0000 906F0004
908F0008 909F002C
39E00000 00000000
C212A528 00000012
7C6F1B78 7FB0EB78
3C60817F 60630100
88830001 2C040001
40A20060 38800000
98830001 3C60803D
6063A8F0 A0630002
2C030805 41820044
2C030605 4182003C
2C031E00 41820034
3C608056 6063DD00
3FA08026 63BDE6E8
7FA803A6 4E800021
3C608056 6063DD00
3FA08026 63BDE57C
7FA803A6 4E800021
7DE37B78 7E1D8378
39E00000 3A000000
800100CC 00000000
C226E65C 0000000A
3CA0803D 60A5A8F0
A0A50002 2C051E00
41820034 2C050404
4182002C 2C050801
41820024 2C050904
4182001C 2C050605
41820014 2C050805
4182000C 38800000
38600000 909E00CC
60000000 00000000
C21528FC 00000003
3C60817F 60630100
38800101 B0830000
807F0268 00000000
04327948 4E800020
0412BD90 60000000
0412E6F8 60000000
0426E718 60000000
0426E5A4 60000000
0426E374 60000000
0456DD00 00000000
0456DD04 00000000
0456DD18 00000003
0456DD1C 00000002
0456DD20 8056DD24
0456DD24 00000000
0456DD28 00000001
0456DD2C 00000000
0456DD30 000000B4
0412C00C 4800006C
</source>
</code>
-->
</codes>

File diff suppressed because it is too large Load diff

10583
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -9,16 +9,20 @@
},
"repository": "https://github.com/BitPatty/gctGenerator/gctGenerator",
"scripts": {
"dev": "yarn codes:inject && vuepress dev site",
"build": "yarn codes:inject && vuepress build site",
"dev": "yarn codes:inject && yarn translations:compare && vuepress dev site",
"build": "yarn codes:inject && yarn translations:compare && vuepress build site",
"format": "prettier --write ./site/**/*{.md,.js,.json,.vue}",
"codes:inject": "node ./scripts/inject_codes.js && yarn format"
"translations:compare": "node ./scripts/compare_translations.js",
"codes:inject": "node ./scripts/inject_codes.js && yarn format",
"codes:clean": "node ./scripts/clean_codes.js && yarn format",
"precommit": "yarn codes:clean && git add ."
},
"license": "Apache-2.0",
"devDependencies": {
"@vuepress/plugin-back-to-top": "^1.3.1",
"@vuepress/plugin-medium-zoom": "^1.3.1",
"jsdom": "^16.2.2",
"markdown-it-attrs": "^3.0.3",
"pre-commit": "^1.2.2",
"prettier": "^2.0.5",
"vuepress": "^1.3.1"
@ -26,7 +30,5 @@
"dependencies": {
"vuedraggable": "^2.23.2"
},
"pre-commit": [
"codes:inject"
]
"pre-commit": ["precommit"]
}

View file

@ -4,12 +4,16 @@ $ErrorActionPreference = "Stop";
# Hide progress bars
$global:ProgressPreference = 'SilentlyContinue'
# Move to script directory
$rootDirectory = (Get-Item $PSScriptRoot).Parent.FullName
Set-Location $rootDirectory;
# Start build
Write-Host "Packing archives...";
# Setup workspace
New-Item -ItemType directory -Path "./tmp" > $null;
Copy-Item "./codes/*.xml" "./tmp/";
Copy-Item "Codes.xml" "./tmp/";
Set-Location "./tmp";
# Helper function to convert the XML files to the GCM txt format
@ -20,10 +24,21 @@ function XmlToGcm($source, $destination, $versionname) {
Add-Content $destination "Super Mario Sunshine" -NoNewline;
foreach ($code in $xml.codes.code) {
$codeTitle = ($code.title | Where-Object { $_.lang -eq 'en-US' }).'#text';
$codeSource = ($code.source | Where-Object { $_.version -eq $versionname }).'#text';
Write-Host "$versionname`: $codeTitle";
Write-Host $codeSource;
if (!$codeSource || [string]::IsNullOrWhiteSpace($codeSource.'#text')) {
Write-Host "No source found, skipping";
continue;
}
Add-Content $destination "";
Add-Content $destination "";
Add-Content $destination "$($code.title."#text") ($($code.date)) [$($code.author)]";
$codeSource = $code.source -replace " +$", "" -replace "^? [^a-zA-Z0-9]", "";
Add-Content $destination "$codeTitle ($($code.date)) [$($code.author)]";
$codeSource = $codeSource -replace " +$", "" -replace "^? [^a-zA-Z0-9]", "";
Add-Content $destination $codeSource.Trim() -NoNewline;
};
};
@ -36,19 +51,30 @@ function XmlToIni($source, $destination, $versionname) {
Add-Content $destination "[Gecko]" -NoNewline
foreach ($code in $xml.codes.code) {
$codeTitle = ($code.title | Where-Object { $_.lang -eq 'en-US' }).'#text';
$codeSource = ($code.source | Where-Object { $_.version -eq $versionname }).'#text';
Write-Host "$versionname`: $codeTitle";
Write-Host $codeSource;
if (!$codeSource || [string]::IsNullOrWhiteSpace($codeSource.'#text')) {
Write-Host "No source found, skipping";
continue;
}
Add-Content $destination "";
Add-Content $destination "`$$($code.title."#text") ($($code.date)) [$($code.author)]";
$codeSource = $code.source -replace " +$", "" -replace "^? [^a-zA-Z0-9]", "";
Add-Content $destination "`$$codeTitle ($($code.date)) [$($code.author)]";
$codeSource = $codeSource -replace " +$", "" -replace "^? [^a-zA-Z0-9]", "";
Add-Content $destination $codeSource.Trim() -NoNewline;
};
}
# Convert files to GCM format
Write-Host "Converting XML files to GCM format..";
XmlToGcm "GMSE01.xml" "GMSE01.txt" "GMSE01";
XmlToGcm "GMSP01.xml" "GMSP01.txt" "GMSP01";
XmlToGcm "GMSJ01.xml" "GMSJ01.txt" "GMSJ01";
XmlToGcm "GMSJ0A.xml" "GMSJ01 (A).txt" "GMSJ01";
XmlToGcm "Codes.xml" "GMSE01.txt" "GMSE01";
XmlToGcm "Codes.xml" "GMSP01.txt" "GMSP01";
XmlToGcm "Codes.xml" "GMSJ01.txt" "GMSJ01";
XmlToGcm "Codes.xml" "GMSJ01 (A).txt" "GMSJ01";
# Replace zip file
Write-Host "Compressing GCM archive..";
@ -59,10 +85,10 @@ Write-Host "GCM Archive built";
Remove-Item *.txt;
Write-Host "Converting XML files to Dolphin INI format..";
XmlToIni "GMSE01.xml" "GMSE01.txt" "GMSE01";
XmlToIni "GMSP01.xml" "GMSP01.txt" "GMSP01";
XmlToIni "GMSJ01.xml" "GMSJ01.txt" "GMSJ01";
XmlToIni "GMSJ0A.xml" "GMSJ01 (A).txt" "GMSJ01";
XmlToIni "Codes.xml" "GMSE01.txt" "GMSE01";
XmlToIni "Codes.xml" "GMSP01.txt" "GMSP01";
XmlToIni "Codes.xml" "GMSJ01.txt" "GMSJ01";
XmlToIni "Codes.xml" "GMSJ01 (A).txt" "GMSJ01";
Write-Host "Compressing Dolphin archive..";
Compress-Archive "./*.txt" "../site/.vuepress/public/files/DolphinCodes.zip";

41
scripts/clean_codes.js Normal file
View file

@ -0,0 +1,41 @@
const fs = require('fs');
const path = require('path');
const JSON_FILE_PATH = path.join(__dirname, '../site/.vuepress/data/gameVersions.json');
const CODE_VERSIONS = ['GMSE01', 'GMSJ01', 'GMSP01', 'GMSJ0A'];
const INJECTION_TAG = '<!-- injectionpoint -->';
const locales = require(path.join(__dirname, '../site/.vuepress/i18n/locales.json'));
// Load the current json configuration
const codeJson = JSON.parse(fs.readFileSync(JSON_FILE_PATH));
codeJson.forEach((gameVersion) => {
gameVersion.codes = [];
});
// Save the codeJSON with the cleared codes
fs.writeFileSync(JSON_FILE_PATH, JSON.stringify(codeJson));
Object.keys(locales).forEach((locale) => {
// Clear the code reference
for (let i = 0; i < CODE_VERSIONS.length; i++) {
const filePath = path.join(
__dirname,
`../site/${locale.trim()}/code-reference/${CODE_VERSIONS[i].toLowerCase()}.md`,
);
// Get the current reference
const reference = fs.readFileSync(filePath).toString();
if (!reference.includes(INJECTION_TAG)) {
throw new Error(`No injection tag found in ${CODE_VERSIONS[i].toLowerCase()}.md`);
}
// Clear everything after the injection tag
let fileContent = reference.split(INJECTION_TAG)[0] + INJECTION_TAG;
// Save the reference file
fs.writeFileSync(filePath, fileContent);
}
});

View file

@ -0,0 +1,56 @@
const path = require('path');
const locales = require(path.join(__dirname, '../site/.vuepress/i18n/locales.json'));
/**
* Gets all leaf nodes from the specified object
* @param {*} node The root node
* @param {*} path The already visited path
*/
const getLeaves = (node, path = null) => {
if (typeof node === 'string') return leavePaths.push(path);
if (typeof node != 'object') throw new Error(typeof node);
const currentPath = path ? `${path}.` : '';
Object.keys(node).forEach((key) => getLeaves(node[key], `${currentPath}${key}`));
};
/**
* Gets a nested property of the specified node
* @param {*} node The root node
* @param {*} path The property path
*/
const getNestedProperty = (node, path) => {
const props = path.split('.');
let currentValue = node;
while (currentValue && props.length > 0) {
currentValue = currentValue[props.shift()];
}
return currentValue;
};
// Load the translation files
const translations = Object.keys(locales).map((locale) => ({
lang: locales[locale].lang,
values: require(path.join(__dirname, `../site/.vuepress/i18n/${locales[locale].lang}.json`)),
}));
// Set the default translation
const defaultTranslation = translations.find((t) => t.lang === locales['/'].lang);
console.log(`Default translation set to ${defaultTranslation.lang}`);
// Holds the paths to all leaf nodes of the default translation
const leavePaths = [];
getLeaves(defaultTranslation.values);
console.log('Detected translations: ', leavePaths);
// Compare all translations to the default translation
translations.forEach((t) => {
console.log(`Comparing ${t.lang} to ${defaultTranslation.lang}`);
leavePaths.forEach((p) => {
const value = getNestedProperty(t.values, p);
if (value == null || typeof value !== 'string')
console.warn(`${t.lang} is missing a translation at '${p}'`);
});
});

View file

@ -1,73 +1,307 @@
const fs = require('fs');
const path = require('path');
const { JSDOM } = require('jsdom');
const vuepressContainerPlugin = require('vuepress-plugin-container');
const { title } = require('process');
const jsonFilePath = path.join(__dirname, '../site/.vuepress/data/gameVersions.json');
const codeVersions = ['GMSE01', 'GMSJ01', 'GMSP01', 'GMSJ0A'];
const injectionTag = '<!-- injectionpoint -->';
// These plugins have to match the ones used as extensions in .vuepress/config.js
const md = require('@vuepress/markdown')({
plugins: ['attrs'],
});
const themePlugins = require(path.join(__dirname, '../site/.vuepress/data/themePlugins.json'));
const locales = require(path.join(__dirname, '../site/.vuepress/i18n/locales.json'));
const xml = fs.readFileSync(path.join(__dirname, `../Codes.xml`));
// Constants
const JSON_FILE_PATH = path.join(__dirname, '../site/.vuepress/data/gameVersions.json');
const CODE_VERSIONS = ['GMSE01', 'GMSJ01', 'GMSP01', 'GMSJ0A'];
const INJECTION_TAG = '<!-- injectionpoint -->';
/**
* Validates the xml contains usable data
* @param {*} xmlString The xml string
*/
const validateXML = (xmlString) => {
console.log('Validating XML file');
// Converts the XML source to a JSON object
const parseXml = (xmlString) => {
const codeCollection = new JSDOM(xmlString, {
contentType: 'text/xml',
}).window.document.getElementsByTagName('code');
const parseTextNode = (node, identifier) => node.getElementsByTagName(identifier)[0].textContent;
const codes = [...codeCollection];
const localeIdentifiers = Object.keys(locales).map((l) => locales[l].lang);
return codes.map((code) => ({
author: parseTextNode(code, 'author'),
title: parseTextNode(code, 'title'),
description: parseTextNode(code, 'description'),
version: parseTextNode(code, 'version'),
date: parseTextNode(code, 'date'),
source: parseTextNode(code, 'source').replace(/[\s\n\r\t]+/gm, ''),
for (let i = 0; i < codes.length; i++) {
// Fallback title exists
const codeTitle = codes[i].querySelector("title[lang='en-US']");
if (!codeTitle || !codeTitle.textContent)
throw new Error(`Missing Fallback Title (en-US) in code nr ${i}`);
// All lang attributes on all titles are valid
const codeTitles = codes[i].querySelectorAll('title');
for (let j = 0; j < codeTitles.length; j++) {
if (
!codeTitles[j].getAttribute('lang') ||
!localeIdentifiers.includes(codeTitles[j].getAttribute('lang'))
)
throw new Error(`Invalid lang attribute on title ${codeTitles[j].textContent}`);
}
// Fallback description exists
const codeDescription = codes[i].querySelector("description[lang='en-US']");
if (!codeDescription || !codeDescription.textContent)
throw new Error(`Missing Fallback Description (en-US) in code nr ${i}`);
// All lang attributes on all descriptions are valid
const codeDescriptions = codes[i].querySelectorAll('title');
for (let j = 0; j < codeDescriptions.length; j++) {
if (
!codeDescriptions[j].getAttribute('lang') ||
!localeIdentifiers.includes(codeDescriptions[j].getAttribute('lang'))
)
throw new Error(`Invalid lang attribute on description ${codeDescriptions[j].textContent}`);
}
// Version tag exists
if (codes[i].querySelectorAll('version').length !== 1)
throw new Error(`Missing or duplicate version in code '${codeTitle.textContent}'`);
// Author tag exists
if (codes[i].querySelectorAll('author').length !== 1)
throw new Error(`Missing author in code '${codeTitle.textContent}'`);
// At least one source exists
const codeSources = codes[i].querySelectorAll('source');
if (codeSources.length === 0) throw new Error(`No codes for ${codeTitle.textContent}`);
// All sources have a valid version attribute
for (let j = 0; j < codeSources.length; j++) {
if (
!codeSources[j].getAttribute('version') ||
!CODE_VERSIONS.includes(codeSources[j].getAttribute('version'))
)
throw new Error(`Invalid source version for code '${codeTitle.textContent}' at index ${j}`);
}
// Each source has a valid length
for (let j = 0; j < codeSources.length; j++) {
if (
codeSources[j].textContent.replace(/[\s\n\r\t]+/gm, '').length % 16 != 0 ||
codeSources[j].textContent.replace(/[\s\n\r\t]+/gm, '').length < 16
)
throw new Error(
`Invalid source length for code '${codeTitle.textContent}' and version ${
codeSources[j].getAttribute('version').textContent
}`,
);
}
// All titles and descriptions a unique valid lang attribute
for (let j = 0; j < localeIdentifiers.length; j++) {
if (codes[i].querySelectorAll(`title[lang='${localeIdentifiers[j]}']`).length === 0) {
console.warn(
`Missing title translation for code '${codeTitle.textContent}' and locale ${localeIdentifiers[j]}`,
);
}
if (codes[i].querySelectorAll(`title[lang='${localeIdentifiers[j]}']`).length > 1) {
throw new Error(
`Duplicate title translation for code '${codeTitle.textContent}' and locale ${localeIdentifiers[j]}`,
);
}
if (codes[i].querySelectorAll(`description[lang='${localeIdentifiers[j]}']`).length === 0) {
console.warn(
`Missing description translation for code '${codeTitle.textContent}' and locale ${localeIdentifiers[j]}`,
);
}
if (codes[i].querySelectorAll(`description[lang='${localeIdentifiers[j]}']`).length > 1) {
throw new Error(
`Duplicate description translation for code '${codeTitle.textContent}' and locale ${localeIdentifiers[j]}`,
);
}
}
// All sources have a unique valid version attribute
for (let j = 0; j < CODE_VERSIONS.length; j++) {
if (codes[i].querySelectorAll(`source[version='${CODE_VERSIONS[j]}']`).length === 0)
console.warn(
`Missing source on code '${codeTitle.textContent}' for version ${CODE_VERSIONS[j]}`,
);
if (codes[i].querySelectorAll(`source[version='${CODE_VERSIONS[j]}']`).length > 1)
throw new Error(
`Duplicate source on code '${codeTitle.textContent}' for version ${CODE_VERSIONS[j]}`,
);
}
}
};
/**
* Reads the (localized) child node
* @param {*} node The parent node
* @param {*} identifier The childs tag name
* @param {*} lang The target language
* @param {*} fallbackLang The fallback language
*/
const readTextNode = (node, identifier, lang = null, fallbackLang = null) => {
if (!lang) {
const element = node.querySelector(identifier);
if (!element) throw new Error(`${identifier} not found on ${node.textContent}`);
return element.textContent;
}
const localizedElement = node.querySelector(`${identifier}[lang='${lang}']`);
if (localizedElement) return localizedElement.textContent;
const codeTitle = node.querySelector(`title[lang='en-US']`);
console.warn(`No translation found for code '${codeTitle.textContent}' for locale ${lang}`);
if (!fallbackLang) throw new Error(`No localized ${identifier} found on ${node.textContent}`);
const fallbackElement = node.querySelector(`${identifier}[lang='${fallbackLang}']`);
if (fallbackElement) return fallbackElement.textContent;
throw new Error(`No fallback ${identifier} found on ${node.textContent}`);
};
/**
* Creates an object of localized child nodes
* @param {*} node The parent node
* @param {*} identifier The childs tag name
*/
const localizeNode = (node, identifier) =>
Object.keys(locales).map((locale) => ({
lang: locales[locale].lang,
content: readTextNode(node, identifier, locales[locale].lang, 'en-US'),
}));
/**
* Trims all lines in a multi-line string
* @param {*} str The multiline string
*/
const trimLines = (str) => str.replace(/^ +/gm, '').replace(/ +$/gm, '');
/**
* Localize a markdown text
* @param {*} node The parent node
* @param {*} identifier The childs tag name
*/
const localizeMarkdown = (node, identifier) => {
const markdowns = localizeNode(node, identifier).map((markdown) => ({
...markdown,
content: trimLines(markdown.content),
}));
return markdowns.map((markdown) => ({
...markdown,
html: md.render(markdown.content).html,
}));
};
/**
* Find a code by its version attribute (if specified)
* @param {*} node The parent node
* @param {*} identifier The childs tag name
* @param {*} gameVersion The game version
*/
const readCode = (node, identifier, gameVersion = null) => {
if (!gameVersion) {
const codeNode = node.querySelector(identifier);
return codeNode ? codeNode.textContent.replace(/[\s\n\r\t]+/gm, '') : null;
}
const codeNode = node.querySelector(`${identifier}[version='${gameVersion}']`);
return codeNode ? codeNode.textContent.replace(/[\s\n\r\t]+/gm, '') : null;
};
/**
* Converts the XML source files to a JSON object
* @param {*} xmlString The xml string
* @param {*} gameVersion The game version to filter the code on
*/
const parseXml = (xmlString, gameVersion = null) => {
const codeCollection = new JSDOM(xmlString, {
contentType: 'text/xml',
}).window.document.getElementsByTagName('code');
const codes = [...codeCollection];
return codes
.map((code) => ({
author: readTextNode(code, 'author'),
title: localizeNode(code, 'title'),
description: localizeMarkdown(code, 'description'),
version: readTextNode(code, 'version'),
date: readTextNode(code, 'date'),
source: readCode(code, 'source', gameVersion),
}))
.filter((code) => code.source != null);
};
// Run validation
validateXML(xml);
// Register themes containers such as tip/warning/danger
themePlugins.forEach((p) => {
const container = Array.isArray(p) && p.length === 2 ? p[1] : null;
if (!container) throw new Error();
vuepressContainerPlugin(container).extendMarkdown(md);
});
// Read the current code list
const codeJson = JSON.parse(fs.readFileSync(jsonFilePath));
const codeJson = require(JSON_FILE_PATH);
// Populate all code fields in the codeJSON
for (let i = 0; i < codeVersions.length; i++) {
const xml = fs.readFileSync(path.join(__dirname, `../codes/${codeVersions[i]}.xml`));
codeJson.find((c) => c.identifier === codeVersions[i]).codes = parseXml(xml);
for (let i = 0; i < CODE_VERSIONS.length; i++) {
codeJson.find((c) => c.identifier === CODE_VERSIONS[i]).codes = parseXml(xml, CODE_VERSIONS[i]);
}
// Save the codeJSON with the updated codes
fs.writeFileSync(jsonFilePath, JSON.stringify(codeJson));
fs.writeFileSync(JSON_FILE_PATH, JSON.stringify(codeJson));
// Populate the code reference
for (let i = 0; i < codeVersions.length; i++) {
const filePath = path.join(
__dirname,
`../site/code-reference/${codeVersions[i].toLowerCase()}.md`,
);
Object.keys(locales).forEach((locale) => {
const localeKey = locales[locale].lang;
// Get the current reference
const reference = fs.readFileSync(filePath).toString();
// Populate the code reference
for (let i = 0; i < CODE_VERSIONS.length; i++) {
// Load the target reference file
const filePath = path.join(
__dirname,
`../site/${locale.trim('/')}/code-reference/${CODE_VERSIONS[i].toLowerCase()}.md`,
);
if (!reference.includes(injectionTag)) {
throw new Error(`No injection tag found in ${codeVersions[i].toLowerCase()}.md`);
// Get the current reference
const reference = fs.readFileSync(filePath).toString();
if (!reference.includes(INJECTION_TAG)) {
throw new Error(`No injection tag found in ${CODE_VERSIONS[i].toLowerCase()}.md`);
}
// Everything after the injection tag is deleted from the file
let fileContent = reference.split(INJECTION_TAG)[0] + INJECTION_TAG;
// Order codes by their localized title
const codes = codeJson
.find((c) => c.identifier === CODE_VERSIONS[i])
.codes.sort((a, b) =>
a.title.find((t) => t.lang === localeKey).content >
b.title.find((t) => t.lang === localeKey).content
? 1
: -1,
);
// Create a semi-markdown version for all codes
codes.forEach((code) => {
const title = `### ${code.title.find((t) => t.lang === localeKey).content}`;
const author = `*${code.author.includes(',') ? 'Authors:' : 'Author:'} ${code.author}*`;
const version = `*Version: ${code.version} (${code.date})*`;
const description = code.description.find((d) => d.lang === localeKey).content;
fileContent += `\n\n${title.trim()}\n\n${version.trim()} \n${author.trim()}\n\n${description.trim()}\n\n`;
});
// Save the reference file
fs.writeFileSync(filePath, fileContent);
}
// Everything afte rthe injection tag is deleted from the file
let fileContent = reference.split(injectionTag)[0] + injectionTag;
const codes = codeJson
.find((c) => c.identifier === codeVersions[i])
.codes.sort((a, b) => (a.title > b.title ? 1 : -1));
// Create a semi-markdown version for all codes
codes.forEach((code) => {
const title = `### ${code.title}`;
const author = `*${code.author.includes(',') ? 'Authors:' : 'Author:'} ${code.author}*`;
const version = `*Version: ${code.version} (${code.date})*`;
const description = code.description;
fileContent += `\n\n${title.trim()}\n\n${version.trim()} \n${author.trim()}\n\n${description.trim()}`;
});
// Save the reference file
fs.writeFileSync(filePath, fileContent);
}
});

View file

@ -5,8 +5,6 @@
</template>
<script>
import CodeFormatter from './scripts/codeFormatter';
export default {
props: {
disabled: { type: Boolean },

View file

@ -1,29 +1,40 @@
<template>
<div>
<h3 v-if="anchor" :id="headerId">
<a :href="`#${headerId}`" class="header-anchor">#</a>
{{ code.title }}
</h3>
<h3 v-else>{{ code.title }}</h3>
<h3>{{ translatedCode.title }}</h3>
<div class="metadata">
<span>Version: {{ code.version }} ({{ code.date }})</span>
<span v-if="code.author.includes(',')">Authors: {{ code.author }}</span>
<span v-else>Author: {{ code.author }}</span>
<span>
{{ getLabel('codeinfo.version') }} {{ translatedCode.version }} ({{ translatedCode.date }})
</span>
<span v-if="code.author.includes(',')"
>{{ getLabel('codeinfo.authors') }} {{ translatedCode.author }}</span
>
<span v-else>{{ getLabel('codeinfo.author') }} {{ translatedCode.author }}</span>
</div>
<p class="description" v-html="code.description"></p>
<p class="description" v-html="translatedCode.description"></p>
</div>
</template>
<script>
import locales from '../i18n/locales.json';
import { translate, translateCode } from '../i18n/localeHelper';
export default {
props: {
anchor: { type: Boolean },
code: { type: Object },
},
computed: {
translatedCode: function () {
return translateCode(this.code, this.$lang);
},
},
data() {
return {
headerId: this.code.title.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-'),
};
return {};
},
methods: {
getLabel(key) {
return translate(key, this.$lang);
},
},
};
</script>

View file

@ -6,12 +6,14 @@
@click="toggle(code)"
@mouseover="inspect(code)"
>
{{ code.title }}
{{ getCodeTitle(code) }}
</li>
</ul>
</template>
<script>
import { translateCode } from '../i18n/localeHelper';
export default {
props: {
codes: { type: Array },
@ -32,6 +34,9 @@ export default {
};
},
methods: {
getCodeTitle(code) {
return translateCode(code, this.$lang).title;
},
toggle(code) {
code.selected = !code.selected;
this.onSelectionChanged(this.availableCodes.filter((c) => c.selected));

View file

@ -9,11 +9,13 @@
<script>
// Components
import ButtonComponent from './ButtonComponent';
import CodeFormatter from './scripts/codeFormatter';
// Data
import gameVersions from '../data/gameVersions.json';
// Util
import { translateCode } from '../i18n/localeHelper';
export default {
props: {
codes: { type: Array },
@ -58,16 +60,78 @@ export default {
switch (this.format) {
case 'gct':
CodeFormatter.generateGCT(c, fileName);
this.generateGCT(c, fileName);
break;
case 'dolphin':
CodeFormatter.generateDolphinINI(c, fileName);
this.generateDolphinINI(c, fileName);
break;
case 'gcm':
CodeFormatter.generateCheatManagerTXT(c, fileName);
this.generateCheatManagerTXT(c, fileName);
break;
}
},
generateGCT(codes, version) {
let code = '00D0C0DE00D0C0DE';
codes.forEach((c) => (code += c.source));
code += 'FF00000000000000';
let rawData = new Uint8Array(code.length / 2);
for (let x = 0; x < rawData.length; x++) {
rawData[x] = parseInt(code.substr(x * 2, 2), 16);
}
this.downloadFile(rawData, `${version}.gct`);
},
generateDolphinINI(codes, version) {
let data = 'Paste the following on top of your games .ini file:\r\n[Gecko]';
codes.forEach((code) => {
const codeTitle =
typeof code.title === 'string' ? code.title : translateCode(code, this.$lang).title;
data += `\r\n$${codeTitle} (${code.date}) [${code.author}]\r\n`;
data += code.source
.match(/.{8}/g)
.join(' ')
.replace(/(.{17})./g, '$1\r\n');
});
this.downloadFile(data, `${version}.txt`);
},
generateCheatManagerTXT(codes, version) {
let data = `${version}\r\nSuper Mario Sunshine`;
codes.forEach((code) => {
const codeTitle =
typeof code.title === 'string' ? code.title : translateCode(code, this.$lang).title;
data += `\r\n\r\n${codeTitle} (${code.date}) [${code.author}]\r\n`;
data += code.source
.match(/.{8}/g)
.join(' ')
.replace(/(.{17})./g, '$1\r\n');
});
this.downloadFile(data, `${version}.txt`);
},
downloadFile(data, filename) {
var file = new Blob([data], {
type: 'application/octet-stream',
});
if (window.navigator.msSaveOrOpenBlob) window.navigator.msSaveOrOpenBlob(file, filename);
else {
var a = document.createElement('a'),
url = window.URL.createObjectURL(file);
a.href = url;
a.download = filename;
a.click();
setTimeout(function () {
window.URL.revokeObjectURL(url);
}, 500);
}
},
},
};
</script>

View file

@ -1,10 +1,5 @@
<template>
<SelectComponent
placeholder="Choose Format"
:options="options"
:selectedValue="selectedValue"
:onChange="onChange"
/>
<SelectComponent :options="options" :selectedValue="selectedValue" :onChange="onChange" />
</template>
<script>
@ -23,7 +18,7 @@ export default {
return {
options: downloadFormats.map((v) => ({
value: v.target,
label: v.name,
label: v.i18nKey,
})),
};
},

View file

@ -2,15 +2,15 @@
<div>
<section class="config">
<div>
<span>Game Version:</span>
<span>{{ getLabel('generatorconfig.gameversion.label') }}</span>
<VersionSelect :onChange="onVersionChanged" :selectedValue="selectedVersion" />
</div>
<div>
<span>Download Format:</span>
<span>{{ getLabel('generatorconfig.downloadformat.label') }}</span>
<FormatSelect :onChange="onFormatChanged" :selectedValue="selectedFormat" />
</div>
<div>
<span>Use Stage Loader:</span>
<span>{{ getLabel('generatorconfig.usestageloader') }}</span>
<SelectComponent
:options="useStageLoaderOptions"
:onChange="onStageLoaderChanged"
@ -18,7 +18,7 @@
/>
</div>
<div>
<span>Download:</span>
<span>{{ getLabel('common.download') }}</span>
<DownloadButton
:codes="selectedCheats"
:stageLoaderCode="selectedStageLoader"
@ -31,7 +31,7 @@
<hr />
<section>
<div v-if="codes && codes.length > 0">
<h3>Available Codes</h3>
<h3>{{ getLabel('headers.codelist') }}</h3>
<CodeList
:codes="codes"
:onSelectionChanged="onCheatSelectionChanged"
@ -39,45 +39,41 @@
/>
</div>
<div class="prevent-shrink" v-if="codes && codes.length > 0 && useStageLoader">
<h3>Stage Loader</h3>
<h3>{{ getLabel('headers.stageloader') }}</h3>
<StageLoader :fastCodes="stageLoaderCodes" :onChange="onStageLoaderCodeChanged" />
</div>
<div v-if="codes && codes.length > 0" class="help">
<h3>Help</h3>
<h3>{{ getLabel('headers.help') }}</h3>
<CodeInfo v-if="!!inspectingCode" :code="inspectingCode" />
<div v-else>Select your codes from the list on the left.</div>
<div v-else>{{ getLabel('misc.defaulthelpmessage') }}</div>
</div>
<div v-if="selectedVersion == null" class="help">
<h1>Super Mario Sunshine Practice File Generator</h1>
<h1>{{ getLabel('landingpage.title') }}</h1>
<div>
<p>
This is a cheatfile generator for Super Mario Sunshine speedrun practice. If this is
your first time using the generator we highly recommend to check out the
<a href="/guide.html" target="_blank">guide</a> first. Visit the
<a href="/guide.html#troubleshooting" target="_blank">the troubleshooting section</a>
if you encounter any issues.
</p>
<p v-html="getLabel('landingpage.summary')" />
<div>
<h3>The SMS Speedrunning Community</h3>
<h3>{{ getLabel('landingpage.community') }}</h3>
<ul>
<li>
<a href="https://discord.gg/9dGJWEc" target="_blank" rel="noopener">Discord</a>
<a href="https://discord.gg/9dGJWEc" target="_blank" rel="noopener">
{{ getLabel('landingpage.links.discord') }}
</a>
</li>
<li>
<a href="https://speedrun.com/sms" target="_blank" rel="noopener"
>Speedrun.com Leaderboards</a
>
<a href="https://speedrun.com/sms" target="_blank" rel="noopener">
{{ getLabel('landingpage.links.src') }}
</a>
</li>
<li>
<a href="https://twitter.com/SMSCommunity" target="_blank" rel="noopener"
>Twitter: @SMSCommunity</a
>
<a href="https://twitter.com/SMSCommunity" target="_blank" rel="noopener">
{{ getLabel('landingpage.links.twitter') }}
</a>
</li>
<li>
<a href="https://www.twitch.tv/SunshineCommunity" target="_blank" rel="noopener"
>Twitch: SunshineCommunity</a
>
<a href="https://www.twitch.tv/SunshineCommunity" target="_blank" rel="noopener">
{{ getLabel('landingpage.links.twitch') }}
</a>
</li>
</ul>
</div>
@ -88,21 +84,11 @@
>Psychonauter</a
>,
<a href="https://twitter.com/Qbe_Root" target="_blank" rel="noopener">Noki Doki</a>
and
<a href="https://twitter.com/srlMilk" target="_blank" rel="noopener">Milk</a>. The
source code is available on
<a href="https://github.com/BitPatty/gctGenerator" target="_blank" rel="noopener"
>Github</a
>.
</p>
<p>
Found a bug? Post a message on the SMS Discord (#hacking) and tag psy#1363. During the
transition the old site will still be available at
<a href="https://old.gct.zint.ch" target="_blank" rel="noopener"
>https://old.gct.zint.ch</a
>.
&amp;
<a href="https://twitter.com/srlMilk" target="_blank" rel="noopener">Milk</a>.
</p>
</div>
<div class="centered"><a href="/">English</a> | <a href="/de">Deutsch</a></div>
</div>
</div>
</section>
@ -122,6 +108,9 @@ import DownloadButton from './DownloadButton';
// Data
import gameVersions from '../data/gameVersions.json';
// Util
import { translate } from '../i18n/localeHelper';
export default {
data() {
return {
@ -134,12 +123,15 @@ export default {
useStageLoader: false,
stageLoaderCodes: [],
useStageLoaderOptions: [
{ value: false, label: 'No' },
{ value: true, label: 'Yes' },
{ value: false, label: 'common.no' },
{ value: true, label: 'common.yes' },
],
};
},
methods: {
getLabel(key) {
return translate(key, this.$lang);
},
onVersionChanged(e) {
this.selectedVersion = e;
this.selectedCheats = [];
@ -199,6 +191,11 @@ section > div:not(:first-child) {
text-align: left;
}
.centered {
width: 100%;
text-align: center;
}
@keyframes spinner {
0% {
transform: rotate(0deg);

View file

@ -8,13 +8,15 @@
v-for="option in options"
:value="option.value"
:selected="selectedValue && option.value === selectedValue"
>{{ option.label }}</option
>{{ getLabel(option.label) }}</option
>
</select>
</div>
</template>
<script>
import { translate } from '../i18n/localeHelper';
export default {
props: {
disabled: { type: Boolean },
@ -26,6 +28,11 @@ export default {
data() {
return {};
},
methods: {
getLabel(key) {
return translate(key, this.$lang);
},
},
};
</script>

View file

@ -1,7 +1,7 @@
<template>
<div>
<div class="config">
<span>Remove Dialogue:</span>
<span>{{ getLabel('stageloader.removedialogue.label') }}</span>
<SelectComponent
:options="removeDialogueOptions"
:onChange="onRemoveDialogueSelectionChanged"
@ -9,7 +9,7 @@
/>
</div>
<div class="config">
<span>Skippable FMVs:</span>
<span>{{ getLabel('stageloader.skippablefmvs.label') }}</span>
<SelectComponent
:options="skippableFMVsOptions"
:onChange="onSkippableFMVsSelectionChanged"
@ -17,7 +17,7 @@
/>
</div>
<div class="config">
<span>Level Order:</span>
<span>{{ getLabel('stageloader.levelorder.label') }}</span>
<SelectComponent
:options="levelOrderOptions"
:onChange="onLevelOrderSelectionChanged"
@ -25,7 +25,7 @@
/>
</div>
<div class="config">
<span>Post Game:</span>
<span>{{ getLabel('stageloader.postgame.label') }}</span>
<SelectComponent
:disabled="levelOrderSelection === 'random'"
:options="postGameOptions"
@ -34,7 +34,7 @@
/>
</div>
<div class="config">
<span>Route:</span>
<span>{{ getLabel('stageloader.route') }}</span>
<ul class="level-select">
<draggable
v-model="selectedRoute"
@ -61,7 +61,7 @@
<div class="config">
<div class="sub">
<GroupSelectComponent
placeholder="Choose a level.."
:placeholder="getLabel('stageloader.levelselectplaceholder')"
:optGroups="stageLoaderLevelOptions"
:onChange="onStageLoaderLevelSelected"
selectedValue="placeholder"
@ -69,11 +69,11 @@
/>
</div>
<div class="sub">
<ButtonComponent label="Clear List" :onClick="onClearList" />
<ButtonComponent :label="getLabel('stageloader.clear')" :onClick="onClearList" />
</div>
<div class="sub">
<GroupSelectComponent
placeholder="Load a preset.."
:placeholder="getLabel('stageloader.loadpresetplaceholder')"
:optGroups="stageLoaderPresetOptions"
:onChange="onStageLoaderPresetSelected"
selectedValue="placeholder"
@ -96,6 +96,7 @@ import stageLoaderPresets from '../data/stageLoaderPresets.json';
// Util
import generateStageLoaderCode from './scripts/generateStageLoadercode';
import { translate } from '../i18n/localeHelper';
// Lib
import draggable from 'vuedraggable';
@ -119,26 +120,26 @@ export default {
stageLoaderLevelOptions: stageLoaderLevels,
stageLoaderPresetOptions: stageLoaderPresets,
removeDialogueOptions: [
{ value: 'pv5', label: 'Not in Pinna 5' },
{ value: 'yes', label: 'Always' },
{ value: 'no', label: "Don't include" },
{ value: 'pv5', label: 'stageloader.removedialogue.options.pv5' },
{ value: 'yes', label: 'stageloader.removedialogue.options.yes' },
{ value: 'no', label: 'stageloader.removedialogue.options.no' },
],
skippableFMVsOptions: [
{ value: 'pp', label: 'Not in Pinna' },
{ value: 'yes', label: 'Always' },
{ value: 'no', label: "Don't include" },
{ value: 'pp', label: 'stageloader.skippablefmvs.options.pp' },
{ value: 'yes', label: 'stageloader.skippablefmvs.options.yes' },
{ value: 'no', label: 'stageloader.skippablefmvs.options.no' },
],
levelOrderOptions: [
{ value: 'list', label: 'As specified' },
{ value: 'shuffle', label: 'Random, no duplicates' },
{ value: 'random', label: 'Fully random' },
{ value: 'list', label: 'stageloader.levelorder.options.list' },
{ value: 'shuffle', label: 'stageloader.levelorder.options.shuffle' },
{ value: 'random', label: 'stageloader.levelorder.options.random' },
],
postGameOptions: [
{ value: '0F00', label: 'Return to the title screen' },
{ value: '0109', label: 'Load the flooded plaza' },
{ value: '0102', label: 'Load post-Corona plaza' },
{ value: '3400', label: 'Load Corona Montain' },
{ value: '3C00', label: 'Load the Bowser fight' },
{ value: '0F00', label: 'stageloader.postgame.options.0F00' },
{ value: '0109', label: 'stageloader.postgame.options.0109' },
{ value: '0102', label: 'stageloader.postgame.options.0102' },
{ value: '3400', label: 'stageloader.postgame.options.3400' },
{ value: '3C00', label: 'stageloader.postgame.options.3C00' },
],
removeDialogSelection: 'pv5',
skippableFMVsSelection: 'pp',
@ -148,6 +149,9 @@ export default {
};
},
methods: {
getLabel(key) {
return translate(key, this.$lang);
},
onRemoveDialogueSelectionChanged(e) {
this.removeDialogSelection = e;
this.updateCode();
@ -194,11 +198,10 @@ export default {
const preset = e.split(';')[0];
const ending = e.split(';')[1];
const newRoute = [];
this.selectedRoute = [];
for (let i = 0; i <= preset.length - 4; i += 4) newRoute.push({ value: preset.substr(i, 4) });
this.selectedRoute = newRoute;
for (let i = 0; i <= preset.length - 4; i += 4)
this.selectedRoute.push({ value: preset.substr(i, 4) });
if (ending) {
this.postGameSelection = ending;

View file

@ -1,7 +1,7 @@
<template>
<div class="wrapper">
<div v-for="version in gameVersions" class="card" @click="onCardClick(version)">
<h3>{{ version.name }}</h3>
<h3>{{ getLabel(`common.${version.identifier}`) }}</h3>
</div>
</div>
</template>
@ -9,6 +9,10 @@
<script>
// Data
import gameVersions from '../data/gameVersions.json';
import locales from '../i18n/locales.json';
// Util
import { translate } from '../i18n/localeHelper';
export default {
data() {
@ -18,7 +22,18 @@ export default {
},
methods: {
onCardClick(v) {
window.location.href = `/code-reference/${v.identifier.toLowerCase()}.html`;
const localePaths = Object.keys(locales);
let localePath = '';
Object.keys(locales).forEach((l) => {
if (locales[l].lang === this.$lang) localePath = l.replace(/\/+$/, '');
});
window.location.href = `${localePath}/code-reference/${v.identifier.toLowerCase()}.html`;
},
getLabel(key) {
return translate(key, this.$lang);
},
},
};

View file

@ -1,6 +1,6 @@
<template>
<SelectComponent
placeholder="Choose Version.."
:placeholder="getLabel('generatorconfig.gameversion.placeholder')"
:selectedValue="selectedValue"
:options="options"
:onChange="onChange"
@ -8,10 +8,15 @@
</template>
<script>
// Components
import SelectComponent from './SelectComponent';
// Data
import gameVersions from '../data/gameVersions.json';
// Util
import { translate } from '../i18n/localeHelper';
export default {
props: {
selectedValue: { type: String },
@ -21,10 +26,15 @@ export default {
return {
options: gameVersions.map((v) => ({
value: v.identifier,
label: v.name,
label: `common.${v.identifier}`,
})),
};
},
methods: {
getLabel(key) {
return translate(key, this.$lang);
},
},
};
</script>

View file

@ -1,61 +0,0 @@
export default class CodeFormatter {
static generateGCT(codes, version) {
let code = '00D0C0DE00D0C0DE';
codes.forEach((c) => (code += c.source));
code += 'FF00000000000000';
let rawData = new Uint8Array(code.length / 2);
for (let x = 0; x < rawData.length; x++) {
rawData[x] = parseInt(code.substr(x * 2, 2), 16);
}
this.downloadFile(rawData, `${version}.gct`);
}
static generateDolphinINI(codes, version) {
let data = 'Paste the following on top of your games .ini file:\r\n[Gecko]';
codes.forEach((code) => {
data += `\r\n$${code.title} (${code.date}) [${code.author}]\r\n`;
data += code.source
.match(/.{8}/g)
.join(' ')
.replace(/(.{17})./g, '$1\r\n');
});
this.downloadFile(data, `${version}.txt`);
}
static generateCheatManagerTXT(codes, version) {
let data = `${version}\r\nSuper Mario Sunshine`;
codes.forEach((code) => {
data += `\r\n\r\n${code.title} (${code.date}) [${code.author}]\r\n`;
data += code.source
.match(/.{8}/g)
.join(' ')
.replace(/(.{17})./g, '$1\r\n');
});
this.downloadFile(data, `${version}.txt`);
}
static downloadFile(data, filename) {
var file = new Blob([data], {
type: 'application/octet-stream',
});
if (window.navigator.msSaveOrOpenBlob) window.navigator.msSaveOrOpenBlob(file, filename);
else {
var a = document.createElement('a'),
url = window.URL.createObjectURL(file);
a.href = url;
a.download = filename;
a.click();
setTimeout(function () {
window.URL.revokeObjectURL(url);
}, 500);
}
}
}

View file

@ -1,4 +1,6 @@
const { description } = require('../../package');
const themePlugins = require('./data/themePlugins.json');
const locales = require('./i18n/locales.json');
module.exports = {
title: 'GCT Generator',
@ -11,42 +13,34 @@ module.exports = {
],
/**
* Theme configuration, here is the default theme configuration for VuePress.
*
* refhttps://v1.vuepress.vuejs.org/theme/default-theme-config.html
* Markdown Extensions
*/
markdown: {
extendMarkdown: (md) => {
md.use(require('markdown-it-attrs'));
},
},
/**
* Locales
*/
locales,
/**
* Theme Configuration
*/
themeConfig: {
repo: 'BitPatty/gctGenerator',
editLinks: true,
docsDir: 'site',
editLinkText: 'Edit this page on GitHub',
docsBranch: 'master',
lastUpdated: false,
nav: [
{
text: 'Cookbook',
link: '/guide.html',
},
{
text: 'Code Reference',
link: '/code-reference/index.html',
},
{
text: 'Changelog',
link: '/changelog.html',
},
{
text: 'Installing IOS58',
link: '/ios58.html',
},
{
text: 'Sunshine Discord',
link: 'https://discord.gg/9dGJWEc',
},
],
locales,
plugins: themePlugins,
},
/**
* Apply pluginsrefhttps://v1.vuepress.vuejs.org/zh/plugin/
* VuePress Plugins
*/
plugins: ['@vuepress/plugin-back-to-top', '@vuepress/plugin-medium-zoom'],
};

View file

@ -1,14 +1,14 @@
[
{
"target": "gct",
"name": "GCT"
"i18nKey": "generatorconfig.downloadformat.options.gct"
},
{
"target": "dolphin",
"name": "Dolphin INI"
"i18nKey": "generatorconfig.downloadformat.options.dolphin"
},
{
"target": "gcm",
"name": "CheatManager TXT"
"i18nKey": "generatorconfig.downloadformat.options.gcm"
}
]

View file

@ -1,7 +1,6 @@
[
{
"identifier": "GMSE01",
"name": "GMSE01 (NTSC-U)",
"version": "GMSE01",
"fastCode": {
"fileSelect": 2701876,
@ -22,196 +21,10 @@
"no": ""
}
},
"codes": [
{
"author": "Psychonauter, Noki Doki, Dan Salvato, Link Master, James0x57",
"title": "DPad Functions",
"description": "Allows various game modifications. Button combinations:<br/><table><tr><th>Combination</th><th>Result</th></tr><tr><td>D-Pad left</td><td>Save Mario's position</td></tr><tr><td>D-Pad right</td><td>Load Mario's position</td></tr><tr><td>D-Pad up</td><td>Replace all dialog with a single \"!!!\" line</td></tr><tr><td>D-Pad down</td><td>Restore dialog boxes</td></tr><tr><td>B+D-Pad left</td><td>Lock rocket nozzle</td></tr><tr><td>B+D-Pad right</td><td>Lock turbo nozzle</td></tr><tr><td>B+D-Pad up</td><td>Lock hover nozzle</td></tr><tr><td>B+D-Pad down</td><td>Release nozzle lock</td></tr><tr><td>X+D-Pad left</td><td>No FLUDD in secrets</td></tr><tr><td>X+D-Pad right</td><td>FLUDD in all secrets</td></tr><tr><td>X+D-Pad up</td><td>Regrab last held object</td></tr><tr><td>X+D-Pad down</td><td>FLUDD in completed secrets (default)</td></tr></table>",
"version": "2.5",
"date": "Apr 3, 2019",
"source": "2440E10C80000000822000008040E10C80000001817F0008822000028040E114822000038040D0A886000003000000A628404455000000018A000C01000000008A0002210000000C8A0006310000000E28404455000000028A000C10000000008C0002120000000C8C0006130000000E284044550000000404153DA0801C00040415317CA81C03400429134088030214284044550000000804153DA0380000000415317C380050000429134060000000284044550000020804269F503BE00004284044550000020404269F508BFE1C85284044550000020104269F503BE00001284044550000020204269F503BE000052840445500000401041C09106000000004298B88600000002840445500000402C61C0910801C0928C6298B8880298B9C2840445500000404041C09104082001804298B88408200142840445500000408480000008040E1081400007C00000383E000000000000000048D3A3C210000000423F9D460000000"
},
{
"author": "Noki Doki",
"title": "Infinite Lives",
"description": "Prevents the life counter from decreasing.",
"version": "2.0",
"date": "Feb 28, 2020",
"source": "0429881460000000"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Disable Blue Coin Flag",
"description": "Prevents the game from setting the blue coin flag, which makes them respawn after reentering the level.",
"version": "1.1",
"date": "Sep 05, 2018",
"source": "0429456460000000C22A6728000000037CA0003980AD9FA038800000908500D46000000000000000"
},
{
"author": "Psychonauter",
"title": "FMV Skips",
"description": "Allows skipping FMVs without having to watch them once first.",
"version": "1.0",
"date": "Jan 20, 2017",
"source": "042B5EF438600001042B5E8C38600001"
},
{
"author": "Psychonauter",
"title": "Mute Background Music",
"description": "Mutes background music, but keeps SFX on.",
"version": "1.0",
"date": "Jan 28, 2017",
"source": "04016A34FC210828"
},
{
"author": "Psychonauter",
"title": "Remove Save Boxes",
"description": "Removes all saveboxes.",
"version": "1.0",
"date": "Oct 02, 2017",
"source": "0416210C4E80002004157EF848000020"
},
{
"author": "Noki Doki",
"title": "Unlock Yoshi",
"description": "Unlocks Yoshi everywhere.",
"version": "1.0",
"date": "Feb 10, 2018",
"source": "C61BBF70801BBFA4C61BBFB4801BBFD0"
},
{
"author": "Noki Doki",
"title": "Unlock Nozzles",
"description": "Unlocks all nozzle boxes.",
"version": "1.0",
"date": "Feb 12, 2018",
"source": "0429443C38600001042944404E800020"
},
{
"author": "Noki Doki",
"title": "Free Pause",
"description": "Allows you to pause mid-air and during cutscenes.",
"version": "1.1",
"date": "Nov 12, 2017",
"source": "C6297AB080297ABCC22979D400000007887F007C2803000F41820028807F001880630000806300D4546307FF418200143C60802960637A7C7C6803A64E800020881F012400000000"
},
{
"author": "Noki Doki",
"title": "Enable Exit Area Everywhere",
"description": "Enables 'Exit Area' on Plaza and Airstrip.",
"version": "1.0",
"date": "Oct 30, 2017",
"source": "C6156B7880156B84"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Shine Get Timer",
"description": "Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (similar to the x-cam timer of SM64). The timer pauses during loading times.<br /><br /><b><font color =\"#0046da\">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>",
"version": "2.0",
"date": "Oct 11, 2019",
"source": "C2031F680000000F3CC0817F60C60100888600002C0400014182002C888600012C04000140A200503CA0803E60A59710888500022C0400074182003C2C040009418100343C608034606394D87C6803A64E80002180AD9FB838A500E890650028906600049085002C908600083860000098660000800100246000000000000000C21BD3D8000000033C60817F60630100388000019083000C4E80002000000000C22979D80000000C2C00000340A200503C60817F606301008083000C2C04000041A2003C388000009083000C7DE802A63C6080566063DD007FB0EB783FA0802863BDE6047FA803A64E8000217DE803A67E1D837839E000003A0000003C60803A6000000000000000C234802C000000073DE0817F61EF01008A0F00002C1000014182000C806F0004808F00083A0000009A0F0000906F0004908F0008909F002C39E0000000000000C2149148000000137C6F1B787FB0EB783C60817F60630100888300012C04000140A2006438800000988300013C60803E60639710A06300022C030805418200482C030605418200402C031E00418200383C6080566063DD003FA0802863BDE9987FA803A64E8000213C6080566063DD003FA0802863BDE82C398000007FA803A64E8000217DE37B787E1D837839E000003A000000800100CC6000000000000000C228E90C00000003558C00014082000C3880000038600000909E00CC00000000C2171B6C000000033C60817F6063010038800101B0830000807F025C00000000C2031F6C0000000A3C60803E60639710A083FFFE2C043C0040A20038A08300022C040FFF40A2002C7C1E03787FE802A63C6080566063DD003C8080286084E6047C8803A64E8000217FE803A67FC0F37883E1001C00000000043480484E8000200414A99C600000000414D2E8600000000428E9C8600000000428E854600000000428E624600000000456DD00000000000456DD04000000000456DD18000000030456DD1C000000020456DD208056DD240456DD24000000000456DD28000000010456DD2C000000000456DD30000000B40414AC184800006C077F00C00000004038000000600000017D0D42E67D2C42E67C6D42E67C0818004082FFF03D40817F806A01087C634810906A0108806A01047C634110906A01043860001C4E80002004296E7C4955924D042998BC49556805042B5B944953A531042B707049539051"
},
{
"author": "Psychonauter, Dan Salvato, Noki Doki",
"title": "Level Select",
"description": "Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. This code is not compatible with the Fast Any%, Stage Loader or Stage Randomizer code. Codes:<br /><br /><div><img src=\"/img/levelselect.png\" width=\"500px\"></div>",
"version": "1.14",
"date": "May 8, 2020",
"source": "C22A6710000000733C60817F3CA0804060A5448438E0000090E3010C38E0000198E30101A09F00122C040D05418103182C040109418103082C0400014182030838E0000198E30100A0E5000254E6C6F67CC73B7870E70C7088C500012C86000040860024418202E02C070800A1030000418202BC2C070010408201D4A1030002480002B82C060009418201C42C0600084082000C39000200480000602C06000A4082000C39000300480000502C0600024082000C39000400480000402C0600064082000C39000500480000302C0600044082000C39000600480000202C0600054082000C39000800480000102C06000140820254390009002C070000418202302C0700404082000C39080001480002202C0700204082000C39080002480002102C0700604082000C39080003480002002C0700104082000C39080004480001F02C0700504082000C39080005480001E02C0700304082000C39080006480001D02C0700704082000C39080007480001C02C070400408200682C0600044082000C39000E01480001B02C06000A4082000C39001E00480001A02C0600024082000C39002100480001902C0600014082000C39003900480001802C0600084082000C39003700480001702C06000539003A004082016439002C004800015C2C070800408201642C0600084082000C39000100480001442C06000A4082000C39000101480001342C0600024082000C39000105480001242C0600064082000C39000107480001142C0600044082000C39000108480001042C0600054082000C39000109480000F439000102480000EC2C070040408200103900140039202E00480000C42C070020408200103900150039203000480000B02C0700604082001039001600392020004800009C2C070050408200103900170039202900480000882C070030408200103900180039203300480000742C0700704082001039001D0039202800480000602C070400408200103900340039202A004800004C2C070440408200103900000039201F00480000382C0708004082000C39203A01480000282C070840408200103900100039203C00480000142C070010392032004182000839202F002C06000940A200107D284B7880AD9FA0990500DFB1030000B11F0012A09F0012B08300022C041E004182002C2C040404418200242C0408014182001C2C040904418200142C0406054182000C2C04080540A2000C38800000B0830100807F0020889F00122C0400074182000C2C04000E40A2000C3880003BB08300E400000000062976B4000000083C60000338830005C22B98E0000000035460063F41820010881D000F2C0000076000000000000000C22B9A3400000003806D9FA0880300CC54000734980300CC4E80002000000000"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Fast Any%",
"description": "Loads stages in any% order, skips all save boxes, replaces all dialog with \"!!!\" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select, Stage Loader or Stage Randomizer code.",
"version": "1.4",
"date": "Feb 16, 2018",
"source": "C22A6710000000643C60817F60630100380000009003000C380000019803000180AD9FA0889F00122C040001418102F498030000888500077080000141A2000C38803400480002D4888500067080008041A2000C38800906480002C07080004041A2000C38800905480002B07080002041A2000C38800904480002A07080001041A2000C38800903480002907080000841A2000C38800902480002807080000441A2000C3880090148000270888500057080004041A2000C388009004800025C7080002041A2000C388006064800024C7080001041A2000C388006054800023C7080000841A2000C388006044800022C7080000441A2000C388006034800021C7080000241A2000C388006024800020C7080000141A2000C38800601480001FC888500007080004041A2000C38800600480001E87080002041A2000C38800206480001D8888500027080000141A2000C38800205480001C4888500017080008041A2000C38800306480001B07080004041A2000C38800305480001A07080002041A2000C38800304480001907080001041A2000C38800303480001807080000841A2000C38800302480001707080000441A2000C3880030148000160888500047080001041A2000C388003004800014C7080000841A2000C388005064800013C7080000241A2000C388005024800012C7080000141A2000C388005034800011C888500037080008041A2000C38800502480001087080004041A2000C38800501480000F8888500087080000441A2000C38800500480000E4888500077080008041A2000C38800806480000D0888500087080000141A2000C38800805480000BC888500077080002041A2000C38800804480000A87080004041A2000C3880080348000098888500087080000241A2000C3880080248000084888500077080001041A2000C3880080148000070888500037080000441A2000C388008004800005C7080000841A2000C388004064800004C888500007080001041A2000C38800400480000387080000841A2000C38800204480000287080000441A2000C38800203480000187080000241A2000C388002024800000838800200B09F0012988500DF807F0020000000000416210C4E80002004157EF848000020048D3A3C21000000283E971200002A0004153DA0801C00040415317CA81C0340E2000001000000002A3E971200002A0004153DA0380000000415317C38005000E200000100000000C22B5EF000000004388403915480043C2C0003984182000C3C8000016084039A6000000000000000C22B5E8800000004388403915480043C2C0003984182000C3C8000016084039A6000000000000000"
},
{
"author": "Unknown, Noki Doki",
"title": "Any Fruit Opens Yoshi Eggs",
"description": "Allows opening Yoshi eggs with a different fruit than the one depicted.",
"version": "1.0",
"date": "Aug 19, 2018",
"source": "041BC90060000000"
},
{
"author": "Noki Doki",
"title": "Infinite Juice",
"description": "Prevents Yoshi from despawning by running out of juice.",
"version": "1.0",
"date": "Apr 5, 2019",
"source": "0426E81060000000"
},
{
"author": "Noki Doki",
"title": "Stage Randomizer (Experimental)",
"description": "Loads stages in randomized order. This code is not compatible with the Level Select or Fast Any% code.",
"version": "1.0",
"date": "Oct 11, 2017",
"source": "C22A6710000000233C60803E60639710888300022C04000E418200D82C04000D418200682C040001418100EC7C6C42E65464EF7E70650007388400022C04000740A20028388000142C05000640A20008688400032C05000740A2000854A5083C7C842A1438A000005484402E7C842A78480000087C884A143C60803E60639710908300004800009039000D008083FFFC2C0405004082000C392000004BFFFFD82C0405024082000C392000014BFFFFC82C0405044082000C392000024BFFFFB82C0405054082000C392000034BFFFFA82C0405064082000C392000044BFFFF982C04050740A20030392000054BFFFF883C60803E606397108883FFF47085000841A2000C38800E014BFFFF7038800E004BFFFF68807F00206000000000000000"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Replace Episode names with their ID",
"description": "Replaces the Episode names with the episode number in the demo screen. (Useful for the stage randomizer and the stage loader.)",
"version": "1.1",
"date": "Feb 13, 2018",
"source": "C21727B80000000480AD9FA088A500DF38A5003154A5403EB0A60000388000806000000000000000"
},
{
"author": "Ralf, Psychonauter",
"title": "Shine Outfit",
"description": "Always wear shine outfit and sunglasses.",
"version": "1.0",
"date": "Oct 23, 2017",
"source": "04241FD46000000404241FD8B01D00040424D4DC60000000"
},
{
"author": "Noki Doki",
"title": "Position/angle/speed display",
"description": "Shows Mario's position, angle and speed at any given time.",
"version": "1.3",
"date": "Oct 28, 2019",
"source": "062A61600000001049553F19600000006000000060000000042998B84956074904143F14496B6209077FA000000001E89421FFE07C0802A69001002493E1001C4AABD6E538E0020038C0032038A0FFD83880000A386100084AAD01B9814D9FC83FE081803BFFA1EC39200000390000023CE0818038E7A16480CA004838A10008388000007FE3FB784AAD67F139200001913F01B0800100247C0803A683E1001C382100204E8000209421FFE87C0802A69001001C93A1000C93C1001093E100147C7F1B788123000083A900643D2081808129A39C2F890000409E002C7FE3FB787FA903A64E8004218001001C7C0803A683A1000C83C1001083E10014382100184E8000203D2080406129E0E883C900003C6081803863A1EC4AAD6B79C0BE00A8C09E00B0A0DE0096C07E0018C05E0014C03E00103CA0818038A5A164388000804CC632424AB3F6914BFFFF949421FFF07C0802A69001001493E1000C7C7F1B784AAF158D38E000817FE6FB7838A00000388000003C6081803863A1EC4AAD5C5D800100147C0803A683E1000C382100104E8000205820506F7320252E30660A5920506F7320252E30660A5A20506F7320252E30660A416E676C65202568750A482053706420252E32660A562053706420252E32662020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000C22A66F400000003386000003D808180906CA39C807F00406000000000000000"
},
{
"author": "Noki Doki",
"title": "Intro skip",
"description": "Removes the logos and cutscene that normally play before the title screen when loading or resetting the game.",
"version": "1.0",
"date": "Jun 19, 2019",
"source": "042956AC480002C404295B2048000014062A65E00000001438600F0038000000B07F000EB01F00104BFFFEB000000000"
},
{
"author": "Noki Doki",
"title": "Respawn One-Time Shines",
"description": "Allows Shines obtained by cleaning graffiti, the Shine Gate or the bells to respawn.",
"version": "1.0",
"date": "Aug 19, 2019",
"source": "041E792C48000050021E7FFC00004800021FF85C00004800"
},
{
"author": "Noki Doki",
"title": "Force Plaza Events",
"description": "Forces the unlock events for Ricco, Gelato and Yoshi to happen any time the correct version of the plaza is loaded. Nozzle unlock events take precedence over Yoshi's if their conditions are met.",
"version": "1.0",
"date": "Mar 8, 2020",
"source": "042B781048000018042B785C48000018042B78C448000018042B78F060000000042B794060000000"
},
{
"author": "Noki Doki",
"title": "Fix Memory Card Encoding",
"description": "Enable this if your Nintendont saves do not work on your other loader (e.g. Gecko OS on a Japanese console).",
"version": "2.0",
"date": "Jun 25, 2020",
"source": "0240CE5800000001"
}
]
"codes": []
},
{
"identifier": "GMSP01",
"name": "GMSP01 (PAL)",
"version": "GMSP01",
"fastCode": {
"fileSelect": 2668620,
@ -232,188 +45,10 @@
"no": ""
}
},
"codes": [
{
"author": "Psychonauter, Noki Doki, Dan Salvato, Link Master, James0x57",
"title": "DPad Functions",
"description": "Allows various game modifications. Button combinations:<br/><table><tr><th>Combination</th><th>Result</th></tr><tr><td>D-Pad left</td><td>Save Mario's position</td></tr><tr><td>D-Pad right</td><td>Load Mario's position</td></tr><tr><td>D-Pad up</td><td>Replace all dialog with a single \"!!!\" line</td></tr><tr><td>D-Pad down</td><td>Restore dialog boxes</td></tr><tr><td>B+D-Pad left</td><td>Lock rocket nozzle</td></tr><tr><td>B+D-Pad right</td><td>Lock turbo nozzle</td></tr><tr><td>B+D-Pad up</td><td>Lock hover nozzle</td></tr><tr><td>B+D-Pad down</td><td>Release nozzle lock</td></tr><tr><td>X+D-Pad left</td><td>No FLUDD in secrets</td></tr><tr><td>X+D-Pad right</td><td>FLUDD in all secrets</td></tr><tr><td>X+D-Pad up</td><td>Regrab last held object</td></tr><tr><td>X+D-Pad down</td><td>FLUDD in completed secrets (default)</td></tr></table>",
"version": "2.5",
"date": "Apr 3, 2019",
"source": "244057D48000000082200000804057D480000001817F000882200002804057DC822000038040480886000003000000A6283FBBF5000000018A000C01000000008A0002210000000C8A0006310000000E283FBBF5000000028A000C10000000008C0002120000000C8C0006130000000E283FBBF50000000404148D20801C000404147F98A81C0340042890CC88030214283FBBF50000000804148D203800000004147F9838005000042890CC60000000283FBBF50000020804261CDC3BE00004283FBBF50000020404261CDC8BFE1C85283FBBF50000020104261CDC3BE00001283FBBF50000020204261CDC3BE00005283FBBF500000401041B87C86000000004290A2060000000283FBBF500000402C61B87C8801B87E0C6290A2080290A34283FBBF500000404041B87C84082001804290A2040820014283FBBF50000040848000000804057D01400007C00000383E00000000000000020570B7C000000000474E87C2100000020570B7D000000010474E9F42121000020570B7D000000020474ED380000000020570B7D000000030474EE04A100000020570B7D000000040474EBDC21210000E2000001000000000423776060000000"
},
{
"author": "Noki Doki",
"title": "Infinite Lives",
"description": "Prevents the life counter from decreasing.",
"version": "2.0",
"date": "Feb 28, 2020",
"source": "042906AC60000000"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Disable Blue Coin Flag",
"description": "Prevents the game from setting the blue coin flag, which makes them respawn after reentering the level.",
"version": "1.1",
"date": "Sep 05, 2018",
"source": "0428C37C60000000C229E680000000037CA0003980AD9EC838800000908500D46000000000000000"
},
{
"author": "Psychonauter",
"title": "FMV Skips",
"description": "Allows skipping FMVs without having to watch them once first.",
"version": "1.0",
"date": "Jan 20, 2017",
"source": "042ADE2038600001042ADE8838600001"
},
{
"author": "Psychonauter",
"title": "Mute Background Music",
"description": "Mutes background music, but keeps SFX on.",
"version": "1.0",
"date": "Jan 28, 2017",
"source": "04016A90FC210828"
},
{
"author": "Psychonauter",
"title": "Remove Save Boxes",
"description": "Removes all saveboxes.",
"version": "1.0",
"date": "Oct 02, 2017",
"source": "0414CF4448000020041571584E800020"
},
{
"author": "Noki Doki",
"title": "Unlock Yoshi",
"description": "Unlocks Yoshi everywhere.",
"version": "1.0",
"date": "Feb 10, 2018",
"source": "C61B3E28801B3E5CC61B3E6C801B3E88"
},
{
"author": "Noki Doki",
"title": "Unlock Nozzles",
"description": "Unlocks all nozzle boxes.",
"version": "1.0",
"date": "Feb 12, 2018",
"source": "0428C254386000010428C2584E800020"
},
{
"author": "Noki Doki",
"title": "Free Pause",
"description": "Allows you to pause mid-air and during cutscenes.",
"version": "1.1",
"date": "Nov 12, 2017",
"source": "C628F9488028F954C228F86C00000007887F007C2803000F41820028807F001880630000806300D4546307FF418200143C6080286063F9147C6803A64E800020881F012400000000"
},
{
"author": "Noki Doki",
"title": "Enable Exit Area Everywhere",
"description": "Enables 'Exit Area' on Plaza and Airstrip.",
"version": "1.0",
"date": "Oct 30, 2017",
"source": "C614BB948014BBA0"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Shine Get Timer",
"description": "Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (similar to the x-cam timer of SM64). The timer pauses during loading times.<br /><br /><b><font color =\"#0046da\">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>",
"version": "2.0",
"date": "Oct 11, 2019",
"source": "C20320200000000F3CC0817F60C60100888600002C0400014182002C888600012C04000140A200503CA0803E60A510D0888500022C0400074182003C2C040009418100343C608034606317347C6803A64E80002180AD9EE038A500E890650028906600049085002C908600083860000098660000800100246000000000000000C21B5290000000033C60817F60630100388000019083000C4E80002000000000C228F8700000000C2C00000340A200503C60817F606301008083000C2C04000041A2003C388000009083000C7DE802A63C6080566063DF007FB0EB783FA0802863BD63907FA803A64E8000217DE803A67E1D837839E000003A0000003C60803A6000000000000000C2340288000000073DE0817F61EF01008A0F00002C1000014182000C806F0004808F00083A0000009A0F0000906F0004908F0008909F002C39E0000000000000C213DDD8000000137C6F1B787FB0EB783C60817F60630100888300012C04000140A2006438800000988300013C60803E606310D0A06300022C030805418200482C030605418200402C031E00418200383C6080566063DF003FA0802863BD67247FA803A64E8000213C6080566063DF003FA0802863BD65B8398000007FA803A64E8000217DE37B787E1D837839E000003A000000800100CC6000000000000000C228669800000003558C00014082000C3880000038600000909E00CC00000000C2167984000000033C60817F6063010038800101B0830000807F084C00000000C20320240000000A3C60803E606310D0A083FFFE2C043C0040A20038A08300022C040FFF40A2002C7C1E03787FE802A63C6080566063DF003C808028608463907C8803A64E8000217FE803A67FC0F37883E1001C00000000043402A44E8000200413F62C6000000004141F78600000000428675460000000042865E060000000042863B0600000000456DF00000000000456DF04000000000456DF18000000030456DF1C000000020456DF208056DF240456DF24000000000456DF28000000010456DF2C000000000456DF30000000B40413F8A84800006C077F00C00000004038000000600000017D0D42E67D2C42E67C6D42E67C0818004082FFF03D40817F806A01087C634810906A0108806A01047C634110906A01043860001C4E8000200428ED14495613B5042917544955E96D042ADB18495425AD042AF04049541081"
},
{
"author": "Psychonauter, Dan Salvato, Noki Doki",
"title": "Level Select",
"description": "Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. This code is not compatible with the Fast Any% or Stage Loader code. Codes:<br /><br /><div><img src=\"/img/levelselect.png\" width=\"500px\"></div>",
"version": "1.14",
"date": "May 8, 2020",
"source": "C229E668000000733C60817F3CA0803F60A5BC2438E0000090E3010C38E0000198E30101A09F00122C040D05418103182C040109418103082C0400014182030838E0000198E30100A0E5000254E6C6F67CC73B7870E70C7088C500012C86000040860024418202E02C070800A1030000418202BC2C070010408201D4A1030002480002B82C060009418201C42C0600084082000C39000200480000602C06000A4082000C39000300480000502C0600024082000C39000400480000402C0600064082000C39000500480000302C0600044082000C39000600480000202C0600054082000C39000800480000102C06000140820254390009002C070000418202302C0700404082000C39080001480002202C0700204082000C39080002480002102C0700604082000C39080003480002002C0700104082000C39080004480001F02C0700504082000C39080005480001E02C0700304082000C39080006480001D02C0700704082000C39080007480001C02C070400408200682C0600044082000C39000E01480001B02C06000A4082000C39001E00480001A02C0600024082000C39002100480001902C0600014082000C39003900480001802C0600084082000C39003700480001702C06000539003A004082016439002C004800015C2C070800408201642C0600084082000C39000100480001442C06000A4082000C39000101480001342C0600024082000C39000105480001242C0600064082000C39000107480001142C0600044082000C39000108480001042C0600054082000C39000109480000F439000102480000EC2C070040408200103900140039202E00480000C42C070020408200103900150039203000480000B02C0700604082001039001600392020004800009C2C070050408200103900170039202900480000882C070030408200103900180039203300480000742C0700704082001039001D0039202800480000602C070400408200103900340039202A004800004C2C070440408200103900000039201F00480000382C0708004082000C39203A01480000282C070840408200103900100039203C00480000142C070010392032004182000839202F002C06000940A200107D284B7880AD9EC8990500DFB1030000B11F0012A09F0012B08300022C041E004182002C2C040404418200242C0408014182001C2C040904418200142C0406054182000C2C04080540A2000C38800000B0830100807F0020889F00122C0400074182000C2C04000E40A2000C3880003BB08300E4000000000628F54C000000083C60000338830005C22B18B0000000035460063F41820010881D000F2C0000076000000000000000C22B1A0400000003806D9EC8880300CC54000734980300CC4E80002000000000"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Fast Any%",
"description": "Loads stages in any% order, skips all save boxes, replaces all dialog with \"!!!\" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select or Stage Loader code.",
"version": "1.4",
"date": "Feb 16, 2018",
"source": "C229E668000000643C60817F60630100380000009003000C380000019803000180AD9EC8889F00122C040001418102F498030000888500077080000141A2000C38803400480002D4888500067080008041A2000C38800906480002C07080004041A2000C38800905480002B07080002041A2000C38800904480002A07080001041A2000C38800903480002907080000841A2000C38800902480002807080000441A2000C3880090148000270888500057080004041A2000C388009004800025C7080002041A2000C388006064800024C7080001041A2000C388006054800023C7080000841A2000C388006044800022C7080000441A2000C388006034800021C7080000241A2000C388006024800020C7080000141A2000C38800601480001FC888500007080004041A2000C38800600480001E87080002041A2000C38800206480001D8888500027080000141A2000C38800205480001C4888500017080008041A2000C38800306480001B07080004041A2000C38800305480001A07080002041A2000C38800304480001907080001041A2000C38800303480001807080000841A2000C38800302480001707080000441A2000C3880030148000160888500047080001041A2000C388003004800014C7080000841A2000C388005064800013C7080000241A2000C388005024800012C7080000141A2000C388005034800011C888500037080008041A2000C38800502480001087080004041A2000C38800501480000F8888500087080000441A2000C38800500480000E4888500077080008041A2000C38800806480000D0888500087080000141A2000C38800805480000BC888500077080002041A2000C38800804480000A87080004041A2000C3880080348000098888500087080000241A2000C3880080248000084888500077080001041A2000C3880080148000070888500037080000441A2000C388008004800005C7080000841A2000C388004064800004C888500007080001041A2000C38800400480000387080000841A2000C38800204480000287080000441A2000C38800203480000187080000241A2000C388002024800000838800200B09F0012988500DF807F0020000000000414CF4448000020041571584E800020283E10D200002A0004148D20801C000404147F98A81C0340E2000001000000002A3E10D200002A0004148D203800000004147F9838005000E20000010000000020570B7C000000000474E87C2100000020570B7D000000010474E9F42121000020570B7D000000020474ED380000000020570B7D000000030474EE04A100000020570B7D000000040474EBDC21210000E200000100000000C22ADE1C00000004388403915480043C2C0003984182000C3C8000016084039A6000000000000000C22ADE8400000004388403915480043C2C0003984182000C3C8000016084039A6000000000000000"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Replace Episode names with their ID",
"description": "Replaces the Episode names with the episode number in the demo screen. (Useful for the stage loader.)",
"version": "1.1",
"date": "Feb 13, 2018",
"source": "C21687580000000480AD9EC888A500DF38A5003154A5403EB0A60000388000806000000000000000"
},
{
"author": "Ralf",
"title": "Shine Outfit",
"description": "Always wear shine outfit and sunglasses.",
"version": "1.0",
"date": "Oct 23, 2017",
"source": "04239C886000000404239C8CB01D00040424526860000000"
},
{
"author": "Unknown",
"title": "Any Fruit Opens Yoshi Eggs",
"description": "Allows opening Yoshi eggs with a different fruit than the one depicted.",
"version": "1.0",
"date": "Aug 19, 2018",
"source": "041B47B860000000"
},
{
"author": "Noki Doki",
"title": "Infinite Juice",
"description": "Prevents Yoshi from despawning by running out of juice.",
"version": "1.0",
"date": "Apr 5, 2019",
"source": "0426659C60000000"
},
{
"author": "Noki Doki",
"title": "Position/angle/speed display",
"description": "Shows Mario's position, angle and speed at any given time.",
"version": "1.3",
"date": "Oct 28, 2019",
"source": "0629E070000000104955C00960000000600000006000000004291750495688B104138B50496C15CD077FA000000001E89421FFE07C0802A69001002493E1001C4AAB56B538E0020038C0032038A0FFD83880000A386100084AAC824D814D9EF03FE081803BFFA1EC39200000390000023CE0818038E7A16480CA004838A10008388000007FE3FB784AACE99939200001913F01B0800100247C0803A683E1001C382100204E8000209421FFE87C0802A69001001C93A1000C93C1001093E100147C7F1B788123000083A900643D2081808129A39C2F890000409E002C7FE3FB787FA903A64E8004218001001C7C0803A683A1000C83C1001083E10014382100184E8000203D208040612957B083C900003C6081803863A1EC4AACED21C0BE00A8C09E00B0A0DE0096C07E0018C05E0014C03E00103CA0818038A5A164388000804CC632424AB378114BFFFF949421FFF07C0802A69001001493E1000C7C7F1B784AAE973538E000817FE6FB7838A00000388000003C6081803863A1EC4AACDE05800100147C0803A683E1000C382100104E8000205820506F7320252E30660A5920506F7320252E30660A5A20506F7320252E30660A416E676C65202568750A482053706420252E32660A562053706420252E32662020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000C229E64C00000003386000003D808180906CA39C807F00406000000000000000"
},
{
"author": "Noki Doki",
"title": "Intro skip",
"description": "Removes the logos and cutscene that normally play before the title screen when loading or resetting the game.",
"version": "1.0",
"date": "Jun 19, 2019",
"source": "0428D4C4480002640428D9B8480000140629E51C0000001438600F0038000000B07F000EB01F00104BFFFE9400000000"
},
{
"author": "Noki Doki",
"title": "Respawn One-Time Shines",
"description": "Allows Shines obtained by cleaning graffiti, the Shine Gate or the bells to respawn.",
"version": "1.0",
"date": "Aug 19, 2019",
"source": "041DF80448000050021DFED400004800021F774000004800"
},
{
"author": "Noki Doki",
"title": "Force Plaza Events",
"description": "Forces the unlock events for Ricco, Gelato and Yoshi to happen any time the correct version of the plaza is loaded. Nozzle unlock events take precedence over Yoshi's if their conditions are met.",
"version": "1.0",
"date": "Mar 8, 2020",
"source": "042AF7E048000018042AF82C48000018042AF89448000018042AF8C060000000042AF91060000000"
},
{
"author": "Noki Doki",
"title": "Fix Memory Card Encoding",
"description": "Enable this if your Nintendont saves do not work on your other loader (e.g. Gecko OS on a Japanese console).",
"version": "2.0",
"date": "Jun 25, 2020",
"source": "024045B800000001"
}
]
"codes": []
},
{
"identifier": "GMSJ01",
"name": "GMSJ01 (NTSC-J 1.0)",
"version": "GMSJ01",
"fastCode": {
"fileSelect": 946160,
@ -434,188 +69,10 @@
"no": ""
}
},
"codes": [
{
"author": "Psychonauter, Noki Doki, Dan Salvato, Link Master, James0x57",
"title": "DPad Functions",
"description": "Allows various game modifications. Button combinations:<br/><table><tr><th>Combination</th><th>Result</th></tr><tr><td>D-Pad left</td><td>Save Mario's position</td></tr><tr><td>D-Pad right</td><td>Load Mario's position</td></tr><tr><td>D-Pad up</td><td>Replace all dialog with a single \"!!!\" line</td></tr><tr><td>D-Pad down</td><td>Restore dialog boxes</td></tr><tr><td>B+D-Pad left</td><td>Lock rocket nozzle</td></tr><tr><td>B+D-Pad right</td><td>Lock turbo nozzle</td></tr><tr><td>B+D-Pad up</td><td>Lock hover nozzle</td></tr><tr><td>B+D-Pad down</td><td>Release nozzle lock</td></tr><tr><td>X+D-Pad left</td><td>No FLUDD in secrets</td></tr><tr><td>X+D-Pad right</td><td>FLUDD in all secrets</td></tr><tr><td>X+D-Pad up</td><td>Regrab last held object</td></tr><tr><td>X+D-Pad down</td><td>FLUDD in completed secrets (default)</td></tr></table>",
"version": "2.5",
"date": "Apr 3, 2019",
"source": "2440A39C80000000822000008040A39C80000001817F0008822000028040A3A4822000038040B37086000003000000A628400D51000000018A000C01000000008A0002210000000C8A0006310000000E28400D51000000028A000C10000000008C0002120000000C8C0006130000000E28400D510000000404215290801C000404214610A81C0340040E48888803021428400D510000000804215290380000000421461038005000040E48886000000028400D5100000208041494D43BE0000428400D5100000204041494D48BFE1C8528400D5100000201041494D43BE0000128400D5100000202041494D43BE0000528400D51000004010419878460000000040EC0F46000000028400D5100000402C61987848019879CC60EC0F4800EC10828400D51000004040419878440820018040EC0F44082001428400D5100000408480000008040A3981400007C00000383E000000000000000028D8A7E00028149048D8A84000000000411EB1060000000"
},
{
"author": "Noki Doki",
"title": "Infinite Lives",
"description": "Prevents the life counter from decreasing.",
"version": "2.0",
"date": "Feb 28, 2020",
"source": "040EBD8060000000"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Disable Blue Coin Flag",
"description": "Prevents the game from setting the blue coin flag, which makes them respawn after reentering the level.",
"version": "1.1",
"date": "Sep 05, 2018",
"source": "040E7B2060000000C20FA12C000000037CA0003980AD97D038800000908500D46000000000000000"
},
{
"author": "Psychonauter",
"title": "FMV Skips",
"description": "Allows skipping FMVs without having to watch them once first.",
"version": "1.0",
"date": "Jan 20, 2017",
"source": "0410AF5C386000010410AFC038600001"
},
{
"author": "Psychonauter",
"title": "Mute Background Music",
"description": "Mutes background music, but keeps SFX on.",
"version": "1.0",
"date": "Jan 28, 2017",
"source": "0417FF58FC210828"
},
{
"author": "Psychonauter",
"title": "Remove Save Boxes",
"description": "Removes all saveboxes.",
"version": "1.0",
"date": "Oct 02, 2017",
"source": "042193D848000020042230944E800020"
},
{
"author": "Noki Doki",
"title": "Unlock Yoshi",
"description": "Unlocks Yoshi everywhere.",
"version": "1.0",
"date": "Feb 10, 2018",
"source": "C6193F5880193F8CC6193F9C80193FB8"
},
{
"author": "Noki Doki",
"title": "Unlock Nozzles",
"description": "Unlocks all nozzle boxes.",
"version": "1.0",
"date": "Feb 12, 2018",
"source": "040E79F838600001040E79FC4E800020"
},
{
"author": "Noki Doki",
"title": "Free Pause",
"description": "Allows you to pause mid-air and during cutscenes.",
"version": "1.1",
"date": "Nov 12, 2017",
"source": "C60EB06C800EB078C20EAF9000000007887F007C2803000F41820028807F001880630000806300D4546307FF418200143C60800E6063B0387C6803A64E800020881F012400000000"
},
{
"author": "Noki Doki",
"title": "Enable Exit Area Everywhere",
"description": "Enables 'Exit Area' on Plaza and Airstrip.",
"version": "1.0",
"date": "Oct 30, 2017",
"source": "C621805480218060"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Shine Get Timer",
"description": "Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (similar to the x-cam timer of SM64). The timer pauses during loading times.<br /><br /><b><font color =\"#0046da\">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>",
"version": "2.0",
"date": "Oct 11, 2019",
"source": "C23617C40000000F3CC0817F60C60100888600002C0400014182002C888600012C04000140A200503CA0803E60A56010888500022C0400074182003C2C040009418100343C60800960633DF87C6803A64E80002180AD97E838A500E890650028906600049085002C908600083860000098660000800100246000000000000000C21953A8000000033C60817F60630100388000019083000C4E80002000000000C20EAF940000000C2C00000340A200503C60817F606301008083000C2C04000041A2003C388000009083000C7DE802A63C60807460639F007FB0EB783FA0800E63BD1B4C7FA803A64E8000217DE803A67E1D837839E000003A0000003C6080376000000000000000C209294C000000073DE0817F61EF01008A0F00002C1000014182000C806F0004808F00083A0000009A0F0000906F0004908F0008909F002C39E0000000000000C220A5A0000000137C6F1B787FB0EB783C60817F60630100888300012C04000140A2006438800000988300013C60803E60636010A06300022C030805418200482C030605418200402C031E00418200383C60807460639F003FA0800E63BD1EE07FA803A64E8000213C60807460639F003FA0800E63BD1D74398000007FA803A64E8000217DE37B787E1D837839E000003A000000800100CC6000000000000000C20E1E5400000003558C00014082000C3880000038600000909E00CC00000000C2232024000000033C60817F6063010038800101B0830000807F026800000000C23617C80000000A3C60803E60636010A083FFFE2C043C0040A20038A08300022C040FFF40A2002C7C1E03787FE802A63C60805660639F003C80800E60841B4C7C8803A64E8000217FE803A67FC0F37883E1001C00000000040929684E8000200420BDF8600000000420E8A460000000040E1F1060000000040E1D9C60000000040E1B6C6000000004749F000000000004749F040000000004749F180000000304749F1C0000000204749F2080749F2404749F240000000004749F280000000104749F2C0000000004749F30000000B40420C0744800006C077F00C00000004038000000600000017D0D42E67D2C42E67C6D42E67C0818004082FFF03D40817F806A01087C634810906A0108806A01047C634110906A01043860001C4E800020040EA43849705C91040ECE40497032810410AD28496E539D0410BFCC496E40F5"
},
{
"author": "Psychonauter, Dan Salvato, ParadoxKarl, Noki Doki",
"title": "Level Select",
"description": "Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. This code is not compatible with the Fast Any% or Stage Loader code. Codes:<br /><br /><div><img src=\"/img/levelselect.png\" width=\"500px\"></div>",
"version": "1.14",
"date": "May 8, 2020",
"source": "C20FA114000000733C60817F3CA0804060A50D8038E0000090E3010C38E0000198E30101A09F00122C040D05418103182C040109418103082C0400014182030838E0000198E30100A0E5000254E6C6F67CC73B7870E70C7088C500012C86000040860024418202E02C070800A1030000418202BC2C070010408201D4A1030002480002B82C060009418201C42C0600084082000C39000200480000602C06000A4082000C39000300480000502C0600024082000C39000400480000402C0600064082000C39000500480000302C0600044082000C39000600480000202C0600054082000C39000800480000102C06000140820254390009002C070000418202302C0700404082000C39080001480002202C0700204082000C39080002480002102C0700604082000C39080003480002002C0700104082000C39080004480001F02C0700504082000C39080005480001E02C0700304082000C39080006480001D02C0700704082000C39080007480001C02C070400408200682C0600044082000C39000E01480001B02C06000A4082000C39001E00480001A02C0600024082000C39002100480001902C0600014082000C39003900480001802C0600084082000C39003700480001702C06000539003A004082016439002C004800015C2C070800408201642C0600084082000C39000100480001442C06000A4082000C39000101480001342C0600024082000C39000105480001242C0600064082000C39000107480001142C0600044082000C39000108480001042C0600054082000C39000109480000F439000102480000EC2C070040408200103900140039202E00480000C42C070020408200103900150039203000480000B02C0700604082001039001600392020004800009C2C070050408200103900170039202900480000882C070030408200103900180039203300480000742C0700704082001039001D0039202800480000602C070400408200103900340039202A004800004C2C070440408200103900000039201F00480000382C0708004082000C39203A01480000282C070840408200103900100039203C00480000142C070010392032004182000839202F002C06000940A200107D284B7880AD97D0990500DFB1030000B11F0012A09F0012B08300022C041E004182002C2C040404418200242C0408014182001C2C040904418200142C0406054182000C2C04080540A2000C38800000B0830100807F0020889F00122C0400074182000C2C04000E40A2000C3880003BB08300E400000000060EAC70000000083C60000338830005C210E598000000035460063F41820010881D000F2C0000076000000000000000C210E6EC00000003806D97D0880300CC54000734980300CC4E80002000000000"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Fast Any%",
"description": "Loads stages in any% order, skips all save boxes, replaces all dialog with \"!!!\" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select or Stage Loader code.",
"version": "1.4",
"date": "Feb 16, 2018",
"source": "C20FA19C000000643C60817F60630100380000009003000C380000019803000180AD97D0889F00122C040001418102F498030000888500077080000141A2000C38803400480002D4888500067080008041A2000C38800906480002C07080004041A2000C38800905480002B07080002041A2000C38800904480002A07080001041A2000C38800903480002907080000841A2000C38800902480002807080000441A2000C3880090148000270888500057080004041A2000C388009004800025C7080002041A2000C388006064800024C7080001041A2000C388006054800023C7080000841A2000C388006044800022C7080000441A2000C388006034800021C7080000241A2000C388006024800020C7080000141A2000C38800601480001FC888500007080004041A2000C38800600480001E87080002041A2000C38800206480001D8888500027080000141A2000C38800205480001C4888500017080008041A2000C38800306480001B07080004041A2000C38800305480001A07080002041A2000C38800304480001907080001041A2000C38800303480001807080000841A2000C38800302480001707080000441A2000C3880030148000160888500047080001041A2000C388003004800014C7080000841A2000C388005064800013C7080000241A2000C388005024800012C7080000141A2000C388005034800011C888500037080008041A2000C38800502480001087080004041A2000C38800501480000F8888500087080000441A2000C38800500480000E4888500077080008041A2000C38800806480000D0888500087080000141A2000C38800805480000BC888500077080002041A2000C38800804480000A87080004041A2000C3880080348000098888500087080000241A2000C3880080248000084888500077080001041A2000C3880080148000070888500037080000441A2000C388008004800005C7080000841A2000C388004064800004C888500007080001041A2000C38800400480000387080000841A2000C38800204480000287080000441A2000C38800203480000187080000241A2000C388002024800000838800200B09F0012988500DF807F002000000000042193D848000020042230944E800020048D8A7CD6008149048D8A8081498149048D8A8400000000283E601200002A0004215290801C000404214610A81C0340E2000001000000002A3E601200002A0004215290380000000421461038005000E200000100000000C210AF5800000004388403915480043C2C0003984182000C3C8000016084039A6000000000000000C210AFBC00000004388403915480043C2C0003984182000C3C8000016084039A6000000000000000"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Replace Episode names with their ID",
"description": "Replaces the Episode names with the episode number in the demo screen. (Useful for the stage loader.)",
"version": "1.1",
"date": "Feb 13, 2018",
"source": "C2232C700000000480AD97D088A500DF38A5003154A5403EB0A60000388000806000000000000000"
},
{
"author": "Ralf, Psychonauter",
"title": "Shine Outfit",
"description": "Always wear shine outfit and sunglasses.",
"version": "1.0",
"date": "Oct 23, 2017",
"source": "04120D1C6000000404120D20B01D00040412C9B060000000"
},
{
"author": "Unknown, Noki Doki",
"title": "Any Fruit Opens Yoshi Eggs",
"description": "Allows opening Yoshi eggs with a different fruit than the one depicted.",
"version": "1.0",
"date": "Aug 19, 2018",
"source": "041948E860000000"
},
{
"author": "Noki Doki",
"title": "Infinite Juice",
"description": "Prevents Yoshi from despawning by running out of juice.",
"version": "1.0",
"date": "Apr 5, 2019",
"source": "0414DB8860000000"
},
{
"author": "Noki Doki",
"title": "Position/angle/speed display",
"description": "Shows Mario's position, angle and speed at any given time.",
"version": "1.3",
"date": "Oct 28, 2019",
"source": "060F9B640000001049700515600000006000000060000000040ECE3C4970D1C504206734495F39E9077FA000000001E89421FFE07C0802A69001002493E1001C4A91239D38E0020038C0032038A0FFD83880000A386100084A8191F5814D97F83FE081803BFFA1EC39200000390000023CE0818038E7A16480CA004838A10008388000007FE3FB784A81F8AD39200001913F01B0800100247C0803A683E1001C382100204E8000209421FFE87C0802A69001001C93A1000C93C1001093E100147C7F1B788123000083A900643D2081808129A39C2F890000409E002C7FE3FB787FA903A64E8004218001001C7C0803A683A1000C83C1001083E10014382100184E8000203D2080406129A37883C900003C6081803863A1EC4A81FC35C0BE00A8C09E00B0A0DE0096C07E0018C05E0014C03E00103CA0818038A5A164388000804CC632424A889FB14BFFFF949421FFF07C0802A69001001493E1000C7C7F1B784A83B0F938E000817FE6FB7838A00000388000003C6081803863A1EC4A81ED19800100147C0803A683E1000C382100104E8000205820506F7320252E30660A5920506F7320252E30660A5A20506F7320252E30660A416E676C65202568750A482053706420252E32660A562053706420252E32662020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000C20FA0F800000003386000003D808180906CA39C807F00406000000000000000"
},
{
"author": "Noki Doki",
"title": "Intro skip",
"description": "Removes the logos and cutscene that normally play before the title screen when loading or resetting the game.",
"version": "1.0",
"date": "Jun 19, 2019",
"source": "040E8C68480002C4040E90DC48000014060F9FE40000001438600F0038000000B07F000EB01F00104BFFFEB000000000"
},
{
"author": "Noki Doki",
"title": "Respawn One-Time Shines",
"description": "Allows Shines obtained by cleaning graffiti, the Shine Gate or the bells to respawn.",
"version": "1.0",
"date": "Aug 19, 2019",
"source": "041BF37848000050021BFA4800004800021D72E800004800"
},
{
"author": "Noki Doki",
"title": "Force Plaza Events",
"description": "Forces the unlock events for Ricco, Gelato and Yoshi to happen any time the correct version of the plaza is loaded. Nozzle unlock events take precedence over Yoshi's if their conditions are met.",
"version": "1.0",
"date": "Mar 8, 2020",
"source": "0410C4C8480000180410C514480000180410C57C480000180410C5A8600000000410C5F860000000"
},
{
"author": "Noki Doki",
"title": "Fix Memory Card Encoding",
"description": "Enable this if your Nintendont saves do not work on your other loader (e.g. Gecko OS on a non-Japanese console).",
"version": "2.0",
"date": "Jun 25, 2020",
"source": "02408D1800000000"
}
]
"codes": []
},
{
"identifier": "GMSJ0A",
"name": "GMSJ01 (NTSC-J 1.1)",
"version": "GMSJ01",
"fastCode": {
"fileSelect": 2569968,
@ -636,183 +93,6 @@
"no": ""
}
},
"codes": [
{
"author": "Psychonauter, Noki Doki, Dan Salvato, Link Master, James0x57",
"title": "DPad Functions",
"description": "Allows various game modifications. Button combinations:<br/><table><tr><th>Combination</th><th>Result</th></tr><tr><td>D-Pad left</td><td>Save Mario's position</td></tr><tr><td>D-Pad right</td><td>Load Mario's position</td></tr><tr><td>D-Pad up</td><td>Replace all dialog with a single \"!!!\" line</td></tr><tr><td>D-Pad down</td><td>Restore dialog boxes</td></tr><tr><td>B+D-Pad left</td><td>Lock rocket nozzle</td></tr><tr><td>B+D-Pad right</td><td>Lock turbo nozzle</td></tr><tr><td>B+D-Pad up</td><td>Lock hover nozzle</td></tr><tr><td>B+D-Pad down</td><td>Release nozzle lock</td></tr><tr><td>X+D-Pad left</td><td>No FLUDD in secrets</td></tr><tr><td>X+D-Pad right</td><td>FLUDD in all secrets</td></tr><tr><td>X+D-Pad up</td><td>Regrab last held object</td></tr><tr><td>X+D-Pad down</td><td>FLUDD in completed secrets (default)</td></tr></table>",
"version": "2.5",
"date": "Apr 3, 2019",
"source": "243FEFAC8000000082200000803FEFAC80000001817F000882200002803FEFB482200003803FFA3886000003000000A6283F5429000000018A000C01000000008A0002210000000C8A0006310000000E283F5429000000028A000C10000000008C0002120000000C8C0006130000000E283F542900000004041351C4801C000404134524A81C03400427109088030214283F542900000008041351C43800000004134524380050000427109088030214283F54290000020804249CA03BE00004283F54290000020404249CA08BFE1C85283F54290000020104249CA03BE00001283F54290000020204249CA03BE00005283F542900000401041A0698600000000427883060000000283F542900000402C61A0698801A06B0C627883080278844283F542900000404041A0698408200180427883040820014283F54290000040848000000803FEFA81400007C00000383E000000000000000028CD55E00028149048CD564000000000421F71C60000000"
},
{
"author": "Noki Doki",
"title": "Infinite Lives",
"description": "Prevents the life counter from decreasing.",
"version": "2.0",
"date": "Feb 28, 2020",
"source": "042784BC60000000"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Disable Blue Coin Flag",
"description": "Prevents the game from setting the blue coin flag, which makes them respawn after reentering the level.",
"version": "1.1",
"date": "Sep 05, 2018",
"source": "0427422060000000C2286584000000037CA0003980AD9E6038800000908500D46000000000000000"
},
{
"author": "Psychonauter, Noki Doki",
"title": "FMV Skips",
"description": "Allows skipping FMVs without having to watch them once first.",
"version": "1.0",
"date": "Jan 17, 2018",
"source": "04295AB43860000104295B1838600001"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Mute Background Music",
"description": "Mutes background music, but keeps SFX on.",
"version": "1.0",
"date": "Jan 17, 2018",
"source": "04016A90FC210828"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Remove Save Boxes",
"description": "Removes all saveboxes.",
"version": "1.0",
"date": "Jan 18, 2018",
"source": "0413934C48000020041431784E800020"
},
{
"author": "Noki Doki",
"title": "Unlock Yoshi",
"description": "Unlocks Yoshi everywhere.",
"version": "1.0",
"date": "Feb 10, 2018",
"source": "C619BCF88019BD2CC619BD3C8019BD58"
},
{
"author": "Noki Doki",
"title": "Unlock Nozzles",
"description": "Unlocks all nozzle boxes.",
"version": "1.0",
"date": "Feb 12, 2018",
"source": "042740F838600001042740FC4E800020"
},
{
"author": "Noki Doki",
"title": "Free Pause",
"description": "Allows you to pause mid-air and during cutscenes.",
"version": "1.1",
"date": "Jan 17, 2018",
"source": "C627775880277764C227767C00000007887F007C2803000F41820028807F001880630000806300D4546307FF418200143C608027606377247C6803A64E800020881F012400000000"
},
{
"author": "Noki Doki",
"title": "Enable Exit Area Everywhere",
"description": "Enables 'Exit Area' on Plaza and Airstrip.",
"version": "1.0",
"date": "Jan 17, 2018",
"source": "C6137F9880137FA4"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Shine Get Timer",
"description": "Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (similar to the x-cam timer of SM64). The timer pauses during loading times.<br /><br /><b><font color =\"#0046da\">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>",
"version": "2.0",
"date": "Oct 11, 2019",
"source": "C2363E700000000F3CC0817F60C60100888600002C0400014182002C888600012C04000140A200503CA0803D60A5A8F0888500022C0400074182003C2C040009418100343C60803260638DD87C6803A64E80002180AD9E7838A500E890650028906600049085002C908600083860000098660000800100246000000000000000C219D160000000033C60817F60630100388000019083000C4E80002000000000C22776800000000C2C00000340A200503C60817F606301008083000C2C04000041A2003C388000009083000C7DE802A63C6080566063DD007FB0EB783FA0802663BDE3547FA803A64E8000217DE803A67E1D837839E000003A0000003C6080396000000000000000C232792C000000073DE0817F61EF01008A0F00002C1000014182000C806F0004808F00083A0000009A0F0000906F0004908F0008909F002C39E0000000000000C212A528000000137C6F1B787FB0EB783C60817F60630100888300012C04000140A2006438800000988300013C60803D6063A8F0A06300022C030805418200482C030605418200402C031E00418200383C6080566063DD003FA0802663BDE6E87FA803A64E8000213C6080566063DD003FA0802663BDE57C398000007FA803A64E8000217DE37B787E1D837839E000003A000000800100CC6000000000000000C226E65C00000003558C00014082000C3880000038600000909E00CC00000000C21528FC000000033C60817F6063010038800101B0830000807F026800000000C2363E740000000A3C60803D6063A8F0A083FFFE2C043C0040A20038A08300022C040FFF40A2002C7C1E03787FE802A63C6080566063DD003C8080266084E3547C8803A64E8000217FE803A67FC0F37883E1001C00000000043279484E8000200412BD90600000000412E6F8600000000426E718600000000426E5A4600000000426E374600000000456DD00000000000456DD04000000000456DD18000000030456DD1C000000020456DD208056DD240456DD24000000000456DD28000000010456DD2C000000000456DD30000000B40412C00C4800006C077F00C00000004038000000600000017D0D42E67D2C42E67C6D42E67C0818004082FFF03D40817F806A01087C634810906A0108806A01047C634110906A01043860001C4E80002004276B24495795A50427956C49576B55042958804955A84504296B244955959D"
},
{
"author": "Psychonauter, Dan Salvato, ParadoxKarl, Noki Doki",
"title": "Level Select",
"description": "Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. This code is not compatible with the Fast Any% or Stage Loader code. Codes:<br /><br /><div><img src=\"/img/levelselect.png\" width=\"500px\"></div>",
"version": "1.14",
"date": "May 8, 2020",
"source": "C228656C000000733C60817F3CA0803F60A5545838E0000090E3010C38E0000198E30101A09F00122C040D05418103182C040109418103082C0400014182030838E0000198E30100A0E5000254E6C6F67CC73B7870E70C7088C500012C86000040860024418202E02C070800A1030000418202BC2C070010408201D4A1030002480002B82C060009418201C42C0600084082000C39000200480000602C06000A4082000C39000300480000502C0600024082000C39000400480000402C0600064082000C39000500480000302C0600044082000C39000600480000202C0600054082000C39000800480000102C06000140820254390009002C070000418202302C0700404082000C39080001480002202C0700204082000C39080002480002102C0700604082000C39080003480002002C0700104082000C39080004480001F02C0700504082000C39080005480001E02C0700304082000C39080006480001D02C0700704082000C39080007480001C02C070400408200682C0600044082000C39000E01480001B02C06000A4082000C39001E00480001A02C0600024082000C39002100480001902C0600014082000C39003900480001802C0600084082000C39003700480001702C06000539003A004082016439002C004800015C2C070800408201642C0600084082000C39000100480001442C06000A4082000C39000101480001342C0600024082000C39000105480001242C0600064082000C39000107480001142C0600044082000C39000108480001042C0600054082000C39000109480000F439000102480000EC2C070040408200103900140039202E00480000C42C070020408200103900150039203000480000B02C0700604082001039001600392020004800009C2C070050408200103900170039202900480000882C070030408200103900180039203300480000742C0700704082001039001D0039202800480000602C070400408200103900340039202A004800004C2C070440408200103900000039201F00480000382C0708004082000C39203A01480000282C070840408200103900100039203C00480000142C070010392032004182000839202F002C06000940A200107D284B7880AD9E60990500DFB1030000B11F0012A09F0012B08300022C041E004182002C2C040404418200242C0408014182001C2C040904418200142C0406054182000C2C04080540A2000C38800000B0830100807F0020889F00122C0400074182000C2C04000E40A2000C3880003BB08300E4000000000627735C000000083C60000338830005C22990F0000000035460063F41820010881D000F2C0000076000000000000000C229924400000003806D9E60880300CC54000734980300CC4E80002000000000"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Fast Any%",
"description": "Loads stages in any% order, skips all save boxes, replaces all dialog with \"!!!\" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select or Stage Loader code.",
"version": "1.4",
"date": "Feb 16, 2018",
"source": "C22865F4000000643C60817F60630100380000009003000C380000019803000180AD9E60889F00122C040001418102F498030000888500077080000141A2000C38803400480002D4888500067080008041A2000C38800906480002C07080004041A2000C38800905480002B07080002041A2000C38800904480002A07080001041A2000C38800903480002907080000841A2000C38800902480002807080000441A2000C3880090148000270888500057080004041A2000C388009004800025C7080002041A2000C388006064800024C7080001041A2000C388006054800023C7080000841A2000C388006044800022C7080000441A2000C388006034800021C7080000241A2000C388006024800020C7080000141A2000C38800601480001FC888500007080004041A2000C38800600480001E87080002041A2000C38800206480001D8888500027080000141A2000C38800205480001C4888500017080008041A2000C38800306480001B07080004041A2000C38800305480001A07080002041A2000C38800304480001907080001041A2000C38800303480001807080000841A2000C38800302480001707080000441A2000C3880030148000160888500047080001041A2000C388003004800014C7080000841A2000C388005064800013C7080000241A2000C388005024800012C7080000141A2000C388005034800011C888500037080008041A2000C38800502480001087080004041A2000C38800501480000F8888500087080000441A2000C38800500480000E4888500077080008041A2000C38800806480000D0888500087080000141A2000C38800805480000BC888500077080002041A2000C38800804480000A87080004041A2000C3880080348000098888500087080000241A2000C3880080248000084888500077080001041A2000C3880080148000070888500037080000441A2000C388008004800005C7080000841A2000C388004064800004C888500007080001041A2000C38800400480000387080000841A2000C38800204480000287080000441A2000C38800203480000187080000241A2000C388002024800000838800200B09F0012988500DF807F0020000000000413934C48000020041431784E800020048CD55CD6008149048CD56081498149048CD56400000000283DA8F200002A00041351C4801C000404134524A81C0340E2000001000000002A3DA8F200002A00041351C4380000000413452438005000E200000100000000C2295AB000000004388403915480043C2C0003984182000C3C8000016084039A6000000000000000C2295B1400000004388403915480043C2C0003984182000C3C8000016084039A6000000000000000"
},
{
"author": "Psychonauter, Noki Doki",
"title": "Replace Episode names with their ID",
"description": "Replaces the Episode names with the episode number in the demo screen. (Useful for the stage loader.)",
"version": "1.1",
"date": "Feb 13, 2018",
"source": "C21535480000000480AD9E6088A500DF38A5003154A5403EB0A60000388000806000000000000000"
},
{
"author": "Ralf, Noki Doki",
"title": "Shine Outfit",
"description": "Always wear shine outfit and sunglasses.",
"version": "1.0",
"date": "Jan 17, 2018",
"source": "042219246000000404221928B01D00040422D22C60000000"
},
{
"author": "Unknown, Noki Doki",
"title": "Any Fruit Opens Yoshi Eggs",
"description": "Allows opening Yoshi eggs with a different fruit than the one depicted.",
"version": "1.0",
"date": "Aug 19, 2018",
"source": "0419C68860000000"
},
{
"author": "Noki Doki",
"title": "Infinite Juice",
"description": "Prevents Yoshi from despawning by running out of juice.",
"version": "1.0",
"date": "Apr 5, 2019",
"source": "0424E56060000000"
},
{
"author": "Noki Doki",
"title": "Position/angle/speed display",
"description": "Shows Mario's position, angle and speed at any given time.",
"version": "1.3",
"date": "Oct 28, 2019",
"source": "06285FBC00000010495740BD6000000060000000600000000427956849580A99041252A0496D4E7D077FA000000001E89421FFE07C0802A69001002493E1001C4AA9CEF538E0020038C0032038A0FFD83880000A386100084AAAF9C9814D9E883FE081803BFFA1EC39200000390000023CE0818038E7A16480CA004838A10008388000007FE3FB784AAB600139200001913F01B0800100247C0803A683E1001C382100204E8000209421FFE87C0802A69001001C93A1000C93C1001093E100147C7F1B788123000083A900643D2081808129A39C2F890000409E002C7FE3FB787FA903A64E8004218001001C7C0803A683A1000C83C1001083E10014382100184E8000203D20803F6129EF8883C900003C6081803863A1EC4AAB6389C0BE00A8C09E00B0A0DE0096C07E0018C05E0014C03E00103CA0818038A5A164388000804CC632424AB1EF914BFFFF949421FFF07C0802A69001001493E1000C7C7F1B784AAD0D9D38E000817FE6FB7838A00000388000003C6081803863A1EC4AAB546D800100147C0803A683E1000C382100104E8000205820506F7320252E30660A5920506F7320252E30660A5A20506F7320252E30660A416E676C65202568750A482053706420252E32660A562053706420252E32662020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200000000000C228655000000003386000003D808180906CA39C807F00406000000000000000"
},
{
"author": "Noki Doki",
"title": "Intro skip",
"description": "Removes the logos and cutscene that normally play before the title screen when loading or resetting the game.",
"version": "1.0",
"date": "Jun 19, 2019",
"source": "042753744800027C042757C8480000140628643C0000001438600F0038000000B07F000EB01F00104BFFFEB000000000"
},
{
"author": "Noki Doki",
"title": "Respawn One-Time Shines",
"description": "Allows Shines obtained by cleaning graffiti, the Shine Gate or the bells to respawn.",
"version": "1.0",
"date": "Aug 19, 2019",
"source": "041C76A448000050021C7D7400004800021DF60000004800"
},
{
"author": "Noki Doki",
"title": "Force Plaza Events",
"description": "Forces the unlock events for Ricco, Gelato and Yoshi to happen any time the correct version of the plaza is loaded. Nozzle unlock events take precedence over Yoshi's if their conditions are met.",
"version": "1.0",
"date": "Mar 8, 2020",
"source": "04297020480000180429706C48000018042970D44800001804297100600000000429715060000000"
},
{
"author": "Noki Doki",
"title": "Fix Memory Card Encoding",
"description": "Enable this if your Nintendont saves do not work on your other loader (e.g. Gecko OS on a non-Japanese console).",
"version": "2.0",
"date": "Jun 25, 2020",
"source": "023FDDB000000000"
}
]
"codes": []
}
]

View file

@ -0,0 +1,32 @@
[
[
"container",
{
"type": "tip",
"defaultTitle": {
"/": "TIP",
"/de/": "TIP"
}
}
],
[
"container",
{
"type": "warning",
"defaultTitle": {
"/": "WARNING",
"/de/": "ACHTUNG"
}
}
],
[
"container",
{
"type": "danger",
"defaultTitle": {
"/": "WARNING",
"/de/": "WARNUNG"
}
}
]
]

View file

@ -0,0 +1,90 @@
{
"common": {
"download": "Herunterladen",
"yes": "Ja",
"no": "Nein",
"GMSE01": "GMSE01 (NTSC-U)",
"GMSJ01": "GMSJ01 (NTSC-J 1.0)",
"GMSJ0A": "GMSJ01 (NTSC-J 1.1)",
"GMSP01": "GMSP01 (PAL)"
},
"headers": {
"help": "Hilfe",
"codelist": "Verfügbare Codes",
"stageloader": "Stage Loader"
},
"codeinfo": {
"author": "Autor:",
"authors": "Autoren:",
"version": "Version:"
},
"generatorconfig": {
"gameversion": {
"label": "Spiel Version:",
"placeholder": "Wähle Version.."
},
"usestageloader": "Stage Loader verwenden:",
"downloadformat": {
"label": "Download Format:",
"options": {
"gct": "GCT",
"dolphin": "Dolphin INI",
"gcm": "CheatManager TXT"
}
}
},
"landingpage": {
"title": "Super Mario Sunshine Practice File Generator",
"summary": "Ein Cheat-Datei-Generator für Super Mario Sunshine Speedruns. Falls du den Generator bisher nie verwendet hast, empfehlen wir dir erst den <a href='/de/guide.html' target='_blank'>Guide</a> durchzulesen. Falls etwas nicht funktioniert findest du im Abschnitt 'Problembehebung' einige Infos.",
"community": "Die SMS Speedrunning Community",
"links": {
"discord": "Discord",
"twitter": "Twitter: @SMSCommunity",
"twitch": "Twitch: SunshineCommunity",
"src": "Speedrun.com Ranglisten"
}
},
"stageloader": {
"levelorder": {
"label": "Level Reihenfolge:",
"options": {
"list": "Wie angegeben",
"shuffle": "Mixen",
"random": "Zufällig"
}
},
"postgame": {
"label": "Nach der Route:",
"options": {
"0F00": "Zurück zum Titelbildschirm",
"0109": "Lade die geflutete Plaza",
"0102": "Lade Post-Corona Plaza",
"3400": "Lade Corona",
"3C00": "Lade den Bowserkampf"
}
},
"removedialogue": {
"label": "Dialoge entfernen:",
"options": {
"pv5": "Nicht in Pinna 5",
"yes": "Immer",
"no": "Nie"
}
},
"skippablefmvs": {
"label": "Überspringbare FMVs:",
"options": {
"pp": "Nicht in Pinna",
"yes": "Immer",
"no": "Nie"
}
},
"levelselectplaceholder": "Wähle ein Level..",
"loadpresetplaceholder": "Lade eine Vorlage..",
"route": "Route",
"clear": "Liste leeren"
},
"misc": {
"defaulthelpmessage": "Wähle deine Codes von der Liste auf der linken Seite."
}
}

View file

@ -0,0 +1,90 @@
{
"common": {
"download": "Download",
"yes": "Yes",
"no": "No",
"GMSE01": "GMSE01 (NTSC-U)",
"GMSJ01": "GMSJ01 (NTSC-J 1.0)",
"GMSJ0A": "GMSJ01 (NTSC-J 1.1)",
"GMSP01": "GMSP01 (PAL)"
},
"headers": {
"codelist": "Available Codes",
"help": "Help",
"stageloader": "Stage Loader"
},
"codeinfo": {
"author": "Author:",
"authors": "Authors:",
"version": "Version:"
},
"generatorconfig": {
"gameversion": {
"label": "Game Version:",
"placeholder": "Choose Version.."
},
"usestageloader": "Use Stage Loader",
"downloadformat": {
"label": "Download Format:",
"options": {
"gct": "GCT",
"dolphin": "Dolphin INI",
"gcm": "CheatManager TXT"
}
}
},
"landingpage": {
"title": "Super Mario Sunshine Practice File Generator",
"summary": "This is a cheatfile generator for Super Mario Sunshine speedrun practice. If this is your first time using the generator we highly recommend to check out the <a href='/guide.html' target='_blank'>guide</a> first. Visit the <a href='/guide.html#troubleshooting' target='_blank'>the troubleshooting section</a> if you encounter any issues.",
"community": "The SMS Speedrunning Community",
"links": {
"discord": "Discord",
"twitter": "Twitter: @SMSCommunity",
"twitch": "Twitch: SunshineCommunity",
"src": "Speedrun.com Leaderboards"
}
},
"stageloader": {
"levelorder": {
"label": "Level Order",
"options": {
"list": "As specified",
"shuffle": "Random, no duplicates",
"random": "Fully random"
}
},
"removedialogue": {
"label": "Remove Dialogue:",
"options": {
"pv5": "Not in Pinna 5",
"yes": "Always",
"no": "Don't include"
}
},
"skippablefmvs": {
"label": "Skippable FMVs:",
"options": {
"pp": "Not in Pinna",
"yes": "Always",
"no": "Don't include"
}
},
"postgame": {
"label": "Post-Game:",
"options": {
"0F00": "Return to the title screen",
"0109": "Load the flooded plaza",
"0102": "Load post-Corona plaza",
"3400": "Load Corona Montain",
"3C00": "Load the Bowser fight"
}
},
"levelselectplaceholder": "Choose a level..",
"loadpresetplaceholder": "Load a preset..",
"route": "Route",
"clear": "Clear List"
},
"misc": {
"defaulthelpmessage": "Select your codes from the list on the left."
}
}

View file

@ -0,0 +1,55 @@
import enUS from './en-US.json';
import deCH from './de-CH.json';
const translations = {
enUS,
deCH,
};
const getNestedProp = (obj, path) => {
const props = path.split('.');
try {
let currentProp = obj[props.shift()];
while (props.length > 0) currentProp = currentProp[props.shift()];
return currentProp;
} catch {
return null;
}
};
const translateCodeProp = (code, prop, locale, fallbackLocale, html = false) => {
const targetProp = html ? 'html' : 'content';
const title = code[prop].find((t) => t.lang === locale);
const fallbackTitle = code[prop].find((t) => t.lang === fallbackLocale);
if (title && title[targetProp]) code[prop] = title[targetProp];
else if (fallbackTitle && fallbackTitle[targetProp]) code[prop] = fallbackTitle[targetProp];
else code[prop] = null;
};
const translateInternal = (identifier, locale) => {
if (locale) {
const localeId = locale.replace('-', '');
if (translations[localeId] != null) {
const translatedAttribute = getNestedProp(translations[localeId], identifier);
if (translatedAttribute) return translatedAttribute;
}
}
return null;
};
export const translate = (identifier, locale, fallbackLocale = 'en-US') => {
const translatedAttribute = translateInternal(identifier, locale);
if (translatedAttribute) return translatedAttribute;
return translateInternal(identifier, fallbackLocale);
};
export const translateCode = (code, locale, fallbackLocale = 'en-US') => {
const cpy = {};
Object.assign(cpy, code);
translateCodeProp(cpy, 'title', locale, fallbackLocale);
translateCodeProp(cpy, 'description', locale, fallbackLocale, true);
return cpy;
};

View file

@ -0,0 +1,64 @@
{
"/": {
"lang": "en-US",
"title": "GCT Generator",
"selectText": "Language",
"label": "English",
"ariaLabel": "Language",
"editLinkText": "Edit this page on GitHub",
"nav": [
{
"text": "Cookbook",
"link": "/guide.html"
},
{
"text": "Code Reference",
"link": "/code-reference/index.html"
},
{
"text": "Installing IOS58",
"link": "/ios58.html"
},
{
"text": "Sunshine Discord",
"link": "https://discord.gg/9dGJWEc"
},
{
"text": "Changelog",
"link": "https://github.com/BitPatty/gctGenerator/blob/master/changelog.md"
}
]
},
"/de/": {
"lang": "de-CH",
"title": "GCT Generator",
"selectText": "Sprache",
"label": "Deutsch",
"ariaLabel": "Sprache",
"editLinkText": "Bearbeite diese Seite auf GitHub",
"activeHeaderLinks": false,
"nav": [
{
"text": "Cookbook",
"link": "/de/guide.html"
},
{
"text": "Code Referenz",
"link": "/de/code-reference/index.html"
},
{
"text": "IOS58 Installation",
"link": "/de/ios58.html"
},
{
"text": "Sunshine Discord",
"link": "https://discord.gg/9dGJWEc"
},
{
"text": "Changelog",
"link": "https://github.com/BitPatty/gctGenerator/blob/master/changelog.md"
}
]
}
}

View file

@ -8,164 +8,3 @@ editLink: false
## List of available codes
<!-- injectionpoint -->
### Any Fruit Opens Yoshi Eggs
_Version: 1.0 (Aug 19, 2018)_
_Authors: Unknown, Noki Doki_
Allows opening Yoshi eggs with a different fruit than the one depicted.
### DPad Functions
_Version: 2.5 (Apr 3, 2019)_
_Authors: Psychonauter, Noki Doki, Dan Salvato, Link Master, James0x57_
Allows various game modifications. Button combinations:<br/><table><tr><th>Combination</th><th>Result</th></tr><tr><td>D-Pad left</td><td>Save Mario's position</td></tr><tr><td>D-Pad right</td><td>Load Mario's position</td></tr><tr><td>D-Pad up</td><td>Replace all dialog with a single "!!!" line</td></tr><tr><td>D-Pad down</td><td>Restore dialog boxes</td></tr><tr><td>B+D-Pad left</td><td>Lock rocket nozzle</td></tr><tr><td>B+D-Pad right</td><td>Lock turbo nozzle</td></tr><tr><td>B+D-Pad up</td><td>Lock hover nozzle</td></tr><tr><td>B+D-Pad down</td><td>Release nozzle lock</td></tr><tr><td>X+D-Pad left</td><td>No FLUDD in secrets</td></tr><tr><td>X+D-Pad right</td><td>FLUDD in all secrets</td></tr><tr><td>X+D-Pad up</td><td>Regrab last held object</td></tr><tr><td>X+D-Pad down</td><td>FLUDD in completed secrets (default)</td></tr></table>
### Disable Blue Coin Flag
_Version: 1.1 (Sep 05, 2018)_
_Authors: Psychonauter, Noki Doki_
Prevents the game from setting the blue coin flag, which makes them respawn after reentering the level.
### Enable Exit Area Everywhere
_Version: 1.0 (Oct 30, 2017)_
_Author: Noki Doki_
Enables 'Exit Area' on Plaza and Airstrip.
### FMV Skips
_Version: 1.0 (Jan 20, 2017)_
_Author: Psychonauter_
Allows skipping FMVs without having to watch them once first.
### Fast Any%
_Version: 1.4 (Feb 16, 2018)_
_Authors: Psychonauter, Noki Doki_
Loads stages in any% order, skips all save boxes, replaces all dialog with "!!!" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select, Stage Loader or Stage Randomizer code.
### Fix Memory Card Encoding
_Version: 2.0 (Jun 25, 2020)_
_Author: Noki Doki_
Enable this if your Nintendont saves do not work on your other loader (e.g. Gecko OS on a Japanese console).
### Force Plaza Events
_Version: 1.0 (Mar 8, 2020)_
_Author: Noki Doki_
Forces the unlock events for Ricco, Gelato and Yoshi to happen any time the correct version of the plaza is loaded. Nozzle unlock events take precedence over Yoshi's if their conditions are met.
### Free Pause
_Version: 1.1 (Nov 12, 2017)_
_Author: Noki Doki_
Allows you to pause mid-air and during cutscenes.
### Infinite Juice
_Version: 1.0 (Apr 5, 2019)_
_Author: Noki Doki_
Prevents Yoshi from despawning by running out of juice.
### Infinite Lives
_Version: 2.0 (Feb 28, 2020)_
_Author: Noki Doki_
Prevents the life counter from decreasing.
### Intro skip
_Version: 1.0 (Jun 19, 2019)_
_Author: Noki Doki_
Removes the logos and cutscene that normally play before the title screen when loading or resetting the game.
### Level Select
_Version: 1.14 (May 8, 2020)_
_Authors: Psychonauter, Dan Salvato, Noki Doki_
Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. This code is not compatible with the Fast Any%, Stage Loader or Stage Randomizer code. Codes:<br /><br /><div><img src="/img/levelselect.png" width="500px"></div>
### Mute Background Music
_Version: 1.0 (Jan 28, 2017)_
_Author: Psychonauter_
Mutes background music, but keeps SFX on.
### Position/angle/speed display
_Version: 1.3 (Oct 28, 2019)_
_Author: Noki Doki_
Shows Mario's position, angle and speed at any given time.
### Remove Save Boxes
_Version: 1.0 (Oct 02, 2017)_
_Author: Psychonauter_
Removes all saveboxes.
### Replace Episode names with their ID
_Version: 1.1 (Feb 13, 2018)_
_Authors: Psychonauter, Noki Doki_
Replaces the Episode names with the episode number in the demo screen. (Useful for the stage randomizer and the stage loader.)
### Respawn One-Time Shines
_Version: 1.0 (Aug 19, 2019)_
_Author: Noki Doki_
Allows Shines obtained by cleaning graffiti, the Shine Gate or the bells to respawn.
### Shine Get Timer
_Version: 2.0 (Oct 11, 2019)_
_Authors: Psychonauter, Noki Doki_
Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (similar to the x-cam timer of SM64). The timer pauses during loading times.<br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>
### Shine Outfit
_Version: 1.0 (Oct 23, 2017)_
_Authors: Ralf, Psychonauter_
Always wear shine outfit and sunglasses.
### Stage Randomizer (Experimental)
_Version: 1.0 (Oct 11, 2017)_
_Author: Noki Doki_
Loads stages in randomized order. This code is not compatible with the Level Select or Fast Any% code.
### Unlock Nozzles
_Version: 1.0 (Feb 12, 2018)_
_Author: Noki Doki_
Unlocks all nozzle boxes.
### Unlock Yoshi
_Version: 1.0 (Feb 10, 2018)_
_Author: Noki Doki_
Unlocks Yoshi everywhere.

View file

@ -12,157 +12,3 @@ This site refers to version 1.0 of the NTSC-J release. For version 1.1 [click th
## List of available codes
<!-- injectionpoint -->
### Any Fruit Opens Yoshi Eggs
_Version: 1.0 (Aug 19, 2018)_
_Authors: Unknown, Noki Doki_
Allows opening Yoshi eggs with a different fruit than the one depicted.
### DPad Functions
_Version: 2.5 (Apr 3, 2019)_
_Authors: Psychonauter, Noki Doki, Dan Salvato, Link Master, James0x57_
Allows various game modifications. Button combinations:<br/><table><tr><th>Combination</th><th>Result</th></tr><tr><td>D-Pad left</td><td>Save Mario's position</td></tr><tr><td>D-Pad right</td><td>Load Mario's position</td></tr><tr><td>D-Pad up</td><td>Replace all dialog with a single "!!!" line</td></tr><tr><td>D-Pad down</td><td>Restore dialog boxes</td></tr><tr><td>B+D-Pad left</td><td>Lock rocket nozzle</td></tr><tr><td>B+D-Pad right</td><td>Lock turbo nozzle</td></tr><tr><td>B+D-Pad up</td><td>Lock hover nozzle</td></tr><tr><td>B+D-Pad down</td><td>Release nozzle lock</td></tr><tr><td>X+D-Pad left</td><td>No FLUDD in secrets</td></tr><tr><td>X+D-Pad right</td><td>FLUDD in all secrets</td></tr><tr><td>X+D-Pad up</td><td>Regrab last held object</td></tr><tr><td>X+D-Pad down</td><td>FLUDD in completed secrets (default)</td></tr></table>
### Disable Blue Coin Flag
_Version: 1.1 (Sep 05, 2018)_
_Authors: Psychonauter, Noki Doki_
Prevents the game from setting the blue coin flag, which makes them respawn after reentering the level.
### Enable Exit Area Everywhere
_Version: 1.0 (Oct 30, 2017)_
_Author: Noki Doki_
Enables 'Exit Area' on Plaza and Airstrip.
### FMV Skips
_Version: 1.0 (Jan 20, 2017)_
_Author: Psychonauter_
Allows skipping FMVs without having to watch them once first.
### Fast Any%
_Version: 1.4 (Feb 16, 2018)_
_Authors: Psychonauter, Noki Doki_
Loads stages in any% order, skips all save boxes, replaces all dialog with "!!!" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select or Stage Loader code.
### Fix Memory Card Encoding
_Version: 2.0 (Jun 25, 2020)_
_Author: Noki Doki_
Enable this if your Nintendont saves do not work on your other loader (e.g. Gecko OS on a non-Japanese console).
### Force Plaza Events
_Version: 1.0 (Mar 8, 2020)_
_Author: Noki Doki_
Forces the unlock events for Ricco, Gelato and Yoshi to happen any time the correct version of the plaza is loaded. Nozzle unlock events take precedence over Yoshi's if their conditions are met.
### Free Pause
_Version: 1.1 (Nov 12, 2017)_
_Author: Noki Doki_
Allows you to pause mid-air and during cutscenes.
### Infinite Juice
_Version: 1.0 (Apr 5, 2019)_
_Author: Noki Doki_
Prevents Yoshi from despawning by running out of juice.
### Infinite Lives
_Version: 2.0 (Feb 28, 2020)_
_Author: Noki Doki_
Prevents the life counter from decreasing.
### Intro skip
_Version: 1.0 (Jun 19, 2019)_
_Author: Noki Doki_
Removes the logos and cutscene that normally play before the title screen when loading or resetting the game.
### Level Select
_Version: 1.14 (May 8, 2020)_
_Authors: Psychonauter, Dan Salvato, ParadoxKarl, Noki Doki_
Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. This code is not compatible with the Fast Any% or Stage Loader code. Codes:<br /><br /><div><img src="/img/levelselect.png" width="500px"></div>
### Mute Background Music
_Version: 1.0 (Jan 28, 2017)_
_Author: Psychonauter_
Mutes background music, but keeps SFX on.
### Position/angle/speed display
_Version: 1.3 (Oct 28, 2019)_
_Author: Noki Doki_
Shows Mario's position, angle and speed at any given time.
### Remove Save Boxes
_Version: 1.0 (Oct 02, 2017)_
_Author: Psychonauter_
Removes all saveboxes.
### Replace Episode names with their ID
_Version: 1.1 (Feb 13, 2018)_
_Authors: Psychonauter, Noki Doki_
Replaces the Episode names with the episode number in the demo screen. (Useful for the stage loader.)
### Respawn One-Time Shines
_Version: 1.0 (Aug 19, 2019)_
_Author: Noki Doki_
Allows Shines obtained by cleaning graffiti, the Shine Gate or the bells to respawn.
### Shine Get Timer
_Version: 2.0 (Oct 11, 2019)_
_Authors: Psychonauter, Noki Doki_
Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (similar to the x-cam timer of SM64). The timer pauses during loading times.<br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>
### Shine Outfit
_Version: 1.0 (Oct 23, 2017)_
_Authors: Ralf, Psychonauter_
Always wear shine outfit and sunglasses.
### Unlock Nozzles
_Version: 1.0 (Feb 12, 2018)_
_Author: Noki Doki_
Unlocks all nozzle boxes.
### Unlock Yoshi
_Version: 1.0 (Feb 10, 2018)_
_Author: Noki Doki_
Unlocks Yoshi everywhere.

View file

@ -12,157 +12,3 @@ This site refers to version 1.1 of the NTSC-J release. For version 1.0 [click th
## List of available codes
<!-- injectionpoint -->
### Any Fruit Opens Yoshi Eggs
_Version: 1.0 (Aug 19, 2018)_
_Authors: Unknown, Noki Doki_
Allows opening Yoshi eggs with a different fruit than the one depicted.
### DPad Functions
_Version: 2.5 (Apr 3, 2019)_
_Authors: Psychonauter, Noki Doki, Dan Salvato, Link Master, James0x57_
Allows various game modifications. Button combinations:<br/><table><tr><th>Combination</th><th>Result</th></tr><tr><td>D-Pad left</td><td>Save Mario's position</td></tr><tr><td>D-Pad right</td><td>Load Mario's position</td></tr><tr><td>D-Pad up</td><td>Replace all dialog with a single "!!!" line</td></tr><tr><td>D-Pad down</td><td>Restore dialog boxes</td></tr><tr><td>B+D-Pad left</td><td>Lock rocket nozzle</td></tr><tr><td>B+D-Pad right</td><td>Lock turbo nozzle</td></tr><tr><td>B+D-Pad up</td><td>Lock hover nozzle</td></tr><tr><td>B+D-Pad down</td><td>Release nozzle lock</td></tr><tr><td>X+D-Pad left</td><td>No FLUDD in secrets</td></tr><tr><td>X+D-Pad right</td><td>FLUDD in all secrets</td></tr><tr><td>X+D-Pad up</td><td>Regrab last held object</td></tr><tr><td>X+D-Pad down</td><td>FLUDD in completed secrets (default)</td></tr></table>
### Disable Blue Coin Flag
_Version: 1.1 (Sep 05, 2018)_
_Authors: Psychonauter, Noki Doki_
Prevents the game from setting the blue coin flag, which makes them respawn after reentering the level.
### Enable Exit Area Everywhere
_Version: 1.0 (Jan 17, 2018)_
_Author: Noki Doki_
Enables 'Exit Area' on Plaza and Airstrip.
### FMV Skips
_Version: 1.0 (Jan 17, 2018)_
_Authors: Psychonauter, Noki Doki_
Allows skipping FMVs without having to watch them once first.
### Fast Any%
_Version: 1.4 (Feb 16, 2018)_
_Authors: Psychonauter, Noki Doki_
Loads stages in any% order, skips all save boxes, replaces all dialog with "!!!" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select or Stage Loader code.
### Fix Memory Card Encoding
_Version: 2.0 (Jun 25, 2020)_
_Author: Noki Doki_
Enable this if your Nintendont saves do not work on your other loader (e.g. Gecko OS on a non-Japanese console).
### Force Plaza Events
_Version: 1.0 (Mar 8, 2020)_
_Author: Noki Doki_
Forces the unlock events for Ricco, Gelato and Yoshi to happen any time the correct version of the plaza is loaded. Nozzle unlock events take precedence over Yoshi's if their conditions are met.
### Free Pause
_Version: 1.1 (Jan 17, 2018)_
_Author: Noki Doki_
Allows you to pause mid-air and during cutscenes.
### Infinite Juice
_Version: 1.0 (Apr 5, 2019)_
_Author: Noki Doki_
Prevents Yoshi from despawning by running out of juice.
### Infinite Lives
_Version: 2.0 (Feb 28, 2020)_
_Author: Noki Doki_
Prevents the life counter from decreasing.
### Intro skip
_Version: 1.0 (Jun 19, 2019)_
_Author: Noki Doki_
Removes the logos and cutscene that normally play before the title screen when loading or resetting the game.
### Level Select
_Version: 1.14 (May 8, 2020)_
_Authors: Psychonauter, Dan Salvato, ParadoxKarl, Noki Doki_
Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. This code is not compatible with the Fast Any% or Stage Loader code. Codes:<br /><br /><div><img src="/img/levelselect.png" width="500px"></div>
### Mute Background Music
_Version: 1.0 (Jan 17, 2018)_
_Authors: Psychonauter, Noki Doki_
Mutes background music, but keeps SFX on.
### Position/angle/speed display
_Version: 1.3 (Oct 28, 2019)_
_Author: Noki Doki_
Shows Mario's position, angle and speed at any given time.
### Remove Save Boxes
_Version: 1.0 (Jan 18, 2018)_
_Authors: Psychonauter, Noki Doki_
Removes all saveboxes.
### Replace Episode names with their ID
_Version: 1.1 (Feb 13, 2018)_
_Authors: Psychonauter, Noki Doki_
Replaces the Episode names with the episode number in the demo screen. (Useful for the stage loader.)
### Respawn One-Time Shines
_Version: 1.0 (Aug 19, 2019)_
_Author: Noki Doki_
Allows Shines obtained by cleaning graffiti, the Shine Gate or the bells to respawn.
### Shine Get Timer
_Version: 2.0 (Oct 11, 2019)_
_Authors: Psychonauter, Noki Doki_
Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (similar to the x-cam timer of SM64). The timer pauses during loading times.<br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>
### Shine Outfit
_Version: 1.0 (Jan 17, 2018)_
_Authors: Ralf, Noki Doki_
Always wear shine outfit and sunglasses.
### Unlock Nozzles
_Version: 1.0 (Feb 12, 2018)_
_Author: Noki Doki_
Unlocks all nozzle boxes.
### Unlock Yoshi
_Version: 1.0 (Feb 10, 2018)_
_Author: Noki Doki_
Unlocks Yoshi everywhere.

View file

@ -8,157 +8,3 @@ editLink: false
## List of available codes
<!-- injectionpoint -->
### Any Fruit Opens Yoshi Eggs
_Version: 1.0 (Aug 19, 2018)_
_Author: Unknown_
Allows opening Yoshi eggs with a different fruit than the one depicted.
### DPad Functions
_Version: 2.5 (Apr 3, 2019)_
_Authors: Psychonauter, Noki Doki, Dan Salvato, Link Master, James0x57_
Allows various game modifications. Button combinations:<br/><table><tr><th>Combination</th><th>Result</th></tr><tr><td>D-Pad left</td><td>Save Mario's position</td></tr><tr><td>D-Pad right</td><td>Load Mario's position</td></tr><tr><td>D-Pad up</td><td>Replace all dialog with a single "!!!" line</td></tr><tr><td>D-Pad down</td><td>Restore dialog boxes</td></tr><tr><td>B+D-Pad left</td><td>Lock rocket nozzle</td></tr><tr><td>B+D-Pad right</td><td>Lock turbo nozzle</td></tr><tr><td>B+D-Pad up</td><td>Lock hover nozzle</td></tr><tr><td>B+D-Pad down</td><td>Release nozzle lock</td></tr><tr><td>X+D-Pad left</td><td>No FLUDD in secrets</td></tr><tr><td>X+D-Pad right</td><td>FLUDD in all secrets</td></tr><tr><td>X+D-Pad up</td><td>Regrab last held object</td></tr><tr><td>X+D-Pad down</td><td>FLUDD in completed secrets (default)</td></tr></table>
### Disable Blue Coin Flag
_Version: 1.1 (Sep 05, 2018)_
_Authors: Psychonauter, Noki Doki_
Prevents the game from setting the blue coin flag, which makes them respawn after reentering the level.
### Enable Exit Area Everywhere
_Version: 1.0 (Oct 30, 2017)_
_Author: Noki Doki_
Enables 'Exit Area' on Plaza and Airstrip.
### FMV Skips
_Version: 1.0 (Jan 20, 2017)_
_Author: Psychonauter_
Allows skipping FMVs without having to watch them once first.
### Fast Any%
_Version: 1.4 (Feb 16, 2018)_
_Authors: Psychonauter, Noki Doki_
Loads stages in any% order, skips all save boxes, replaces all dialog with "!!!" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select or Stage Loader code.
### Fix Memory Card Encoding
_Version: 2.0 (Jun 25, 2020)_
_Author: Noki Doki_
Enable this if your Nintendont saves do not work on your other loader (e.g. Gecko OS on a Japanese console).
### Force Plaza Events
_Version: 1.0 (Mar 8, 2020)_
_Author: Noki Doki_
Forces the unlock events for Ricco, Gelato and Yoshi to happen any time the correct version of the plaza is loaded. Nozzle unlock events take precedence over Yoshi's if their conditions are met.
### Free Pause
_Version: 1.1 (Nov 12, 2017)_
_Author: Noki Doki_
Allows you to pause mid-air and during cutscenes.
### Infinite Juice
_Version: 1.0 (Apr 5, 2019)_
_Author: Noki Doki_
Prevents Yoshi from despawning by running out of juice.
### Infinite Lives
_Version: 2.0 (Feb 28, 2020)_
_Author: Noki Doki_
Prevents the life counter from decreasing.
### Intro skip
_Version: 1.0 (Jun 19, 2019)_
_Author: Noki Doki_
Removes the logos and cutscene that normally play before the title screen when loading or resetting the game.
### Level Select
_Version: 1.14 (May 8, 2020)_
_Authors: Psychonauter, Dan Salvato, Noki Doki_
Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. This code is not compatible with the Fast Any% or Stage Loader code. Codes:<br /><br /><div><img src="/img/levelselect.png" width="500px"></div>
### Mute Background Music
_Version: 1.0 (Jan 28, 2017)_
_Author: Psychonauter_
Mutes background music, but keeps SFX on.
### Position/angle/speed display
_Version: 1.3 (Oct 28, 2019)_
_Author: Noki Doki_
Shows Mario's position, angle and speed at any given time.
### Remove Save Boxes
_Version: 1.0 (Oct 02, 2017)_
_Author: Psychonauter_
Removes all saveboxes.
### Replace Episode names with their ID
_Version: 1.1 (Feb 13, 2018)_
_Authors: Psychonauter, Noki Doki_
Replaces the Episode names with the episode number in the demo screen. (Useful for the stage loader.)
### Respawn One-Time Shines
_Version: 1.0 (Aug 19, 2019)_
_Author: Noki Doki_
Allows Shines obtained by cleaning graffiti, the Shine Gate or the bells to respawn.
### Shine Get Timer
_Version: 2.0 (Oct 11, 2019)_
_Authors: Psychonauter, Noki Doki_
Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (similar to the x-cam timer of SM64). The timer pauses during loading times.<br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>
### Shine Outfit
_Version: 1.0 (Oct 23, 2017)_
_Author: Ralf_
Always wear shine outfit and sunglasses.
### Unlock Nozzles
_Version: 1.0 (Feb 12, 2018)_
_Author: Noki Doki_
Unlocks all nozzle boxes.
### Unlock Yoshi
_Version: 1.0 (Feb 10, 2018)_
_Author: Noki Doki_
Unlocks Yoshi everywhere.

View file

@ -2,6 +2,6 @@
editLink: false
---
# Code Reference
# Code Referenz
<VersionCards />

View file

@ -0,0 +1,10 @@
---
sidebar: auto
editLink: false
---
# GMSE01 (NTSC-U / Nord Amerika)
## Liste der verfügbaren Codes
<!-- injectionpoint -->

View file

@ -0,0 +1,14 @@
---
sidebar: auto
editLink: false
---
# GMSJ01 (NTSC-J / Japan)
::: tip
Diese Seite bezieht sich auf NTSC-J Version 1.0. Für version 1.1 [klicke diesen link](/de/code-reference/gmsj0a.html)
:::
## Liste der verfügbaren Codes
<!-- injectionpoint -->

View file

@ -0,0 +1,14 @@
---
sidebar: auto
editLink: false
---
# GMSJ01 (NTSC-J / Japan)
::: tip
Diese Seite bezieht sich auf NTSC-J Version 1.1. Für version 1.0 [klicke diesen link](/de/code-reference/gmsj01.html)
:::
## Liste der verfügbaren Codes
<!-- injectionpoint -->

View file

@ -0,0 +1,10 @@
---
sidebar: auto
editLink: false
---
# GMSE01 (PAL / Europa)
## Liste der verfügbaren Codes
<!-- injectionpoint -->

View file

@ -0,0 +1,7 @@
---
editLink: false
---
# Code Referenz
<VersionCards />

137
site/de/guide.md Normal file
View file

@ -0,0 +1,137 @@
---
sidebar: auto
---
# Cookbook
Ein Leitfaden für die Installation und Anwendung von Super Mario Sunshine Practice Codes über Nintendont und Dolphin.
[[toc]]
## Vorbereiten der Wii
### Homebrew Installation
Zu Beginn musst du Homebrew auf deiner Wii installieren. Stelle sicher, dass deine SD-Karte zu FAT32 formattiert ist und besuche dann [https://wii.guide/](https://wii.guide/) (Englisch) für einen detaillierten Leitfaden für die installation von Homebrew.
### Installation der Applikationen
Nintendont ist empohlene Weg für die Nutzung der Practice Codes. Du kannst die aktuellste Version über [diesen Link](https://share.zint.ch/nintendont/latest/Nintendont.zip) herunterladen. Entpacke das Archiv und platziere den Nintendont Ordner mit all seinen Inhalten in den 'apps' Ordner auf deiner SD-Karte. Falls es noch keinen 'apps' Ordner gibt, erstelle diesen erst.
## Installation der Cheat-Datei
### Generiere die Cheat-Datei
Zuerst musst du wissen, welche Version des Spiels du verwendest. Die folgende Tabelle zeigt die unterstützten Versionen und den entsprechenden Spiel-Code:
| Version | Spiel-Code |
| --------------------- | ---------- |
| PAL (Europa) | GMSP01 |
| NTSC-U (Nord Amerika) | GMSE01 |
| NTSC-J (Japan) | GMSJ01 |
| NTSC-K (Korea) | GMSE01 |
::: tip Tip für NTSC-J-Spieler
JP 1.0 und JP 1.1 verwenden beide dieselbe ID (GMSJ01). Um festzustellen, welche Version du hast, überprüfe die Rückseite deiner Disc. Darauf steht "DOL-GMSJ-0-00" für Version 1.0 und "DOL-GMSJ-0-01" für Version 1.1.
![](/img/jp_diff.png)
:::
Besuche anschliessend die [Hauptseite](./index.md) und wähle die entsprechende Version vom Dropdown-Menü. Eine Liste verfügbarer Codes wird angezeigt. Wähle anschliessend alle Cheats, die du verwenden möchtest von der Liste, wähle GCT als Dateiformat und klicke 'Herunterladen'.
### Kopiere die Datei auf die SD-Karte
Erstelle einen 'codes'-Ordner auf deiner SD-Karte falls es noch keinen gibt und kopiere die eben heruntergeladene GCT-Datei in diesen Ordner. Die resultierende Ordnerstruktur sollte wie folgt aussehen (die .gct Dateien können anders sein, je nach Version die du verwendest);
![Ordnerstruktur](/img/folderstructure.png)
### Aktiviere die Codes
Öffne den Homebrew Kanal auf deiner Wii und starte von dort aus Nintendont. In Nintendont, wähle SD und dann drücke B auf deinem Gamecube Controller um die Einstellungen zu sehen. Stelle sicher, dass in deinen Einstellungen die Cheats eingeschaltet sind ('On'). Du kannst sie über die A-Taste aktivieren/deaktivieren.
![Cheats in Nintendont aktivieren](/img/nintendont_cheats.jpg)
Drücke erneut B um zurück zur Spielliste zu gelangen und starte das Spiel. Die Cheats sollten nun aktiv sein.
## Problembehebung
### Das Spiel startet nicht / Schwarzer Bildschirm
Dieses Problem hat nichts mit den Practice Codes zu tun. Du hast in diesem Fall die folgenden Optionen:
- Starte Nintendont erneut bis das game startet (benötigt teilweise mehrere Versuche)
- Verbinde deine Wii mit dem Internet bevor du Nintendont startest
- Warte für ungefähr 30 Sekunden auf der Spielliste bevor du die Disc startest
- Eine Neuinstallation von Homebrew kann das Problem permanent beheben.
### Nintendont sagt 'IOS58 is missing'
[Hier](./ios58.md) ist ein Leitfaden für die Installation von IOS58 für die Verwendung mit Nintendont.
### Das Spiel startet aber die Codes funktionieren nicht
Dies kann mehrere Ursachen haben:
- Cheats sind nicht aktiviert: Siehe ["Aktiviere die Codes"](#aktiviere-die-codes).
- Du verwendest eine alte Version von Nintendont. Stell sicher, dass du mindestens Version 4.434 oder neuer verwendest.
- Deine Datei hat den falschen Namen: Stell sicher, dass die Datei 'GMSE01.gct', 'GMSJ01.gct' oder 'GMSP01.gct' heisst. Es funktioniert nicht mit Namen wie beispielsweise 'GMSP01 (1).gct'.
- Deine Datei ist am falschen Ort: Stell sicher, dass die Datei im Ordner 'codes' ist. Achte hiebei wieder darauf, dass der Ordner auch genau so heisst. Falls du einen 'games'-Ordner hast, stelle sicher dass es keine Datei mit demselben Namen in dem Ordner oder einem Unterordner gibt.
- Deine Datei ist zu gross: Zu viele Codes deaktivieren Nintendonts Cheat-Funktion. Stelle sicher, dass du nicht zwei inkompatible Codes aktiviert hast (Beispielsweise 'Level Select' und 'Fast Any%' sind nicht kompatibel).
- Falls du ein USB-Laufwerk verwendest und über die Disc spielst, stelle sicher dass du bei Nintendont das Gerät auswählst, welches die Cheat Codes enthält.
- Falls du eine ISO verwendest, müssen die Codes und die ISO auf demselben Gerät sein (beide auf der SD-Karte oder beide auf dem USB-Laufwerk)
### Ich bin verloren :(
Du kannst auch im [Super Mario Sunshine Discord](https://discord.gg/9dGJWEc) unter dem #help Kanal nach Hilfe fragen.
## Appendix: Cheat Manager
Der Cheat Manager ist eine applikation für Homebrew (wie Nintendont), mit welcher du GCT's auf deiner Wii generieren kannst. Damit musst du nicht jedesmal ein neues Cheatfile herunterladen. Dieser Prozess benötigt allerdings eine Wiimote um die Applikation zu bedienen.
### Setup
Du kannst den Cheat Manager von [hier herunterladen](/files/Cheat_manager_v0_3.zip). Entpacke das Archive und kopiere den Inhalt in den 'apps'-Ordner auf deiner SD-Karte.
Wähle mittels des Generators auf der [Hauptseite](./index.md) alle Codes, auf welche du Zugriff haben möchtest und wähle als Dateiformat 'Cheat Manager TXT' anstelle von 'GCT'. Erstelle anschliessend einen 'txtcodes'-Ordner auf deiner SD-Karte und kopiere die generierte Datei in den eben erstellten Ordner. Der Name der Datei spielt in diesem Fall im Gegensatz zur GCT-Datei keine grosse Rolle.
Alternativ kannst du ein Archiv mit allen verfügbaren Codes direkt von [hier herunterladen](/files/GCMCodes.zip).
### Den Cheat Manager verwenden
Starte den Cheat Manager und wechsle zu deiner Wiimote. Navigiere zu deiner Textdatei mittels des DPad und wähle es mittels des 'A'-Knopfes. Verwende auf dem nächsten Screen '+' um einen Code zu aktivieren und '-' um ihn zu deaktivieren.
Nachdem du alle Codes, die du aktiviert haben möchtest, aktiviert hast, verwende den '1'-Knopf um die GCT-Datei zu generieren. Der Cheat Manager schreibt dabei eine GCT Datei in deinem 'codes'-Ordner und überschreibt allfällige alte Dateien mit demselben Namen. Wenn du nun Nintendont startest, werden die neuen Codes geladen.
## Appendix: Dolphin
### Setup
Um die Codes mit Dolphin zu verwenden wähle 'Dolphin INI' als Dateiformat anstelle von 'GCT' bevor du die Codes herunterlädst. Alternativ kannst du ein ZIP-Archiv mit allen Codes von [hier herunterladen](/files/DolphinCodes.zip).
::: tip Code Limits
Dolphin verwendet nicht dieselbe Technik für das Laden von Cheats wie Nintendont und erreicht das Code-Limit eher rasch. Falls dein Spiel nach dem Start crashed, liegt es vermutlich daran. Versuche alle nicht-essentiellen Codes zu deaktivieren falls das passiert.
:::
### Konfiguration
#### Cheats aktivieren
Öffne Dolphin und öffne die Einstellungen über `Optionen` -> `Konfiguration`. Stelle im Einstellungsfenster sicher, dass das Häkchen bei `Cheats aktivieren` gesetzt ist:
![Enable Cheats in Dolphin](/img/dolphin_cheats.png)
#### Dolphin 5.0 oder älter
Wechsle in die Eigenschaften des Spiels mittels Rechtsklick -> Eigenschaften. Klicke 'Konfiguration bearbeiten' im neuen Fenster und kopiere den gesamten Inhalt (nach dem `[Gecko]`-Tag) der heruntergeladenen Datei an die entsprechende Stelle in der Konfigurationsdatei. Falls es noch keinen `[Gecko]`-Tag gibt (es sollte der erste sein), erstelle erst einen am Anfang deiner Konfigurationsdatei. Speichere und schliesse die Datei.
![Dolphin Gecko Codes 5.0](/img/dolphin_gecko_codes_v1.png)
#### Dolphin 5.0-11XXX oder neuer
Wechsle in die Eigenschaften des Spiels mittels Rechtsklick -> Eigenschaften. Im 'Konfigurations'-Abschnitt wähle den Editor Tab und kopiere den Inhalt der heruntergeladenen Datei in den Editor.
![Dolphin Gecko Codes 5.0-11XXX](/img/dolphin_gecko_codes_v2.png)
### Aktivieren der Codes
Wähle in den Eigenschaften des Spiels die Gecko-Registerkarte und setze ein Häkchen bei allen Cheats, die du aktiviert haben möchtest. Die meisten (aber nicht alle) Codes funktionieren mit Dolphin.

5
site/de/index.md Executable file
View file

@ -0,0 +1,5 @@
---
editLink: false
---
<Generator />

67
site/de/ios58.md Normal file
View file

@ -0,0 +1,67 @@
---
sidebar: auto
---
# IOS58 Installation
Ein Leitfaden für die Installation von IOS58 für die Verwendung mit Nintendont.
[[toc]]
## Ressourcen herunterladen
### NUS Downloader
Der NUS Downloader ist eine Windows-Applikation mit welcher du offizielle IOSs von Nintendo herunterladen kannst. Du findest den NUS Downloader auf [Wiibrew](http://wiibrew.org/wiki/NUS_Downloader).
### IOS58 Download
Öffne den NUS Downloader und wähle IOS58 von der Datenbank (siehe Bild). Stelle sicher, dass 'Pack WAD' markiert ist und das Häkchen 'Keep Encrypted Contents' NICHT gesetzt ist. Starte den Download mittels 'Start NUS Download!'.
![NUS Downloader](/img/nusdownloader_00.png)
### Kopieren der WAD
Die heruntergeladene .wad-Datei wird im `titles/000000010000003A/6176/`-Ordner in deinem NUS Downloader Verzeichnis hinterlegt. Kopiere sie auf deine SD Karte **ohne sie umzubenennen**.
### WiiMod
Lade WiiMod von [GBAtemp](https://gbatemp.net/threads/wii-mod.272321/) herunter und platziere sie im 'apps'-Ordner auf deiner SD-Karte. Lege die SD-Karte zurück in deine Wii und öffne den Homebrew Kanal.
## IOS58 Installation
**Starte WiiMod und wähle "IOSs"**
![Part 1](/img/wiimod_00.png)
**Navigiere zu 58 und drücke A**
![Part 2](/img/wiimod_01.png)
**Wähle "Install IOS"**
![Part 3](/img/wiimod_02.png)
**Wähle "6176"**
![Part 4](/img/wiimod_03.png)
**Bestätige, dass du "IOS58 v6176" installieren möchtest**
![Part 5](/img/wiimod_04.png)
**Wähle Revision 6176**
![Part 6](/img/wiimod_05.png)
**Stelle sicher, dass alle Optionen auf 'No' sind.**
![Part 7](/img/wiimod_06.png)
**Drücke erneut A um die Installation zu starten.**
![Part 8](/img/wiimod_07.png)
**Das war's!**
![Part 9](/img/wiimod_08.png)

View file

@ -2,7 +2,7 @@
sidebar: auto
---
# GCT Generator Cookbook
# Cookbook
A guide on how to install and use Super Mario Sunshine practice codes on Nintendont and Dolphin.
@ -118,7 +118,7 @@ Dolphin doesn't use the same cheat loader as Nintendont. Its code limit is reach
#### Enabling Cheats
Open Dolphin and navigate to the settings menu through Options -> Configuration. Make sure the checkbox labeled 'Enable Cheats' is checked:
Open Dolphin and navigate to the settings menu through `Options` -> `Configuration`. Make sure the checkbox labeled `Enable Cheats` is checked:
![Enable Cheats in Dolphin](/img/dolphin_cheats.png)

1097
yarn.lock

File diff suppressed because it is too large Load diff