Fastcode integration (#5)

* mainpage frontend framework

* fastcode interface

* timer compatibility fix and fastcode descriptions

* cleanup main site

* adjust guide stylesheet & prettyprint

* cleanup fastcode JSON

* keep layout intuitive

* Update changelog
This commit is contained in:
Matteias Collet 2018-02-02 08:00:40 +01:00 committed by GitHub
parent ee1588e069
commit 705a4283d0
18 changed files with 1183 additions and 583 deletions

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
[Bb]eta/
[Tt]rash/
*.db

View file

@ -2,136 +2,136 @@
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=480px, initial-scale=1.0">
<link rel="stylesheet" href="style/guide.css">
<style>
h2{margin:20px 0px 0px 0px}
h3{margin:5px 30px}
</style>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<title>Changelog</title>
</head>
<body>
<div id="guide_content">
<h1 style="text-align:center;width:100%;">Full Changelog</h1>
<h2 id="180124"><a href="#180124">Jan 24, 2048</a> </h2>
<h3 id="1801241"><a href="#1801241">Optimized 'Fast Any%'</h3>
<p>Shortens the code by a few lines</p>
<h2 id="180120"><a href="#180120">Jan 20, 2018</a> </h2>
<h3 id="1801201"><a href="#1801201">Added 'Remove Save Boxes'</a></h3>
<p>Adds the option to have save boxes removed outside of 'Fast Any%'</p>
<h3 id="1801202"><a href="#1801202">Fixed episode names in 'Fast Any%'.</a></h3>
<p>Makes the correct episode names appear in the demo cutscenes and the pause menu in Fast Any%.</p>
<h3 id="1801203"><a href="#1801203">Made 'Fast Any%' compatible with 'Shine Get Timer' and 'Shine Touch Timer'.</a></h3>
<p>Allows the use of IGT in Fast Any%, which was previously impossible.</p>
<h2 id="180118"><a href="#180118">Jan 18, 2018</a> </h2>
<h3 id="1801181"><a href="#1801181">Site changes</a></h3>
<p>Updated guides.</p>
<h2 id="180117"><a href="#180117">Jan 17, 2018</a> </h2>
<h3 id="1801171"><a href="#1801171">Site changes</a></h3>
<p>Added JP-A port for all codes.</p>
<h2 id="180108"><a href="#180108">Jan 8, 2018</a> </h2>
<h3 id="1801081"><a href="#1801081">Site changes</a></h3>
<p>Added <a href="ios58.html"> a guide on how to install IOS58</a>.</p>
<h2 id="180101"><a href="#180101">Jan 1, 2018</a> </h2>
<h3 id="1801011"><a href="#1801011">Updated 'D-Pad Functions'</a></h3>
<p>Fixed dialogue replacement.</p>
<h2 id="171230"><a href="#171230">Dec 30, 2017</a> </h2>
<h3 id="1712301"><a href="#1712301">Updated 'D-Pad Functions'</a></h3>
<p>Added Plaza Yoshi Unlock.</p>
<h2 id="171219"><a href="#171219">Dec 19, 2017</a> </h2>
<h3 id="1712191"><a href="#1712191">Updated 'Fast Any%'</a></h3>
<p>Added FMV Skips except for Pinna 1.</p>
<h2 id="171205"><a href="#171205">Dec 05, 2017</a> </h2>
<h3 id="1712051"><a href="#1712051">Site Changes</a></h3>
<p>Added option to download codes formatted for the Gecko Cheat Manager.</p>
<h2 id="171129"><a href="#171129">Nov 29, 2017</a> </h2>
<h3 id="1711291"><a href="#1711291">Updated 'Level Select' for PAL</a></h3>
<p>Fixed Pinna not resetting inside the park.</p>
<h3 id="1711292"><a href="#1711292">Updated 'Shine Touch Timer' and 'Shine Get Timer'</a></h3>
<p>Made timers stop after the bowser fight when hitting the last platform.</p>
<h2 id="171112"><a href="#171112">Nov 12, 2017</a> </h2>
<h3 id="1711121"><a href="#1711121">Updated 'Free Pause'</a></h3>
<p>Fixed 'Free Pause' incompatibility with 'Shine Get Timer' caused by them injecting code in the same address.</p>
<h2 id="171109"><a href="#171109">Nov 09, 2017</a> </h2>
<h3 id="1711091"><a href="#1711091">Site changes</a></h3>
<p>Added download button for raw codes for Dolphin.</p>
<h2 id="171108"><a href="#171108">Nov 08, 2017</a> </h2>
<h3 id="1711081"><a href="#1711081">Added 'Fast 79 Shines' for NTSC-U</a></h3>
<p>Same concept as 'Fast Any%'.</p>
<h2 id="171107"><a href="#171107">Nov 07, 2017</a> </h2>
<h3 id="1711071"><a href="#1711071">Seperated 'Exit Area Everywhere' from 'Free Pause'</a></h3>
<p>Seperated these two codes again since they don't depend on each other.</p>
<h2 id="171106"> <a href="#171106">Nov 06, 2017</a></h2>
<h3 id="1711061"> <a href="#1711061">Updated Ingame Timers and Level Select</a> </h3>
<p>The Original Ingame Timer has been marked as deprecated. You can still find it on the bottom of the codelist though if you still want to use it. Instead, there are now two other timers:</p>
<br />
<ul>
<li>Shine Touch Timer: Starts on the last black frame of the loading screen and ends when you touch the shine.</li>
<li>Shine Get Timer: Starts on the last black frame of the loading screen and ends when the Shine Get animation starts (similiar to the x-cam timer of SM64).</li>
</ul>
<p>Since the Shine Get timer contained a way better Level Select, the Level Select code has been replaced with the one from the timer. It includes the most recent fixes and also has some maintenance advantages.</p>
<br />
<p>Level Select changes:</p>
<ul>
<li>Mashing A during loading screens doesn't affect your level selection anymore.</li>
<li>Pinna game resets have been fixed.</li>
<li>Level Names in the intro have been fixed (shoutouts to Noki Doki).</li>
<li>Sirena 5 now loads the right casino.</li>
<li>Reloading Sirena does no longer respawn you in the Hotel. Reason: You can move earlier than usual if you do that, making it too inaccurate for practice.</li>
</ul>
<p>Timer changes (compared to original timer):</p>
<ul>
<li>Changed timing (see above).</li>
<li>Resets on death.</li>
<li>Resets when using Shine Select.</li>
<li>Only uses existing timers for Piantissimo, Sirena/Pianta 6 and Ricco 2 underground.</li>
<li>Fixed Pinna 8 HUD.</li>
</ul>
<p>Known bugs:</p>
<ul>
<li>Can't reset Pinna 8 properly after finishing the rollercoaster. Use the cannon to reenter or reset the game instead.</li>
<li>Box game timer doesn't work properly.</li>
</ul>
<h3 id="1711062"><a href="#1711062">Added 'Free Pause'</a></h3>
<p>'Free Pause' replaces 'Enable Pause Mid-Air' and 'Enable Exit Area Everywhere'. It now also allows you to pause during cutscenes.</p>
<h3 id="1711063"><a href="#1711063">Site Changes</a></h3>
<ul>
<li>Added detailed changelog.</li>
<li>Updated guide with more information about the maximum code size.</li>
</ul>
<h2 id="171104"><a href="#171104">Nov 04, 2017</a> </h2>
<h3 id="1711041"><a href="#1711041">Changed Shine Get Timer</a></h3>
<p>Fixed timer resetting during wrong cutscenes when using 'Exit Area' after touching a Shine.</p>
<h2 id="171030"><a href="#171030">Oct 30, 2017</a> </h2>
<h3 id="1710301"><a href="#1710301">Added 'Enable Exit Area Everywhere'</a></h3>
<p>Allows you to choose 'Exit Area' in the pause menu on Plaza.</p>
<h2 id="171029"><a href="#171029">Oct 29, 2017</a></h2>
<h3 id="1710291"><a href="#1710291">Added 'Shine Get Timer'</a></h3>
<p>New timer that starts and ends consistently in different levels, making comparisons easier.</p>
<h2 id="171028"><a href="#171028">Oct 28, 2017</a></h2>
<h3 id="1710281"><a href="#1710281">Updated 'DPad Functions'</a></h3>
<p>New functions have been added to the DPad Functions:</p>
<ul>
<li>X+D-Pad left: No FLUDD in secrets</li>
<li>X+D-Pad right: Always FLUDD in secrets</li>
<li>X+D-Pad up: Unlock Yoshi in stages</li>
<li>X+D-Pad down: Defauld FLUDD behaviour for secrets</li>
</ul>
<h2 id="171026"><a href="#171026">Oct 26, 2017</a></h2>
<h3 id="1710261"><a href="#1710261">Added 'Enable Pause Mid-Air'</a></h3>
<p>Allows you to pause mid-air.</p>
<h2 id="171024"><a href="#171024">Oct 24, 2017</a></h2>
<h3 id="1710241"><a href="#1710241">Added 'Shine Outfit'</a></h3>
<p>Always wear glasses and the shirt.</p>
<h2 id="171015"><a href="#171015">Oct 15, 2017</a></h2>
<h3 id="1710151"><a href="#1710151">Site Changes</a></h3>
<p>Fixed the download button not working for Firefox.</p>
<h2 id="171014"><a href="#171014">Oct 14, 2017</a></h2>
<h3 id="1710141"><a href="#1710141">Added 'Fast Any%' for JP and PAL</a></h3>
<p>-</p>
<h2 id="171011"><a href="#171011">Oct 11, 2017</a></h2>
<h3 id="1710111"><a href="#1710111">Added 'Stage Randomizer' for NTSC-U</a></h3>
<p><i>Experimental!</i> Loads a random stage after exiting of finishing a level.</p>
</div>
<div id="guide_content" class="framed">
<h1 style="text-align:center;width:100%;">Full Changelog</h1>
<h2 id="180202"><a href="#180202">Feb 02, 2018</a></h2>
<h3 id="1802021"><a href="#1802021">Site changes</a></h3>
<p>Integrated <a href="https://qberoot.github.io/fastcodes/">Noki Dokis Stage Loader</a> into the Generator.</p>
<h2 id="180124"><a href="#180124">Jan 24, 2018</a></h2>
<h3 id="1801241"><a href="#1801241">Optimized 'Fast Any%'</a></h3>
<p>Shortens the code by a few lines</p>
<h2 id="180120"><a href="#180120">Jan 20, 2018</a> </h2>
<h3 id="1801201"><a href="#1801201">Added 'Remove Save Boxes'</a></h3>
<p>Adds the option to have save boxes removed outside of 'Fast Any%'</p>
<h3 id="1801202"><a href="#1801202">Fixed episode names in 'Fast Any%'.</a></h3>
<p>Makes the correct episode names appear in the demo cutscenes and the pause menu in Fast Any%.</p>
<h3 id="1801203"><a href="#1801203">Made 'Fast Any%' compatible with 'Shine Get Timer' and 'Shine Touch Timer'.</a></h3>
<p>Allows the use of IGT in Fast Any%, which was previously impossible.</p>
<h2 id="180118"><a href="#180118">Jan 18, 2018</a> </h2>
<h3 id="1801181"><a href="#1801181">Site changes</a></h3>
<p>Updated guides.</p>
<h2 id="180117"><a href="#180117">Jan 17, 2018</a> </h2>
<h3 id="1801171"><a href="#1801171">Site changes</a></h3>
<p>Added JP-A port for all codes.</p>
<h2 id="180108"><a href="#180108">Jan 8, 2018</a> </h2>
<h3 id="1801081"><a href="#1801081">Site changes</a></h3>
<p>Added <a href="ios58.html"> a guide on how to install IOS58</a>.</p>
<h2 id="180101"><a href="#180101">Jan 1, 2018</a> </h2>
<h3 id="1801011"><a href="#1801011">Updated 'D-Pad Functions'</a></h3>
<p>Fixed dialogue replacement.</p>
<h2 id="171230"><a href="#171230">Dec 30, 2017</a> </h2>
<h3 id="1712301"><a href="#1712301">Updated 'D-Pad Functions'</a></h3>
<p>Added Plaza Yoshi Unlock.</p>
<h2 id="171219"><a href="#171219">Dec 19, 2017</a> </h2>
<h3 id="1712191"><a href="#1712191">Updated 'Fast Any%'</a></h3>
<p>Added FMV Skips except for Pinna 1.</p>
<h2 id="171205"><a href="#171205">Dec 05, 2017</a> </h2>
<h3 id="1712051"><a href="#1712051">Site Changes</a></h3>
<p>Added option to download codes formatted for the Gecko Cheat Manager.</p>
<h2 id="171129"><a href="#171129">Nov 29, 2017</a> </h2>
<h3 id="1711291"><a href="#1711291">Updated 'Level Select' for PAL</a></h3>
<p>Fixed Pinna not resetting inside the park.</p>
<h3 id="1711292"><a href="#1711292">Updated 'Shine Touch Timer' and 'Shine Get Timer'</a></h3>
<p>Made timers stop after the bowser fight when hitting the last platform.</p>
<h2 id="171112"><a href="#171112">Nov 12, 2017</a> </h2>
<h3 id="1711121"><a href="#1711121">Updated 'Free Pause'</a></h3>
<p>Fixed 'Free Pause' incompatibility with 'Shine Get Timer' caused by them injecting code in the same address.</p>
<h2 id="171109"><a href="#171109">Nov 09, 2017</a> </h2>
<h3 id="1711091"><a href="#1711091">Site changes</a></h3>
<p>Added download button for raw codes for Dolphin.</p>
<h2 id="171108"><a href="#171108">Nov 08, 2017</a> </h2>
<h3 id="1711081"><a href="#1711081">Added 'Fast 79 Shines' for NTSC-U</a></h3>
<p>Same concept as 'Fast Any%'.</p>
<h2 id="171107"><a href="#171107">Nov 07, 2017</a> </h2>
<h3 id="1711071"><a href="#1711071">Seperated 'Exit Area Everywhere' from 'Free Pause'</a></h3>
<p>Seperated these two codes again since they don't depend on each other.</p>
<h2 id="171106"> <a href="#171106">Nov 06, 2017</a></h2>
<h3 id="1711061"> <a href="#1711061">Updated Ingame Timers and Level Select</a> </h3>
<p>The Original Ingame Timer has been marked as deprecated. You can still find it on the bottom of the codelist though if you still want to use it. Instead, there are now two other timers:</p>
<br />
<ul>
<li>Shine Touch Timer: Starts on the last black frame of the loading screen and ends when you touch the shine.</li>
<li>Shine Get Timer: Starts on the last black frame of the loading screen and ends when the Shine Get animation starts (similiar to the x-cam timer of SM64).</li>
</ul>
<p>Since the Shine Get timer contained a way better Level Select, the Level Select code has been replaced with the one from the timer. It includes the most recent fixes and also has some maintenance advantages.</p>
<br />
<p>Level Select changes:</p>
<ul>
<li>Mashing A during loading screens doesn't affect your level selection anymore.</li>
<li>Pinna game resets have been fixed.</li>
<li>Level Names in the intro have been fixed (shoutouts to Noki Doki).</li>
<li>Sirena 5 now loads the right casino.</li>
<li>Reloading Sirena does no longer respawn you in the Hotel. Reason: You can move earlier than usual if you do that, making it too inaccurate for practice.</li>
</ul>
<p>Timer changes (compared to original timer):</p>
<ul>
<li>Changed timing (see above).</li>
<li>Resets on death.</li>
<li>Resets when using Shine Select.</li>
<li>Only uses existing timers for Piantissimo, Sirena/Pianta 6 and Ricco 2 underground.</li>
<li>Fixed Pinna 8 HUD.</li>
</ul>
<p>Known bugs:</p>
<ul>
<li>Can't reset Pinna 8 properly after finishing the rollercoaster. Use the cannon to reenter or reset the game instead.</li>
<li>Box game timer doesn't work properly.</li>
</ul>
<h3 id="1711062"><a href="#1711062">Added 'Free Pause'</a></h3>
<p>'Free Pause' replaces 'Enable Pause Mid-Air' and 'Enable Exit Area Everywhere'. It now also allows you to pause during cutscenes.</p>
<h3 id="1711063"><a href="#1711063">Site Changes</a></h3>
<ul>
<li>Added detailed changelog.</li>
<li>Updated guide with more information about the maximum code size.</li>
</ul>
<h2 id="171104"><a href="#171104">Nov 04, 2017</a> </h2>
<h3 id="1711041"><a href="#1711041">Changed Shine Get Timer</a></h3>
<p>Fixed timer resetting during wrong cutscenes when using 'Exit Area' after touching a Shine.</p>
<h2 id="171030"><a href="#171030">Oct 30, 2017</a> </h2>
<h3 id="1710301"><a href="#1710301">Added 'Enable Exit Area Everywhere'</a></h3>
<p>Allows you to choose 'Exit Area' in the pause menu on Plaza.</p>
<h2 id="171029"><a href="#171029">Oct 29, 2017</a></h2>
<h3 id="1710291"><a href="#1710291">Added 'Shine Get Timer'</a></h3>
<p>New timer that starts and ends consistently in different levels, making comparisons easier.</p>
<h2 id="171028"><a href="#171028">Oct 28, 2017</a></h2>
<h3 id="1710281"><a href="#1710281">Updated 'DPad Functions'</a></h3>
<p>New functions have been added to the DPad Functions:</p>
<ul>
<li>X+D-Pad left: No FLUDD in secrets</li>
<li>X+D-Pad right: Always FLUDD in secrets</li>
<li>X+D-Pad up: Unlock Yoshi in stages</li>
<li>X+D-Pad down: Defauld FLUDD behaviour for secrets</li>
</ul>
<h2 id="171026"><a href="#171026">Oct 26, 2017</a></h2>
<h3 id="1710261"><a href="#1710261">Added 'Enable Pause Mid-Air'</a></h3>
<p>Allows you to pause mid-air.</p>
<h2 id="171024"><a href="#171024">Oct 24, 2017</a></h2>
<h3 id="1710241"><a href="#1710241">Added 'Shine Outfit'</a></h3>
<p>Always wear glasses and the shirt.</p>
<h2 id="171015"><a href="#171015">Oct 15, 2017</a></h2>
<h3 id="1710151"><a href="#1710151">Site Changes</a></h3>
<p>Fixed the download button not working for Firefox.</p>
<h2 id="171014"><a href="#171014">Oct 14, 2017</a></h2>
<h3 id="1710141"><a href="#1710141">Added 'Fast Any%' for JP and PAL</a></h3>
<p>-</p>
<h2 id="171011"><a href="#171011">Oct 11, 2017</a></h2>
<h3 id="1710111"><a href="#1710111">Added 'Stage Randomizer' for NTSC-U</a></h3>
<p><i>Experimental!</i> Loads a random stage after exiting of finishing a level.</p>
</div>
</body>
</html>

View file

@ -1,5 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<updates>
<update>
<date>Feb 02, 2018</date>
<change>Integrated Noki Dokis Stage Loader.</change>
</update>
<update>
<date>Jan 24, 2018</date>
<change>Optimized 'Fast Any%'.</change>

View file

@ -132,7 +132,7 @@
<author>Psychonauter</author>
<version>1.6</version>
<date>Nov 29, 2017</date>
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending when you touch a Shine.<br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen 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>
C2031F68 0000000F
3CC0817F 60C60100
@ -233,7 +233,7 @@
<title lang="en">Shine Get Timer</title>
<author>Psychonauter</author>
<version>1.6</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 (Similiar to the x-cam timer of SM64). <br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
<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 (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 29, 2017</date>
<source>
C2031F68 0000000F
@ -345,7 +345,7 @@
<author>Psychonauter, Dan Salvato, Noki Doki</author>
<version>1.5</version>
<date>Nov 06, 2017</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. Codes:<br /><br /><img src="img/levelselect.png" width="500px">]]></description>
<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%, Stage Loader or Stage Randomizer code. Codes:<br /><br /><div style="text-align:center"><img src="img/levelselect.png" width="500px"></div>]]></description>
<source>
C22A6710 0000007F
3C60803E 60639710
@ -481,7 +481,7 @@
<title lang="en">Fast Any%</title>
<author>Psychonauter, Noki Doki</author>
<version>1.3.2</version>
<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 Randomizer code.</description>
<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.</description>
<date>Jan 24, 2018</date>
<source>
C22A6710 00000077

View file

@ -134,7 +134,7 @@
<author>Psychonauter</author>
<version>1.6</version>
<date>Nov 29, 2017</date>
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending when you touch a Shine. <br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen 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>
C23617C4 0000000F
3CC0817F 60C60100
@ -235,7 +235,7 @@
<title lang="en">Shine Get Timer</title>
<author>Psychonauter</author>
<version>1.6</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 (Similiar to the x-cam timer of SM64).<br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
<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 (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 29, 2017</date>
<source>
C23617C4 0000000F
@ -347,7 +347,7 @@
<author>Psychonauter, Dan Salvato, ParadoxKarl, Noki Doki</author>
<version>1.5</version>
<date>Nov 06, 2017</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. Codes:<br /><br /><img src="img/levelselect.png" width="500px">]]></description>
<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 style="text-align:center"><img src="img/levelselect.png" width="500px"></div>]]></description>
<source>
C20FA19C 0000007F
3C60803E 60636010
@ -484,7 +484,7 @@
<author>Psychonauter, Noki Doki</author>
<version>1.3.2</version>
<date>Jan 24, 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 code.</description>
<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>
C20FA19C 00000077
3C60817F 60630100

View file

@ -134,7 +134,7 @@
<author>Psychonauter, Noki Doki</author>
<version>1.6</version>
<date>Jan 17, 2018</date>
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending when you touch a Shine. <br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen 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>
C2363E70 0000000F
3CC0817F 60C60100
@ -235,7 +235,7 @@
<title lang="en">Shine Get Timer</title>
<author>Psychonauter, Noki Doki</author>
<version>1.6</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 (Similiar to the x-cam timer of SM64).<br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
<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 (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>Jan 17, 2018</date>
<source>
C2363E70 0000000F
@ -347,7 +347,7 @@
<author>Psychonauter, Dan Salvato, ParadoxKarl, Noki Doki</author>
<version>1.5</version>
<date>Jan 17, 2018</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. Codes:<br /><br /><img src="img/levelselect.png" width="500px">]]></description>
<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 style="text-align:center"><img src="img/levelselect.png" width="500px"></div>]]></description>
<source>
C20FA19C 0000007F
3C60803D 6063A8F0
@ -484,7 +484,7 @@
<author>Psychonauter, Noki Doki</author>
<version>1.3.2</version>
<date>Jan 24, 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 code.</description>
<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 00000077
3C60817F 60630100

View file

@ -142,7 +142,7 @@
<author>Psychonauter</author>
<version>1.6</version>
<date>Nov 29, 2017</date>
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending when you touch a Shine.<br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen 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>
C2032020 0000000F
3CC0817F 60C60100
@ -243,7 +243,7 @@
<title lang="en">Shine Get Timer</title>
<author>Psychonauter</author>
<version>1.6</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 (Similiar to the x-cam timer of SM64). <br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
<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 (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 29, 2017</date>
<source>
C2032020 0000000F
@ -355,7 +355,7 @@
<author>Psychonauter, Dan Salvato, Noki Doki</author>
<version>1.5.1</version>
<date>Nov 29, 2017</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. Codes:<br /><br /><img src="img/levelselect.png" width="500px">]]></description>
<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 style="text-align:center"><img src="img/levelselect.png" width="500px"></div>]]></description>
<source>
C229E668 0000007F
3C60803E 606310D0
@ -492,7 +492,7 @@
<author>Psychonauter, Noki Doki</author>
<version>1.3.2</version>
<date>Jan 24, 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 code.</description>
<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>
C229E668 00000077
3C60817F 60630100

1
codes/fast/GMSE01.json Normal file
View file

@ -0,0 +1 @@
{"injectAddr":"2A6710","fmOffset":"9FA0","notext":{"yes":"048D3A3C 21000000\r\n04153DA0 38000000\r\n0415317C 38005000\r\n","pv5":"048D3A3C 21000000\r\n283E9712 00002A00\r\n04153DA0 801C0004\r\n0415317C A81C0340\r\nE2000001 00000000\r\n2A3E9712 00002A00\r\n04153DA0 38000000\r\n0415317C 38005000\r\nE2000001 00000000\r\n","no":""},"nofmvs":{"yes":"042B5EF4 38600001\r\n042B5E8C 38600001\r\n","pp1":"C22B5EF0 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\nC22B5E88 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\n","no":""}}

1
codes/fast/GMSJ01.json Normal file
View file

@ -0,0 +1 @@
{"injectAddr":"0FA19C","fmOffset":"97D0","notext":{"yes":"048D8A7C D6008149\r\n048D8A80 81498149\r\n048D8A84 00000000\r\n04215290 38000000\r\n04214610 38005000\r\n","pv5":"048D8A7C D6008149\r\n048D8A80 81498149\r\n048D8A84 00000000\r\n283E6012 00002A00\r\n04215290 801C0004\r\n04214610 A81C0340\r\nE2000001 00000000\r\n2A3E6012 00002A00\r\n04215290 38000000\r\n04214610 38005000\r\nE2000001 00000000\r\n","no":""},"nofmvs":{"yes":"0410AF5C 38600001\r\n0410AFC0 38600001\r\n","pp1":"C210AF58 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\nC210AFBC 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\n","no":""}}

1
codes/fast/GMSJ0A.json Normal file
View file

@ -0,0 +1 @@
{"injectAddr":"2865F4","fmOffset":"9E60","notext":{"yes":"048CD55C D6008149\r\n048CD560 81498149\r\n048CD564 00000000\r\n041351C4 38000000\r\n04134524 38005000\r\n","pv5":"048CD55C D6008149\r\n048CD560 81498149\r\n048CD564 00000000\r\n283DA8F2 00002A00\r\n041351C4 801C0004\r\n04134524 A81C0340\r\nE2000001 00000000\r\n2A3DA8F2 00002A00\r\n041351C4 38000000\r\n04134524 38005000\r\nE2000001 00000000\r\n","no":""},"nofmvs":{"yes":"04295AB4 38600001\r\n04295B18 38600001\r\n","pp1":"C2295AB0 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\nC2295B14 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\n","no":""}}

1
codes/fast/GMSP01.json Normal file
View file

@ -0,0 +1 @@
{"injectAddr":"29E668","fmOffset":"9EC8","notext":{"yes":"20570B7C 00000000\r\n0474E87C 21000000\r\n20570B7D 00000001\r\n0474E9F4 21210000\r\n20570B7D 00000002\r\n0474ED38 00000000\r\n20570B7D 00000003\r\n0474EE04 A1000000\r\n20570B7D 00000004\r\n0474EBDC 21210000\r\nE2000001 00000000\r\n04148D20 38000000\r\n04147F98 38005000\r\n","pv5":"283E10D2 00002A00\r\n04148D20 801C0004\r\n04147F98 A81C0340\r\nE2000001 00000000\r\n2A3E10D2 00002A00\r\n04148D20 38000000\r\n04147F98 38005000\r\nE2000001 00000000\r\n20570B7C 00000000\r\n0474E87C 21000000\r\n20570B7D 00000001\r\n0474E9F4 21210000\r\n20570B7D 00000002\r\n0474ED38 00000000\r\n20570B7D 00000003\r\n0474EE04 A1000000\r\n20570B7D 00000004\r\n0474EBDC 21210000\r\nE2000001 00000000\r\n","no":""},"nofmvs":{"yes":"042ADE20 38600001\r\n042ADE88 38600001\r\n","pp1":"C22ADE1C 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\nC22ADE84 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\n","no":""}}

View file

@ -1,14 +1,14 @@
if (navigator.userAgent.toLowerCase().indexOf("firefox") > -1) {
HTMLElement.prototype.click = function() {
var evt = this.ownerDocument.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
this.dispatchEvent(evt);
HTMLElement.prototype.click = function() {
var evt = this.ownerDocument.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
this.dispatchEvent(evt);
}
}
document.getElementById("checkList").addEventListener("click", function(ev) {
if (ev.target && ev.target.nodeName == "LI") {
ev.target.classList.toggle("checked");
document.getElementById("checklist").addEventListener("click", function(ev) {
if (ev.target && ev.target.nodeName == "LI") {
ev.target.classList.toggle("checked");
}
});
@ -27,26 +27,20 @@ function parseXML(name) {
var desc = xmlData[i].getElementsByTagName("title")[0].textContent;
var t = document.createTextNode(desc);
li.appendChild(t);
li.setAttribute("data-codename", xmlData[i].getElementsByTagName("title")[0].textContent);
li.setAttribute("data-codeauthor", xmlData[i].getElementsByTagName("author")[0].textContent);
li.setAttribute("data-codedesc", xmlData[i].getElementsByTagName("description")[0].textContent);
li.setAttribute("data-codeversion", xmlData[i].getElementsByTagName("version")[0].textContent);
li.setAttribute("data-codedate", xmlData[i].getElementsByTagName("date")[0].textContent);
li.setAttribute("data-codesrc", xmlData[i].getElementsByTagName("source")[0].textContent.replace(/[\s\n\r\t]+/gm, ""));
li.setAttribute("data-codename", btoa(xmlData[i].getElementsByTagName("title")[0].textContent));
li.setAttribute("data-codeauthor", btoa(xmlData[i].getElementsByTagName("author")[0].textContent));
li.setAttribute("data-codedesc", btoa(xmlData[i].getElementsByTagName("description")[0].textContent));
li.setAttribute("data-codeversion", btoa(xmlData[i].getElementsByTagName("version")[0].textContent));
li.setAttribute("data-codedate", btoa(xmlData[i].getElementsByTagName("date")[0].textContent));
li.setAttribute("data-codesrc", btoa(xmlData[i].getElementsByTagName("source")[0].textContent.replace(/[\s\n\r\t]+/gm, "")));
li.setAttribute("onmouseover", "updateDescription(this)");
document.getElementById("checkList").appendChild(li);
document.getElementById("checklist").appendChild(li);
}
button = document.getElementById("downloadButton");
button.style.visibility = "visible";
button.disabled = false;
button = document.getElementById("dolphinDownloadButton");
button.style.visibility = "visible";
button.disabled = false;
button = document.getElementById("gcmDownloadButton");
button.style.visibility = "visible";
button.disabled = false;
document.getElementById("gameID").disabled = false;
var buttons = document.getElementsByTagName("button");
for (var i = 0; i < buttons.length; i++) buttons[i].disabled = false;
document.getElementById("gameversion").disabled = false;
}
};
@ -54,140 +48,358 @@ function parseXML(name) {
xml.send();
}
function updateFastCode(name) {
var xml = new XMLHttpRequest();
var file = "codes/fast/" + name + ".json";
xml.onreadystatechange = function() {
if (this.status == 200 && this.readyState == 4) {
document.getElementById("route_levels").setAttribute("data-json", btoa(xml.responseText));
}
}
xml.open("GET",file);
xml.send();
}
function downloadFile(data, filename) {
var fname = filename.replace("GMSJ0A","GMSJ01");
var file = new Blob([data], {
type: "application/octet-stream"
});
var file = new Blob([data], {
type: "application/octet-stream"
});
if (window.navigator.msSaveOrOpenBlob)
window.navigator.msSaveOrOpenBlob(file, fname);
else {
var a = document.createElement("a"),
if (window.navigator.msSaveOrOpenBlob) window.navigator.msSaveOrOpenBlob(file, filename.replace("GMSJ0A","GMSJ01"));
else {
var a = document.createElement("a"),
url = window.URL.createObjectURL(file);
a.href = url;
a.download = fname;
a.click();
setTimeout(function() {
window.URL.revokeObjectURL(url);
}, 500);
a.href = url;
a.download = filename.replace("GMSJ0A","GMSJ01");
a.click();
setTimeout(function() { window.URL.revokeObjectURL(url); }, 500);
}
}
function generateGCT() {
if (document.getElementById("gameID").value === "Choose Version") {
alert("Select the game version!");
return;
}
var data = "00D0C0DE00D0C0DE";
var codeList = document.getElementById("checkList").getElementsByTagName("li");
var valueSelected = false;
for (var i = 0; i < codeList.length; i++) {
if (codeList[i].className === "checked") {
data += codeList[i].getAttribute("data-codesrc");
if (document.getElementById("gameversion").value === "Choose Version") {
alert("Select the game version!");
return;
}
var data = "00D0C0DE00D0C0DE";
var codeList = document.getElementById("checklist").getElementsByTagName("li");
var valueSelected = false;
for (var i = 0; i < codeList.length; i++) {
if (codeList[i].className === "checked") {
data += atob(codeList[i].getAttribute("data-codesrc"));
valueSelected = true;
}
}
var fastcode = getFastCode();
if(fastcode !== false) {
data += fastcode;
valueSelected = true;
}
}
}
if (valueSelected) {
data += "FF00000000000000";
var rawData = new Uint8Array(data.length / 2);
if (valueSelected) {
data += "FF00000000000000";
var rawData = new Uint8Array(data.length / 2);
for (var x = 0; x < rawData.length; x++) {
rawData[x] = parseInt(data.substr(x * 2, 2), 16);
}
for (var x = 0; x < rawData.length; x++) {
rawData[x] = parseInt(data.substr(x * 2, 2), 16);
}
downloadFile(rawData, document.getElementById("gameID").value + ".gct");
} else {
alert("No cheat(s) selected!");
}
downloadFile(rawData, document.getElementById("gameversion").value + ".gct");
} else {
alert("No cheat(s) selected!");
}
}
function generateTXT(s) {
if (document.getElementById("gameID").value === "Choose Version") {
alert("Select the game version!");
return;
}
if (s.id === "dolphinDownloadButton") var data = "Paste the following on top of your games .ini file:\r\n[Gecko]";
else var data = document.getElementById("gameID").value.replace("GMSJ0A","GMSJ01") + "\r\nSuper Mario Sunshine";
var codeList = document.getElementById("checkList").getElementsByTagName("li");
var valueSelected = false;
for (var i = 0; i < codeList.length; i++) {
if (codeList[i].className === "checked") {
data += "\r\n";
if (s.id === "gcmDownloadButton") data += "\r\n";
else data += "$";
data += codeList[i].getAttribute("data-codename") + " (" + codeList[i].getAttribute("data-codedate") + ") [" + codeList[i].getAttribute("data-codeauthor") + "]\r\n";
data += (codeList[i].getAttribute("data-codesrc").match(/.{8}/g).join(" ")).replace(/(.{17})./g, "$1\r\n");
valueSelected = true;
}
}
function generateTXT() {
if (valueSelected) {
downloadFile(data, document.getElementById("gameID").value + ".txt");
} else {
alert("No cheat(s) selected!");
}
var dolphin = (document.getElementById("downloadformat").value === "ini");
if (document.getElementById("gameversion").value === "Choose Version") {
alert("Select the game version!");
return;
}
if (dolphin) var data = "Paste the following on top of your games .ini file:\r\n[Gecko]";
else var data = document.getElementById("gameversion").value.replace("GMSJ0A","GMSJ01") + "\r\nSuper Mario Sunshine";
var codeList = document.getElementById("checklist").getElementsByTagName("li");
var valueSelected = false;
for (var i = 0; i < codeList.length; i++) {
if (codeList[i].className === "checked") {
data += "\r\n";
if (dolphin) data += "$";
else data += "\r\n";
data += atob(codeList[i].getAttribute("data-codename")) + " (" + atob(codeList[i].getAttribute("data-codedate")) + ") [" + atob(codeList[i].getAttribute("data-codeauthor")) + "]\r\n";
data += (atob(codeList[i].getAttribute("data-codesrc")).match(/.{8}/g).join(" ")).replace(/(.{17})./g, "$1\r\n");
valueSelected = true;
}
}
var fastcode = getFastCode();
if(fastcode !== false) {
data += "\r\n";
if (dolphin) data += "$";
else data += "\r\n";
data += "Stage list loader [Noki Doki]\r\n";
data += (fastcode.match(/.{8}/g).join(" ")).replace(/(.{17})./g, "$1\r\n");
valueSelected = true;
}
if (valueSelected)
downloadFile(data, document.getElementById("gameversion").value + ".txt");
else alert("No cheat(s) selected!");
}
function downloadCodes() {
if (document.getElementById("downloadformat").value === "gct") generateGCT();
else generateTXT();
}
function updateCodelist() {
resetDescription();
document.getElementById("gameID").disabled = true;
button = document.getElementById("downloadButton");
button.style.visibility = "hidden";
button.disabled = true;
button = document.getElementById("dolphinDownloadButton");
button.style.visibility = "hidden";
button.disabled = true;
button = document.getElementById("gcmDownloadButton");
button.style.visibility = "hidden";
button.disabled = true;
document.getElementById("checkList").innerHTML = "";
var gameVersion = document.getElementById("gameID").value;
parseXML(gameVersion);
resetDescription();
document.getElementById("gameversion").disabled = true;
var buttons = document.getElementsByTagName("button");
for (var i = 0; i < buttons.length; i++) buttons[i].disabled = true;
document.getElementById("checklist").innerHTML = "";
var gameVersion = document.getElementById("gameversion").value;
parseXML(gameVersion);
updateFastCode(gameVersion);
document.getElementById("left").style.visibility = "visible";
while (document.getElementsByClassName("initialhidden").length > 0) {
document.getElementsByClassName("initialhidden")[0].classList.remove("initialhidden");
}
}
function updateDescription(s) {
document.getElementById("descriptionBox").innerHTML = "<h2>" +
s.getAttribute("data-codename") + "</h2><p style=\"margin:0\"><i>Author(s): " +
s.getAttribute("data-codeauthor") + "</i></p><p style=\"margin:0\"><i>Version: " +
s.getAttribute("data-codeversion") + " (" +
s.getAttribute("data-codedate") + ")</i></p>" + "<h4>Description:</h4><p>" +
s.getAttribute("data-codedesc") + "</p>";
document.getElementById("descriptionbox").innerHTML = "<h2>" +
atob(s.getAttribute("data-codename")) + "</h2><p style=\"margin:0\"><i>Author(s): " +
atob(s.getAttribute("data-codeauthor")) + "</i></p><p style=\"margin:0\"><i>Version: " +
atob(s.getAttribute("data-codeversion")) + " (" +
atob(s.getAttribute("data-codedate")) + ")</i></p>" + "<br /><h4>Description:</h4><p>" +
atob(s.getAttribute("data-codedesc")) + "</p>";
}
function setButtonDescription(s) {
if (s.id === "downloadButton")
document.getElementById("descriptionBox").innerHTML = "<h2>Download GCT</h2><p>Download the cheats in the GCT format for use with Nintendont.</p>";
else if (s.id === "dolphinDownloadButton")
document.getElementById("descriptionBox").innerHTML = "<h2>Download for Dolphin</h2><p>Download a textfile containing the formatted codes for use with Dolphin. Copy the contents of the file on top of your games .ini file.</p><p>You can open the .ini file by right clicking the game in Dolphin. In the context menu select \"<i>Properties</i>\" and then \"<i>Edit configuration</i>\".</p>";
else
document.getElementById("descriptionBox").innerHTML = "<h2>Download for Gecko Cheat Manager</h2><p>Download the cheats in a textfile formatted for use with the <a href=\"http://wiibrew.org/wiki/CheatManager\">Gecko Cheat Manager</a>. Place the txt file in SD:/txtcodes/.</p><p>A zip archive containing pregenerated txt files with all available codes on this site can be downloaded <a href=\"files/GCMCodes.zip\">here</a>.";
function updateUIDescription(s) {
if (s.id === "route_notext")
document.getElementById("descriptionbox").innerHTML = "<h2>Remove Dialogue</h2><p>Replaces all Dialogue with \"!!!\". 'Always' and 'Not in Pianta 5' will override the dialogue skip from the DPad Functions.</p>";
else if (s.id === "route_nofmvs")
document.getElementById("descriptionbox").innerHTML = "<h2>Skippable Cutscenes</h2><p>Makes FMVs Skippable. 'Always' has the same effect as the 'FMV Skips' code. Also, having 'FMV Skips' enabled will override 'Not in Pinna 1' - so don't use both simultaneously.</p>";
else if (s.id === "route_random")
document.getElementById("descriptionbox").innerHTML = "<h2>Random Level Order</h2><p>Randomizes what level is loaded next - it can be any from the levels you choose on the list. Even levels that you've finished already.</p>";
else if (s.id === "downloadformat")
document.getElementById("descriptionbox").innerHTML = "<h2>File Format</h2><p>You can choose between 3 file formats:</p><h4>GCT</h4><p>Download a GCT file for use with Nintendont</p><h4>Dolphin INI</h4><p>Download a textfile containing the formatted codes for use with Dolphin. Copy the contents of the file on top of your games .ini file.</p><p>You can open the .ini file by right clicking the game in Dolphin. In the context menu select 'Properties' and then 'Edit configuration'.</p><h4>Cheat Manager TXT</h4><p>Download the cheats in a textfile formatted for use with the <a target=\"_blank\" href=\"http://wiibrew.org/wiki/CheatManager\">Gecko Cheat Manager</a>. Place the txt file in SD:/txtcodes/.</p><p>A zip archive containing pregenerated txt files with all available codes on this site can be downloaded <a target=\"_blank\" href=\"files/GCMCodes.zip\">here</a>.</p>";
else if (s.id === "stageloader")
document.getElementById("descriptionbox").innerHTML = "<h2>Stage Loader</h2><p>Select yes if you want to use a custom stage loader, which automatically loads the levels you choose, similiar to 'Fast Any%'.</p>";
}
function resetDescription() {
document.getElementById("descriptionBox").innerHTML = "<p><h3>Select your codes from the list...</h3></p>";
document.getElementById("descriptionbox").innerHTML = "<p><h3>Choose your codes from the list...</h3></p>";
}
function updateChangelog() {
var xml = new XMLHttpRequest();
var file = "changelog.xml";
xml.onload = function() {
if (this.status == 200 && this.responseXML != null) {
var changelogData = xml.responseXML;
changelogData = (new DOMParser()).parseFromString(xml.responseText, "text/xml");
changelogData = changelogData.getElementsByTagName("update");
document.getElementById("gameversion").style.visibility = "visible";
var xml = new XMLHttpRequest();
var file = "changelog.xml";
xml.onload = function() {
if (this.status == 200 && this.responseXML != null) {
var changelogData = xml.responseXML;
changelogData = (new DOMParser()).parseFromString(xml.responseText, "text/xml");
changelogData = changelogData.getElementsByTagName("update");
for (var i = 0; i < changelogData.length && i < 5; i++) {
document.getElementById("changelog").innerHTML += "<p style=\"margin:0\"><i>" + changelogData[i].getElementsByTagName("date")[0].textContent + ":</i> " + changelogData[i].getElementsByTagName("change")[0].textContent + "</p>";
document.getElementById("lastupdate").innerHTML = "Last Updated: " + changelogData[0].getElementsByTagName("date")[0].textContent;
for (var i = 0; i < changelogData.length && i < 5; i++) {
document.getElementById("changelog").innerHTML += "<p style=\"margin:0\"><i>" + changelogData[i].getElementsByTagName("date")[0].textContent + ":</i> " + changelogData[i].getElementsByTagName("change")[0].textContent + "</p>";
}
document.getElementById("changelog").innerHTML += "<a target=\"_blank\" href=\"changelog.html\"><i>more ...</i></a>";
};
}
xml.open("GET", file);
xml.send();
}
/****************************
*
* Fastcode, https://github.com/QbeRoot/fastcodes/blob/master/script.js
*
****************************/
'strict mode'
const levels = document.querySelector("#route_levels");
const template = levels.lastElementChild;
template.ondragstart = function() { return false; };
function appendLevel(code) {
const clone = template.cloneNode(true);
clone.draggable = true;
selSetHandlers(clone);
clone.querySelector("select").value = code;
levels.insertBefore(clone, template);
}
function clearLevels() {
while (levels.firstChild !== template) levels.removeChild(levels.firstChild);
}
template.addEventListener("change", function () {
appendLevel(template.querySelector("select").value);
template.querySelector("select").value = "0F00";
})
levels.addEventListener("change", function ({target: t}) {
if (t.value === "0F00" && t.parentNode !== template) levels.removeChild(t.parentNode);
})
levels.addEventListener("click", function ({target: t}) {
if (t.tagName.toUpperCase() === "BUTTON") levels.removeChild(t.parentNode);
})
document.querySelector("#route_presets").addEventListener("change", function ({currentTarget: t}) {
if (levels.childElementCount <= 1 || confirm("Loading a preset will erase your current list. Continue?")) {
clearLevels();
const preset = t.value;
for (let i = 0; i <= preset.length - 4; i += 4) appendLevel(preset.substr(i, 4));
}
t.value = ""
})
document.querySelector("#route_clear").addEventListener("click", function () {
confirm("Do you really want to clear the list?") && clearLevels();
})
{
let selection;
function selDragStart(e) {
selection = this;
e.dataTransfer.effectAllowed = "move";
e.dataTransfer.setData("text/html", this.querySelector("select").value);
this.classList.add("dragelement");
}
function selDragOver(e) {
if (e.preventDefault) {
e.preventDefault();
}
document.getElementById("changelog").innerHTML += "<a target=\"_blank\" href=\"changelog.html\"><i>more ...</i></a>";
};
}
xml.open("GET", file);
xml.send();
}
this.classList.add("dragover");
e.dataTransfer.dropEffect = "move";
return false;
}
function selDragLeave() {
this.classList.remove("dragover");
}
function selDragDrop(e) {
if (e.stopPropagation) {
e.stopPropagation();
}
if (selection != this) {
this.parentNode.removeChild(selection);
this.insertAdjacentHTML("afterend", template.outerHTML);
this.nextSibling.querySelector("select").value = e.dataTransfer.getData('text/html');
this.nextSibling.draggable = true;
selSetHandlers(this.nextSibling);
}
this.classList.remove("dragover");
return false;
}
function selDragEnd() {
this.classList.remove("dragelement");
}
function selSetHandlers(elem) {
elem.addEventListener('dragstart', selDragStart, false);
elem.addEventListener('dragover', selDragOver, false);
elem.addEventListener('dragleave', selDragLeave, false);
elem.addEventListener('drop', selDragDrop, false);
elem.addEventListener('dragend', selDragEnd, false);
}
}
//Interface
function getFastCode() {
const levelCodes = Array.prototype.map.call(levels.querySelectorAll("select"), s => s.value);
levelCodes.pop();
if (!(document.getElementById("usefastcode").checked) || levelCodes.length <= 1) return false;
let game = JSON.parse(atob(document.getElementById("route_levels").getAttribute("data-json")));
const randomize = (document.getElementById("route_random").value === "yes");
const levelWords = Math.ceil(levelCodes.length / 2);
const asm = [];
asm.push("48" + ("00000" + (levelWords + 1 << 2 | 1).toString(16).toUpperCase()).slice(-6)); // bl to the code
for (let i = 0; i < levelWords; ++i) {
asm.push(levelCodes[2 * i] + (levelCodes[2 * i + 1] || "0000"));
}
//Timer compatibility
asm.push("3C80817F"); // lis r4, 0x817F
asm.push("38000000"); // li r0, 0
asm.push("9004010C"); // stw r0, 0x010C(r4)
asm.push("38000001"); // li r0, 1
asm.push("98040101"); // stb r0, 0x0101(r4)
asm.push("881F0012"); // lbz r0, 0x12(r31)
if (!randomize) {
asm.push("2C00000F"); // cmpwi r0, 15
asm.push("40820010"); // bne- 0x10
asm.push("38000000"); // li r0, 0
asm.push("90040000"); // stw r0, 0(r4)
asm.push("4800002C"); // b 0x2C
}
asm.push("2C000001"); // cmpwi r0, 1
if (randomize) {
asm.push("41810030"); // bgt- 0x30
asm.push("7C6C42E6"); // mftbl r3
asm.push("3880" + ("000" + (levelCodes.length * 2).toString(16).toUpperCase()).slice(-4)); // li r4, length
asm.push("7C032396"); // divwu r0, r3, r4
asm.push("7C0021D6"); // mullw r0, r0, r4
asm.push("7C601850"); // sub r3, r3, r0
asm.push("5463003C"); // rlwinm r3, r3, 0, 0, 30
} else {
asm.push("41810024"); // bgt- 0x24
asm.push("80640000"); // lwz r3, 0(r4)
asm.push("38030002"); // addi r0, r3, 2
asm.push("90040000"); // stw r0, 0(r4)
}
asm.push("7C8802A6"); // mflr r4
asm.push("7C641A2E"); // lhzx r3, r4, r3
asm.push("B07F0012"); // sth r3, 0x12(r31)
asm.push("808D" + game.fmOffset); // lwz r4, TFlagManager::smInstance
asm.push("986400DF"); // stb r3, 0xDF(r4)
asm.push("807F0020"); // lwz r3, 0x20(r31)
if (asm.length % 2 === 0) {
asm.push("60000000"); // nop
}
asm.push("00000000");
const geckoLines = asm.length / 2;
let gecko = "C2" + game.injectAddr + " " + ("0000000" + geckoLines.toString(16).toUpperCase()).slice(-8) + "\r\n";
for (let i = 0; i < geckoLines; ++i) {
gecko += asm[2 * i] + " " + asm[2 * i + 1] + "\r\n";
}
let codes = gecko +
game.notext[document.getElementById("route_notext").value] +
game.nofmvs[document.getElementById("route_nofmvs").value];
return codes.replace(/[^0-9A-F]/g, '');
}

View file

@ -2,21 +2,22 @@
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=480px, initial-scale=1.0">
<link rel="stylesheet" href="style/guide.css">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<title>Guide</title>
</head>
<body>
<div id="guide_content">
<div id="guide_content" class="framed">
<h1 style="text-align:center;width:100%">How to install and use practice codes</h1>
<p style="margin:0;text-align:center;width:100%;">This page is a simple guide to explain the recommended way to install practice codes on your Nintendo Wii.</p>
<br />
<div id="indexlisting">
<h3><a href="#1">1. Preparing your Wii</a></h3>
<h3><a href="#2">2. Install and use the cheatfile</a></h3>
<h3><a href="#3">3. Troubleshooting</a></h3>
<h3><a href="#4">4. Appendix: Cheat Manager (Homebrew)</a></h3>
<h3><a href="#5">5. Appendix: Using the codes with Dolphin</a></h3>
<h3><a href="#1">1. Preparing your Wii</a></h3>
<h3><a href="#2">2. Install and use the cheatfile</a></h3>
<h3><a href="#3">3. Troubleshooting</a></h3>
<h3><a href="#4">4. Appendix: Cheat Manager (Homebrew)</a></h3>
<h3><a href="#5">5. Appendix: Using the codes with Dolphin</a></h3>
</div>
<br />
<hr />

View file

@ -3,55 +3,251 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="description" content="Generates cheatfiles for Super Mario Sunshine speedrun practice.">
<meta name="viewport" content="width=480px, initial-scale=1.0">
<link rel="stylesheet" href="style/style.css">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<title>SMS GCT Generator</title>
<title>Super Mario Sunshine Practice Code Generator</title>
</head>
<body onload="updateChangelog()">
<div style="width:100%;overflow:hidden;">
<div style="width: 400px; float: left;">
<center>
<select id="gameID" class="selectionHeader" onchange="updateCodelist()" autocomplete="off">
<option selected disabled hidden>Choose Version</option>
<option value="GMSE01">GMSE01 (NTSC-U)</option>
<option value="GMSP01">GMSP01 (PAL)</option>
<option value="GMSJ01">GMSJ01 (NTSC-J 1.0)</option>
<option value="GMSJ0A">GMSJ01 (NTSC-J 1.1/A)</option>
</select>
<ul id="checkList">
</ul>
<button id="downloadButton" onclick="generateGCT()" onmouseover="setButtonDescription(this)" style="visibility:hidden;">Download .GCT</button>
<button id="dolphinDownloadButton" onclick="generateTXT(this)" onmouseover="setButtonDescription(this)" style="visibility:hidden;">Dolphin INI</button>
<button id="gcmDownloadButton" onclick="generateTXT(this)" onmouseover="setButtonDescription(this)" style="visibility:hidden;">GCM TXT</button>
</center>
<div id="mainContainer">
<input type="checkbox" id="usefastcode" style="display:none" autocomplete="off" />
<div id="left" class="section">
<div id="generalsettings">
<table><tbody>
<tr>
<td nowrap>
Game Version:
</td>
<td id="ph_gameversion" style="width:100%">
<select id="gameversion" onchange="updateCodelist()" autocomplete="off" style="visibility:hidden">
<option selected disabled>Choose Version</option>
<option value="GMSE01">GMSE01 (NTSC-U)</option>
<option value="GMSP01">GMSP01 (PAL)</option>
<option value="GMSJ01">GMSJ01 (NTSC-J 1.0)</option>
<option value="GMSJ0A">GMSJ01 (NTSC-J 1.1/A)</option>
</select>
</td>
</tr>
<tr class="initialhidden">
<td nowrap>
Stage Loader:
</td>
<td style="width:100%">
<select id="stageloader" onmouseover="updateUIDescription(this)" onchange="document.getElementById('usefastcode').checked = (this.value === 'yes');" style="width:100%" autocomplete="off">
<option value="yes">Yes</option>
<option selected value="no">No</option>
</select>
</td>
</tr>
<tr class="initialhidden">
<td nowrap>
File Format:
</td>
<td style="width:100%">
<select id="downloadformat" onmouseover="updateUIDescription(this)" style="width:100%">
<option selected value="gct">GCT</option>
<option value="ini">Dolphin INI</option>
<option value="gcm">Cheat Manager TXT</option>
</select>
</td>
</tr>
<tr class="initialhidden">
<td></td>
<td>
<button onclick="downloadCodes()" id="downloadbutton">Download</button>
</td>
</tr>
</tbody></table>
</div>
<div id="codes" class="framed initialhidden">
<ul id="checklist"></ul>
</div>
</div>
<div style="margin-left:420px;">
<table id="warningMessage">
<tr>
<th><a target="_blank" href="http://smsunshine.challonge.com/any2018"><img src="img/challonge.png" alt="Challonge" align="left" /></a></th>
<th style="text-align:center">
<a target="_blank" href="http://smsunshine.challonge.com/any2018">2018 Super Mario Sunshine Any% Tournament</a><br />
Signup deadline: February 14th
</th>
<th><a target="_blank" href="http://smsunshine.challonge.com/any2018"><img src="img/challonge.png" alt="Challonge" align="right" /></a></th>
</tr>
</table>
<div id="descriptionBox" class="framed">
<h2>Mario Sunshine Cheatfile Generator</h2>
<p style="margin:0"><i>Authors: <a target="_blank" href="https://twitter.com/psychonauter">Psy</a> &amp; <a target="_blank" href="https://twitter.com/srlmilk">Milk</a></i></p>
<p style="margin:0"><i>Last Updated: Jan 24, 2018</i></p>
<h4>Description:</h4>
<div id="center" class="section initialhidden">
<div class="framed">
<h2>Stage Loader</h2>
<div>
<table style="width:100%"><tbody>
<tr>
<td nowrap>
<label for="route_notext">Remove Dialogue:</label>
</td>
<td style="width:100%">
<select id="route_notext" style="width:100%" onmouseover="updateUIDescription(this)">
<option value="yes">Always</option>
<option selected value="pv5">Not in Pianta 5</option>
<option value="no">Don't include</option>
</select>
</td>
</tr>
<tr>
<td nowrap>
<label for="route_nofmvs">Skippable Cutscenes:</label>
</td>
<td style="width:100%">
<select id="route_nofmvs" style="width:100%" onmouseover="updateUIDescription(this)">
<option value="yes">Always</option>
<option selected value="pp1">Not in Pinna 1</option>
<option value="no">Don't include</option>
</select>
</td>
</tr>
<tr>
<td nowrap>
<label for="route_random">Random Level Order:</label>
</td>
<td style="width:100%">
<select id="route_random" style="width:100%" onmouseover="updateUIDescription(this)">
<option value="yes">Yes</option>
<option selected value="no">No</option>
</select>
</td>
</tr>
</tbody></table>
</div>
<div>
<ul id="route_levels">
<li draggable="false">
<div class="route_drag">&#8801;</div>
<select>
<option value="0F00" selected disabled>Select a level…</option>
<optgroup label="Delfino Plaza">
<option value="1400">Airstrip (red coins)</option>
<option value="1500">Slide</option>
<option value="1600">Pachinko</option>
<option value="1700">Grass pipe</option>
<option value="1800">Lily Pad Ride</option>
<option value="1D00">Jail secret</option>
<option value="3400">Corona Mountain</option>
</optgroup>
<optgroup label="Bianco Hills">
<option value="0200">Bianco 1</option>
<option value="0201">Bianco 2</option>
<option value="0202">Bianco 3</option>
<option value="0203">Bianco 4</option>
<option value="0204">Bianco 5</option>
<option value="0205">Bianco 6</option>
<option value="0206">Bianco 7</option>
<option value="0207">Bianco 8</option>
</optgroup>
<optgroup label="Ricco Harbor">
<option value="0300">Ricco 1</option>
<option value="0301">Ricco 2</option>
<option value="0302">Ricco 3</option>
<option value="0303">Ricco 4</option>
<option value="0304">Ricco 5</option>
<option value="0305">Ricco 6</option>
<option value="0306">Ricco 7</option>
<option value="0307">Ricco 8</option>
</optgroup>
<optgroup label="Gelato Beach">
<option value="0400">Gelato 1</option>
<option value="0401">Gelato 2</option>
<option value="0402">Gelato 3</option>
<option value="0403">Gelato 4</option>
<option value="0404">Gelato 5</option>
<option value="0405">Gelato 6</option>
<option value="0406">Gelato 7</option>
<option value="0407">Gelato 8</option>
</optgroup>
<optgroup label="Pinna Park">
<option value="0500">Pinna 1</option>
<option value="0501">Pinna 2</option>
<option value="0502">Pinna 3</option>
<option value="0503">Pinna 4</option>
<option value="0504">Pinna 5</option>
<option value="0505">Pinna 6</option>
<option value="0506">Pinna 7</option>
<option value="0507">Pinna 8</option>
</optgroup>
<optgroup label="Sirena Beach">
<option value="0600">Sirena 1</option>
<option value="0601">Sirena 2</option>
<option value="0602">Sirena 3</option>
<option value="0603">Sirena 4</option>
<option value="0604">Sirena 5</option>
<option value="0605">Sirena 6</option>
<option value="0606">Sirena 7</option>
<option value="0607">Sirena 8</option>
</optgroup>
<optgroup label="Noki Bay">
<option value="0900">Noki 1</option>
<option value="0901">Noki 2</option>
<option value="0902">Noki 3</option>
<option value="0903">Noki 4</option>
<option value="0904">Noki 5</option>
<option value="0905">Noki 6</option>
<option value="0906">Noki 7</option>
<option value="0907">Noki 8</option>
</optgroup>
<optgroup label="Pianta Village">
<option value="0800">Pianta 1</option>
<option value="0801">Pianta 2</option>
<option value="0802">Pianta 3</option>
<option value="0803">Pianta 4</option>
<option value="0804">Pianta 5</option>
<option value="0805">Pianta 6</option>
<option value="0806">Pianta 7</option>
<option value="0807">Pianta 8</option>
</optgroup>
<optgroup label="Secret areas">
<option value="2F00">Bianco 3 secret</option>
<option value="2E00">Bianco 6 secret</option>
<option value="3000">Ricco 4 secret</option>
<option value="2000">Gelato 1 secret</option>
<option value="3200">Pinna 2 secret</option>
<option value="2900">Pinna 6 secret</option>
<option value="3300">Sirena 2 secret</option>
<option value="2800">Sirena 4 secret</option>
<option value="1F00">Noki 6 secret</option>
<option value="2A00">Pianta 5 secret</option>
</optgroup>
<optgroup label="Sublevels">
<option value="3700">Windmill (Bianco 2)</option>
<option value="1E00">Race course (Ricco 2)</option>
<option value="2100">Sand bird (Gelato 4)</option>
<option value="3A01">Mecha-Bowser fight (Pinna 1)</option>
<option value="0E00">Casino Delfino (Sirena 4)</option>
<option value="0E01">Casino Delfino (Sirena 5)</option>
<option value="3900">Deep Sea of Mare (Noki 4)</option>
<option value="3C00">Bowser fight (Corona)</option>
</optgroup>
</select>
<button type="button" class="route_remove">&#215;</button>
</li>
</ul>
</div>
<div style="text-align:center">
<button id="route_clear" type="button">Clear list</button>
<select id="route_presets">
<option value="" selected>Load a preset…</option>
<option value="0200020202030204040004060800080108020803080408050806050005010502050305020506030003010302030303040305030602050206060006010602060306040605060609000901090209030904090509063400">Any% usual route</option>
<option value="0200020202030204040004060800080108020803080408050806050005010502050305020506020502060600060106020603060406050606090009010902090309040905090603000301030203030304030503063400">Any% Ricco late</option>
<option value="0200020202030204040004010402040304040405040605000501050205030504050505060300030103020303030403050306020502060600060106020603060406050606090009010902090309040905090608000801080208030804080508063400">Any% No Major Skips</option>
<option value="020002010202020308000801080208030804080508060807050005010502050305040505050605070300030103020303030403050306030702040205020602070600060106020603060406050606060709000901090209030904090509060907040004010402040304040403040504063400">All Episodes</option>
<option value="020002010202020208000801080208030804080408040805080608070807050005010501050205030504050405050505050605070300030103010302030303030304030503050306030702030204020502050205020602070600060106010602060306030603060406050606060709000901090109010902090309040905090509060907040004000400040104020403040504040403040204063400">All Level Shines</option>
</select>
</div>
</div>
</div>
<div id="right" class="section">
<div id="descriptionbox" class="framed">
<h1>Super Mario Sunshine Practice Code Generator v2</h1>
<p style="margin:0"><i id="lastupdate"></i></p>
<br />
<p>This is a cheatfile generator for Super Mario Sunshine speedrun practice. A guide on how to use the generator and practice codes on your Wii can be found here: <a target="_blank" href="guide.html">Guide</a>. Visit the <a target="_blank" href="guide.html#3">troubleshooting section</a> if you encounter any issues.</p>
<p><i>For creating a cheatfile that automatically loads levels in a custom order (similiar to 'Fast Any%') you can use this tool: <a target="_blank" href="https://qberoot.github.io/fastcodes/">Fastcodes by Noki Doki</a>.</i></p>
<br />
<h4>Changelog:</h4>
<p id="changelog"></p>
<hr style="border-color:grey;">
<div style="text-align:center;margin:18px 0px 7px 0px">
<a target="_blank" href="https://discord.gg/0SoktBcRDw8B1NJB" title="Sunshine Community Discord"><img src="img/discord_bubble.png" style="margin:0px 7px;vertical-align:middle" alt="Sunshine Community Discord" /></a>
<a target="_blank" href="https://speedrun.com/sms" title="Sunshine Leaderboards"><img src="img/src_bubble.png" style="margin:0px 7px;vertical-align:middle" alt="Sunshine Leaderboards" /></a>
<p style="margin:0;text-align:right"><i>Made by <a target="_blank" href="https://twitter.com/psychonauter">Psychonauter</a>, <a target="_blank" href="https://twitter.com/qbe_root">Noki Doki</a> &amp; <a target="_blank" href="https://twitter.com/srlmilk">Milk</a></i></p>
<hr />
<div id="smscommunity">
<a target="_blank" href="https://discord.gg/0SoktBcRDw8B1NJB" title="Sunshine Community Discord"><img src="img/discord_bubble.png" alt="Sunshine Community Discord" /></a>
<a target="_blank" href="https://speedrun.com/sms" title="Sunshine Leaderboards"><img src="img/src_bubble.png" alt="Sunshine Leaderboards" /></a>
<h4 style="display:inline;vertical-align:middle;margin:0px 10px">Sunshine Community</h4>
<a target="_blank" href="https://twitter.com/SMSCommunity" title="Sunshine Community Twitter"><img src="img/twitter_bubble.png" style="margin:0px 7px;vertical-align:middle" alt="Sunshine Community Twitter" /></a>
<a target="_blank" href="https://www.twitch.tv/SunshineCommunity" title="Sunshine Community Twitch"><img src="img/twitch_bubble.png" style="margin:0px 7px;vertical-align:middle" alt="Sunshine Community Twitch" /></a>
<a target="_blank" href="https://twitter.com/SMSCommunity" title="Sunshine Community Twitter"><img src="img/twitter_bubble.png" alt="Sunshine Community Twitter" /></a>
<a target="_blank" href="https://www.twitch.tv/SunshineCommunity" title="Sunshine Community Twitch"><img src="img/twitch_bubble.png" alt="Sunshine Community Twitch" /></a>
</div>
</div>
</div>

View file

@ -2,66 +2,68 @@
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=480px, initial-scale=1.0">
<link rel="stylesheet" href="style/guide.css">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<title>Installing IOS58</title>
</head>
<body>
<div id="guide_content">
<h1 style="text-align:center;width:100%">Installing IOS58</h1>
<p style="margin:0;text-align:center;width:100%;">Requires Homebrew! <a href="http://gct.zint.ch/guide.html">Main Guide</a></p>
<br />
<h2 id="1"><a href="#1">1. Download the ressources</a></h2>
<a target="_blank" href="img/nusdownloader_00.png"><img src="img/nusdownloader_00.png" align="right" style="position:relative;width:50%;display:inline-block;margin-left:20px;" alt="NUS Downloader" /></a>
<h3 id="1.1"><a href="#1.1">1.1 Download NUS Downloader</a></h3>
<p>NUS Downloader is a Windows program which you can use to download official IOSs from Nintendo. you can download it <a target="_blank" href="http://wiibrew.org/wiki/NUS_Downloader">from Wiibrew</a>.</p>
<br />
<h3 id="1.2"><a href="#1.2">1.2 Download IOS58</a></h3>
<p>Open NUSDownloader and Select IOS58 from the database (see image). Make sure "<i>Pack WAD</i>" is checked. Uncheck "<i>Keep Encrypted Contents</i>" and hit "<i>Start NUS Download!</i>.</p>
<h3 id="1.3"><a href="#1.3">1.3 Copy the WAD</a></h3>
<p>The downloaded .wad will be located in <span style="font-family:monospace">titles/000000010000003A/6176/</span> in your NUS Downloader directory. Copy the wad into the root of your SD card <b>without renaming it</b>.</p>
<h3 id="1.4"><a href="#1.4">1.4 Download WiiMod</a></h3>
<p>Download WiiMod from <a target="_blank" href="https://gbatemp.net/threads/wii-mod.272321/">GBAtemp</a> and place the app into your apps folder. Put the SD card back into your Wii and open the homebrew channel.</p>
<br />
<div id="iosinstall">
<h2 id="2"><a href="#2">2. Install IOS58</a></h2>
<div>
<h3 id="2.1"><a href="#2.1">2.1 Launch WiiMod and select "IOSs"</a></h3>
<a target="_blank" href="img/wiimod_00.png"><img src="img/wiimod_00.png" width="360" height="240" alt="(1)" /></a>
</div>
<div>
<h3 id="2.2"><a href="#2.2">2.2 Navigate to 58 and press A</a></h3>
<a target="_blank" href="img/wiimod_01.png"><img src="img/wiimod_01.png" width="360" height="240" alt="(2)" /></a>
</div>
<div>
<h3 id="2.3"><a href="#2.3">2.3 Select "Install IOS"</a></h3>
<a target="_blank" href="img/wiimod_02.png"><img src="img/wiimod_02.png" width="360" height="240" alt="(3)" /></a>
</div>
<div>
<h3 id="2.4"><a href="#2.4">2.4 Select "6176"</a></h3>
<a target="_blank" href="img/wiimod_03.png"><img src="img/wiimod_03.png" width="360" height="240" alt="(4)" /></a>
</div>
<div>
<h3 id="2.5"><a href="#2.5">2.5 Confirm that you want to install "IOS58 v6176"</a></h3>
<a target="_blank" href="img/wiimod_04.png"><img src="img/wiimod_04.png" width="360" height="240" alt="(5)" /></a>
</div>
<div>
<h3 id="2.6"><a href="#2.6">2.6 Select revision 6176</a></h3>
<a target="_blank" href="img/wiimod_05.png"><img src="img/wiimod_05.png" width="360" height="240" alt="(6)" /></a>
</div>
<div>
<h3 id="2.7"><a href="#2.7">2.7 Make sure all options are set to "No"</a></h3>
<a target="_blank" href="img/wiimod_06.png"><img src="img/wiimod_06.png" width="360" height="240" alt="(7)" /></a>
</div>
<div>
<h3 id="2.8"><a href="#2.8">2.8 Press A again to start the installation</a></h3>
<a target="_blank" href="img/wiimod_07.png"><img src="img/wiimod_07.png" width="360" height="240" alt="(8)" /></a>
</div>
<div>
<h3 id="2.9"><a href="#2.9">2.9 That's it!</a></h3>
<a target="_blank" href="img/wiimod_08.png"><img src="img/wiimod_08.png" width="360" height="240" alt="(9)" /></a>
<div id="guide_content" class="framed">
<h1 style="text-align:center;width:100%">Installing IOS58</h1>
<p style="margin:0;text-align:center;width:100%;">Requires Homebrew! <a href="http://gct.zint.ch/guide.html">Main Guide</a></p>
<br />
<h2 id="1"><a href="#1">1. Download the ressources</a></h2>
<a target="_blank" href="img/nusdownloader_00.png"><img src="img/nusdownloader_00.png" align="right" style="position:relative;width:50%;display:inline-block;margin-left:20px;" alt="NUS Downloader" /></a>
<h3 id="1.1"><a href="#1.1">1.1 Download NUS Downloader</a></h3>
<p>NUS Downloader is a Windows program which you can use to download official IOSs from Nintendo. you can download it <a target="_blank" href="http://wiibrew.org/wiki/NUS_Downloader">from Wiibrew</a>.</p>
<br />
<h3 id="1.2"><a href="#1.2">1.2 Download IOS58</a></h3>
<p>Open NUSDownloader and Select IOS58 from the database (see image). Make sure "<i>Pack WAD</i>" is checked. Uncheck "<i>Keep Encrypted Contents</i>" and hit "<i>Start NUS Download!</i>.</p>
<h3 id="1.3"><a href="#1.3">1.3 Copy the WAD</a></h3>
<p>The downloaded .wad will be located in <span style="font-family:monospace">titles/000000010000003A/6176/</span> in your NUS Downloader directory. Copy the wad into the root of your SD card <b>without renaming it</b>.</p>
<h3 id="1.4"><a href="#1.4">1.4 Download WiiMod</a></h3>
<p>Download WiiMod from <a target="_blank" href="https://gbatemp.net/threads/wii-mod.272321/">GBAtemp</a> and place the app into your apps folder. Put the SD card back into your Wii and open the homebrew channel.</p>
<br />
<hr />
<div id="iosinstall" style="clear:both">
<h2 id="2"><a href="#2">2. Install IOS58</a></h2>
<div>
<h3 id="2.1"><a href="#2.1">2.1 Launch WiiMod and select "IOSs"</a></h3>
<a target="_blank" href="img/wiimod_00.png"><img src="img/wiimod_00.png" width="360" height="240" alt="(1)" /></a>
</div>
<div>
<h3 id="2.2"><a href="#2.2">2.2 Navigate to 58 and press A</a></h3>
<a target="_blank" href="img/wiimod_01.png"><img src="img/wiimod_01.png" width="360" height="240" alt="(2)" /></a>
</div>
<div>
<h3 id="2.3"><a href="#2.3">2.3 Select "Install IOS"</a></h3>
<a target="_blank" href="img/wiimod_02.png"><img src="img/wiimod_02.png" width="360" height="240" alt="(3)" /></a>
</div>
<div>
<h3 id="2.4"><a href="#2.4">2.4 Select "6176"</a></h3>
<a target="_blank" href="img/wiimod_03.png"><img src="img/wiimod_03.png" width="360" height="240" alt="(4)" /></a>
</div>
<div>
<h3 id="2.5"><a href="#2.5">2.5 Confirm that you want to install "IOS58 v6176"</a></h3>
<a target="_blank" href="img/wiimod_04.png"><img src="img/wiimod_04.png" width="360" height="240" alt="(5)" /></a>
</div>
<div>
<h3 id="2.6"><a href="#2.6">2.6 Select revision 6176</a></h3>
<a target="_blank" href="img/wiimod_05.png"><img src="img/wiimod_05.png" width="360" height="240" alt="(6)" /></a>
</div>
<div>
<h3 id="2.7"><a href="#2.7">2.7 Make sure all options are set to "No"</a></h3>
<a target="_blank" href="img/wiimod_06.png"><img src="img/wiimod_06.png" width="360" height="240" alt="(7)" /></a>
</div>
<div>
<h3 id="2.8"><a href="#2.8">2.8 Press A again to start the installation</a></h3>
<a target="_blank" href="img/wiimod_07.png"><img src="img/wiimod_07.png" width="360" height="240" alt="(8)" /></a>
</div>
<div>
<h3 id="2.9"><a href="#2.9">2.9 That's it!</a></h3>
<a target="_blank" href="img/wiimod_08.png"><img src="img/wiimod_08.png" width="360" height="240" alt="(9)" /></a>
</div>
</div>
</div>
</div>
</body>
</html>

View file

@ -1,23 +0,0 @@
html {
background-color:#0D0D0D;
color:#f1f1f1;
font-family:Calibri;
text-align:center
}
body {
display:inline-block;
}
img {
border-radius:4px
}
a {
color:#ff8297;
text-decoration:none;
}
a:hover {
color:#ffffff;
}

View file

@ -1,84 +1,79 @@
@import url('common.css');
body {
margin:30px 0px;
html {
background-color:#f0f1f0;
color:#000;
font-family:Calibri;
text-align:center
}
div {
padding:0;
body {
display:inline-block;
margin:10px 0px;
min-height:450px;
font-size:1em;
text-align:left
}
h1,h2,h3,h4{
margin:10px 20px
}
h1 {
margin:50px 0px 20px 0px;
line-height:28px
font-size:1.3em
}
h2 {
font-size:16px;
margin:30px 0px 0px 0px
font-size:1.1em
}
h3 {
font-size:15px;
margin:20px 0px 5px 20px
h3,h4 {
margin-top:15px;
font-size:1em
}
p {
margin:10px 0px 0px 0px
}
img {
margin:0px 40px;
border-radius:4px;
max-width:100%
}
a {
color:#ff0029;
text-decoration:none
}
a:hover {
color:#1185fd
}
p {
margin:0px 30px
}
ul li {
margin:0px 0px 10px 60px;
width:80%
margin-top:7px
}
hr {
border-color:#ccc
.framed {
padding:12px;
text-align:justify;
border-style:solid;
border-color:#000;
border-width:1px;
border-radius:0px
}
#guide_content {
display:inline-block;
background:#232323;
width:80%;
min-width:450px;
max-width:1200px;
overflow:hidden;
border:1px solid #333;
border-radius:4px;
border-color:#aaa;
border-width:1px;
border-style:solid;
margin:0;
padding:0px 30px 30px 30px;
font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
font-size:14px;
line-height:20px;
text-align:justify
}
#indexlisting h2, #indexlisting h3{
font-size:14px;
font-weight:normal;
margin:0
max-width:1000px
}
#iosinstall {
clear:both;
margin-top:100px;
text-align:center
}
#iosinstall h2 {
text-align:left
text-align:center;
}
#iosinstall div {
margin:0px 30px 0px 30px;
display:inline-block
}
#iosinstall div h3 {
margin:10px;
text-align:left
display:inline-block;
}

View file

@ -1,77 +1,226 @@
@import url('common.css');
body {
margin:50px;
width:980px;
min-height:450px;
html {
background-color:#f0f1f0;
color:#000;
font-family:Calibri;
text-align:left
}
body button {
padding:10px;
body {
display:inline-block;
margin:10px 0px;
min-height:450px;
font-size:1em;
text-align:left
}
h1,h2,h3,h4{
margin:5px 0px
}
h2,h3 {
text-align:center
}
h1 {
font-size:1.3em
}
h2 {
font-size:1.1em
}
h3,h4 {
margin-top:15px;
font-size:1em
}
p {
margin:10px 0px 0px 0px
}
img {
border-radius:4px;
max-width:100%
}
a {
color:#ff0029;
text-decoration:none
}
a:hover {
color:#1185fd
}
hr {
border-color:#f3f3f3
}
input[type=checkbox] {
vertical-align:middle;
width:15px;
height:15px;
margin:0;
-webkit-appearance: checkbox;
box-sizing: border-box
}
tr td:first-child {
padding-right:5px
}
td {
vertical-align:middle
}
#mainContainer {
width:100vw;
text-align:center
}
.initialhidden {
visibility:hidden;
}
.section {
display:inline-block;
vertical-align:top;
margin:20px 8px;
text-align:left
}
.framed {
padding:12px;
text-align:justify;
border-style:solid;
border-color:#000;
border-width:1px;
border-radius:0px
}
.section .framed {
margin-top:16px
}
.section .framed:first-of-type {
margin-top:0px
}
#gameversion {
width:100%;
margin-top:0
}
#downloadbutton {
width:100%;
margin-top:2px
}
#generalsettings table {
width:100%
}
#home {
display:inline-block;
min-width:400px;
width:50vw;
margin:10px 0px;
padding:4px;
text-align:justify
}
#smscommunity {
display:block;
text-align:center;
margin:18px 0px 7px 0px
}
#smscommunity img {
margin:0px 3px;
vertical-align:middle
}
#left {
width:30vw;
min-width:300px;
max-width:400px
}
#center {
display:none
}
#right {
width:50vw;
min-width:300px;
max-width:800px
}
#usefastcode:checked ~ #center {
display:inline-block;
width:20vw;
min-width:300px;
max-width:400px
}
#usefastcode:checked ~ #left {
width:20vw
}
#usefastcode:checked ~ #right {
width:35vw
}
@media screen and (max-width:1100px) {
#usefastcode:checked ~ #left, #usefastcode:checked ~ #center{
min-width:45vw;
max-width:45vw
}
#usefastcode:checked ~ #right {
min-width:90vw;
min-width:calc(90vw + 24px);
max-width:90vw
}
}
@media screen and (max-width:700px) {
#left,#center,#usefastcode:checked ~ #left, #usefastcode:checked ~ #center{
min-width:400px;
max-width:90vw;
width:90vw
}
#right,#usefastcode:checked ~ #right {
display:none
}
}
button {
padding:6px;
margin:auto;
font-size:18px;
color:#f1f1f1;
background-color:#f44336;
background-color:#ca0707;
border-style:none;
border-radius:4px;
cursor:pointer;
margin-top:5px;
outline:none
}
#downloadButton {
width:390px;
display:block
button:hover {
background-color:#ff5151;
}
#downloadButton:hover {
background-color:#ea7d75
}
#dolphinDownloadButton {
width:193px;
display:inline-block;
background-color:#5c90aa
}
#dolphinDownloadButton:hover {
background-color:#9cb6c3
}
#gameID {
margin:10px 0 5px
}
#gcmDownloadButton {
width:193px;
display:inline-block;
background-color:#629045
}
#gcmDownloadButton:hover {
background-color:#8eb575
}
ul {
margin:0;
padding:0;
width:390px;
list-style-type:none
}
ul li {
cursor:pointer;
position:relative;
padding:8px 8px 8px 40px;
select {
margin:2px 0px;
background-color:#ca0707;
padding:5px;
color:#fff;
width:200px;
border-style:none;
border-radius:4px;
border-style:solid;
border-width:1px;
background:#ffefef;
color:#262626;
font-size:18px;
text-align:left;
transition:.2s;
-webkit-user-select:none;
-moz-user-select:none;
-ms-user-select:none;
@ -79,36 +228,55 @@ ul li {
outline:none
}
ul li::before {
content:'';
position:absolute;
border-color:#a6a6a6;
border-style:solid;
border-width:1.5px;
border-radius:50%;
top:11px;
left:12px;
height:14px;
width:14px
optgroup {
background:#ff5151
}
option {
background:#ca0707
}
label {
-webkit-user-select:none;
-moz-user-select:none;
-ms-user-select:none;
user-select:none
}
ul {
margin:0;
padding:0;
width:100%;
list-style-type:none
}
ul li {
margin-top:2px;
cursor:pointer;
position:relative;
padding:4px;
color:#262626;
text-align:left;
transition:.1s;
-webkit-user-select:none;
-moz-user-select:none;
-ms-user-select:none;
user-select:none;
outline:none
}
ul li:nth-child(odd) {
background:#fdfdfd
background:#e2e2e2
}
ul li:hover {
background:#d84035;
background:#ca0707;
color:#fff;
border-color:#000
}
ul li:hover::before {
border-color:#fff;
background-color:#ffc0cb
}
ul li.checked:hover {
background:#d84035;
background:#ca0707;
color:#fff
}
@ -118,73 +286,113 @@ ul li.checked {
border-color:#262626
}
ul li.checked::before {
content:'';
position:absolute;
border-color:#fff;
border-style:solid;
border-width:1.5px;
border-radius:50%;
top:11px;
left:12px;
height:14px;
width:14px;
background-color:#d85e55
[draggable] {
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
-khtml-user-drag: element;
-webkit-user-drag: element
}
th {
font-weight:400
#route_levels {
margin:10px 0px;
}
.selectionHeader {
background-color:#f44336;
padding:10px;
color:#fff;
width:390px;
font-size:16px;
border-style:none;
border-radius:4px;
-webkit-user-select:none;
-moz-user-select:none;
-ms-user-select:none;
user-select:none;
outline:none
#route_levels li {
padding:0px 10px;
margin:0
}
.framed {
position:relative;
margin:11px 0 10px;
padding:0 12px 12px;
background:#232323;
font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
font-size:14px;
text-align:justify;
line-height:18px;
border-color:#fff;
border-style:solid;
border-width:1px;
border-radius:4px;
width:500px;
min-height:150px;
overflow-y:auto;
overflow-x:hidden;
-ms-overflow-style:none
#route_levels li.dragover {
padding-bottom:20px;
background-color:white
}
.framed::-webkit-scrollbar {
#route_levels li select {
margin:0;
width:calc(100% - 40px);
margin:0px 6px;
color:black;
background-color:inherit
}
#route_levels li select:hover {
color:white
}
#route_levels li:hover select {
color:white
}
#route_levels li:last-child {
padding-left:24px
}
#route_levels li:last-child .route_remove, #route_levels li:last-child .route_drag {
display:none
}
#warningMessage {
font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
font-size:14px;
line-height:18px;
border-color:#fff;
#checklist li {
padding-left: 26px;
}
#checklist li::before {
content:'';
position:absolute;
border-color:#a6a6a6;
border-style:solid;
border-width:1px;
border-radius:4px;
background:#232323;
width:526px;
padding:6px 12px;
margin:11px 0 0
border-width:2px;
border-radius:50%;
-webkit-transform: translateY(20%);
-moz-transform: translateY(20%);
-ms-transform: translateY(20%);
-o-transform: translateY(20%);
transform: translateY(20%);
transform: translateY(20%);
left:6px;
height:10px;
width:10px
}
#checklist li:hover::before {
border-color:#fff;
background-color:#ffc0cb
}
#checklist li.checked::before {
border-color:#fff;
background-color:#d85e55
}
.dragelement {
opacity:0.3
}
.route_remove {
background:inherit;
color:red;
font-weight:bold;
border-radius:0;
vertical-align:middle;
padding:0
}
.route_remove:hover {
background:inherit;
color:white
}
.route_drag {
display:inline;
background-color:inherit;
color:#aaa;
border-radius:0;
vertical-align:middle;
margin:0;
padding:0
}
.route_clear, .route_presets {
display:inline-block
}