init vuepress

This commit is contained in:
Matteias Collet 2020-06-27 23:33:20 +02:00
parent 53712eae92
commit b7bea697be
69 changed files with 12134 additions and 2656 deletions

15
.gitignore vendored Normal file → Executable file
View file

@ -1,3 +1,12 @@
[Bb]eta/ pids
[Tt]rash/ logs
*.db node_modules
npm-debug.log
coverage/
run
dist
.DS_Store
.nyc_output
.basement
config.local.js
basement_dist

View file

@ -1,22 +0,0 @@
<!DOCTYPE HTML>
<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>Changelog</title>
</head>
<body onload="updateChangelog()">
<div id="guide_content" class="framed">
<h1 style="text-align:center;width:100%;">Full Changelog</h1>
</div>
<script>
function updateChangelog() { var e = new XMLHttpRequest; e.onload = function () { if (200 == this.status && null != this.responseXML) { var t = e.responseXML; t = (t = (new DOMParser).parseFromString(e.responseText, "text/xml")).getElementsByTagName("update"); try { for (var n = document.getElementById("guide_content"), a = 0; a < t.length; a++) { var g = t[a].getElementsByTagName("date")[0].textContent.match(/[a-zA-Z0-9]/g).join(""); n.innerHTML += '<h2 id="' + g + '"><a href="#' + g + '">' + t[a].getElementsByTagName("date")[0].textContent + "</a></h2>"; for (var r = t[a].getElementsByTagName("change"), o = 0; o < r.length; o++) { n.innerHTML += "<h3>" + r[o].getElementsByTagName("head")[0].textContent + "</h3>"; for (var s = r[o].getElementsByTagName("paragraph"), m = 0; m < s.length; m++)n.innerHTML += "<p>" + s[m].textContent + "</p>" } } } catch (e) { } } }, e.open("GET", "changelog.xml"), e.send() }
</script>
</body>
<script src='/dna.js'></script>
</html>

View file

@ -1,556 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<updates>
<update>
<date>Jun 25, 2020</date>
<change>
<head>Updated 'Fix Memory Card Encoding'</head>
<paragraph>Turns out Nintendont was doing things right all along, but some loaders like Gecko OS don't.</paragraph>
</change>
</update>
<update>
<date>May 29, 2020</date>
<change>
<head>Updated Stage Loader</head>
<paragraph>Fixed a crash on NTSC-U when using Remove Dialogue: Always.</paragraph>
</change>
</update>
<update>
<date>May 8, 2020</date>
<change>
<head>Updated 'Level Select'</head>
<paragraph>You can now use Start instead of Z in any shortcut.</paragraph>
</change>
</update>
<update>
<date>Apr 9, 2020</date>
<change>
<head>Removed 'Shine Touch Timer'</head>
<paragraph>The community widely uses Shine Get Timer now, Shine Touch has become more confusing than actually useful.</paragraph>
</change>
</update>
<update>
<date>Mar 15, 2020</date>
<change>
<head>Added 'Fix Memory Card Encoding'</head>
<paragraph>Fixes a Nintendont issue with memory card encoding.</paragraph>
</change>
</update>
<update>
<date>Mar 9, 2020</date>
<change>
<head>Updated 'Level Select'</head>
<paragraph>Added shortcuts for the Noki 3 bottle (C-down-left + X) and the Red Coin Fish subarea (Y + L).</paragraph>
</change>
</update>
<update>
<date>Mar 8, 2020</date>
<change>
<head>Updated 'Level Select'</head>
<paragraph>You can now load different versions of the plaza using Y + C-stick, and the airstrip using X + L. The FLUDD cutscenes on the airstrip no longer reset the timer or accept level shortcuts.</paragraph>
</change>
<change>
<head>Added 'Force Plaza Events'</head>
<paragraph>Forces events to happen on certain versions of the plaza.</paragraph>
</change>
</update>
<update>
<date>Feb 28, 2020</date>
<change>
<head>Updated 'Infinite Lives'</head>
<paragraph>The code no longer sets the life count to 99, which would persist on save files.</paragraph>
</change>
<change>
<head>Removed 'Persistent FMV skips'</head>
<paragraph>Use FMV Skips instead.</paragraph>
</change>
</update>
<update>
<date>Oct 28, 2019</date>
<change>
<head>Updated 'Position/angle/speed display'</head>
<paragraph>Fixed a buffer overflow which caused a crash upon starting the manta fight, and ported the code to JP 1.1.</paragraph>
</change>
<change>
<head> twice</head>
<paragraph>Fixed a timing issue which caused a crash when reloading the Sirena 8 hotel with Level Select.</paragraph>
</change>
</update>
<update>
<date>Oct 22, 2019</date>
<change>
<head>Updated Stage Loader</head>
<paragraph>The coin counter is now reset upon entering a main world.</paragraph>
</change>
</update>
<update>
<date>Oct 11, 2019</date>
<change>
<head>Updated 'Shine Get Timer'</head>
<paragraph>The timer now pauses during load times.</paragraph>
</change>
</update>
<update>
<date>Sep 21, 2019</date>
<change>
<head>Updated 'Level Select'</head>
<paragraph>Added a new reset shortcut, Y, which doesnt reload into the park or the hotel.</paragraph>
</change>
</update>
<update>
<date>Aug 19, 2019</date>
<change>
<head>Added 'Respawn One-Time Shines'</head>
<paragraph>Respawns Shines obtained from the bells, the Shine Gate and Shine graffitis.</paragraph>
</change>
</update>
<update>
<date>Aug 19, 2019</date>
<change>
<head>Updated 'Shine Get Timer' and 'Shine Touch Timer'</head>
<paragraph>Improved compatibility with ISO hacks.</paragraph>
</change>
</update>
<update>
<date>Aug 4, 2019</date>
<change>
<head>Fixed 'Shine Get Timer' and 'Shine Touch Timer'</head>
<paragraph>The previous update made them start at the wrong time on all versions except PAL.</paragraph>
</change>
</update>
<update>
<date>Jul 24, 2019</date>
<change>
<head>Fixed Box Game timer in 'Shine Get Timer' and 'Shine Touch Timer'</head>
<paragraph>The box game timer is no longer affected by the timer codes.</paragraph>
</change>
</update>
<update>
<date>Jun 19, 2019</date>
<change>
<head>Added 'Intro skip'</head>
<paragraph>Allows to reach the title screen faster upon booting or resetting the game.</paragraph>
</change>
</update>
<update>
<date>Apr 30, 2019</date>
<change>
<head>Updated 'Level Select'</head>
<paragraph>Resetting in Pinna 1 can no longer bring up the park owner's dialogue or the Shine spawn, resetting in Sirena 5 no longer loads Sirena 4, episode names fixed when resetting into the park or hotel.</paragraph>
</change>
</update>
<update>
<date>Apr 19, 2019</date>
<change>
<head>Fixed 'Level Select'</head>
<paragraph>The shortcut for any episode 1 would reset the game and all shortcuts in the Secrets category would load Bianco 3.</paragraph>
</change>
</update>
<update>
<date>Apr 17, 2019</date>
<change>
<head>Updated 'Level Select'</head>
<paragraph>Z can now reload main levels that weren't initially entered using Level Select, and Hotel Delfino without letting Mario move earlier than normal. Reloading Casino Delfino with Z is no longer possible unless it was specifically loaded with C-down + X.</paragraph>
</change>
</update>
<update>
<date>Apr 5, 2019</date>
<change>
<head>Added 'Infinite Juice'</head>
<paragraph>Prevents Yoshi from running out of juice and despawning.</paragraph>
</change>
</update>
<update>
<date>Apr 3, 2019</date>
<change>
<head>Updated 'DPad Functions'</head>
<paragraph>Position codes now save camera angle.</paragraph>
</change>
</update>
<update>
<date>Jan 24, 2019</date>
<change>
<head>Merged 'Fade-in Timer' into 'Shine Touch Timer'</head>
<paragraph>'Shine Touch Timer' now starts on the last black frame before taking control of Mario, matching the timing method for IL leaderboards on speedrun.com.</paragraph>
</change>
</update>
<update>
<date>Jan 23, 2019</date>
<change>
<head>Updated 'Level Select'</head>
<paragraph>Fixed Pinna 8 always skipping to the Shine after you beat it once.</paragraph>
</change>
</update>
<update>
<date>Dec 23, 2018</date>
<change>
<head>Updated 'Position/angle/speed display'</head>
<paragraph>Fixed a error in the US and PAL codes that caused wrong output on Dolphin and a crash on console.</paragraph>
</change>
</update>
<update>
<date>Dec 18, 2018</date>
<change>
<head>Added 'Position/angle/speed display'</head>
<paragraph>Not available on JP A for now as it was made using the C kit.</paragraph>
</change>
</update>
<update>
<date>Nov 3, 2018</date>
<change>
<head>Added 'Fade-in Timer'</head>
<paragraph>A new variant of the in-game timer, starting on the last black frame before taking control of Mario rather than before the demo.</paragraph>
</change>
</update>
<update>
<date>Nov 1, 2018</date>
<change>
<head>Updated 'DPad Functions'</head>
<paragraph>Added a remote grab code in place of Yoshi/nozzles unlock (X + Up), which exists as standalone codes.</paragraph>
</change>
</update>
<update>
<date>Oct 25, 2018</date>
<change>
<head>Updated Stage Loader</head>
<paragraph>Fixed gpApplication address for US and JP A.</paragraph>
</change>
</update>
<update>
<date>Sep 09, 2018</date>
<change>
<head>Updated 'Level Select'</head>
<paragraph>Mashing through cutscenes with B no longer causes the game to reset.</paragraph>
</change>
<change>
<head>Updated Stage Loader</head>
<paragraph>Fixed some repeated/missing segments in the presets and 'Not in Pinna' FMV skips for JP A.</paragraph>
</change>
</update>
<update>
<date>Sep 05, 2018</date>
<change>
<head>Updated 'Disable Blue Coin Flag'</head>
<paragraph>The blue coin counter now increases as normal and gets reset on area transitions.</paragraph>
</change>
</update>
<update>
<date>Aug 29, 2018</date>
<change>
<head>Updated Stage Loader</head>
<paragraph>The code is now able to load the airstrip and any version of the plaza. Added new presets with plaza movement, including 96 Shines and 120 Shines. Added new route endings. Changed the conditional FMV skips option from 'Not in Pinna 1' to 'Not in Pinna', no longer making the Pinna unlock cutscene skippable.</paragraph>
</change>
</update>
<update>
<date>Aug 24, 2018</date>
<change>
<head>Updated 'DPad Functions' and Stage Loader</head>
<paragraph>Skipping Yes/No textboxes now acts as a Yes.</paragraph>
</change>
</update>
<update>
<date>Aug 19, 2018</date>
<change>
<head>Removed 'Codes Optimizer'</head>
<paragraph>Its only noticeable effect was to break the timer codes.</paragraph>
</change>
<change>
<head>Added 'Any Fruit Opens Yoshi Eggs'</head>
<paragraph>Yoshi still asks for a specific fruit but bringing him another one will open the egg anyway.</paragraph>
</change>
</update>
<update>
<date>Jul 26, 2018</date>
<change>
<head>Added 'Persistent FMV Skips'</head>
<paragraph>Makes FMVs skippable in newly created save files.</paragraph>
</change>
</update>
<update>
<date>Jul 03, 2018</date>
<change>
<head>Added 'Codes Optimizer'</head>
<paragraph>Prevents the codes that only need to run once from running every frame.</paragraph>
</change>
</update>
<update>
<date>Mar 08, 2018</date>
<change>
<head>Removed Original IGT (Deprecated)</head>
<paragraph>Use Shine Get/Touch timer instead.</paragraph>
</change>
</update>
<update>
<date>Feb 28, 2018</date>
<change>
<head>Fixed Stage Loader.</head>
<paragraph>The previous version didnt reset properly after the first use if the route ending was the title screen, and reloaded the last level upon exiting area in Corona.</paragraph>
</change>
<change>
<head>Added new stages to the loader.</head>
<paragraph>You can now select the Gooper Blooper fight from Ricco 1, the rollercoaster ride from Pinna 8, the King Boo fight from Sirena 5, the bottle from Noki 3 and the underwater area from Noki 8.</paragraph>
</change>
</update>
<update>
<date>Feb 16, 2018</date>
<change>
<head>Fixed timer compatibility in Fast Any% and Stage Loader.</head>
<paragraph>The timer didnt reset in Corona.</paragraph>
</change>
</update>
<update>
<date>Feb 13, 2018</date>
<change>
<head>Added 'Replace Episode names with their ID' for all versions.</head>
<paragraph>Previously only available for NTSC-U.</paragraph>
</change>
</update>
<update>
<date>Feb 12, 2018</date>
<change>
<head>Fixed Stage Loader.</head>
<paragraph>An error in the generator caused it to output malformed codes.</paragraph>
</change>
<change>
<head>Added Unlock Nozzles.</head>
<paragraph>Standalone code and extra feature for X+Up on the DPad Functions.</paragraph>
</change>
</update>
<update>
<date>Feb 10, 2018</date>
<change>
<head>Added Unlock Yoshi.</head>
<paragraph>Standalone equivalent to X+Up on the DPad Functions.</paragraph>
</change>
</update>
<update>
<date>Feb 06, 2018</date>
<change>
<head>Fixed Level Select for JP 1.1.</head>
<paragraph>Fixed the injection address.</paragraph>
</change>
</update>
<update>
<date>Feb 03, 2018</date>
<change>
<head>Updated Stage Loader.</head>
<paragraph>Exiting area or dying now reloads the current stage instead of moving on.</paragraph>
<paragraph>Added IW and ASIW presets.</paragraph>
<paragraph>Added options for what to do after the last level; removed Corona and Bowser from the regular level choices.</paragraph>
</change>
</update>
<update>
<date>Feb 02, 2018</date>
<change>
<head>Integrated Noki Dokis Stage Loader.</head>
<paragraph><![CDATA[Integrated <a href="https://qberoot.github.io/fastcodes/">Noki Dokis Stage Loader</a> into the Generator.]]></paragraph>
</change>
</update>
<update>
<date>Jan 24, 2018</date>
<change>
<head>Optimized 'Fast Any%'.</head>
<paragraph>Shortened the code by a few lines.</paragraph>
</change>
</update>
<update>
<date>Jan 20, 2018</date>
<change>
<head>Fixed episode names in 'Fast Any%'.</head>
<paragraph>Makes the correct episode names appear in the demo cutscenes and the pause menu in Fast Any%.</paragraph>
</change>
<change>
<head>Added 'Remove Save Boxes'.</head>
<paragraph>Adds the option to have save boxes removed outside of 'Fast Any%'</paragraph>
</change>
<change>
<head>Made 'Fast Any%' compatible with the timers.</head>
<paragraph>Makes it possible to use the Shine Get and Shine Touch timer in combination with Fast Any%</paragraph>
</change>
</update>
<update>
<date>Jan 18, 2018</date>
<change>
<head>Updated guides.</head>
<paragraph>Added additional information based on questions asked on the Discord.</paragraph>
</change>
</update>
<update>
<date>Jan 17, 2018</date>
<change>
<head>Added JP-A port.</head>
<paragraph>Added JP-A port for all codes.</paragraph>
</change>
</update>
<update>
<date>Jan 08, 2018</date>
<change>
<head>Added guide for installing IOS58.</head>
<paragraph><![CDATA[Added <a href="ios58.html"> a guide on how to install IOS58.]]></paragraph>
</change>
</update>
<update>
<date>Jan 01, 2018</date>
<change>
<head>Fixed 'D-Pad Functions' not removing dialogue properly.</head>
<paragraph></paragraph>
</change>
</update>
<update>
<date>Dec 30, 2017</date>
<change>
<head>Plaza Yoshi Unlock in 'D-Pad Functions'.</head>
<paragraph>Added Plaza Yoshi Unlock.</paragraph>
</change>
</update>
<update>
<date>Dec 19, 2017</date>
<change>
<head>Added FMV Skips to 'Fast Any%' except for Pinna 1.</head>
<paragraph>Always enables FMV Skips outside Pinna 1.</paragraph>
</change>
</update>
<update>
<date>Dec 05, 2017</date>
<change>
<head>Added 'Download for Gecko Cheat Manager' option.</head>
<paragraph>Added option to download codes formatted for the Gecko Cheat Manager.</paragraph>
</change>
</update>
<update>
<date>Nov 29, 2017</date>
<change>
<head>Made timers stop after the bowser fight.</head>
<paragraph>Timers now also allow to time Corona properly, by stopping them when hitting the last platform during the bowser fight.</paragraph>
</change>
<change>
<head>Fixed Pinna not resetting inside the park on PAL.</head>
<paragraph></paragraph>
</change>
</update>
<update>
<date>Nov 12, 2017</date>
<change>
<head>Fixed 'Free Pause' compatibility with 'Shine Get Timer'.</head>
<paragraph>Fixed 'Free Pause' incompatibility with 'Shine Get Timer' caused by them injecting code in the same address.</paragraph>
</change>
</update>
<update>
<date>Nov 09, 2017</date>
<change>
<head>Added 'Download for Dolphin' button.</head>
<paragraph>Added download button to get the codes formatted for Dolphin.</paragraph>
</change>
</update>
<update>
<date>Nov 08, 2017</date>
<change>
<head>Added 'Fast 79 Shines' for NTSC-U.</head>
<paragraph>Same concept as 'Fast Any%'.</paragraph>
</change>
</update>
<update>
<date>Nov 07, 2017</date>
<change>
<head>Seperated 'Free Pause' and 'Exit Area everywhere'.</head>
<paragraph>Seperated these two codes again since they don't depend on each other.</paragraph>
</change>
</update>
<update>
<date>Nov 06, 2017</date>
<change>
<head>Updated 'Level Select'. Added 'Shine Touch Timer'. Marked original IGT as deprecated.</head>
<paragraph>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:</paragraph>
<paragraph><![CDATA[<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>]]></paragraph>
<paragraph>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.</paragraph>
<paragraph>Timer Changes:</paragraph>
<paragraph><![CDATA[<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>]]></paragraph>
<paragraph>Known Bugs:</paragraph>
<paragraph><![CDATA[<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>]]></paragraph>
</change>
<change>
<head>Updated Level Select</head>
<paragraph><![CDATA[<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>]]></paragraph>
</change>
<change>
<head>Replaced 'Exit Area Everywhere' and 'Pause Mid-Air' with 'Free Pause'.</head>
<paragraph>Merged the two codes.</paragraph>
</change>
</update>
<update>
<change>
<date>Nov 06, 2017</date>
<head>Added 'Free Pause'</head>
<paragraph>'Free Pause' replaces 'Enable Pause Mid-Air' and 'Enable Exit Area Everywhere'. It now also allows you to pause during cutscenes.</paragraph>
</change>
</update>
<update>
<date>Nov 04, 2017</date>
<change>
<head>Fixed 'Shine Get Timer' stopping in wrong cutscenes.</head>
<paragraph>Fixed timer resetting during wrong cutscenes when using 'Exit Area' after touching a Shine.</paragraph>
</change>
</update>
<update>
<date>Oct 30, 2017</date>
<change>
<head>Added 'Enable Exit Area Everywhere'.</head>
<paragraph></paragraph>
</change>
</update>
<update>
<date>Oct 29, 2017</date>
<change>
<head>Added 'Shine Get Timer'.</head>
<paragraph>Allows you to choose 'Exit Area' in the pause menu on Plaza.</paragraph>
</change>
</update>
<update>
<date>Oct 28, 2017</date>
<change>
<head>Added X+DPad combinations to 'DPad Functions'.</head>
<paragraph>New functions have been added to the DPad Functions:</paragraph>
<paragraph><![CDATA[<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>]]></paragraph>
</change>
</update>
<update>
<date>Oct 26, 2017</date>
<change>
<head>Added 'Enable Pause Mid-Air'.</head>
<paragraph>Allows you to pause mid-air.</paragraph>
</change>
</update>
<update>
<date>Oct 24, 2017</date>
<change>
<head>Added 'Shine outfit'.</head>
<paragraph>Always wear glasses and the shirt.</paragraph>
</change>
</update>
<update>
<date>Oct 15, 2017</date>
<change>
<head>Fixed download for Firefox.</head>
<paragraph>Fixed the download button not working for Firefox.</paragraph>
</change>
</update>
<update>
<date>Oct 14, 2017</date>
<change>
<head>Added 'Fast Any%' for JP &amp; PAL</head>
<paragraph></paragraph>
</change>
</update>
<update>
<date>Oct 11, 2017</date>
<change>
<head>Added 'Stage Randomizer' for NTSC-U (Experimental).</head>
<paragraph>Loads a random stage after exiting of finishing a level.</paragraph>
</change>
</update>
</updates>

View file

@ -1 +0,0 @@
{"fileSelect":2701876,"shineGet":2718852,"system":2724400,"proc":2778900,"gpAppHi":"803F","gpAppLo":"9712","fmOffset":"9FA0","notext":{"yes":"048D3A3C2100000004153DA0380000000415317C380050000429134060000000","pv5":"048D3A3C21000000283E971200002A0004153DA0801C00040415317CA81C03400429134088030214E2000001000000002A3E971200002A0004153DA0380000000415317C380050000429134060000000E200000100000000","no":""},"nofmvs":{"yes":"042B5EF438600001042B5E8C38600001","pp":"C22B5E88000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000C22B5EF0000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000","no":""}}

View file

@ -1 +0,0 @@
{"fileSelect":946160,"shineGet":963136,"system":968628,"proc":1024280,"gpAppHi":"803E","gpAppLo":"6012","fmOffset":"97D0","notext":{"yes":"048D8A7CD6008149048D8A8081498149048D8A840000000004215290380000000421461038005000040E488860000000","pv5":"048D8A7CD6008149048D8A8081498149048D8A8400000000283E601200002A0004215290801C000404214610A81C0340040E488888030214E2000001000000002A3E601200002A0004215290380000000421461038005000040E488860000000E200000100000000","no":""},"nofmvs":{"yes":"0410AF5C386000010410AFC038600001","pp":"C210AF58000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000C210AFBC000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000","no":""}}

View file

@ -1 +0,0 @@
{"fileSelect":2569968,"shineGet":2586924,"system":2592480,"proc":2647408,"gpAppHi":"803E","gpAppLo":"A8F2","fmOffset":"9E60","notext":{"yes":"048CD55CD6008149048CD56081498149048CD56400000000041351C43800000004134524380050000427109060000000","pv5":"048CD55CD6008149048CD56081498149048CD56400000000283DA8F200002A00041351C4801C000404134524A81C03400427109088030214E2000001000000002A3DA8F200002A00041351C43800000004134524380050000427109060000000E200000100000000","no":""},"nofmvs":{"yes":"04295AB43860000104295B1838600001","pp":"C2295AB0000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000C2295B14000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000","no":""}}

View file

@ -1 +0,0 @@
{"fileSelect":2668620,"shineGet":2685724,"system":2691272,"proc":2745964,"gpAppHi":"803E","gpAppLo":"10D2","fmOffset":"9EC8","notext":{"yes":"20570B7C000000000474E87C2100000020570B7D000000010474E9F42121000020570B7D000000020474ED380000000020570B7D000000030474EE04A100000020570B7D000000040474EBDC21210000E20000010000000004148D203800000004147F9838005000042890CC60000000","pv5":"283E10D200002A0004148D20801C000404147F98A81C0340042890CC88030214E2000001000000002A3E10D200002A0004148D203800000004147F9838005000042890CC60000000E20000010000000020570B7C000000000474E87C2100000020570B7D000000010474E9F42121000020570B7D000000020474ED380000000020570B7D000000030474EE04A100000020570B7D000000040474EBDC21210000E200000100000000","no":""},"nofmvs":{"yes":"042ADE2038600001042ADE8838600001","pp":"C22ADE1C000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000C22ADE84000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000","no":""}}

View file

@ -0,0 +1,31 @@
<template>
<div>
<h4>{{ code.title }}</h4>
<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>
</div>
<p class="description" v-html="code.description"></p>
</div>
</template>
<script>
export default {
props: {
code: { type: Object },
},
};
</script>
<style scoped>
.metadata span {
display: block;
font-style: italic;
font-size: 0.9rem;
}
.description td {
padding: 0;
}
</style>

View file

@ -0,0 +1,115 @@
<template>
<ul>
<li
v-for="code in availableCodes"
:class="code.selected ? 'checked' : ''"
@click="toggle(code)"
@mouseover="inspect(code)"
>
{{ code.title }}
</li>
</ul>
</template>
<script>
export default {
props: {
codes: { type: Array },
onSelectionChanged: { type: Function },
onInspect: { type: Function },
},
mounted() {
this.populate();
},
watch: {
codes: function() {
this.populate();
},
},
data() {
return {
availableCodes: [],
};
},
methods: {
toggle(code) {
code.selected = !code.selected;
this.onSelectionChanged(this.availableCodes.filter((c) => c.selected));
},
populate() {
this.availableCodes = this.codes.map((c) => ({ ...c, selected: false }));
},
inspect(code) {
this.onInspect(code);
},
},
};
</script>
<style scoped>
ul {
list-style-type: none;
padding-left: 0;
}
ul li {
cursor: pointer;
color: #262626;
transition: 0.1s;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
outline: none;
display: block;
min-width: 280px;
padding-right: 15px;
}
ul li:nth-child(odd) {
background: #e2e2e2;
}
ul li:hover {
background: #3eaf7c;
color: #fff;
}
ul li.checked:hover {
background: #3eaf7c;
color: #fff;
}
ul li.checked {
background: #434343;
color: #fff;
}
li {
position: relative;
padding-left: 26px;
}
li::before {
content: "";
position: absolute;
border-color: #a6a6a6;
border-style: solid;
border-width: 2px;
border-radius: 50%;
left: 6px;
top: 6px;
height: 10px;
width: 10px;
}
li:hover::before {
border-color: #fff;
background-color: #ffc0cb;
}
li.checked::before {
border-color: #fff;
background-color: #d85e55;
}
</style>

View file

@ -0,0 +1,84 @@
<template>
<div
:class="
!codes || codes.length === 0
? 'download-wrapper disabled'
: 'download-wrapper'
"
>
<button @click="onClick">Download</button>
</div>
</template>
<script>
import CodeFormatter from "./scripts/codeFormatter";
export default {
props: {
codes: { type: Array },
format: { type: String },
versionIdentifier: { type: String },
},
methods: {
onClick() {
if (!this.codes || this.codes.length === 0) {
return;
}
console.log(`Preparing download for ${this.format}`);
switch (this.format) {
case "gct":
CodeFormatter.generateGCT(this.codes, this.versionIdentifier);
break;
case "dolphin":
CodeFormatter.generateDolphinINI(this.codes, this.versionIdentifier);
break;
case "gcm":
CodeFormatter.generateCheatManagerTXT(
this.codes,
this.versionIdentifier
);
break;
}
},
},
};
</script>
<style scoped>
.download-wrapper {
position: relative;
display: block;
max-width: 400px;
min-width: 180px;
margin: 0 auto;
text-align: center;
}
.download-wrapper.disabled button {
background-color: rgb(165, 165, 165);
cursor: not-allowed;
}
button {
border: none;
outline: none;
background-color: #2eb9e2;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
border-radius: 0;
margin: 0;
display: block;
width: 100%;
padding: 6px 15px;
font-size: 14px;
color: white;
font-weight: bold;
cursor: pointer;
}
button:hover {
background-color: #3fc1e9;
}
</style>

View file

@ -0,0 +1,29 @@
<template>
<SelectComponent :options="options" :onChange="onChange" />
</template>
<script>
import SelectComponent from "./SelectComponent";
import downloadFormats from "../data/downloadFormats.json";
export default {
props: {
selectedValue: { type: String },
onChange: { type: Function },
},
mounted() {
this.onChange(downloadFormats[0].target);
},
data() {
return {
options: downloadFormats.map((v) => ({
value: v.target,
label: v.name,
})),
};
},
};
</script>
<style scoped></style>

View file

@ -0,0 +1,192 @@
<template>
<div>
<div>
<p v-if="isLoading">Loading...</p>
</div>
<section class="config">
<div>
<span>Game Version:</span>
<VersionSelect :onChange="onVersionChanged" />
</div>
<div>
<span>Download Format:</span>
<FormatSelect :onChange="onFormatChanged" />
</div>
<div>
<span>Download:</span>
<DownloadButton
:codes="selectedCheats"
:versionIdentifier="selectedVersion"
:format="selectedFormat"
/>
</div>
</section>
<section>
<div v-if="codes && codes.length > 0">
<h3>Available Codes</h3>
<CodeList
:codes="codes"
:onSelectionChanged="onCheatSelectionChanged"
:onInspect="inspect"
/>
</div>
<div v-if="codes && codes.length > 0" class="help">
<h3>Help</h3>
<CodeInfo v-if="!!inspectingCode" :code="inspectingCode" />
<div v-else>Select your codes from the list on the left.</div>
</div>
<div v-if="selectedVersion == null" class="help">
<h3>Super Mario Sunshine Cheatfile Generator</h3>
<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>
<div>
<h4>The SMS Speedrunning Community</h4>
<ul>
<li>
Discord:
<a href="https://discord.gg/9dGJWEc" target="_blank"
>https://discord.gg/9dGJWEc</a
>
</li>
<li>
Speedrun.com:
<a href="https://speedrun.com/sms" target="_blank"
>https://speedrun.com/sms</a
>
</li>
<li>
Twitter:
<a href="https://twitter.com/SMSCommunity" target="_blank"
>https://twitter.com/SMSCommunity</a
>
</li>
<li>
Twitch:
<a
href="https://www.twitch.tv/SunshineCommunity"
target="_blank"
>https://www.twitch.tv/SunshineCommunity</a
>
</li>
</ul>
</div>
<div>
<p>
The generator is brought to you by
<a href="https://twitter.com/psychonauter" target="_blank"
>Psychonauter</a
>,
<a href="https://twitter.com/Qbe_Root" target="_blank"
>Noki Doki</a
>
and
<a href="https://twitter.com/srlMilk" target="_blank">Milk</a>.
</p>
</div>
</div>
</div>
</section>
</div>
</template>
<script>
// Components
import VersionSelect from "./VersionSelect";
import FormatSelect from "./FormatSelect";
import CodeInfo from "./CodeInfo";
import CodeList from "./CodeList";
import DownloadButton from "./DownloadButton";
// Data
import gameVersions from "../data/gameVersions.json";
// Helpers
import parseXml from "./scripts/parseXml";
// Libs
import axios from "axios";
export default {
mounted() {
Promise.all(
gameVersions.map(async (v) => ({
identifier: v.identifier,
cheats: parseXml((await axios.get(`/codes/${v.identifier}.xml`)).data),
fastCodes: (await axios.get(`/codes/fast/${v.identifier}.json`)).data,
}))
)
.then((codes) => {
localStorage.setItem("codes", JSON.stringify(codes));
this.isLoading = false;
})
.catch((err) => {
if (localStorage.getItem("codes") != null) this.isLoading = false;
});
},
data() {
return {
isLoading: true,
codes: [],
selectedCheats: [],
inspectingCode: null,
selectedVersion: null,
selectedFormat: null,
};
},
methods: {
onVersionChanged(e) {
this.selectedVersion = e;
this.selectedCheats = [];
const storedCodes = JSON.parse(localStorage.getItem("codes"));
this.codes = storedCodes.find((c) => c.identifier === e).cheats;
this.inspectingCode = null;
},
onFormatChanged(e) {
this.selectedFormat = e;
},
onCheatSelectionChanged(e) {
this.selectedCheats = e;
},
inspect(code) {
this.inspectingCode = code;
},
},
};
</script>
<style scoped>
section {
display: flex;
flex-wrap: nowrap;
}
section > div {
display: inline-block;
vertical-align: top;
}
section > div:not(:first-child) {
margin-left: 20px;
}
.config span {
display: block;
margin-bottom: 10px;
padding-left: 2px;
}
</style>
<style>
body {
overflow: scroll;
}
</style>

View file

@ -0,0 +1,81 @@
<template>
<div class="select-wrapper">
<select @change="(e) => this.onChange(e.target.value)" autocomplete="off">
<option v-if="placeholder != null" selected disabled>{{
placeholder
}}</option>
<option
v-for="option in options"
:value="option.value"
:selected="selectedValue && option.value === selectedValue"
>{{ option.label }}</option
>
</select>
</div>
</template>
<script>
export default {
props: {
selectedValue: { type: String },
placeholder: { type: String },
options: { type: Array },
onChange: { type: Function },
},
data() {
return {};
},
};
</script>
<style scoped>
.select-wrapper {
position: relative;
display: inline-block;
max-width: 400px;
min-width: 180px;
margin: 0 auto;
background-color: #3eaf7c;
z-index: 10;
}
select {
border: none;
outline: none;
background: transparent;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
border-radius: 0;
margin: 0;
display: block;
width: 100%;
padding: 6px 55px 6px 15px;
font-size: 14px;
color: white;
font-weight: bold;
cursor: pointer;
}
.select-wrapper:hover {
background-color: #47c38b;
}
select option {
color: black;
font-weight: normal;
}
.select-wrapper:after {
position: absolute;
right: 2px;
top: 2px;
width: 50px;
height: 100%;
content: "\25BC";
text-align: center;
color: white;
font-size: 18px;
z-index: -1;
}
</style>

View file

@ -0,0 +1,30 @@
<template>
<SelectComponent
placeholder="Choose Version.."
:options="options"
:onChange="onChange"
/>
</template>
<script>
import SelectComponent from "./SelectComponent";
import gameVersions from "../data/gameVersions.json";
export default {
props: {
selectedValue: { type: String },
onChange: { type: Function },
},
data() {
return {
options: gameVersions.map((v) => ({
value: v.identifier,
label: v.name,
})),
};
},
};
</script>
<style scoped></style>

View file

@ -0,0 +1,62 @@
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.author}) [${code.date}]\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.author}) [${code.date}]\r\n`;
data += code.source
.match(/.{8}/g)
.join(" ")
.replace(/(.{17})./g, "$1\r\n");
});
this.downloadFile(data, `${version}.txt`);
}
static downloadFile(data, filename) {
var file = new Blob([data], {
type: "application/octet-stream",
});
if (window.navigator.msSaveOrOpenBlob)
window.navigator.msSaveOrOpenBlob(file, filename);
else {
var a = document.createElement("a"),
url = window.URL.createObjectURL(file);
a.href = url;
a.download = filename;
a.click();
setTimeout(function() {
window.URL.revokeObjectURL(url);
}, 500);
}
}
}

View file

@ -0,0 +1,21 @@
const parseXml = (xmlString) => {
const codeCollection = new DOMParser()
.parseFromString(xmlString, "text/xml")
.getElementsByTagName("code");
const codes = [...codeCollection];
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, ""),
}));
};
const parseTextNode = (node, identifier) =>
node.getElementsByTagName(identifier)[0].textContent;
export default parseXml;

46
docs/.vuepress/config.js Executable file
View file

@ -0,0 +1,46 @@
const { description } = require("../../package");
module.exports = {
title: "GCT Generator",
description: description,
head: [
["meta", { name: "theme-color", content: "#3eaf7c" }],
["meta", { name: "apple-mobile-web-app-capable", content: "yes" }],
[
"meta",
{ name: "apple-mobile-web-app-status-bar-style", content: "black" },
],
],
/**
* Theme configuration, here is the default theme configuration for VuePress.
*
* refhttps://v1.vuepress.vuejs.org/theme/default-theme-config.html
*/
themeConfig: {
repo: "",
editLinks: false,
docsDir: "",
editLinkText: "",
lastUpdated: false,
nav: [
{
text: "Guide",
link: "/guide.html",
},
{
text: "Changelog",
link: "/changelog.html",
},
{
text: "Sunshine Discord",
link: "https://discord.gg/9dGJWEc",
},
],
},
/**
* Apply pluginsrefhttps://v1.vuepress.vuejs.org/zh/plugin/
*/
plugins: ["@vuepress/plugin-back-to-top", "@vuepress/plugin-medium-zoom"],
};

View file

@ -0,0 +1,14 @@
[
{
"target": "gct",
"name": "GCT"
},
{
"target": "dolphin",
"name": "Dolphin INI"
},
{
"target": "gcm",
"name": "CheatManager TXT"
}
]

View file

@ -0,0 +1,22 @@
[
{
"identifier": "GMSE01",
"name": "GMSE01 (NTSC-U)",
"version": "GMSE01"
},
{
"identifier": "GMSP01",
"name": "GMSP01 (PAL)",
"version": "GMSP01"
},
{
"identifier": "GMSJ01",
"name": "GMSJ01 (NTSC-J 1.0)",
"version": "GMSJ01"
},
{
"identifier": "GMSJ0A",
"name": "GMSJ01 (NTSC-J 1.1)",
"version": "GMSJ01"
}
]

14
docs/.vuepress/enhanceApp.js Executable file
View file

@ -0,0 +1,14 @@
/**
* Client app enhancement file.
*
* https://v1.vuepress.vuejs.org/guide/basic-config.html#app-level-enhancements
*/
export default ({
Vue, // the version of Vue being used in the VuePress app
options, // the options for the root Vue instance
router, // the router instance for the app
siteData // site metadata
}) => {
// ...apply enhancements for the site.
}

View file

@ -381,7 +381,7 @@
<author>Psychonauter, Dan Salvato, Noki Doki</author> <author>Psychonauter, Dan Salvato, Noki Doki</author>
<version>1.14</version> <version>1.14</version>
<date>May 8, 2020</date> <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%, Stage Loader or Stage Randomizer code. Codes:<br /><br /><div style="text-align:center"><img src="img/levelselect.png" width="500px"></div>]]></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> <source>
C22A6710 00000073 C22A6710 00000073
3C60817F 3CA08040 3C60817F 3CA08040

View file

@ -382,7 +382,7 @@
<author>Psychonauter, Dan Salvato, ParadoxKarl, Noki Doki</author> <author>Psychonauter, Dan Salvato, ParadoxKarl, Noki Doki</author>
<version>1.14</version> <version>1.14</version>
<date>May 8, 2020</date> <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 style="text-align:center"><img src="img/levelselect.png" width="500px"></div>]]></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> <source>
C20FA114 00000073 C20FA114 00000073
3C60817F 3CA08040 3C60817F 3CA08040

View file

@ -382,7 +382,7 @@
<author>Psychonauter, Dan Salvato, ParadoxKarl, Noki Doki</author> <author>Psychonauter, Dan Salvato, ParadoxKarl, Noki Doki</author>
<version>1.14</version> <version>1.14</version>
<date>May 8, 2020</date> <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 style="text-align:center"><img src="img/levelselect.png" width="500px"></div>]]></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> <source>
C228656C 00000073 C228656C 00000073
3C60817F 3CA0803F 3C60817F 3CA0803F

View file

@ -391,7 +391,7 @@
<author>Psychonauter, Dan Salvato, Noki Doki</author> <author>Psychonauter, Dan Salvato, Noki Doki</author>
<version>1.14</version> <version>1.14</version>
<date>May 8, 2020</date> <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 style="text-align:center"><img src="img/levelselect.png" width="500px"></div>]]></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> <source>
C229E668 00000073 C229E668 00000073
3C60817F 3CA0803F 3C60817F 3CA0803F

View file

@ -0,0 +1,19 @@
{
"fileSelect": 2701876,
"shineGet": 2718852,
"system": 2724400,
"proc": 2778900,
"gpAppHi": "803F",
"gpAppLo": "9712",
"fmOffset": "9FA0",
"notext": {
"yes": "048D3A3C2100000004153DA0380000000415317C380050000429134060000000",
"pv5": "048D3A3C21000000283E971200002A0004153DA0801C00040415317CA81C03400429134088030214E2000001000000002A3E971200002A0004153DA0380000000415317C380050000429134060000000E200000100000000",
"no": ""
},
"nofmvs": {
"yes": "042B5EF438600001042B5E8C38600001",
"pp": "C22B5E88000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000C22B5EF0000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000",
"no": ""
}
}

View file

@ -0,0 +1,19 @@
{
"fileSelect": 946160,
"shineGet": 963136,
"system": 968628,
"proc": 1024280,
"gpAppHi": "803E",
"gpAppLo": "6012",
"fmOffset": "97D0",
"notext": {
"yes": "048D8A7CD6008149048D8A8081498149048D8A840000000004215290380000000421461038005000040E488860000000",
"pv5": "048D8A7CD6008149048D8A8081498149048D8A8400000000283E601200002A0004215290801C000404214610A81C0340040E488888030214E2000001000000002A3E601200002A0004215290380000000421461038005000040E488860000000E200000100000000",
"no": ""
},
"nofmvs": {
"yes": "0410AF5C386000010410AFC038600001",
"pp": "C210AF58000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000C210AFBC000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000",
"no": ""
}
}

View file

@ -0,0 +1,19 @@
{
"fileSelect": 2569968,
"shineGet": 2586924,
"system": 2592480,
"proc": 2647408,
"gpAppHi": "803E",
"gpAppLo": "A8F2",
"fmOffset": "9E60",
"notext": {
"yes": "048CD55CD6008149048CD56081498149048CD56400000000041351C43800000004134524380050000427109060000000",
"pv5": "048CD55CD6008149048CD56081498149048CD56400000000283DA8F200002A00041351C4801C000404134524A81C03400427109088030214E2000001000000002A3DA8F200002A00041351C43800000004134524380050000427109060000000E200000100000000",
"no": ""
},
"nofmvs": {
"yes": "04295AB43860000104295B1838600001",
"pp": "C2295AB0000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000C2295B14000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000",
"no": ""
}
}

View file

@ -0,0 +1,19 @@
{
"fileSelect": 2668620,
"shineGet": 2685724,
"system": 2691272,
"proc": 2745964,
"gpAppHi": "803E",
"gpAppLo": "10D2",
"fmOffset": "9EC8",
"notext": {
"yes": "20570B7C000000000474E87C2100000020570B7D000000010474E9F42121000020570B7D000000020474ED380000000020570B7D000000030474EE04A100000020570B7D000000040474EBDC21210000E20000010000000004148D203800000004147F9838005000042890CC60000000",
"pv5": "283E10D200002A0004148D20801C000404147F98A81C0340042890CC88030214E2000001000000002A3E10D200002A0004148D203800000004147F9838005000042890CC60000000E20000010000000020570B7C000000000474E87C2100000020570B7D000000010474E9F42121000020570B7D000000020474ED380000000020570B7D000000030474EE04A100000020570B7D000000040474EBDC21210000E200000100000000",
"no": ""
},
"nofmvs": {
"yes": "042ADE2038600001042ADE8838600001",
"pp": "C22ADE1C000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000C22ADE84000000055480043F388403914182001C5480043C2C000398418200103C8000016084039A6000000000000000",
"no": ""
}
}

View file

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View file

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View file

Before

Width:  |  Height:  |  Size: 5 KiB

After

Width:  |  Height:  |  Size: 5 KiB

View file

Before

Width:  |  Height:  |  Size: 342 KiB

After

Width:  |  Height:  |  Size: 342 KiB

View file

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

View file

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

View file

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View file

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View file

Before

Width:  |  Height:  |  Size: 153 KiB

After

Width:  |  Height:  |  Size: 153 KiB

View file

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 102 KiB

View file

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View file

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View file

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View file

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View file

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View file

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

View file

@ -0,0 +1,8 @@
/**
* Custom Styles here.
*
* refhttps://v1.vuepress.vuejs.org/config/#index-styl
*/
div.theme-default-content:not(.custom)
max-width: 80%;

View file

@ -0,0 +1,10 @@
/**
* Custom palette here.
*
* refhttps://v1.vuepress.vuejs.org/zh/config/#palette-styl
*/
$accentColor = #3eaf7c
$textColor = #2c3e50
$borderColor = #eaecef
$codeBgColor = #282c34

1
docs/README.md Executable file
View file

@ -0,0 +1 @@
<Generator />

499
docs/changelog.md Normal file
View file

@ -0,0 +1,499 @@
---
sidebar: auto
---
# Changelog
## Jun 25, 2020
### Updated 'Fix Memory Card Encoding'
Turns out Nintendont was doing things right all along, but some loaders like Gecko OS don't.
## May 29, 2020
### Updated Stage Loader
Fixed a crash on NTSC-U when using Remove Dialogue: Always.
## May 8, 2020
### Updated 'Level Select'
You can now use Start instead of Z in any shortcut.
## Apr 9, 2020
### Removed 'Shine Touch Timer'
The community widely uses Shine Get Timer now, Shine Touch has become more confusing than actually useful.
## Mar 15, 2020
### Added 'Fix Memory Card Encoding'
Fixes a Nintendont issue with memory card encoding.
## Mar 9, 2020
### Updated 'Level Select'
Added shortcuts for the Noki 3 bottle (C-down-left + X) and the Red Coin Fish subarea (Y + L).
## Mar 8, 2020
### Updated 'Level Select'
You can now load different versions of the plaza using Y + C-stick, and the airstrip using X + L. The FLUDD cutscenes on the airstrip no longer reset the timer or accept level shortcuts.
### Added 'Force Plaza Events'
Forces events to happen on certain versions of the plaza.
## Feb 28, 2020
### Updated 'Infinite Lives'
The code no longer sets the life count to 99, which would persist on save files.
### Removed 'Persistent FMV skips'
Use FMV Skips instead.
## Oct 28, 2019
### Updated 'Position/angle/speed display'
Fixed a buffer overflow which caused a crash upon starting the manta fight, and ported the code to JP 1.1.
### twice
Fixed a timing issue which caused a crash when reloading the Sirena 8 hotel with Level Select.
## Oct 22, 2019
### Updated Stage Loader
The coin counter is now reset upon entering a main world.
## Oct 11, 2019
### Updated 'Shine Get Timer'
The timer now pauses during load times.
## Sep 21, 2019
### Updated 'Level Select'
Added a new reset shortcut, Y, which doesnt reload into the park or the hotel.
## Aug 19, 2019
### Added 'Respawn One-Time Shines'
Respawns Shines obtained from the bells, the Shine Gate and Shine graffitis.
## Aug 19, 2019
### Updated 'Shine Get Timer' and 'Shine Touch Timer'
Improved compatibility with ISO hacks.
## Aug 4, 2019
### Fixed 'Shine Get Timer' and 'Shine Touch Timer'
The previous update made them start at the wrong time on all versions except PAL.
## Jul 24, 2019
### Fixed Box Game timer in 'Shine Get Timer' and 'Shine Touch Timer'
The box game timer is no longer affected by the timer codes.
## Jun 19, 2019
### Added 'Intro skip'
Allows to reach the title screen faster upon booting or resetting the game.
## Apr 30, 2019
### Updated 'Level Select'
Resetting in Pinna 1 can no longer bring up the park owner's dialogue or the Shine spawn, resetting in Sirena 5 no longer loads Sirena 4, episode names fixed when resetting into the park or hotel.
## Apr 19, 2019
### Fixed 'Level Select'
The shortcut for any episode 1 would reset the game and all shortcuts in the Secrets category would load Bianco 3.
## Apr 17, 2019
### Updated 'Level Select'
Z can now reload main levels that weren't initially entered using Level Select, and Hotel Delfino without letting Mario move earlier than normal. Reloading Casino Delfino with Z is no longer possible unless it was specifically loaded with C-down + X.
## Apr 5, 2019
### Added 'Infinite Juice'
Prevents Yoshi from running out of juice and despawning.
## Apr 3, 2019
### Updated 'DPad Functions'
Position codes now save camera angle.
## Jan 24, 2019
### Merged 'Fade-in Timer' into 'Shine Touch Timer'
'Shine Touch Timer' now starts on the last black frame before taking control of Mario, matching the timing method for IL leaderboards on speedrun.com.
## Jan 23, 2019
### Updated 'Level Select'
Fixed Pinna 8 always skipping to the Shine after you beat it once.
## Dec 23, 2018
### Updated 'Position/angle/speed display'
Fixed a error in the US and PAL codes that caused wrong output on Dolphin and a crash on console.
## Dec 18, 2018
### Added 'Position/angle/speed display'
Not available on JP A for now as it was made using the C kit.
## Nov 3, 2018
### Added 'Fade-in Timer'
A new variant of the in-game timer, starting on the last black frame before taking control of Mario rather than before the demo.
## Nov 1, 2018
### Updated 'DPad Functions'
Added a remote grab code in place of Yoshi/nozzles unlock (X + Up), which exists as standalone codes.
## Oct 25, 2018
### Updated Stage Loader
Fixed gpApplication address for US and JP A.
## Sep 09, 2018
### Updated 'Level Select'
Mashing through cutscenes with B no longer causes the game to reset.
### Updated Stage Loader
Fixed some repeated/missing segments in the presets and 'Not in Pinna' FMV skips for JP A.
## Sep 05, 2018
### Updated 'Disable Blue Coin Flag'
The blue coin counter now increases as normal and gets reset on area transitions.
## Aug 29, 2018
### Updated Stage Loader
The code is now able to load the airstrip and any version of the plaza. Added new presets with plaza movement, including 96 Shines and 120 Shines. Added new route endings. Changed the conditional FMV skips option from 'Not in Pinna 1' to 'Not in Pinna', no longer making the Pinna unlock cutscene skippable.
## Aug 24, 2018
### Updated 'DPad Functions' and Stage Loader
Skipping Yes/No textboxes now acts as a Yes.
## Aug 19, 2018
### Removed 'Codes Optimizer'
Its only noticeable effect was to break the timer codes.
### Added 'Any Fruit Opens Yoshi Eggs'
Yoshi still asks for a specific fruit but bringing him another one will open the egg anyway.
## Jul 26, 2018
### Added 'Persistent FMV Skips'
Makes FMVs skippable in newly created save files.
## Jul 03, 2018
### Added 'Codes Optimizer'
Prevents the codes that only need to run once from running every frame.
## Mar 08, 2018
### Removed Original IGT (Deprecated)
Use Shine Get/Touch timer instead.
## Feb 28, 2018
### Fixed Stage Loader.
The previous version didnt reset properly after the first use if the route ending was the title screen, and reloaded the last level upon exiting area in Corona.
### Added new stages to the loader.
You can now select the Gooper Blooper fight from Ricco 1, the rollercoaster ride from Pinna 8, the King Boo fight from Sirena 5, the bottle from Noki 3 and the underwater area from Noki 8.
## Feb 16, 2018
### Fixed timer compatibility in Fast Any% and Stage Loader.
The timer didnt reset in Corona.
## Feb 13, 2018
### Added 'Replace Episode names with their ID' for all versions.
Previously only available for NTSC-U.
## Feb 12, 2018
### Fixed Stage Loader.
An error in the generator caused it to output malformed codes.
### Added Unlock Nozzles.
Standalone code and extra feature for X+Up on the DPad Functions.
## Feb 10, 2018
### Added Unlock Yoshi.
Standalone equivalent to X+Up on the DPad Functions.
## Feb 06, 2018
### Fixed Level Select for JP 1.1.
Fixed the injection address.
## Feb 03, 2018
### Updated Stage Loader.
Exiting area or dying now reloads the current stage instead of moving on.
### Added IW and ASIW presets.
Added options for what to do after the last level; removed Corona and Bowser from the regular level choices.
## Feb 02, 2018
### Integrated Noki Dokis Stage Loader.
Integrated [Noki Dokis Stage Loader](https://qberoot.github.io/fastcodes/) into the Generator.
## Jan 24, 2018
### Optimized 'Fast Any%'.
Shortened the code by a few lines.
## Jan 20, 2018
### Fixed episode names in 'Fast Any%'.
Makes the correct episode names appear in the demo cutscenes and the pause menu in Fast Any%.
### Added 'Remove Save Boxes'.
Adds the option to have save boxes removed outside of 'Fast Any%'
### Made 'Fast Any%' compatible with the timers.
Makes it possible to use the Shine Get and Shine Touch timer in combination with Fast Any%
## Jan 18, 2018
### Updated guides.
Added additional information based on questions asked on the Discord.
## Jan 17, 2018
### Added JP-A port.
Added JP-A port for all codes.
## Jan 08, 2018
### Added guide for installing IOS58.
Added [a guide on how to install IOS58](https://gct.zint.ch/ios58.html).
## Jan 01, 2018
### Fixed 'D-Pad Functions' not removing dialogue properly.
## Dec 30, 2017
### Plaza Yoshi Unlock in 'D-Pad Functions'.
Added Plaza Yoshi Unlock.
## Dec 19, 2017
### Added FMV Skips to 'Fast Any%' except for Pinna 1.
Always enables FMV Skips outside Pinna 1.
## Dec 05, 2017
### Added 'Download for Gecko Cheat Manager' option.
Added option to download codes formatted for the Gecko Cheat Manager.
## Nov 29, 2017
### Made timers stop after the bowser fight.
Timers now also allow to time Corona properly, by stopping them when hitting the last platform during the bowser fight.
### Fixed Pinna not resetting inside the park on PAL.
## Nov 12, 2017
### Fixed 'Free Pause' compatibility with 'Shine Get Timer'.
Fixed 'Free Pause' incompatibility with 'Shine Get Timer' caused by them injecting code in the same address.
## Nov 09, 2017
### Added 'Download for Dolphin' button.
Added download button to get the codes formatted for Dolphin.
## Nov 08, 2017
### Added 'Fast 79 Shines' for NTSC-U.
Same concept as 'Fast Any%'.
## Nov 07, 2017
### Seperated 'Free Pause' and 'Exit Area everywhere'.
Seperated these two codes again since they don't depend on each other.
## Nov 06, 2017
### Updated 'Level Select'. Added 'Shine Touch Timer'. Marked original IGT as deprecated.
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:
- Shine Touch Timer: Starts on the last black frame of the loading screen and ends when you touch the shine.
- 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).
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.
### Timer Changes:
### Changed timing (see above).
- Resets on death.
- Resets when using Shine Select.
- Only uses existing timers for Piantissimo, Sirena/Pianta 6 and Ricco 2 underground.
- Fixed Pinna 8 HUD.
#### Known Bugs:
- Can't reset Pinna 8 properly after finishing the rollercoaster. Use the cannon to reenter or reset the game instead.
- Box game timer doesn't work properly.
### Updated Level Select
- Mashing A during loading screens doesn't affect your level selection anymore.
- Pinna game resets have been fixed.
- Level Names in the intro have been fixed (shoutouts to Noki Doki).
- Sirena 5 now loads the right casino.
- 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.
### Replaced 'Exit Area Everywhere' and 'Pause Mid-Air' with 'Free Pause'.
- Merged the two codes.
## Nov 06, 2017
### Added 'Free Pause'
'Free Pause' replaces 'Enable Pause Mid-Air' and 'Enable Exit Area Everywhere'. It now also allows you to pause during cutscenes.
## Nov 04, 2017
### Fixed 'Shine Get Timer' stopping in wrong cutscenes.
Fixed timer resetting during wrong cutscenes when using 'Exit Area' after touching a Shine.
## Oct 30, 2017
### Added 'Enable Exit Area Everywhere'.
## Oct 29, 2017
### Added 'Shine Get Timer'.
Allows you to choose 'Exit Area' in the pause menu on Plaza.
## Oct 28, 2017
### Added X+DPad combinations to 'DPad Functions'.
New functions have been added to the DPad Functions:
- X+D-Pad left: No FLUDD in secrets
- X+D-Pad right: Always FLUDD in secrets
- X+D-Pad up: Unlock Yoshi in stages
- X+D-Pad down: Defauld FLUDD behaviour for secrets
## Oct 26, 2017
### Added 'Enable Pause Mid-Air'.
Allows you to pause mid-air.
## Oct 24, 2017
### Added 'Shine outfit'.
Always wear glasses and the shirt.
## Oct 15, 2017
### Fixed download for Firefox.
Fixed the download button not working for Firefox.
## Oct 14, 2017
### Added 'Fast Any%' for JP & PAL
\-
## Oct 11, 2017
### Added 'Stage Randomizer' for NTSC-U (Experimental).
Loads a random stage after exiting of finishing a level.

131
docs/guide.md Normal file
View file

@ -0,0 +1,131 @@
---
sidebar: auto
---
# Installation Guide
A guide on how to use Super Mario Sunshine practice codes on your Nintendo Wii.
[[toc]]
## Preparing your Wii
### Install Homebrew
First of all you're gonna have to install Homebrew on your Wii. Make sure your SD card is formatted to FAT32 and then visit [https://wii.guide/](https://wii.guide/) for a detailed guide on how to get Homebrew on your Wii.
### Install the necessary applications
Using Nintendont is the recommended way to use practice codes. You can download the latest build by [clicking this link](https://share.zint.ch/nintendont/latest/Nintendont.zip). Unpack the archive and place the Nintendont folder with all of its contents in the "apps" folder of your SD card. If there is no "apps" folder create one in the root of your SD card.
## Installing the cheat file
### Generate the cheat file
First you need to know which version of the game you're using. The following table displays the supported versions as well as the respective game code:
| Version | Game Code |
| ---------------------- | --------- |
| PAL (Europe) | GMSP01 |
| NTSC-U (North America) | GMSE01 |
| NTSC-J (Japanese) | GMSJ01 |
| NTSC-K (Korean) | GMSE01 |
::: tip Note for NTSC-J players
JP 1.0 and JP 1.1 both use the same ID (GMSJ01). To identify which version you have check the back of your disc. It will read "DOL-GMSJ-0-00" for 1.0 and "DOL-GMSJ-0-01" for 1.1.
![](https://gct.zint.ch/img/jp_diff.png)
:::
Visit the main site and select the appropriate game version from the dropdown menu. A list of available cheat codes will appear. Select all the cheats you want to have enabled from the list, choose GCT as file format and click "Download".
### Copy the file onto your SD card
Create a "codes" folder in the root of your SD card if there is none and copy the GCT file you just downloaded into that folder. This is what the resulting folder structure should look like on your SD card (the .gct files might be different depending on the version you chose):
![Sample Folder Structure](/img/folderstructure.png)
### Enable the codes
Open your Homebrew channel and from there launch Nintendont. Select SD and then press B on your Gamecube controller to see the settings. In your settings, make sure that "Cheats" are "On". You can switch it on/off by pressing A on your controller. (See image below)
![Enabling Cheats in Nintendont](/img/nintendont_cheats.jpg)
<!-- image -->
Press B again to return to the game list and launch your game. And with that you're done already.
## Troubleshooting
### The game doesn't launch / Stuck at black screen
This issue is not related to the practice codes. You have the following options if that happens to you:
- Restart Nintendont until the game launches (usually takes a few attempts).
- Connect your Wii to the internet before launching Nintendont.
- Wait around 30 seconds on the game selection screen before booting the disc.
- Reinstalling homebrew may fix this issue permanently.
### Nintendont says IOS58 is missing
Here's a guide on how to install IOS58 for use with Nintendont.
### The game launches but the codes don't work
This can have multiple reasons:
- You don't have cheats enabled: See 2.3 for details.
- You're using an obsolete version of Nintendont. Make sure you use version 4.434 or newer.
- Your cheatfile has the wrong name: Make sure the file is named "GMSE01.gct", "GMSJ01.gct" or "GMSP01.gct". It won't work with names like "GMSE01 (1).gct". Nintendont is very picky!
- Your cheatfile is at the wrong location: Make sure the file is in the "codes" folder of your SD Card. Again, the folder has to be named "codes" (See sample folder structure in section 2.2). If you have a "games" folder, make sure there's no file with the same name in it or its subfolders.
- Your cheatfile is too big: Using too many codes at once can cause Nintendont to disable them since the used space in the game is limited. Make sure you don't have two incompatible codes selected when downloading the cheatfile (for example "Level Select", "Fast Any%" and the Stage loader cannot be used simultaneously). If you're using Nintendont 4.434 or newer you don't have to worry about your file size unless it exceeds 8KB.
- If you have a USB drive connected and use disc, make sure you select the device that contains the cheats for your disc.
- If you use an ISO your cheat file and ISO must be on the same device (both on the SD card or both on the USB drive).
### Help, it's still not working!
You can ask for help on the [Super Mario Sunshine Discord](https://discord.gg/9dGJWEc).
## Appendix: Cheat Manager (Homebrew)
The Cheat Manager is a homebrew application that allows you to generate GCTs on your Wii. This way you don't have to redownload your cheatfile everytime you want a different combination. However, you're gonna have to use a Wiimote to control the application.
### Setup
You can download the Cheat Manager from [here](/files/Cheat_manager_v0_3.zip). Unzip the archive and copy the contents into the "apps" folder of your SD card.
Using the generator on the main site, select all the codes you want to have available on the cheat manager and choose "Cheat Manager TXT" as file format instead of "GCT" to download a text file formatted for use with the cheat manager. Create a "txtcodes" folder in the root of your SD card if there is none and copy the generated text file into that folder. The name of the text file doesn't matter if you use this application, since the games ID is stored in the textfile.
Alternatively, a zip archive containing all codes available on this site can be downloaded from [here](https://gct.zint.ch/files/GCMCodes.zip).
### Using the Cheat Manager
Launch the cheat manager and grab your Wiimote. Navigate to your textfile using the DPad and select it with "A". On the following screen press "+" to activate and "-" to deactivate a cheat.
After activating your desired codes press "1" to generate the GCT file. The cheatmanager then creates the GCT file in your "codes" folder, overwriting the old one if there's already a GCT with the same name. If you now launch the game with cheats active the new codes will be loaded.
## Appendix: Dolphin
### Setup
To use the codes with Dolphin choose "Dolphin INI" as file format instead of "GCT" to download the codes formatted for use with Dolphin.
Alternatively, a zip archive containing all codes available on this site can be downloaded from [here](https://gct.zint.ch/files/DolphinCodes.zip).
### Configuration
#### Dolphin 5.0 or older
Right click the game in Dolphin and click on "Properties" and on the bottom left corner of the property window click the "Edit configuration" button. Open the text file you downloaded and copy everything following the `[Gecko]` tag below the same tag in the configuration you just opened. If there is no `[Gecko]` tag (it should be the first tag), create one on top of your configuration file. Save and close the configuration file.
![Dolphin Gecko Codes 5.0](/img/dolphin_gecko_codes_v1.png)
#### Dolphin 5.0-11XXX or newer
Right click the game in Dolphin and click on "Properties". In the "Game Config" section choose the "Editor" tab and paste the contents of the text file you just downloaded into the "User Config" editor.
![Dolphin Gecko Codes 5.0-11XXX](/img/dolphin_gecko_codes_v2.png)
### Using the codes
Select the "Gecko-Codes" tab in the game properties and check all the codes you want to be active. Most (but not all codes) will work with Dolphin. However, Dolphin has a code limit which is reached rather quickly. So if your game crashes right after it starts, you probably have too many codes active simultaneously.

View file

@ -1,443 +0,0 @@
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);
}
}
document.getElementById("codelist").addEventListener("click", function (ev) {
if (ev.target && ev.target.nodeName.toUpperCase() === "LI")
ev.target.classList.toggle("checked");
});
function parseXML(name) {
var xml = new XMLHttpRequest();
var file = "codes/" + name + ".xml";
xml.onreadystatechange = function () {
if (this.status == 200 && this.readyState == 4) {
var xmlData = xml.responseXML;
xmlData = (new DOMParser()).parseFromString(xml.responseText, "text/xml");
xmlData = xmlData.getElementsByTagName("code");
var i = 0;
for (; i < xmlData.length; i++) {
var li = document.createElement("li");
var desc = xmlData[i].getElementsByTagName("title")[0].textContent;
var t = document.createTextNode(desc);
li.appendChild(t);
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", "updateCodeDescription(this)");
document.getElementById("codelist").appendChild(li);
}
var buttons = document.getElementsByTagName("button");
for (var i = 0; i < buttons.length; i++) buttons[i].disabled = false;
document.getElementById("sel-gamever").disabled = false;
}
};
xml.open("GET", file);
xml.send();
}
function toggleFastCode() {
document.getElementById("cc").classList.toggle("hidden");
}
function updateFastCode(name) {
var xml = new XMLHttpRequest();
xml.onreadystatechange = function () {
if (this.status == 200 && this.readyState == 4) {
document.getElementById("route_levels").setAttribute("data-json", btoa(xml.responseText));
}
}
xml.open("GET", "codes/fast/" + name + ".json");
xml.send();
}
function downloadFile(data, filename) {
var file = new Blob([data], {
type: "application/octet-stream"
});
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 = filename.replace("GMSJ0A", "GMSJ01");
a.click();
setTimeout(function () {
window.URL.revokeObjectURL(url);
}, 500);
}
}
function generateGCT() {
if (document.getElementById("sel-gamever").value === "Choose Version") {
alert("Select the game version!");
return;
}
var data = "00D0C0DE00D0C0DE";
var codeList = document.getElementById("codelist").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);
for (var x = 0; x < rawData.length; x++) {
rawData[x] = parseInt(data.substr(x * 2, 2), 16);
}
downloadFile(rawData, document.getElementById("sel-gamever").value + ".gct");
} else {
alert("No cheat(s) selected!");
}
}
function generateTXT() {
var dolphin = (document.getElementById("sel-format").value === "ini");
if (document.getElementById("sel-gamever").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("sel-gamever").value.replace("GMSJ0A", "GMSJ01") + "\r\nSuper Mario Sunshine";
var codeList = document.getElementById("codelist").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("sel-gamever").value + ".txt");
else alert("No cheat(s) selected!");
}
function downloadCodes() {
if (document.getElementById("sel-format").value === "gct") generateGCT();
else generateTXT();
}
function updateCodelist() {
disableButtons();
document.getElementById("sel-gamever").disabled = true;
resetDescription();
document.getElementById("codelist").innerHTML = "";
let gameVersion = document.getElementById("sel-gamever").value;
parseXML(gameVersion);
updateFastCode(gameVersion);
toggleHiddenContainers();
}
function disableButtons() {
var buttons = document.getElementsByTagName("button");
for (var i = 0; i < buttons.length; i++) buttons[i].disabled = true;
}
function toggleHiddenContainers() {
let hiddenElements = document.querySelectorAll(".hidden");
for (let i = 0; i < hiddenElements.length; i++) {
if (hiddenElements[i].id !== "cc") hiddenElements[i].classList.remove("hidden");
}
}
function updateCodeDescription(s) {
document.getElementById("descriptionbox").innerHTML = "<h2>" +
atob(s.getAttribute("data-codename")) + "</h2><p style=\"margin-top:0\"><i>Author(s): " +
atob(s.getAttribute("data-codeauthor")) + "</i></p><p style=\"margin-top: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 updateUIDescription(s) {
if (s && s.getAttribute("data-description"))
document.getElementById("descriptionbox").innerHTML = s.getAttribute("data-description");
}
function resetDescription() {
document.getElementById("descriptionbox").innerHTML = "<p><h3>Choose your codes from the list...</h3></p>";
}
function updateChangelog() {
document.getElementById("sel-gamever").style.visibility = "visible";
var xml = new XMLHttpRequest();
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");
var recentchanges = "";
try {
document.getElementById("lastupdate").innerHTML = "Last Updated: " + changelogData[0].getElementsByTagName("date")[0].textContent;
for (var i = 0, changeCount = 0; i < changelogData.length && changeCount < 3; i++) {
recentchanges += "<div class=\"change\"><div><i>" + changelogData[i].getElementsByTagName("date")[0].textContent + ": </i></div><div><i>";
var changes = changelogData[i].getElementsByTagName("change");
for (var k = 0; k < changes.length && changeCount < 3; k++) {
recentchanges += changes[k].getElementsByTagName("head")[0].textContent + " ";
++changeCount;
}
recentchanges += "</i></div></div>";
}
} catch (err) {}
document.getElementById("changelog").innerHTML += recentchanges + "<div class=\"change\"><a target=\"_blank\" href=\"changelog.html\"><i>See the full changelog</i></a></div>";
};
}
xml.open("GET", "changelog.xml");
xml.send();
}
/****************************
*
* Fastcode, https://github.com/QbeRoot/fastcodes/blob/master/script.js
*
****************************/
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 (ev) {
if (ev.target.value === "0F00" && ev.target.parentNode !== template) levels.removeChild(ev.target.parentNode);
})
levels.addEventListener("click", function (ev) {
if (ev.target.tagName.toUpperCase() === "BUTTON") levels.removeChild(ev.target.parentNode);
})
document.querySelector("#route_ending").disabled = document.querySelector("#route_order").value === "random";
document.querySelector("#route_order").addEventListener("change", function (ev) {
document.querySelector("#route_ending").disabled = ev.currentTarget.value === "random";
})
document.querySelector("#route_presets").addEventListener("change", function (ev) {
if (levels.childElementCount <= 1 || confirm("Loading a preset will erase your current list. Continue?")) {
clearLevels();
const preset = ev.currentTarget.value.split(";")[0];
const ending = ev.currentTarget.value.split(";")[1];
for (let i = 0; i <= preset.length - 4; i += 4) appendLevel(preset.substr(i, 4));
if (ending) document.querySelector("#route_ending").value = ending
}
ev.currentTarget.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("html", this.querySelector("select").value);
this.classList.add("dragelement");
}
function selDragOver(e) {
if (e.preventDefault) {
e.preventDefault();
}
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('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() {
var levelCodes = [];
for (var c = levels.getElementsByTagName("select"), i = 0; i < c.length; i++) {
levelCodes.push(c[i].value);
}
levelCodes.pop();
if (!document.getElementById("sel-stageloader").value === "yes" || levelCodes.length === 0) return false;
let game = JSON.parse(atob(document.getElementById("route_levels").getAttribute("data-json")));
const order = document.getElementById("route_order").value;
const ending = document.getElementById("route_ending").value;
const loadStageLength = {
'list': 0x20,
'random': 0x2C,
'shuffle': 0x40
} [order]
let codes = ''
// Reset counter on file select
codes += '0' + (0x04000000 + (game.fileSelect & 0x01FFFFFF)).toString(16) +
(0x48000001 + (game.system + 0x52C - game.fileSelect & 0x03FFFFFC)).toString(16)
// Load next stage on Shine get
codes += '0' + (0x04000000 + (game.shineGet & 0x01FFFFFF)).toString(16) +
(0x48000001 + (game.system + 0x53C - game.shineGet & 0x03FFFFFC)).toString(16)
// Reload stage on exit area
codes += '0' + (0x04000000 + (game.system & 0x01FFFFFF)).toString(16) + '48000511'
// Set next stage on game over
codes += '0' + (0x06000000 + (game.system + 0xB4 & 0x01FFFFFF)).toString(16) + '000000084800048948000044'
// Reset timer on secret death
codes += (0xC2000000 + (game.system + 0x208 & 0x01FFFFFF)).toString(16) + '000000033C60817F38000001980300FF881C00006000000000000000'
// Reset coin count on loading main world
codes += (0xC2000000 + (game.shineGet - 0x674 & 0x01FFFFFF)).toString(16) + '00000005887D00002C030002418000142C0300074182000C2C03000A418000087C0400406000000000000000'
// Overwrite decideNextStage(void) with useful routines
codes += '0' + (0x06000000 + (game.system + 0x510 & 0x01FFFFFF)).toString(16) +
('0000000' + (loadStageLength + 0x5C).toString(16)).slice(-8) +
'3C60817F38000001980300FFA00300023C60' + game.gpAppHi + 'B003' + game.gpAppLo + '4E800020' + // reload current level
'3C60817F' + (0x38800000 + (levelCodes.length * 2 & 0x0000FFFF)).toString(16) + 'B08300004E800020' + // reset counter
'3C60817F38000001980300FFA00300002C00000038E0' + ending + // load next stage - the fun begins
(0x40810000 + (loadStageLength & 0x0000FFFC)).toString(16) + '7C8802A6600000007CC802A67C8803A6'
switch (order) {
case 'list':
codes += '3400FFFEB00300007CE6022E';
break
case 'random':
codes += '7C8C42E67CA403967CA501D67C8520505484003C7CE6222E';
break
case 'shuffle':
codes += '7C8C42E67CA403967CA501D67C8520505484003C3400FFFEB00300007CE6222E7CA6022E7CA6232E7CE6032E'
}
codes += 'B0E300023C60' + game.gpAppHi + 'B0E3' + game.gpAppLo + '806D' + game.fmOffset + '98E300DF4E800020' + (order === 'random' ? '' : '00000000')
levelCodes.reverse()
while (levelCodes.length % 4) levelCodes.push('0000')
// Insert the list of levels into the loader
codes += (0xC2000000 + (game.system + 0x55C & 0x01FFFFFF)).toString(16) +
('0000000' + (levelCodes.length / 4 + 1).toString(16)).slice(-8) +
(0x48000001 + (levelCodes.length * 2 + 4 & 0x03FFFFFC)).toString(16) +
levelCodes.join('') + '00000000'
// Load next stage on setNextStage into main level
codes += '0' + (0x06000000 + (game.system + 0x118C & 0x01FFFFFF)).toString(16) +
'00000028B07D00143C80817F38000000B00400FFA0010038B01D00122C1C00094181000C4BFFF391B0E10038'
// Setup timer
codes += (0xC2000000 + (game.proc & 0x01FFFFFF)).toString(16) +
'000000053CA0817F388000009085010C880500FF98050100988500FF38800001988501016000000000000000'
codes = codes.toUpperCase()
codes += game.notext[document.getElementById("route_notext").value] +
game.nofmvs[document.getElementById("route_nofmvs").value];
return codes
}

View file

@ -1,176 +0,0 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="description" content="A guide on how to install and use practice codes for Super Mario Sunshine.">
<meta name="viewport" content="width=device-width, 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" class="framed">
<h1>How to install and use practice codes</h1>
<p class="center">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>
</div>
<br />
<hr />
<h2 id="1"><a href="#1">1. Preparing your Wii</a></h2>
<h3 id="1.1"><a href="#1.1">1.1 Install Homebrew</a></h3>
<p>First of all you're gonna have to install Homebrew on your Wii. Make sure your SD card is <a target="_blank"
href="https://superuser.com/questions/1179871/how-to-format-a-disk-sdcard-as-fat32-in-windows-10/1179872#1179872">formatted
to FAT32</a> and then <a target="_blank" href="https://sites.google.com/site/completesg/hacking-guide">click
this link</a> for a detailed guide on how to get Homebrew on your Wii. Ignore the "<i>So, what's next?</i>"
section.</p>
<br />
<h3 id="1.2"><a href="#1.2">1.2 Install the necessary applications</a></h3>
<p>Using <a target="_blank" href="https://github.com/FIX94/Nintendont">Nintendont</a> is the recommended way to
use practice codes. To download the most recent build you can <a target="_blank"
href="https://share.zint.ch/nintendont/latest/Nintendont.zip">click this link</a>.</p>
<p>Unpack the archive and place the Nintendont folder with all of its contents in the "<i>apps</i>" folder of your
SD card. If there is no "<i>apps</i>" folder create one in the root of your SD card.</p>
<br />
<hr />
<h2 id="2"><a href="#2">2. Install and use the cheatfile</a></h2>
<h3 id="2.1"><a href="#2.1">2.1 Generate the file</a></h3>
<p>Visit the <a target="_blank" href="index.html">main site</a> and select your game version from the dropdown
menu. Then select all the cheats you want to have enabled from the list, choose GCT as file format and hit
"Download". The name of the file you downloaded should be "GMSX01.gct" with X being E, P or J depending on the
version you selected.</p>
<br />
<p>Note: JP 1.0 and JP 1.1 both use the same ID (GMSJ01). To identify if you own JP 1.0 or 1.1 check the back
of your disc. It'll read "DOL-GMSJ-0-00" for 1.0 and "DOL-GMSJ-0-01" for 1.1:</p>
<br />
<p class="center"><img src="img/jp_diff.png" alt="JP Version difference" /></p>
<br />
<h3 id="2.2"><a href="#2.2">2.2 Copy the file onto your SD card</a></h3>
<p>Create a "<i>codes</i>" folder in the root of your SD card if there is none and copy the GCT file you just
downloaded into that folder. This is what the resulting folder structure should look like on your SD card (the
.gct
files might be different depending on the version you chose):</p>
<br />
<p class="center"><img src="img/folderstructure.png" alt="Folder Structure" /></p>
<br />
<h3 id="2.3"><a href="#2.3">2.3 Use the codes</a></h3>
<p>Open your Homebrew channel and from there launch Nintendont. Select SD and then press B on your Gamecube
controller to see the settings. In your settings, make sure that "<i>Cheats</i>" are "<i>On</i>". You can
switch it on/off by pressing A on your controller. (See image below)</p>
<p class="center"><a target="_blank" href="img/nintendont_cheats.jpg"><img src="img/nintendont_cheats.jpg"
style="width:50%;min-width:300px;margin:20px 0px" alt="Nintendont" /></a>
</p>
<p>Press B again to return to the game list and launch your game. And with that you're done already.</p>
<br />
<hr />
<h2 id="3"><a href="#3">3. Troubleshooting</a></h2>
<h3 id="3.1"><a href="#3.1">3.1 The game doesn't launch / Stuck at black screen</a></h3>
<p>This is not a practice code related issue. You have the following options if that happens to you:</p>
<ul>
<li>Restart Nintendont until the game launches (usually takes a few attempts).</li>
<li>Connect your Wii to the internet before launching Nintendont.</li>
<li>Wait around 30 seconds on the game selection screen before booting the disc.</li>
<li>Reinstalling homebrew may fix this issue permanently.</li>
</ul>
<br />
<h3 id="3.2"><a href="#3.2">3.2 Nintendont says IOS58 is missing</a></h3>
<p><a href="ios58.html">Here's a guide</a> on how to install IOS58 for use with Nintendont.</p>
<br />
<h3 id="3.3"><a href="#3.3">3.3 The game launches but the codes don't work</a></h3>
<p>This can have multiple reasons:</p>
<ul>
<li>You don't have cheats enabled: See <a href="#2.3">2.3</a> for details.</li>
<li>You're using an obsolete version of Nintendont. Make sure you use version 4.434 or newer.</li>
<li>Your cheatfile has the wrong name: Make sure the file is named "GMSE01.gct", "GMSJ01.gct" or "GMSP01.gct".
It won't work with names like "GMSE01 (1).gct". Nintendont is very picky!</li>
<li>Your cheatfile is at the wrong location: Make sure the file is in the "codes" folder of your SD Card.
Again, the folder has to be named "codes" (See sample folder structure in <a href="#2.2">section 2.2</a>).
If you have a "games"
folder, make sure there's no file with the same name in it or its subfolders.</li>
<li>Your cheatfile is too big: Using too many codes at once can cause Nintendont to disable them since the used
space in the game is limited. Make sure you don't have two incompatible codes selected when downloading the
cheatfile (for example "Level Select", "Fast Any%" and the Stage loader cannot be used
simultaneously).<br /><br /><i><b>Note: If you're using Nintendont 4.434 or newer you don't have to worry
unless your file is bigger than 8KB.</b></i></li>
<li>If you have a USB drive connected and use disc, make sure you select the device that contains the cheats
for your disc.</li>
<li>If you use an ISO your cheat file and ISO must be on the same device (both on the SD card or both on the
USB drive).</li>
</ul>
<br />
<h3 id="3.4"><a href="#3.4">3.4 The site doesn't show codes or the download button</a></h3>
<p>The main site requires Javascript to work properly. Make sure you have Javascript enabled in your browser.</p>
<br />
<br />
<hr />
<h2 id="4"><a href="#4">4. Appendix: Cheat Manager (Homebrew)</a></h2>
<br />
<p>The Cheat Manager is a homebrew application that allows you to generate GCTs on your Wii. This way you don't
have to redownload your cheatfile everytime you want a different combination. However, you're gonna have to use
a Wiimote to control the application</p>
<h3 id="4.1"><a href="#4.1">4.1 Setup</a></h3>
<p>You can download the Cheat Manager from <a target="_blank" href="/files/Cheat_manager_v0_3.zip"
title="CheatManager Download">here</a>. Unzip the archive and copy the contents into the "<i>apps</i>"
folder of your SD card.</p>
<br />
<p>Using the generator on the <a target="_blank" href="index.html">main site</a>, select all the codes you want to
have available on the cheat manager and choose "<i>Cheat Manager TXT</i>" as file format instead of
"<i>GCT</i>" to download a text file formatted for use with the cheat manager. Create a "<i>txtcodes</i>"
folder in the root of your SD card if there is none and copy the generated text file into that folder. The name
of the text file doesn't matter if you use this application, since the games ID is stored in the textfile.</p>
<br />
<p>Alternatively, a zip archive containing all codes available on this site can be downloaded from <a
target="_blank" title="GCM Archive Download" href="/files/GCMCodes.zip">here</a>.</p>
<h3 id="4.2"><a href="#4.2">4.2 Using the Cheat Manager</a></h3>
<p>Launch the cheat manager and grab your Wiimote. Navigate to your textfile using the DPad and select it with
"<i>A</i>". On the following screen press "<i>+</i>" to activate and "<i>-</i>" to deactivate a cheat.</p>
<br />
<p>After activating your desired codes press "<i>1</i>" to generate the GCT file. The cheatmanager then creates
the GCT file in your "<i>codes</i>" folder, overwriting the old one if there's already a GCT with the same
name. If you now launch the game with cheats active the new codes will be loaded.</p>
<br />
<hr />
<h2 id="5"><a href="#5">5. Appendix: Using the codes with Dolphin</a></h2>
<h3 id="5.1"><a href="#5.1">5.1 Setup</a></h3>
<p>To use the codes with Dolphin choose "<i>Dolphin INI</i>" as file format instead of "<i>GCT</i>" to download
the codes formatted for use with Dolphin.</p>
<br />
<p>Alternatively, a zip archive containing all codes available on this site can be downloaded from <a
target="_blank" title="Dolphin Archive Download" href="/files/DolphinCodes.zip">here</a>.</p>
<br />
<h4 id="5.1.1"><a href="#5.1.1">5.1.1 Configuration in Dolphin 5.0 or older</a></h4>
<p>
Right click the game in Dolphin and click on "<i>Properties</i>"
and on the bottom left corner of the property window click the "<i>Edit configuration</i>" button. Open the
text file you downloaded and copy everything following the "<i>[Gecko]</i>" tag below
the same tag in the configuration you just opened. If there is no "<i>[Gecko]</i>" tag (it should be the first
tag), create one on top of your configuration file. Save and close the configuration file.
</p>
<br />
<p class="center"><img src="img/dolphin_gecko_codes_v1.png" alt="Dolphin 5.0 preview" /></p>
<h4 id="5.1.2"><a href="#5.1.2">5.1.2 Configuration in Dolphin 5.0-11XXX or newer</a></h4>
<p>
Right click the game in Dolphin and click on "<i>Properties</i>". In the "<i>Game Config</i>" section choose
the "<i>Editor</i>" tab and paste the contents of the text file you just downloaded into the "<i>User
Config</i>" editor.
</p>
<br />
<p class="center"><img src="img/dolphin_gecko_codes_v2.png" alt="Dolphin ^5.0-11XXX preview" /></p>
<h3 id="5.2"><a href="#5.2">5.2 Using the codes</a></h3>
<p>Select the "<i>Gecko-Codes</i>" tab in the game properties and check all the codes you want to be active.
Most (but not all codes) will work with Dolphin. However, Dolphin has a code limit which is reached rather
quickly. So if your game crashes right after it starts, you probably have too many codes active simultaneously.
</p>
</div>
</body>
<script src='/dna.js'></script>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 926 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 748 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,382 +0,0 @@
<!DOCTYPE HTML>
<html lang="en">
<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">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="stylesheet" href="/style/style.css">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<title>Super Mario Sunshine Practice Code Generator</title>
</head>
<body onload="updateChangelog()">
<main>
<div id="ml">
<div id="cl" class="section sl">
<div>
<div class="config row">
<div>
<label for="sel-gamever">Game Version:</label>
</div>
<div>
<select id="sel-gamever" onchange="updateCodelist()" autocomplete="off">
<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>
</div>
</div>
<div class="config row hidden">
<div>
<label for="sel-stageloader">Stage Loader:</label>
</div>
<div>
<select id="sel-stageloader"
data-description="&lt;h2&gt;Stage Loader&lt;/h2&gt;&lt;p&gt;Select yes if you want to use a custom stage loader, which automatically loads the levels you choose, similiar to &#39;Fast Any%&#39;.&lt;/p&gt;"
onmouseover="updateUIDescription(this)" onchange="toggleFastCode()" autocomplete="off">
<option value="yes">Yes</option>
<option selected value="no">No</option>
</select>
</div>
</div>
<div class="config row hidden">
<div>
<label for="sel-format">File Format:</label>
</div>
<div>
<select id="sel-format"
data-description="&lt;h2&gt;File Format&lt;/h2&gt;&lt;p&gt;You can choose between 3 file formats:&lt;/p&gt;&lt;h4&gt;GCT&lt;/h4&gt;&lt;p&gt;Download a GCT file for use with Nintendont&lt;/p&gt;&lt;h4&gt;Dolphin INI&lt;/h4&gt;&lt;p&gt;Download a textfile containing the formatted codes for use with Dolphin. Instructions on how to set up Dolphin can be found in the &lt;a target=&quot;_blank&quot; href=&quot;/guide.html#5&quot;&gt;guide&lt;/a&gt;.&lt;/p&gt;&lt;h4&gt;Cheat Manager TXT&lt;/h4&gt;&lt;p&gt;Download the cheats in a textfile formatted for use with the &lt;a target=&quot;_blank&quot; href=&quot;http://wiibrew.org/wiki/CheatManager&quot;&gt;Gecko Cheat Manager&lt;/a&gt;. Instructions on how to set up GCM can be found in the &lt;a target=&quot;_blank&quot; href=&quot;/guide.html#4&quot;&gt;guide&lt;/a&gt;.&lt;/p&gt;"
onmouseover="updateUIDescription(this)" autocomplete="off">
<option selected value="gct">GCT</option>
<option value="ini">Dolphin INI</option>
<option value="gcm">Cheat Manager TXT</option>
</select>
</div>
</div>
<div class="config row hidden">
<div></div>
<div>
<button onclick="downloadCodes()" id="downloadbutton">Download</button>
</div>
</div>
<ul id="codelist" class="framed hidden">
</ul>
</div>
</div>
<div id="cc" class="section sc hidden">
<div id="stageloader" class="framed">
<h2>Stage Loader</h2>
<div class="config row">
<div>
<label for="route_notext">Remove Dialogue:</label>
</div>
<div>
<select id="route_notext"
data-description="&lt;h2&gt;Remove Dialogue&lt;/h2&gt;&lt;p&gt;Replaces all Dialogue with &quot;!!!&quot;. &#39;Always&#39; and &#39;Not in Pianta 5&#39; will override the dialogue skip from the DPad Functions.&lt;/p&gt;"
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>
</div>
</div>
<div class="config row">
<div>
<label for="route_nofmvs">Skippable FMVs:</label>
</div>
<div>
<select id="route_nofmvs"
data-description="&lt;h2&gt;Skippable Cutscenes&lt;/h2&gt;&lt;p&gt;Makes FMVs skippable. &#39;Always&#39; has the same effect as the &#39;FMV Skips&#39; code. Also, having &#39;FMV Skips&#39; enabled will override &#39;Not in Pinna&#39; - so don&#39;t use both simultaneously.&lt;/p&gt;"
onmouseover="updateUIDescription(this)">
<option value="yes">Always</option>
<option selected value="pp">Not in Pinna</option>
<option value="no">Don't include</option>
</select>
</div>
</div>
<div class="config row">
<div>
<label for="route_order">Level Order:</label>
</div>
<div>
<select id="route_order"
data-description="&lt;h2&gt;Level Order&lt;/h2&gt;&lt;p&gt;The order in which levels are loaded:&lt;/p&gt;&lt;h4&gt;As specified&lt;/h4&gt;&lt;p&gt;The code loads levels in the order of the list.&lt;/p&gt;&lt;h4&gt;Random, no duplicates&lt;/h4&gt;&lt;p&gt;The code picks levels at random, excluding levels that youve finished already.&lt;/p&gt;&lt;h4&gt;Fully random&lt;/h4&gt;&lt;p&gt;The code picks levels at random, even levels that youve finished already.&lt;/p&gt;"
onmouseover="updateUIDescription(this)">
<option selected value="list">As specified</option>
<option value="shuffle">Random, no duplicates</option>
<option value="random">Fully random</option>
</select>
</div>
</div>
<div class="config row">
<div>
<label for="route_ending">Post Game:</label>
</div>
<div>
<select id="route_ending"
data-description="&lt;h2&gt;Route Ending&lt;/h2&gt;&lt;p&gt;What to do after you complete the final level on the list. This has no effect if the level order is set to Fully random.&lt;/p&gt;"
onmouseover="updateUIDescription(this)">
<option selected value="0F00">Return to the title screen</option>
<option value="0109">Load the flooded plaza</option>
<option value="0102">Load the post-Corona plaza</option>
<option value="3400">Load Corona Mountain</option>
<option value="3C00">Load the Bowser fight</option>
</select>
</div>
</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="01FF">Plaza - Current</option>
<option value="0100">Plaza - Bianco unlock</option>
<option value="0101">Plaza - Peach chase</option>
<option value="0105">Plaza - Ricco/Gelato unlocks</option>
<option value="0106">Plaza - Peaceful</option>
<option value="0107">Plaza - Pinna unlock</option>
<option value="0108">Plaza - Yoshi/nozzles unlocks</option>
<option value="0109">Plaza - Flooded</option>
<option value="0102">Plaza - Post-Corona</option>
<optgroup label="Delfino Plaza sublevels">
<option value="0000">Airstrip</option>
<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>
</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">Petey Piranha fight (Bianco 2)</option>
<option value="3B00">Gooper Blooper fight (Ricco 1)</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="3A00">Rollercoaster (Pinna 8)</option>
<option value="0E00">Casino Delfino (Sirena 4)</option>
<option value="0E01">Casino Delfino (Sirena 5)</option>
<option value="3800">King Boo fight (Sirena 5)</option>
<option value="2C00">Bottle (Noki 3)</option>
<option value="3900">Deep Sea of Mare (Noki 4)</option>
<option value="1000">Deep Sea of Mare (Noki 8)</option>
</optgroup>
<optgroup label="Miscellaneous">
<option value="02FF">Bianco episode selection</option>
<option value="03FF">Ricco episode selection</option>
<option value="04FF">Gelato episode selection</option>
<option value="05FF">Pinna episode selection</option>
<option value="06FF">Sirena episode selection</option>
<option value="09FF">Noki episode selection</option>
<option value="08FF">Pianta episode selection</option>
</optgroup>
</select>
<button type="button" class="route_remove">&#215;</button>
</li>
</ul>
</div>
<div class="config row">
<div>
<button id="route_clear" type="button">Clear List</button>
</div>
<div>
<select id="route_presets">
<option value="" selected>Load a preset…</option>
<optgroup label="Full-game categories, minimal plaza">
<option
value="020002020203020404000406080008010802080308040805080605000501050205030502050603000301030203030304030503060205020606000601060206030604060506060900090109020903090409050906;3400">
Fast Any% usual route</option>
<option
value="020002020203020404000406080008010802080308040805080605000501050205030502050602050206060006010602060306040605060609000901090209030904090509060300030103020303030403050306;3400">
Fast Any% Ricco late</option>
<option
value="020002020203020408000801080208030804080508060500050105020503050405050506030003010302030303040305030602050206060006010602060306040605060609000901090209030904090509060400040104020403040404050406;3400">
Fast Any% No Major Skips</option>
<option
value="02000201020202030800080108020803080408050806080705000501050205030504050505060507030003010302030303040305030603070204020502060207060006010602060306040605060606070900090109020903090409050906090704000401040204030404040304050406;3400">
Fast 58 Shines / All Episodes</option>
<option
value="02000201020202020800080108020803080408040804080508060807080705000501050105020503050405040505050505060507030003010301030203030303030403050305030603070203020402050205020502060207060006010601060206030603060306040605060606070900090109010901090209030904090509050906090704000400040004010402040304050404040304020406;3400">
Fast 79 Shines / All Level Shines</option>
<option
value="020002020203020404000406080008010802080308040805080605000501050105020503050405050506030003010302030303040305030602050206060006010602060306040605060609000901090209030904090509060102160001021400010201021D00010201020102010201020102010204060405040404030402040204010400040015000207020502070205020003020307030303010507050705051700060706030603060109070905090109010807080708040804;3400">
Fast 96 Shines / All Shines, No Blues</option>
</optgroup>
<optgroup label="Full-game categories">
<option
value="00000100020002020105020302040105040004060106080008010802080308040805080601070108050005010502050305020506010803000301030203030304030503060108020502060108060006010602060306040605060601080900090109020903090409050906;0109">
Any% usual route</option>
<option
value="00000100020002020105020302040105080008010802080308040805080601070108050005010502050305040505050601080300030103020303030403050306010802050206010806000601060206030604060506060108090009010902090309040905090601080400040104020403040404050406;0109">
Any% No Major Skips</option>
<option
value="0000010002000201010502020203010508000801080208030804080508060807010701080500050105020503050405050506050701080300030103020303030403050306030701080204020502060207010806000601060206030604060506060607010809000901090209030904090509060907010804000401040204030404040304050406;0109">
58 Shines / All Episodes</option>
<option
value="0000010002000201010502020202010508000801080208030804080408040805080608070807010701080500050105010502050305040504050505050506050701080300030103010302030303030304030503050306030701080203020402050205020502060207010806000601060106020603060306030604060506060607010809000901090109010902090309040905090509060907010804000400040004010402040304050404040304020406;0109">
79 Shines / All Level Shines</option>
<option
value="0000010002000202010502030204010504000406010608000801080208030804080508060107010805000501050105020503050405050506010803000301030203030304030503060108020502060108010806000601060206030604060506060108090009010902090309040905090601FF0102010201020102010201020102010201020102010201020102010204060405040404030402040204010400040001020102020702050207020502000102030203070303030101020507050705050102010206070603060306010102090709050901090101020807080708040804;0102">
96 Shines / All Shines, No Blues</option>
<option
value="0000010002000202010502030204010504000406010608000801080208030804080508060107010805000501050105020503050405050506010803000301030203030304030503060108020502060108010806000601060206030604060506060108090009010902090309040905090601FF01020102010201020102010201020102010201020102010201020404040304020405040004000401040204050102010202000207020702070207010209010905090509070102080408040807080701020505050705070102010206010603060606070102010203010303030703070102;0102">
120 Shines / All Shines, All Blues</option>
</optgroup>
<optgroup label="Individual Worlds">
<option value="020002020203020402050206">Bianco Hills</option>
<option value="0300030103020303030403050306">Ricco Harbor</option>
<option value="0400040104020403040404050406">Gelato Beach</option>
<option value="050005010502050305020506">Pinna Park</option>
<option value="0600060106020603060406050606">Sirena Beach</option>
<option value="0900090109020903090409050906">Noki Bay</option>
<option value="0800080108020803080408050806">Pianta Village</option>
</optgroup>
<optgroup label="All Shines IWs">
<option value="02000201020202020203020402050205020502060207">Bianco Hills</option>
<option value="03000301030103020303030303040305030503060307">Ricco Harbor</option>
<option value="04000406040404060401040504000400040204020403">Gelato Beach</option>
<option value="05000501050105020503050405040505050505060507">Pinna Park</option>
<option value="06000601060106020603060306030604060506060607">Sirena Beach</option>
<option value="09000901090109020903090409050905090609060907">Noki Bay</option>
<option value="08000801080208030804080408040805080608070807">Pianta Village</option>
</optgroup>
</select>
</div>
</div>
</div>
</div>
</div>
<div id="mr">
<div id="cr" class="section sr">
<div id="descriptionbox" class="framed">
<h1>SMS Practice File Generator</h1>
<p style="margin-top: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>
<br />
<h4>Changelog:</h4>
<div id="changelog"></div>
<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/9dGJWEc" 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" 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>
</div>
</main>
<script language="javascript" src="gctGenerator.js"></script>
</body>
<script src='/dna.js'></script>
</html>

View file

@ -1,90 +0,0 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="description" content="A guide on how to install IOS58 for use with Nintendont.">
<meta name="viewport" content="width=device-width, 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" class="framed">
<h1 class="center">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" rel="noreferrer" 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" rel="noreferrer"
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>
</body>
<script src='/dna.js'></script>
</html>

10628
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

24
package.json Executable file
View file

@ -0,0 +1,24 @@
{
"name": "gctGenerator",
"version": "0.0.1",
"description": "Super Mario Sunshine Practice File Generator",
"main": "index.js",
"authors": {
"name": "Matteias Collet",
"email": "matteias.collet@bluewin.ch"
},
"repository": "https://github.com/BitPatty/gctGenerator/gctGenerator",
"scripts": {
"dev": "vuepress dev docs",
"build": "vuepress build docs"
},
"license": "MIT",
"devDependencies": {
"vuepress": "^1.3.1",
"@vuepress/plugin-back-to-top": "^1.3.1",
"@vuepress/plugin-medium-zoom": "^1.3.1"
},
"dependencies": {
"axios": "^0.19.2"
}
}

View file

@ -1,345 +0,0 @@
html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
b,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
box-sizing: border-box
}
:focus {
outline: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block;
}
body {
line-height: 1;
}
ol,
ul {
list-style: none;
}
blockquote,
q {
quotes: none;
}
blockquote:before,
blockquote:after,
q:before,
q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
input[type=search]::-webkit-search-cancel-button,
input[type=search]::-webkit-search-decoration,
input[type=search]::-webkit-search-results-button,
input[type=search]::-webkit-search-results-decoration {
-webkit-appearance: none;
-moz-appearance: none;
}
html {
font-size: 100%;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
a:focus {
outline: thin dotted;
}
a:active,
a:hover {
outline: 0;
}
img {
border: 0;
-ms-interpolation-mode: bicubic;
}
button,
input,
select,
textarea {
font-size: 100%;
margin: 0;
vertical-align: baseline;
*vertical-align: middle;
}
button,
input {
line-height: normal;
}
button,
select {
text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button;
cursor: pointer;
*overflow: visible;
}
button[disabled],
html input[disabled] {
cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
html,
button,
input,
select,
textarea {
color: #222;
}
::-moz-selection {
background: #b3d4fc;
text-shadow: none;
}
::selection {
background: #b3d4fc;
text-shadow: none;
}
img {
vertical-align: middle;
}
fieldset {
border: 0;
margin: 0;
padding: 0;
}
textarea {
resize: vertical;
}
html {
background-color: #f0f1f0;
color: #000;
font-family: Calibri, Arial, sans-serif;
text-align: center
}
body {
display: inline-block;
margin: 15px 0px;
min-height: 450px;
font-size: 1em;
text-align: left;
line-height: 1.2rem;
}
h1,
h2,
h3,
h4 {
margin: 10px 20px;
font-weight: bold;
}
h1 {
font-size: 1.3rem;
text-align: center;
}
h2 {
font-size: 1.1rem;
margin-top: 15px;
}
h3,
h4 {
margin-top: 15px;
font-size: 1rem
}
p,
ul,
li {
margin: 15px 10px 5px 30px
}
ul {
list-style: circle
}
img {
margin: 0px 10px;
border-radius: 4px;
max-width: 100%
}
a {
color: #ff0029;
text-decoration: none
}
a:hover {
color: #1185fd
}
p {
margin: 0px 30px
}
.framed {
padding: 12px;
text-align: justify;
border-style: solid;
border-color: #000;
border-width: 1px;
border-radius: 0px
}
#guide_content {
max-width: 1000px
}
#indexlisting h3 {
margin: 4px 20px
}
#iosinstall {
text-align: center;
}
#iosinstall div {
display: inline-block;
}
.center {
text-align: center;
}
@media screen and (max-width: 1100px) {
.framed {
border: none;
}
}

View file

@ -1,631 +0,0 @@
html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
b,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
box-sizing: border-box
}
:focus {
outline: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block;
}
body {
line-height: 1;
}
ol,
ul {
list-style: none;
}
blockquote,
q {
quotes: none;
}
blockquote:before,
blockquote:after,
q:before,
q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
input[type=search]::-webkit-search-cancel-button,
input[type=search]::-webkit-search-decoration,
input[type=search]::-webkit-search-results-button,
input[type=search]::-webkit-search-results-decoration {
-webkit-appearance: none;
-moz-appearance: none;
}
html {
font-size: 100%;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
a:focus {
outline: thin dotted;
}
a:active,
a:hover {
outline: 0;
}
img {
border: 0;
-ms-interpolation-mode: bicubic;
}
button,
input,
select,
textarea {
font-size: 100%;
margin: 0;
vertical-align: baseline;
*vertical-align: middle;
}
button,
input {
line-height: normal;
}
button,
select {
text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button;
cursor: pointer;
*overflow: visible;
}
button[disabled],
html input[disabled] {
cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
html,
button,
input,
select,
textarea {
color: #222;
}
::-moz-selection {
background: #b3d4fc;
text-shadow: none;
}
::selection {
background: #b3d4fc;
text-shadow: none;
}
img {
vertical-align: middle;
}
fieldset {
border: 0;
margin: 0;
padding: 0;
}
textarea {
resize: vertical;
}
html {
background-color: #f0f1f0;
color: #000;
font-family: Calibri, Arial, sans-serif;
text-align: center;
width: 100%;
}
body {
display: inline-block;
min-height: 450px;
font-size: 1rem;
width: 1250px;
text-align: left;
}
h1,
h2,
h3,
h4 {
margin: 5px 0px 10px 2px;
font-size: 1.1rem;
font-weight: bold;
}
p,
table,
h3,
h4 {
margin: 10px 5px 0px 2px
}
h4 {
margin-top: 17px;
font-size: 1rem;
}
i {
font-style: italic;
}
img {
border-radius: 4px;
max-width: 100%
}
a {
color: #ff0029;
text-decoration: none
}
a:hover {
color: #1185fd
}
hr {
border-color: #f3f3f3
}
td {
padding: 2px 2px 2px 0px;
}
th {
font-weight: bold
}
input[type=checkbox] {
vertical-align: middle;
width: 15px;
height: 15px;
margin: 0;
-webkit-appearance: checkbox;
box-sizing: border-box
}
main {
display: table;
clear: both;
width: 100%;
}
#ml,
#mr {
display: table-cell;
white-space: nowrap;
vertical-align: top;
}
#mr {
width: 100%;
}
#cl,
#cc {
width: 360px;
}
#cr {
width: 100%;
}
.config.row {
display: block;
padding-bottom: 3px;
padding-top: 3px;
}
.config.row div {
display: inline-block;
vertical-align: middle
}
.config.row div:first-child {
width: calc(40% - 10px);
white-space: nowrap;
overflow: hidden;
}
.config.row div:nth-child(2) {
width: calc(60% - 10px);
}
.config.row select,
.config.row button {
width: 100%;
}
.section {
display: inline-block;
vertical-align: top;
text-align: left;
margin: 30px 0px;
min-width: 360px;
padding: 0px 5px;
white-space: normal;
white-space: initial;
}
.framed {
padding: 12px;
background: #f3f3f3;
text-align: justify;
border-style: solid;
border-color: #c1c1c1;
border-width: 1px;
border-radius: 2px
}
button {
padding: 6px;
margin: auto;
color: #f1f1f1;
background-color: #ca0707;
border-style: none;
border-radius: 4px;
cursor: pointer;
outline: none
}
button:hover {
background-color: #ff5151;
}
select {
margin: 2px 0px;
background-color: #ca0707;
padding: 5px;
color: #fff;
width: 200px;
border-style: none;
border-radius: 4px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
outline: none
}
select:disabled {
background: #e2e2e2;
color: grey
}
optgroup {
background: #ff5151
}
option {
background: #ca0707
}
label {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none
}
select,
option,
button {
font-size: .9rem;
}
ul {
margin: 0;
padding: 0;
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: #e2e2e2
}
ul li:hover {
background: #ca0707;
color: #fff;
border-color: #000
}
ul li.checked:hover {
background: #ca0707;
color: #fff
}
ul li.checked {
background: #434343;
color: #fff;
border-color: #262626
}
[draggable] {
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
-khtml-user-drag: element;
-webkit-user-drag: element
}
#route_levels {
margin: 10px 0px;
}
#route_levels li {
padding: 0px 10px;
margin: 0
}
#route_levels li.dragover {
padding-bottom: 20px;
background-color: white
}
#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
}
#codelist {
margin-top: 10px;
}
#codelist li {
padding-left: 26px;
}
#codelist li::before {
content: '';
position: absolute;
border-color: #a6a6a6;
border-style: solid;
border-width: 2px;
border-radius: 50%;
left: 6px;
height: 10px;
width: 10px
}
#codelist li:hover::before {
border-color: #fff;
background-color: #ffc0cb
}
#codelist 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
}
#descriptionbox hr {
margin: 15px 5px;
}
#smscommunity {
text-align: center;
font-weight: bold
}
#smscommunity img {
margin: 0px 5px;
}
#changelog {
margin-top: 10px;
}
.change {
margin: 3px 0px 3px 5px;
}
.change div {
display: inline-block;
}
.change div:first-child {
width: 100px;
}
.hidden {
display: none !important
}