From 478ac2cc6909b933c12a74bd56c7ab810213d326 Mon Sep 17 00:00:00 2001 From: Matteias Collet Date: Fri, 19 Apr 2019 00:56:25 +0200 Subject: [PATCH] refactoring --- gctGenerator.js | 243 ++++++++------- guide.html | 120 +++++--- index.html | 416 ++++++++++++++------------ ios58.html | 151 +++++----- style/guide.css | 345 +++++++++++++++++++--- style/style.css | 762 +++++++++++++++++++++++++++++++----------------- 6 files changed, 1334 insertions(+), 703 deletions(-) diff --git a/gctGenerator.js b/gctGenerator.js index 43fea63..255f300 100644 --- a/gctGenerator.js +++ b/gctGenerator.js @@ -1,90 +1,95 @@ if (navigator.userAgent.toLowerCase().indexOf("firefox") > -1) { - HTMLElement.prototype.click = function() { + HTMLElement.prototype.click = function () { var evt = this.ownerDocument.createEvent("MouseEvents"); evt.initMouseEvent("click", true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null); this.dispatchEvent(evt); - } + } } -document.getElementById("checklist").addEventListener("click", function(ev) { - if (ev.target && ev.target.nodeName == "LI") { +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 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", "updateDescription(this)"); - document.getElementById("checklist").appendChild(li); + 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; } + }; - var buttons = document.getElementsByTagName("button"); - for (var i = 0; i < buttons.length; i++) buttons[i].disabled = false; + xml.open("GET", file); + xml.send(); +} - document.getElementById("gameversion").disabled = false; - } - }; - - xml.open("GET", file); - xml.send(); +function toggleFastCode() { + document.getElementById("cc").classList.toggle("hidden"); } function updateFastCode(name) { var xml = new XMLHttpRequest(); - var file = "codes/fast/" + name + ".json"; - xml.onreadystatechange = function() { + + xml.onreadystatechange = function () { if (this.status == 200 && this.readyState == 4) { document.getElementById("route_levels").setAttribute("data-json", btoa(xml.responseText)); } } - xml.open("GET",file); + + xml.open("GET", "codes/fast/" + name + ".json"); xml.send(); } function downloadFile(data, filename) { - var file = new Blob([data], { - type: "application/octet-stream" + type: "application/octet-stream" }); - if (window.navigator.msSaveOrOpenBlob) window.navigator.msSaveOrOpenBlob(file, filename.replace("GMSJ0A","GMSJ01")); + if (window.navigator.msSaveOrOpenBlob) window.navigator.msSaveOrOpenBlob(file, filename.replace("GMSJ0A", "GMSJ01")); else { var a = document.createElement("a"), - url = window.URL.createObjectURL(file); + url = window.URL.createObjectURL(file); a.href = url; - a.download = filename.replace("GMSJ0A","GMSJ01"); + a.download = filename.replace("GMSJ0A", "GMSJ01"); a.click(); - setTimeout(function() { window.URL.revokeObjectURL(url); }, 500); - } + setTimeout(function () { + window.URL.revokeObjectURL(url); + }, 500); + } } function generateGCT() { - if (document.getElementById("gameversion").value === "Choose Version") { - alert("Select the game version!"); - return; + if (document.getElementById("sel-gamever").value === "Choose Version") { + alert("Select the game version!"); + return; } var data = "00D0C0DE00D0C0DE"; - var codeList = document.getElementById("checklist").getElementsByTagName("li"); + var codeList = document.getElementById("codelist").getElementsByTagName("li"); var valueSelected = false; for (var i = 0; i < codeList.length; i++) { if (codeList[i].className === "checked") { @@ -95,7 +100,7 @@ function generateGCT() { var fastcode = getFastCode(); - if(fastcode !== false) { + if (fastcode !== false) { data += fastcode; valueSelected = true; } @@ -108,7 +113,7 @@ function generateGCT() { rawData[x] = parseInt(data.substr(x * 2, 2), 16); } - downloadFile(rawData, document.getElementById("gameversion").value + ".gct"); + downloadFile(rawData, document.getElementById("sel-gamever").value + ".gct"); } else { alert("No cheat(s) selected!"); } @@ -116,15 +121,15 @@ function generateGCT() { function generateTXT() { - var dolphin = (document.getElementById("downloadformat").value === "ini"); + var dolphin = (document.getElementById("sel-format").value === "ini"); - if (document.getElementById("gameversion").value === "Choose Version") { + 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("gameversion").value.replace("GMSJ0A","GMSJ01") + "\r\nSuper Mario Sunshine"; - var codeList = document.getElementById("checklist").getElementsByTagName("li"); + 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") { @@ -139,7 +144,7 @@ function generateTXT() { var fastcode = getFastCode(); - if(fastcode !== false) { + if (fastcode !== false) { data += "\r\n"; if (dolphin) data += "$"; else data += "\r\n"; @@ -149,31 +154,43 @@ function generateTXT() { } if (valueSelected) - downloadFile(data, document.getElementById("gameversion").value + ".txt"); + downloadFile(data, document.getElementById("sel-gamever").value + ".txt"); else alert("No cheat(s) selected!"); } function downloadCodes() { - if (document.getElementById("downloadformat").value === "gct") generateGCT(); + if (document.getElementById("sel-format").value === "gct") generateGCT(); else generateTXT(); } function updateCodelist() { + disableButtons(); + document.getElementById("sel-gamever").disabled = true; + resetDescription(); - document.getElementById("gameversion").disabled = true; - var buttons = document.getElementsByTagName("button"); - for (var i = 0; i < buttons.length; i++) buttons[i].disabled = true; - document.getElementById("checklist").innerHTML = ""; - var gameVersion = document.getElementById("gameversion").value; + document.getElementById("codelist").innerHTML = ""; + + let gameVersion = document.getElementById("sel-gamever").value; parseXML(gameVersion); updateFastCode(gameVersion); - document.getElementById("left").style.visibility = "visible"; - while (document.getElementsByClassName("initialhidden").length > 0) { - document.getElementsByClassName("initialhidden")[0].classList.remove("initialhidden"); + + 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 updateDescription(s) { +function updateCodeDescription(s) { document.getElementById("descriptionbox").innerHTML = "

" + atob(s.getAttribute("data-codename")) + "

Author(s): " + atob(s.getAttribute("data-codeauthor")) + "

Version: " + @@ -183,68 +200,59 @@ function updateDescription(s) { } function updateUIDescription(s) { - if (s.id === "route_notext") - document.getElementById("descriptionbox").innerHTML = "

Remove Dialogue

Replaces all Dialogue with \"!!!\". 'Always' and 'Not in Pianta 5' will override the dialogue skip from the DPad Functions.

"; - else if (s.id === "route_nofmvs") - document.getElementById("descriptionbox").innerHTML = "

Skippable Cutscenes

Makes FMVs skippable. 'Always' has the same effect as the 'FMV Skips' code. Also, having 'FMV Skips' enabled will override 'Not in Pinna' - so don't use both simultaneously.

"; - else if (s.id === "route_order") - document.getElementById("descriptionbox").innerHTML = "

Level Order

The order in which levels are loaded:

As specified

The code loads levels in the order of the list.

Random, no duplicates

The code picks levels at random, excluding levels that you’ve finished already.

Fully random

The code picks levels at random, even levels that you’ve finished already.

"; - else if (s.id === "route_ending") - document.getElementById("descriptionbox").innerHTML = "

Route Ending

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.

"; - else if (s.id === "downloadformat") - document.getElementById("descriptionbox").innerHTML = "

File Format

You can choose between 3 file formats:

GCT

Download a GCT file for use with Nintendont

Dolphin INI

Download a textfile containing the formatted codes for use with Dolphin. Copy the contents of the file on top of your games .ini file.

You can open the .ini file by right clicking the game in Dolphin. In the context menu select 'Properties' and then 'Edit configuration'.

Cheat Manager TXT

Download the cheats in a textfile formatted for use with the Gecko Cheat Manager. Place the txt file in SD:/txtcodes/.

A zip archive containing pregenerated txt files with all available codes on this site can be downloaded here.

"; - else if (s.id === "stageloader") - document.getElementById("descriptionbox").innerHTML = "

Stage Loader

Select yes if you want to use a custom stage loader, which automatically loads the levels you choose, similiar to 'Fast Any%'.

"; + if (s && s.getAttribute("data-description")) + document.getElementById("descriptionbox").innerHTML = s.getAttribute("data-description"); } function resetDescription() { - document.getElementById("descriptionbox").innerHTML = "

Choose your codes from the list...

"; + document.getElementById("descriptionbox").innerHTML = "

Choose your codes from the list...

"; } - + function updateChangelog() { - document.getElementById("gameversion").style.visibility = "visible"; + document.getElementById("sel-gamever").style.visibility = "visible"; var xml = new XMLHttpRequest(); - var file = "changelog.xml"; - xml.onload = function() { + 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 { + 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 += "

" + changelogData[i].getElementsByTagName("date")[0].textContent + ": "; - + + for (var i = 0, changeCount = 0; i < changelogData.length && changeCount < 3; i++) { + recentchanges += "

" + changelogData[i].getElementsByTagName("date")[0].textContent + ":
"; + var changes = changelogData[i].getElementsByTagName("change"); for (var k = 0; k < changes.length && changeCount < 3; k++) { recentchanges += changes[k].getElementsByTagName("head")[0].textContent + " "; - ++changeCount; + ++changeCount; } - - recentchanges += "

"; + + recentchanges += "
"; } } catch (err) {} - document.getElementById("changelog").innerHTML += recentchanges + "

more ...

"; + document.getElementById("changelog").innerHTML += recentchanges + ""; }; } - xml.open("GET", file); + xml.open("GET", "changelog.xml"); xml.send(); } /**************************** -* -* Fastcode, https://github.com/QbeRoot/fastcodes/blob/master/script.js -* -****************************/ + * + * 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; }; +template.ondragstart = function () { + return false; +}; function appendLevel(code) { const clone = template.cloneNode(true); @@ -355,14 +363,18 @@ function getFastCode() { } levelCodes.pop(); - if (!(document.getElementById("usefastcode").checked) || levelCodes.length === 0) return false; + 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] + 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) @@ -373,13 +385,13 @@ function getFastCode() { // 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' - + // Overwrite decideNextStage(void) with useful routines codes += '0' + (0x06000000 + (game.system + 0x510 & 0x01FFFFFF)).toString(16) + ('0000000' + (loadStageLength + 0x5C).toString(16)).slice(-8) + @@ -389,17 +401,22 @@ function getFastCode() { (0x40810000 + (loadStageLength & 0x0000FFFC)).toString(16) + '7C8802A6600000007CC802A67C8803A6' switch (order) { - case 'list': codes += '3400FFFEB00300007CE6022E'; break - case 'random': codes += '7C8C42E67CA403967CA501D67C8520505484003C7CE6222E'; break - case 'shuffle': codes += '7C8C42E67CA403967CA501D67C8520505484003C3400FFFEB00300007CE6222E7CA6022E7CA6232E7CE6032E' + 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) + @@ -415,9 +432,9 @@ function getFastCode() { '000000053CA0817F388000009085010C880500FF98050100988500FF38800001988501016000000000000000' codes = codes.toUpperCase() - + codes += game.notext[document.getElementById("route_notext").value] + game.nofmvs[document.getElementById("route_nofmvs").value]; return codes -} +} \ No newline at end of file diff --git a/guide.html b/guide.html index 9d68030..bc52cd3 100644 --- a/guide.html +++ b/guide.html @@ -1,17 +1,20 @@ - - - - - - - Guide - - -
-

How to install and use practice codes

-

This page is a simple guide to explain the recommended way to install practice codes on your Nintendo Wii.

+ + + + + + + + Guide + + + +
+

How to install and use practice codes

+

This page is a simple guide to explain the recommended way to + install practice codes on your Nintendo Wii.


1. Preparing your Wii

@@ -24,25 +27,41 @@

1. Preparing your Wii

1.1 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 click this link for a detailed guide on how to get Homebrew on your Wii. Ignore the "So, what's next?" section.

+

First of all you're gonna have to install Homebrew on your Wii. Make sure your SD card is formatted + to FAT32 and then click + this link for a detailed guide on how to get Homebrew on your Wii. Ignore the "So, what's next?" + section.


1.2 Install the necessary applications

-

Using Nintendont is the recommended way to use practice codes. To download the most recent build you can click this link.

-

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.

+

Using Nintendont is the recommended way to + use practice codes. To download the most recent build you can click this link.

+

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.



2. Install and use the cheatfile

2.1 Generate the file

-

Visit the main site 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.

+

Visit the main site 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.


-

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.

+

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.


2.2 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.

+

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.


2.3 Use 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)

-

Nintendont

+

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)

+

Nintendont +

Press B again to return to the game list and launch your game. And with that you're done already.



@@ -63,17 +82,26 @@

Sample folder structure:


-

Folder Structure

+

Folder Structure

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 on the right). 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).

    Note: If you're using Nintendont 4.434 or newer you don't have to worry unless your file is bigger than 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).
  • +
  • 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 on the right). 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).

    Note: If you're using Nintendont 4.434 or newer you don't have to worry + unless your file is bigger than 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).

3.4 The site doesn't show codes or the download button

@@ -83,23 +111,43 @@

4. 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

+

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

4.1 Setup

-

You can download the Cheat Manager from WiiBrew. Unzip the archive and copy the contents into the "apps" folder of your SD card.

+

You can download the Cheat Manager from WiiBrew. 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.

+

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.

4.2 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.

+

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.

+

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.



5. Appendix: Using the codes with Dolphin

5.1 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. Then 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. Close the property window. 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.

+

To use the codes with Dolphin choose "Dolphin INI" as file format instead of "GCT" to download + the codes formatted for use with Dolphin. Then 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. Close the + property window. 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.


5.2 Using the codes

-

Reopen the property window, select the "Gecko-Codes" tab 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.

-
- - +

Reopen the property window, select the "Gecko-Codes" tab 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. +

+
+ + + \ No newline at end of file diff --git a/index.html b/index.html index cf889aa..86f6467 100644 --- a/index.html +++ b/index.html @@ -1,126 +1,132 @@ - - - - - - - - Super Mario Sunshine Practice Code Generator - - -
- -
-
- - - - - - - - - - - - - - - - - -
- Game Version: - - -
- Stage Loader: - - -
- File Format: - - -
- -
-
-
- -
    + + + + + + + + + Super Mario Sunshine Practice Code Generator + + + +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + + + +
    -
    -
    +
    + + + + \ No newline at end of file diff --git a/ios58.html b/ios58.html index 3accb64..c99da8e 100644 --- a/ios58.html +++ b/ios58.html @@ -1,70 +1,89 @@ - - - - - - - Installing IOS58 - - -
    -

    Installing IOS58

    -

    Requires Homebrew! Main Guide

    -
    -

    1. Download the ressources

    - NUS Downloader -

    1.1 Download NUS Downloader

    -

    NUS Downloader is a Windows program which you can use to download official IOSs from Nintendo. you can download it from Wiibrew.

    -
    -

    1.2 Download IOS58

    -

    Open NUSDownloader and Select IOS58 from the database (see image). Make sure "Pack WAD" is checked. Uncheck "Keep Encrypted Contents" and hit "Start NUS Download!.

    -

    1.3 Copy the WAD

    -

    The downloaded .wad will be located in titles/000000010000003A/6176/ in your NUS Downloader directory. Copy the wad into the root of your SD card without renaming it.

    -

    1.4 Download WiiMod

    -

    Download WiiMod from GBAtemp and place the app into your apps folder. Put the SD card back into your Wii and open the homebrew channel.

    -
    -
    - + + + + + + + + Installing IOS58 + + + +
    +

    Installing IOS58

    +

    Requires Homebrew! Main + Guide

    +
    +

    1. Download the ressources

    + NUS Downloader +

    1.1 Download NUS Downloader

    +

    NUS Downloader is a Windows program which you can use to download official IOSs from Nintendo. you can download + it from Wiibrew.

    +
    +

    1.2 Download IOS58

    +

    Open NUSDownloader and Select IOS58 from the database (see image). Make sure "Pack WAD" is checked. + Uncheck "Keep Encrypted Contents" and hit "Start NUS Download!.

    +

    1.3 Copy the WAD

    +

    The downloaded .wad will be located in titles/000000010000003A/6176/ + in your NUS Downloader directory. Copy the wad into the root of your SD card without renaming it.

    +

    1.4 Download WiiMod

    +

    Download WiiMod from GBAtemp and place + the app into your apps folder. Put the SD card back into your Wii and open the homebrew channel.

    +
    +
    + +
    + + \ No newline at end of file diff --git a/style/guide.css b/style/guide.css index 936b789..d353f46 100644 --- a/style/guide.css +++ b/style/guide.css @@ -1,82 +1,345 @@ -html { - background-color:#f0f1f0; - color:#000; - font-family:Calibri; - text-align:center +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 { - display:inline-block; - min-height:450px; - font-size:1em; - text-align:left + line-height: 1; } -h1,h2,h3,h4{ - margin:10px 20px +ol, +ul { + list-style: none; } -h1 { - font-size:1.3em +blockquote, +q { + quotes: none; } -h2 { - font-size:1.1em +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; + content: none; } -h3,h4 { - margin-top:15px; - font-size:1em +table { + border-collapse: collapse; + border-spacing: 0; } -p { - margin:10px 0px 0px 0px +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 { - margin:0px 10px; - border-radius:4px; - max-width:100% + 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 + color: #ff0029; + text-decoration: none } a:hover { - color:#1185fd + color: #1185fd } p { - margin:0px 30px -} - -ul li { - margin:7px 10px + margin: 0px 30px } .framed { - padding:12px; - text-align:justify; - border-style:solid; - border-color:#000; - border-width:1px; - border-radius:0px + padding: 12px; + text-align: justify; + border-style: solid; + border-color: #000; + border-width: 1px; + border-radius: 0px } #guide_content { - max-width:1000px + max-width: 1000px } #indexlisting h3 { - margin:2px 20px + margin: 4px 20px } #iosinstall { - text-align:center; + text-align: center; } #iosinstall div { - display:inline-block; + display: inline-block; +} + +.center { + text-align: center; +} + +@media screen and (max-width: 1100px) { + .framed { + border: none; + } } \ No newline at end of file diff --git a/style/style.css b/style/style.css index 1cb2017..083c20e 100644 --- a/style/style.css +++ b/style/style.css @@ -1,403 +1,631 @@ -html { - background-color:#f0f1f0; - color:#000; - font-family:Calibri; - text-align:left +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 { - display:inline-block; - margin:10px 0px; - min-height:450px; - font-size:1em; - text-align:left + line-height: 1; } -h1,h2,h3,h4{ - margin:5px 0px +ol, +ul { + list-style: none; } -h2,h3 { - text-align:center +blockquote, +q { + quotes: none; } -h1 { - font-size:1.3em +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; + content: none; } -h2 { - font-size:1.1em +table { + border-collapse: collapse; + border-spacing: 0; } -h3,h4 { - margin-top:15px; - font-size:1em +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; } -p { - margin:10px 5px 0px 2px +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-radius:4px; - max-width:100% + 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 + color: #ff0029; + text-decoration: none } a:hover { - color:#1185fd + color: #1185fd } hr { - border-color:#f3f3f3 + 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; + vertical-align: middle; + width: 15px; + height: 15px; + margin: 0; -webkit-appearance: checkbox; box-sizing: border-box } -tr td:first-child { - padding-right:5px +main { + display: table; + clear: both; + width: 100%; } -td { - vertical-align:middle +#ml, +#mr { + display: table-cell; + white-space: nowrap; + vertical-align: top; } -#mainContainer { - width:100vw; - text-align:center +#mr { + width: 100%; } -.initialhidden { - visibility:hidden; +#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; - margin:20px 8px; - text-align:left + 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; - text-align:justify; - border-style:solid; - border-color:#000; - border-width:1px; - border-radius:0px -} - -.section .framed { - margin-top:16px -} - -.section .framed:first-of-type { - margin-top:0px -} - -#gameversion { - width:100%; - margin-top:0 -} - -#downloadbutton { - width:100%; - margin-top:2px -} - -#generalsettings table { - width:100% -} - -#home { - display:inline-block; - min-width:400px; - width:50vw; - margin:10px 0px; - padding:4px; - text-align:justify -} - -#smscommunity { - display:block; - text-align:center; - margin:18px 0px 7px 0px -} - -#smscommunity img { - margin:0px 3px; - vertical-align:middle -} - -#left { - width:30vw; - min-width:300px; - max-width:400px -} - -#center { - display:none -} - -#right { - width:50vw; - min-width:300px; - max-width:800px -} - -#usefastcode:checked ~ #center { - display:inline-block; - width:20vw; - min-width:300px; - max-width:400px -} - -#usefastcode:checked ~ #left { - width:20vw -} - -#usefastcode:checked ~ #right { - width:35vw -} - -@media screen and (max-width:1100px) { - - #usefastcode:checked ~ #left, #usefastcode:checked ~ #center{ - min-width:45vw; - max-width:45vw - } - - #usefastcode:checked ~ #right { - min-width:90vw; - min-width:calc(90vw + 24px); - max-width:90vw - } -} - -@media screen and (max-width:700px) { - - #left,#center,#usefastcode:checked ~ #left, #usefastcode:checked ~ #center{ - min-width:400px; - max-width:90vw; - width:90vw - } - - #right,#usefastcode:checked ~ #right { - display:none - } + 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 + padding: 6px; + margin: auto; + color: #f1f1f1; + background-color: #ca0707; + border-style: none; + border-radius: 4px; + cursor: pointer; + outline: none } button:hover { - background-color:#ff5151; + 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 + 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; + background: #e2e2e2; color: grey } optgroup { - background:#ff5151 + background: #ff5151 } option { - background:#ca0707 + background: #ca0707 } label { - -webkit-user-select:none; - -moz-user-select:none; - -ms-user-select:none; - user-select:none + -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; - width:100%; - list-style-type:none + 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 + 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 + background: #e2e2e2 } ul li:hover { - background:#ca0707; - color:#fff; - border-color:#000 + background: #ca0707; + color: #fff; + border-color: #000 } ul li.checked:hover { - background:#ca0707; - color:#fff + background: #ca0707; + color: #fff } ul li.checked { - background:#434343; - color:#fff; - border-color:#262626 + 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 + -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; + margin: 10px 0px; } #route_levels li { - padding:0px 10px; - margin:0 + padding: 0px 10px; + margin: 0 } #route_levels li.dragover { - padding-bottom:20px; - background-color:white + padding-bottom: 20px; + background-color: white } #route_levels li select { - margin:0; - width:calc(100% - 40px); - margin:0px 6px; - color:black; - background-color:inherit + margin: 0; + width: calc(100% - 40px); + margin: 0px 6px; + color: black; + background-color: inherit } #route_levels li select:hover { - color:white + color: white } #route_levels li:hover select { - color:white + color: white } #route_levels li:last-child { - padding-left:24px + padding-left: 24px } -#route_levels li:last-child .route_remove, #route_levels li:last-child .route_drag { - display:none +#route_levels li:last-child .route_remove, +#route_levels li:last-child .route_drag { + display: none } -#checklist li { +#codelist { + margin-top: 10px; +} + +#codelist li { padding-left: 26px; } -#checklist li::before { - content:''; - position:absolute; - border-color:#a6a6a6; - border-style:solid; - border-width:2px; - border-radius:50%; - -webkit-transform: translateY(20%); - -moz-transform: translateY(20%); - -ms-transform: translateY(20%); - -o-transform: translateY(20%); - transform: translateY(20%); - transform: translateY(20%); - left:6px; - height:10px; - width:10px +#codelist li::before { + content: ''; + position: absolute; + border-color: #a6a6a6; + border-style: solid; + border-width: 2px; + border-radius: 50%; + left: 6px; + height: 10px; + width: 10px } -#checklist li:hover::before { - border-color:#fff; - background-color:#ffc0cb +#codelist li:hover::before { + border-color: #fff; + background-color: #ffc0cb } -#checklist li.checked::before { - border-color:#fff; - background-color:#d85e55 +#codelist li.checked::before { + border-color: #fff; + background-color: #d85e55 } .dragelement { - opacity:0.3 + opacity: 0.3 } .route_remove { - background:inherit; - color:red; - font-weight:bold; - border-radius:0; - vertical-align:middle; - padding:0 + background: inherit; + color: red; + font-weight: bold; + border-radius: 0; + vertical-align: middle; + padding: 0 } .route_remove:hover { - background:inherit; - color:white + background: inherit; + color: white } .route_drag { - display:inline; - background-color:inherit; - color:#aaa; - border-radius:0; - vertical-align:middle; - margin:0; - padding:0 + display: inline; + background-color: inherit; + color: #aaa; + border-radius: 0; + vertical-align: middle; + margin: 0; + padding: 0 } -.route_clear, .route_presets { - display:inline-block +.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 +} \ No newline at end of file