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:
commit
7ed289c7d9
50 changed files with 4495 additions and 17419 deletions
|
@ -1,4 +1,4 @@
|
|||
name: Build
|
||||
name: Pull Request
|
||||
|
||||
on:
|
||||
- pull_request
|
22
.prettierrc
22
.prettierrc
|
@ -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
7
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"search.exclude": {
|
||||
"**/dist": true,
|
||||
"**/node_modules": true,
|
||||
"yarn.lock": true
|
||||
}
|
||||
}
|
10
Readme.md
10
Readme.md
|
@ -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.
|
||||
|
|
1407
codes/GMSE01.xml
1407
codes/GMSE01.xml
File diff suppressed because it is too large
Load diff
1135
codes/GMSJ01.xml
1135
codes/GMSJ01.xml
File diff suppressed because it is too large
Load diff
941
codes/GMSJ0A.xml
941
codes/GMSJ0A.xml
|
@ -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>
|
1188
codes/GMSP01.xml
1188
codes/GMSP01.xml
File diff suppressed because it is too large
Load diff
10583
package-lock.json
generated
10583
package-lock.json
generated
File diff suppressed because it is too large
Load diff
14
package.json
14
package.json
|
@ -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"]
|
||||
}
|
||||
|
|
|
@ -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
41
scripts/clean_codes.js
Normal 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);
|
||||
}
|
||||
});
|
56
scripts/compare_translations.js
Normal file
56
scripts/compare_translations.js
Normal 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}'`);
|
||||
});
|
||||
});
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -5,8 +5,6 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import CodeFormatter from './scripts/codeFormatter';
|
||||
|
||||
export default {
|
||||
props: {
|
||||
disabled: { type: Boolean },
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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,
|
||||
})),
|
||||
};
|
||||
},
|
||||
|
|
|
@ -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
|
||||
>.
|
||||
&
|
||||
<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);
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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.
|
||||
*
|
||||
* ref:https://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 plugins,ref:https://v1.vuepress.vuejs.org/zh/plugin/
|
||||
* VuePress Plugins
|
||||
*/
|
||||
plugins: ['@vuepress/plugin-back-to-top', '@vuepress/plugin-medium-zoom'],
|
||||
};
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -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": []
|
||||
}
|
||||
]
|
||||
|
|
32
site/.vuepress/data/themePlugins.json
Normal file
32
site/.vuepress/data/themePlugins.json
Normal 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"
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
90
site/.vuepress/i18n/de-CH.json
Normal file
90
site/.vuepress/i18n/de-CH.json
Normal 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."
|
||||
}
|
||||
}
|
90
site/.vuepress/i18n/en-US.json
Normal file
90
site/.vuepress/i18n/en-US.json
Normal 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."
|
||||
}
|
||||
}
|
55
site/.vuepress/i18n/localeHelper.js
Normal file
55
site/.vuepress/i18n/localeHelper.js
Normal 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;
|
||||
};
|
64
site/.vuepress/i18n/locales.json
Normal file
64
site/.vuepress/i18n/locales.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
editLink: false
|
||||
---
|
||||
|
||||
# Code Reference
|
||||
# Code Referenz
|
||||
|
||||
<VersionCards />
|
||||
|
|
10
site/de/code-reference/gmse01.md
Normal file
10
site/de/code-reference/gmse01.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
sidebar: auto
|
||||
editLink: false
|
||||
---
|
||||
|
||||
# GMSE01 (NTSC-U / Nord Amerika)
|
||||
|
||||
## Liste der verfügbaren Codes
|
||||
|
||||
<!-- injectionpoint -->
|
14
site/de/code-reference/gmsj01.md
Normal file
14
site/de/code-reference/gmsj01.md
Normal 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 -->
|
14
site/de/code-reference/gmsj0a.md
Normal file
14
site/de/code-reference/gmsj0a.md
Normal 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 -->
|
10
site/de/code-reference/gmsp01.md
Normal file
10
site/de/code-reference/gmsp01.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
sidebar: auto
|
||||
editLink: false
|
||||
---
|
||||
|
||||
# GMSE01 (PAL / Europa)
|
||||
|
||||
## Liste der verfügbaren Codes
|
||||
|
||||
<!-- injectionpoint -->
|
7
site/de/code-reference/index.md
Normal file
7
site/de/code-reference/index.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
editLink: false
|
||||
---
|
||||
|
||||
# Code Referenz
|
||||
|
||||
<VersionCards />
|
137
site/de/guide.md
Normal file
137
site/de/guide.md
Normal 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
5
site/de/index.md
Executable file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
editLink: false
|
||||
---
|
||||
|
||||
<Generator />
|
67
site/de/ios58.md
Normal file
67
site/de/ios58.md
Normal 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)
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in a new issue