diff --git a/changelog.xml b/changelog.xml new file mode 100644 index 0000000..05f047d --- /dev/null +++ b/changelog.xml @@ -0,0 +1,19 @@ + + + + Oct 16, 2017 + Updated descriptions for incompatible codes. + + + Oct 15, 2017 + Fixed download for Firefox + + + Oct 14, 2017 + Added Fast Any% for JP & PAL + + + Oct 11, 2017 + Added Stage Randomizer (Experimental) for NTSC-U + + \ No newline at end of file diff --git a/gctGenerator.js b/gctGenerator.js new file mode 100644 index 0000000..18e4cff --- /dev/null +++ b/gctGenerator.js @@ -0,0 +1,147 @@ +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); + } +} + +var xmlData; +function fillChecklist(i) { + if (i < xmlData.length) { + 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", xmlData[i].getElementsByTagName("title")[0].textContent); + li.setAttribute("data-codeAuthor", xmlData[i].getElementsByTagName("author")[0].textContent); + li.setAttribute("data-codeDesc", xmlData[i].getElementsByTagName("description")[0].textContent); + li.setAttribute("data-codeVersion", xmlData[i].getElementsByTagName("version")[0].textContent); + li.setAttribute("data-codeDate", xmlData[i].getElementsByTagName("date")[0].textContent); + li.setAttribute("data-codeSrc", xmlData[i].getElementsByTagName("source")[0].textContent.replace(/[\s\n\r\t]+/gm, "")); + li.setAttribute("onmouseover", "updateDescription(this)"); + document.getElementById("checkList").appendChild(li); + i++; + setTimeout(function() { + fillChecklist(i) + }, 16); + } else { + setTimeout(function() { + button = document.getElementById("downloadButton"); + button.style.transitionDuration = "1s"; + button.style.opacity = "1"; + button.disabled = false; + document.getElementById("gameID").disabled = false; + }, 24); + } +} + +function parseXML(name) { + var xml = new XMLHttpRequest(); + var file = "codes/" + name + ".xml"; + xml.onload = function() { + if (this.status == 200 && this.responseXML != null) { + xmlData = xml.responseXML; + xmlData = (new DOMParser()).parseFromString(xml.responseText, "text/xml"); + xmlData = xmlData.getElementsByTagName("code"); + + fillChecklist(0); + } + }; + xml.open("GET", file); + xml.send(); +} + +function downloadGCT(data, filename) { + var rawData = new Uint8Array(data.length / 2); + + for (var x = 0; x < rawData.length; x++) { + rawData[x] = parseInt(data.substr(x * 2, 2), 16); + } + + var file = new Blob([rawData], { + 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); + } +} + +function generateGCT() { + + if (document.getElementById("gameID").value === "Choose Version") { + alert("Select the game version!"); + return; + } + var data = "00D0C0DE00D0C0DE"; + var codeList = document.getElementById("checkList").getElementsByTagName("li"); + var valueSelected = false; + for (var i = 0; i < codeList.length; i++) { + if (codeList[i].className === "checked") { + data += codeList[i].getAttribute("data-codeSrc"); + valueSelected = true; + } + } + + if (valueSelected) { + data += "FF00000000000000"; + + downloadGCT(data, document.getElementById("gameID").value + ".gct"); + } else { + alert("No cheat(s) selected!"); + } +} + +function updateCodelist() { + resetDescription(); + document.getElementById("gameID").disabled = true; + button = document.getElementById("downloadButton"); + button.style.visibility = "visible"; + button.style.transitionDuration = "0s"; + button.style.opacity = "0"; + button.disabled = true; + document.getElementById("checkList").innerHTML = ""; + var gameVersion = document.getElementById("gameID").value; + parseXML(gameVersion); +} + +function updateDescription($this) { + document.getElementById("descriptionBox").innerHTML = "

" + + $this.getAttribute("data-codeName") + "

Author(s): " + + $this.getAttribute("data-codeAuthor") + "
Version: " + + $this.getAttribute("data-codeVersion") + " (" + + $this.getAttribute("data-codeDate") + ")

" + "

Description:
" + + $this.getAttribute("data-codeDesc") + "

"; +} + +function resetDescription() { + document.getElementById("descriptionBox").innerHTML = "

Select your codes from the list...

"; +} + +function updateChangelog() { + var xml = new XMLHttpRequest(); + var file = "changelog.xml"; + xml.onload = function() { + if (this.status == 200 && this.responseXML != null) { + var changelogData = xml.responseXML; + changelogData = (new DOMParser()).parseFromString(xml.responseText, "text/xml"); + changelogData = changelogData.getElementsByTagName("update"); + + for (var i = 0; i < changelogData.length; i++) { + document.getElementById("changelog").innerHTML += "" + changelogData[i].getElementsByTagName("date")[0].textContent + ": " + changelogData[i].getElementsByTagName("change")[0].textContent + "
"; + } + }; + } + xml.open("GET", file); + xml.send(); +} \ No newline at end of file diff --git a/guide.html b/guide.html index c5a365f..5ad8089 100644 --- a/guide.html +++ b/guide.html @@ -7,7 +7,7 @@ SMS GCT Generator -
+

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.

diff --git a/index.html b/index.html index 286d1c7..e50c02a 100644 --- a/index.html +++ b/index.html @@ -6,128 +6,33 @@ SMS GCT Generator - + - +
-

Mario Sunshine Cheatfile Generator (Guide) by Psy & Milk

- -
    +
-
diff --git a/style/style.css b/style/style.css index 1b512a3..02241a0 100644 --- a/style/style.css +++ b/style/style.css @@ -24,6 +24,11 @@ body button { cursor: pointer; margin-top: 10px; outline: none; + -webkit-transition: all 0s ease-out 0s; + -moz-transition: all 0s ease-out 0s; + -ms-transition: all 0s ease-out 0s; + -o-transition: all 0s ease-out 0s; + transition: all 0s ease-out 0s; } img { border-radius: 4px; @@ -47,8 +52,13 @@ ul li { -ms-user-select: none; user-select: none; outline: none; + -webkit-animation: fadein .8s; + -moz-animation: fadein .8s; + -ms-animation: fadein .8s; + -o-animation: fadein .8s; + animation: fadein .8s; } -ul li::before { +ul li::before { content: ''; position: absolute; border-color: #a6a6a6; @@ -60,10 +70,10 @@ ul li::before { height: 15px; width: 15px; } -ul li:nth-child(odd) { +ul li:nth-child(odd) { background: #fdfdfd; } -ul li:hover { +ul li:hover { /*background: #ddd;*/ background: #565656; @@ -101,28 +111,88 @@ ul li.checked::before { outline: none; } .framed { - margin: 30px 0 10px 0; + margin: 10px 0px 10px 0; padding: 0px 12px 12px 12px; + background-color: #111; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 18px; border-color: #fff; border-style: solid; border-width: 1px; border-radius: 4px; width: 500px; - /*min-height: 300px;*/ + min-height: 150px; + -webkit-animation: fadein 1s; + -moz-animation: fadein 1s; + -ms-animation: fadein 1s; + -o-animation: fadein 1s; + animation: fadein 1s; } #guide_content { - clear:both; - background-color:#111; - width:100%; - max-width:960px; - overflow:hidden; - border:1px solid #333; + clear: both; + background-color: #111; + width: 100%; + max-width: 960px; + overflow: hidden; + border: 1px solid #333; margin: 30px 0 10px 0; - padding: 0px 12px 12px 12px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 22px; + padding: 0px 12px 12px 12px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 22px; +} +.hidden { + opacity: 0; } a { - color: pink; + color: pink; +} +@keyframes fadein { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +/* Firefox < 16 */ + +@-moz-keyframes fadein { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +/* Safari, Chrome and Opera > 12.1 */ + +@-webkit-keyframes fadein { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +/* Internet Explorer */ + +@-ms-keyframes fadein { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +/* Opera < 12.1 */ + +@-o-keyframes fadein { + from { + opacity: 0; + } + to { + opacity: 1; + } } \ No newline at end of file