Add files via upload
This commit is contained in:
parent
b06fd3a53c
commit
5aaf196939
3 changed files with 1151 additions and 1151 deletions
914
gctGenerator.js
914
gctGenerator.js
|
@ -1,457 +1,457 @@
|
||||||
if (navigator.userAgent.toLowerCase().indexOf("firefox") > -1) {
|
if (navigator.userAgent.toLowerCase().indexOf("firefox") > -1) {
|
||||||
HTMLElement.prototype.click = function() {
|
HTMLElement.prototype.click = function() {
|
||||||
var evt = this.ownerDocument.createEvent("MouseEvents");
|
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);
|
evt.initMouseEvent("click", true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
|
||||||
this.dispatchEvent(evt);
|
this.dispatchEvent(evt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
document.getElementById("checklist").addEventListener("click", function(ev) {
|
document.getElementById("checklist").addEventListener("click", function(ev) {
|
||||||
if (ev.target && ev.target.nodeName == "LI") {
|
if (ev.target && ev.target.nodeName == "LI") {
|
||||||
ev.target.classList.toggle("checked");
|
ev.target.classList.toggle("checked");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function parseXML(name) {
|
function parseXML(name) {
|
||||||
var xml = new XMLHttpRequest();
|
var xml = new XMLHttpRequest();
|
||||||
var file = "codes/" + name + ".xml";
|
var file = "codes/" + name + ".xml";
|
||||||
xml.onreadystatechange = function() {
|
xml.onreadystatechange = function() {
|
||||||
if (this.status == 200 && this.readyState == 4) {
|
if (this.status == 200 && this.readyState == 4) {
|
||||||
var xmlData = xml.responseXML;
|
var xmlData = xml.responseXML;
|
||||||
xmlData = (new DOMParser()).parseFromString(xml.responseText, "text/xml");
|
xmlData = (new DOMParser()).parseFromString(xml.responseText, "text/xml");
|
||||||
xmlData = xmlData.getElementsByTagName("code");
|
xmlData = xmlData.getElementsByTagName("code");
|
||||||
|
|
||||||
var i = 0;
|
var i = 0;
|
||||||
for (; i < xmlData.length; i++) {
|
for (; i < xmlData.length; i++) {
|
||||||
var li = document.createElement("li");
|
var li = document.createElement("li");
|
||||||
var desc = xmlData[i].getElementsByTagName("title")[0].textContent;
|
var desc = xmlData[i].getElementsByTagName("title")[0].textContent;
|
||||||
var t = document.createTextNode(desc);
|
var t = document.createTextNode(desc);
|
||||||
li.appendChild(t);
|
li.appendChild(t);
|
||||||
li.setAttribute("data-codename", btoa(xmlData[i].getElementsByTagName("title")[0].textContent));
|
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-codeauthor", btoa(xmlData[i].getElementsByTagName("author")[0].textContent));
|
||||||
li.setAttribute("data-codedesc", btoa(xmlData[i].getElementsByTagName("description")[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-codeversion", btoa(xmlData[i].getElementsByTagName("version")[0].textContent));
|
||||||
li.setAttribute("data-codedate", btoa(xmlData[i].getElementsByTagName("date")[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("data-codesrc", btoa(xmlData[i].getElementsByTagName("source")[0].textContent.replace(/[\s\n\r\t]+/gm, "")));
|
||||||
li.setAttribute("onmouseover", "updateDescription(this)");
|
li.setAttribute("onmouseover", "updateDescription(this)");
|
||||||
document.getElementById("checklist").appendChild(li);
|
document.getElementById("checklist").appendChild(li);
|
||||||
}
|
}
|
||||||
|
|
||||||
var buttons = document.getElementsByTagName("button");
|
var buttons = document.getElementsByTagName("button");
|
||||||
for (var i = 0; i < buttons.length; i++) buttons[i].disabled = false;
|
for (var i = 0; i < buttons.length; i++) buttons[i].disabled = false;
|
||||||
|
|
||||||
document.getElementById("gameversion").disabled = false;
|
document.getElementById("gameversion").disabled = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
xml.open("GET", file);
|
xml.open("GET", file);
|
||||||
xml.send();
|
xml.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateFastCode(name) {
|
function updateFastCode(name) {
|
||||||
var xml = new XMLHttpRequest();
|
var xml = new XMLHttpRequest();
|
||||||
var file = "codes/fast/" + name + ".json";
|
var file = "codes/fast/" + name + ".json";
|
||||||
xml.onreadystatechange = function() {
|
xml.onreadystatechange = function() {
|
||||||
if (this.status == 200 && this.readyState == 4) {
|
if (this.status == 200 && this.readyState == 4) {
|
||||||
document.getElementById("route_levels").setAttribute("data-json", btoa(xml.responseText));
|
document.getElementById("route_levels").setAttribute("data-json", btoa(xml.responseText));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xml.open("GET",file);
|
xml.open("GET",file);
|
||||||
xml.send();
|
xml.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
function downloadFile(data, filename) {
|
function downloadFile(data, filename) {
|
||||||
|
|
||||||
var file = new Blob([data], {
|
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 {
|
else {
|
||||||
var a = document.createElement("a"),
|
var a = document.createElement("a"),
|
||||||
url = window.URL.createObjectURL(file);
|
url = window.URL.createObjectURL(file);
|
||||||
a.href = url;
|
a.href = url;
|
||||||
a.download = filename.replace("GMSJ0A","GMSJ01");
|
a.download = filename.replace("GMSJ0A","GMSJ01");
|
||||||
a.click();
|
a.click();
|
||||||
setTimeout(function() { window.URL.revokeObjectURL(url); }, 500);
|
setTimeout(function() { window.URL.revokeObjectURL(url); }, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateGCT() {
|
function generateGCT() {
|
||||||
|
|
||||||
if (document.getElementById("gameversion").value === "Choose Version") {
|
if (document.getElementById("gameversion").value === "Choose Version") {
|
||||||
alert("Select the game version!");
|
alert("Select the game version!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var data = "00D0C0DE00D0C0DE";
|
var data = "00D0C0DE00D0C0DE";
|
||||||
var codeList = document.getElementById("checklist").getElementsByTagName("li");
|
var codeList = document.getElementById("checklist").getElementsByTagName("li");
|
||||||
var valueSelected = false;
|
var valueSelected = false;
|
||||||
for (var i = 0; i < codeList.length; i++) {
|
for (var i = 0; i < codeList.length; i++) {
|
||||||
if (codeList[i].className === "checked") {
|
if (codeList[i].className === "checked") {
|
||||||
data += atob(codeList[i].getAttribute("data-codesrc"));
|
data += atob(codeList[i].getAttribute("data-codesrc"));
|
||||||
valueSelected = true;
|
valueSelected = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var fastcode = getFastCode();
|
var fastcode = getFastCode();
|
||||||
|
|
||||||
if(fastcode !== false) {
|
if(fastcode !== false) {
|
||||||
data += fastcode;
|
data += fastcode;
|
||||||
valueSelected = true;
|
valueSelected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (valueSelected) {
|
if (valueSelected) {
|
||||||
data += "FF00000000000000";
|
data += "FF00000000000000";
|
||||||
var rawData = new Uint8Array(data.length / 2);
|
var rawData = new Uint8Array(data.length / 2);
|
||||||
|
|
||||||
for (var x = 0; x < rawData.length; x++) {
|
for (var x = 0; x < rawData.length; x++) {
|
||||||
rawData[x] = parseInt(data.substr(x * 2, 2), 16);
|
rawData[x] = parseInt(data.substr(x * 2, 2), 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
downloadFile(rawData, document.getElementById("gameversion").value + ".gct");
|
downloadFile(rawData, document.getElementById("gameversion").value + ".gct");
|
||||||
} else {
|
} else {
|
||||||
alert("No cheat(s) selected!");
|
alert("No cheat(s) selected!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateTXT() {
|
function generateTXT() {
|
||||||
|
|
||||||
var dolphin = (document.getElementById("downloadformat").value === "ini");
|
var dolphin = (document.getElementById("downloadformat").value === "ini");
|
||||||
|
|
||||||
if (document.getElementById("gameversion").value === "Choose Version") {
|
if (document.getElementById("gameversion").value === "Choose Version") {
|
||||||
alert("Select the game version!");
|
alert("Select the game version!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (dolphin) var data = "Paste the following on top of your games .ini file:\r\n[Gecko]";
|
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";
|
else var data = document.getElementById("gameversion").value.replace("GMSJ0A","GMSJ01") + "\r\nSuper Mario Sunshine";
|
||||||
var codeList = document.getElementById("checklist").getElementsByTagName("li");
|
var codeList = document.getElementById("checklist").getElementsByTagName("li");
|
||||||
var valueSelected = false;
|
var valueSelected = false;
|
||||||
for (var i = 0; i < codeList.length; i++) {
|
for (var i = 0; i < codeList.length; i++) {
|
||||||
if (codeList[i].className === "checked") {
|
if (codeList[i].className === "checked") {
|
||||||
data += "\r\n";
|
data += "\r\n";
|
||||||
if (dolphin) data += "$";
|
if (dolphin) data += "$";
|
||||||
else data += "\r\n";
|
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-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");
|
data += (atob(codeList[i].getAttribute("data-codesrc")).match(/.{8}/g).join(" ")).replace(/(.{17})./g, "$1\r\n");
|
||||||
valueSelected = true;
|
valueSelected = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var fastcode = getFastCode();
|
var fastcode = getFastCode();
|
||||||
|
|
||||||
if(fastcode !== false) {
|
if(fastcode !== false) {
|
||||||
data += "\r\n";
|
data += "\r\n";
|
||||||
if (dolphin) data += "$";
|
if (dolphin) data += "$";
|
||||||
else data += "\r\n";
|
else data += "\r\n";
|
||||||
data += "Stage list loader [Noki Doki]\r\n";
|
data += "Stage list loader [Noki Doki]\r\n";
|
||||||
data += (fastcode.match(/.{8}/g).join(" ")).replace(/(.{17})./g, "$1\r\n");
|
data += (fastcode.match(/.{8}/g).join(" ")).replace(/(.{17})./g, "$1\r\n");
|
||||||
valueSelected = true;
|
valueSelected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (valueSelected)
|
if (valueSelected)
|
||||||
downloadFile(data, document.getElementById("gameversion").value + ".txt");
|
downloadFile(data, document.getElementById("gameversion").value + ".txt");
|
||||||
else alert("No cheat(s) selected!");
|
else alert("No cheat(s) selected!");
|
||||||
}
|
}
|
||||||
|
|
||||||
function downloadCodes() {
|
function downloadCodes() {
|
||||||
if (document.getElementById("downloadformat").value === "gct") generateGCT();
|
if (document.getElementById("downloadformat").value === "gct") generateGCT();
|
||||||
else generateTXT();
|
else generateTXT();
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateCodelist() {
|
function updateCodelist() {
|
||||||
resetDescription();
|
resetDescription();
|
||||||
document.getElementById("gameversion").disabled = true;
|
document.getElementById("gameversion").disabled = true;
|
||||||
var buttons = document.getElementsByTagName("button");
|
var buttons = document.getElementsByTagName("button");
|
||||||
for (var i = 0; i < buttons.length; i++) buttons[i].disabled = true;
|
for (var i = 0; i < buttons.length; i++) buttons[i].disabled = true;
|
||||||
document.getElementById("checklist").innerHTML = "";
|
document.getElementById("checklist").innerHTML = "";
|
||||||
var gameVersion = document.getElementById("gameversion").value;
|
var gameVersion = document.getElementById("gameversion").value;
|
||||||
parseXML(gameVersion);
|
parseXML(gameVersion);
|
||||||
updateFastCode(gameVersion);
|
updateFastCode(gameVersion);
|
||||||
document.getElementById("left").style.visibility = "visible";
|
document.getElementById("left").style.visibility = "visible";
|
||||||
while (document.getElementsByClassName("initialhidden").length > 0) {
|
while (document.getElementsByClassName("initialhidden").length > 0) {
|
||||||
document.getElementsByClassName("initialhidden")[0].classList.remove("initialhidden");
|
document.getElementsByClassName("initialhidden")[0].classList.remove("initialhidden");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateDescription(s) {
|
function updateDescription(s) {
|
||||||
document.getElementById("descriptionbox").innerHTML = "<h2>" +
|
document.getElementById("descriptionbox").innerHTML = "<h2>" +
|
||||||
atob(s.getAttribute("data-codename")) + "</h2><p style=\"margin:0\"><i>Author(s): " +
|
atob(s.getAttribute("data-codename")) + "</h2><p style=\"margin-top:0\"><i>Author(s): " +
|
||||||
atob(s.getAttribute("data-codeauthor")) + "</i></p><p style=\"margin:0\"><i>Version: " +
|
atob(s.getAttribute("data-codeauthor")) + "</i></p><p style=\"margin-top:0\"><i>Version: " +
|
||||||
atob(s.getAttribute("data-codeversion")) + " (" +
|
atob(s.getAttribute("data-codeversion")) + " (" +
|
||||||
atob(s.getAttribute("data-codedate")) + ")</i></p>" + "<br /><h4>Description:</h4><p>" +
|
atob(s.getAttribute("data-codedate")) + ")</i></p>" + "<br /><h4>Description:</h4><p>" +
|
||||||
atob(s.getAttribute("data-codedesc")) + "</p>";
|
atob(s.getAttribute("data-codedesc")) + "</p>";
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateUIDescription(s) {
|
function updateUIDescription(s) {
|
||||||
if (s.id === "route_notext")
|
if (s.id === "route_notext")
|
||||||
document.getElementById("descriptionbox").innerHTML = "<h2>Remove Dialogue</h2><p>Replaces all Dialogue with \"!!!\". 'Always' and 'Not in Pianta 5' will override the dialogue skip from the DPad Functions.</p>";
|
document.getElementById("descriptionbox").innerHTML = "<h2>Remove Dialogue</h2><p>Replaces all Dialogue with \"!!!\". 'Always' and 'Not in Pianta 5' will override the dialogue skip from the DPad Functions.</p>";
|
||||||
else if (s.id === "route_nofmvs")
|
else if (s.id === "route_nofmvs")
|
||||||
document.getElementById("descriptionbox").innerHTML = "<h2>Skippable Cutscenes</h2><p>Makes FMVs Skippable. 'Always' has the same effect as the 'FMV Skips' code. Also, having 'FMV Skips' enabled will override 'Not in Pinna 1' - so don't use both simultaneously.</p>";
|
document.getElementById("descriptionbox").innerHTML = "<h2>Skippable Cutscenes</h2><p>Makes FMVs Skippable. 'Always' has the same effect as the 'FMV Skips' code. Also, having 'FMV Skips' enabled will override 'Not in Pinna 1' - so don't use both simultaneously.</p>";
|
||||||
else if (s.id === "route_order")
|
else if (s.id === "route_order")
|
||||||
document.getElementById("descriptionbox").innerHTML = "<h2>Level Order</h2><p>The order in which levels are loaded:</p><h4>As specified</h4><p>The code loads levels in the order of the list.</p><h4>Random, no duplicates</h4><p>The code picks levels at random, excluding levels that you’ve finished already.</p><h4>Fully random</h4><p>The code picks levels at random, even levels that you’ve finished already.</p>";
|
document.getElementById("descriptionbox").innerHTML = "<h2>Level Order</h2><p>The order in which levels are loaded:</p><h4>As specified</h4><p>The code loads levels in the order of the list.</p><h4>Random, no duplicates</h4><p>The code picks levels at random, excluding levels that you’ve finished already.</p><h4>Fully random</h4><p>The code picks levels at random, even levels that you’ve finished already.</p>";
|
||||||
else if (s.id === "route_ending")
|
else if (s.id === "route_ending")
|
||||||
document.getElementById("descriptionbox").innerHTML = "<h2>Route Ending</h2><p>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.</p>";
|
document.getElementById("descriptionbox").innerHTML = "<h2>Route Ending</h2><p>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.</p>";
|
||||||
else if (s.id === "downloadformat")
|
else if (s.id === "downloadformat")
|
||||||
document.getElementById("descriptionbox").innerHTML = "<h2>File Format</h2><p>You can choose between 3 file formats:</p><h4>GCT</h4><p>Download a GCT file for use with Nintendont</p><h4>Dolphin INI</h4><p>Download a textfile containing the formatted codes for use with Dolphin. Copy the contents of the file on top of your games .ini file.</p><p>You can open the .ini file by right clicking the game in Dolphin. In the context menu select 'Properties' and then 'Edit configuration'.</p><h4>Cheat Manager TXT</h4><p>Download the cheats in a textfile formatted for use with the <a target=\"_blank\" href=\"http://wiibrew.org/wiki/CheatManager\">Gecko Cheat Manager</a>. Place the txt file in SD:/txtcodes/.</p><p>A zip archive containing pregenerated txt files with all available codes on this site can be downloaded <a target=\"_blank\" href=\"files/GCMCodes.zip\">here</a>.</p>";
|
document.getElementById("descriptionbox").innerHTML = "<h2>File Format</h2><p>You can choose between 3 file formats:</p><h4>GCT</h4><p>Download a GCT file for use with Nintendont</p><h4>Dolphin INI</h4><p>Download a textfile containing the formatted codes for use with Dolphin. Copy the contents of the file on top of your games .ini file.</p><p>You can open the .ini file by right clicking the game in Dolphin. In the context menu select 'Properties' and then 'Edit configuration'.</p><h4>Cheat Manager TXT</h4><p>Download the cheats in a textfile formatted for use with the <a target=\"_blank\" href=\"http://wiibrew.org/wiki/CheatManager\">Gecko Cheat Manager</a>. Place the txt file in SD:/txtcodes/.</p><p>A zip archive containing pregenerated txt files with all available codes on this site can be downloaded <a target=\"_blank\" href=\"files/GCMCodes.zip\">here</a>.</p>";
|
||||||
else if (s.id === "stageloader")
|
else if (s.id === "stageloader")
|
||||||
document.getElementById("descriptionbox").innerHTML = "<h2>Stage Loader</h2><p>Select yes if you want to use a custom stage loader, which automatically loads the levels you choose, similiar to 'Fast Any%'.</p>";
|
document.getElementById("descriptionbox").innerHTML = "<h2>Stage Loader</h2><p>Select yes if you want to use a custom stage loader, which automatically loads the levels you choose, similiar to 'Fast Any%'.</p>";
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetDescription() {
|
function resetDescription() {
|
||||||
document.getElementById("descriptionbox").innerHTML = "<p><h3>Choose your codes from the list...</h3></p>";
|
document.getElementById("descriptionbox").innerHTML = "<p><h3>Choose your codes from the list...</h3></p>";
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateChangelog() {
|
function updateChangelog() {
|
||||||
document.getElementById("gameversion").style.visibility = "visible";
|
document.getElementById("gameversion").style.visibility = "visible";
|
||||||
var xml = new XMLHttpRequest();
|
var xml = new XMLHttpRequest();
|
||||||
var file = "changelog.xml";
|
var file = "changelog.xml";
|
||||||
xml.onload = function() {
|
xml.onload = function() {
|
||||||
if (this.status == 200 && this.responseXML != null) {
|
if (this.status == 200 && this.responseXML != null) {
|
||||||
var changelogData = xml.responseXML;
|
var changelogData = xml.responseXML;
|
||||||
changelogData = (new DOMParser()).parseFromString(xml.responseText, "text/xml");
|
changelogData = (new DOMParser()).parseFromString(xml.responseText, "text/xml");
|
||||||
changelogData = changelogData.getElementsByTagName("update");
|
changelogData = changelogData.getElementsByTagName("update");
|
||||||
|
|
||||||
var recentchanges = "";
|
var recentchanges = "";
|
||||||
try {
|
try {
|
||||||
document.getElementById("lastupdate").innerHTML = "Last Updated: " + changelogData[0].getElementsByTagName("date")[0].textContent;
|
document.getElementById("lastupdate").innerHTML = "Last Updated: " + changelogData[0].getElementsByTagName("date")[0].textContent;
|
||||||
|
|
||||||
for (var i = 0; i < changelogData.length && i < 3;i++) {
|
for (var i = 0; i < changelogData.length && i < 3;i++) {
|
||||||
recentchanges += "<p style=\"margin:0\"><i>" + changelogData[i].getElementsByTagName("date")[0].textContent + ":</i> ";
|
recentchanges += "<p style=\"margin-top:0\"><i>" + changelogData[i].getElementsByTagName("date")[0].textContent + ":</i>";
|
||||||
|
|
||||||
var changes = changelogData[i].getElementsByTagName("change");
|
var changes = changelogData[i].getElementsByTagName("change");
|
||||||
for (var k = 0; k < changes.length && (i+k-1) < 3; k++) {
|
for (var k = 0; k < changes.length && (i+k-1) < 3; k++) {
|
||||||
recentchanges += changes[k].getElementsByTagName("head")[0].textContent + " ";
|
recentchanges += changes[k].getElementsByTagName("head")[0].textContent + " ";
|
||||||
}
|
}
|
||||||
|
|
||||||
i += k-1;
|
i += k-1;
|
||||||
|
|
||||||
recentchanges += "</p>";
|
recentchanges += "</p>";
|
||||||
}
|
}
|
||||||
} catch (err) {}
|
} catch (err) {}
|
||||||
|
|
||||||
document.getElementById("changelog").innerHTML += recentchanges + "<a target=\"_blank\" href=\"changelog.html\"><i>more ...</i></a>";
|
document.getElementById("changelog").innerHTML += recentchanges + "<p style=\"margin-top:0\"><a target=\"_blank\" href=\"changelog.html\"><i>more ...</i></a></p>";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
xml.open("GET", file);
|
xml.open("GET", file);
|
||||||
xml.send();
|
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 levels = document.querySelector("#route_levels");
|
||||||
const template = levels.lastElementChild;
|
const template = levels.lastElementChild;
|
||||||
template.ondragstart = function() { return false; };
|
template.ondragstart = function() { return false; };
|
||||||
|
|
||||||
function appendLevel(code) {
|
function appendLevel(code) {
|
||||||
const clone = template.cloneNode(true);
|
const clone = template.cloneNode(true);
|
||||||
clone.draggable = true;
|
clone.draggable = true;
|
||||||
selSetHandlers(clone);
|
selSetHandlers(clone);
|
||||||
clone.querySelector("select").value = code;
|
clone.querySelector("select").value = code;
|
||||||
levels.insertBefore(clone, template);
|
levels.insertBefore(clone, template);
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearLevels() {
|
function clearLevels() {
|
||||||
while (levels.firstChild !== template) levels.removeChild(levels.firstChild);
|
while (levels.firstChild !== template) levels.removeChild(levels.firstChild);
|
||||||
}
|
}
|
||||||
|
|
||||||
template.addEventListener("change", function () {
|
template.addEventListener("change", function () {
|
||||||
appendLevel(template.querySelector("select").value);
|
appendLevel(template.querySelector("select").value);
|
||||||
template.querySelector("select").value = "0F00";
|
template.querySelector("select").value = "0F00";
|
||||||
})
|
})
|
||||||
|
|
||||||
levels.addEventListener("change", function (ev) {
|
levels.addEventListener("change", function (ev) {
|
||||||
if (ev.target.value === "0F00" && ev.target.parentNode !== template) levels.removeChild(ev.target.parentNode);
|
if (ev.target.value === "0F00" && ev.target.parentNode !== template) levels.removeChild(ev.target.parentNode);
|
||||||
})
|
})
|
||||||
|
|
||||||
levels.addEventListener("click", function (ev) {
|
levels.addEventListener("click", function (ev) {
|
||||||
if (ev.target.tagName.toUpperCase() === "BUTTON") levels.removeChild(ev.target.parentNode);
|
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_ending").disabled = document.querySelector("#route_order").value === "random";
|
||||||
document.querySelector("#route_order").addEventListener("change", function (ev) {
|
document.querySelector("#route_order").addEventListener("change", function (ev) {
|
||||||
document.querySelector("#route_ending").disabled = ev.currentTarget.value === "random";
|
document.querySelector("#route_ending").disabled = ev.currentTarget.value === "random";
|
||||||
})
|
})
|
||||||
|
|
||||||
document.querySelector("#route_presets").addEventListener("change", function (ev) {
|
document.querySelector("#route_presets").addEventListener("change", function (ev) {
|
||||||
if (levels.childElementCount <= 1 || confirm("Loading a preset will erase your current list. Continue?")) {
|
if (levels.childElementCount <= 1 || confirm("Loading a preset will erase your current list. Continue?")) {
|
||||||
clearLevels();
|
clearLevels();
|
||||||
const preset = ev.currentTarget.value.split(";")[0];
|
const preset = ev.currentTarget.value.split(";")[0];
|
||||||
const ending = ev.currentTarget.value.split(";")[1];
|
const ending = ev.currentTarget.value.split(";")[1];
|
||||||
for (let i = 0; i <= preset.length - 4; i += 4) appendLevel(preset.substr(i, 4));
|
for (let i = 0; i <= preset.length - 4; i += 4) appendLevel(preset.substr(i, 4));
|
||||||
if (ending) document.querySelector("#route_ending").value = ending
|
if (ending) document.querySelector("#route_ending").value = ending
|
||||||
}
|
}
|
||||||
ev.currentTarget.value = "";
|
ev.currentTarget.value = "";
|
||||||
})
|
})
|
||||||
|
|
||||||
document.querySelector("#route_clear").addEventListener("click", function () {
|
document.querySelector("#route_clear").addEventListener("click", function () {
|
||||||
confirm("Do you really want to clear the list?") && clearLevels();
|
confirm("Do you really want to clear the list?") && clearLevels();
|
||||||
})
|
})
|
||||||
|
|
||||||
{
|
{
|
||||||
let selection;
|
let selection;
|
||||||
|
|
||||||
function selDragStart(e) {
|
function selDragStart(e) {
|
||||||
selection = this;
|
selection = this;
|
||||||
e.dataTransfer.effectAllowed = "move";
|
e.dataTransfer.effectAllowed = "move";
|
||||||
e.dataTransfer.setData("html", this.querySelector("select").value);
|
e.dataTransfer.setData("html", this.querySelector("select").value);
|
||||||
|
|
||||||
this.classList.add("dragelement");
|
this.classList.add("dragelement");
|
||||||
}
|
}
|
||||||
|
|
||||||
function selDragOver(e) {
|
function selDragOver(e) {
|
||||||
if (e.preventDefault) {
|
if (e.preventDefault) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.classList.add("dragover");
|
this.classList.add("dragover");
|
||||||
e.dataTransfer.dropEffect = "move";
|
e.dataTransfer.dropEffect = "move";
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function selDragLeave() {
|
function selDragLeave() {
|
||||||
this.classList.remove("dragover");
|
this.classList.remove("dragover");
|
||||||
}
|
}
|
||||||
|
|
||||||
function selDragDrop(e) {
|
function selDragDrop(e) {
|
||||||
if (e.stopPropagation) {
|
if (e.stopPropagation) {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selection != this) {
|
if (selection != this) {
|
||||||
this.parentNode.removeChild(selection);
|
this.parentNode.removeChild(selection);
|
||||||
this.insertAdjacentHTML("afterend", template.outerHTML);
|
this.insertAdjacentHTML("afterend", template.outerHTML);
|
||||||
this.nextSibling.querySelector("select").value = e.dataTransfer.getData('html');
|
this.nextSibling.querySelector("select").value = e.dataTransfer.getData('html');
|
||||||
this.nextSibling.draggable = true;
|
this.nextSibling.draggable = true;
|
||||||
selSetHandlers(this.nextSibling);
|
selSetHandlers(this.nextSibling);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.classList.remove("dragover");
|
this.classList.remove("dragover");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function selDragEnd() {
|
function selDragEnd() {
|
||||||
this.classList.remove("dragelement");
|
this.classList.remove("dragelement");
|
||||||
}
|
}
|
||||||
|
|
||||||
function selSetHandlers(elem) {
|
function selSetHandlers(elem) {
|
||||||
elem.addEventListener('dragstart', selDragStart, false);
|
elem.addEventListener('dragstart', selDragStart, false);
|
||||||
elem.addEventListener('dragover', selDragOver, false);
|
elem.addEventListener('dragover', selDragOver, false);
|
||||||
elem.addEventListener('dragleave', selDragLeave, false);
|
elem.addEventListener('dragleave', selDragLeave, false);
|
||||||
elem.addEventListener('drop', selDragDrop, false);
|
elem.addEventListener('drop', selDragDrop, false);
|
||||||
elem.addEventListener('dragend', selDragEnd, false);
|
elem.addEventListener('dragend', selDragEnd, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Interface
|
//Interface
|
||||||
function getFastCode() {
|
function getFastCode() {
|
||||||
var levelCodes = [];
|
var levelCodes = [];
|
||||||
for (var c = levels.getElementsByTagName("select"), i = 0; i < c.length; i++) {
|
for (var c = levels.getElementsByTagName("select"), i = 0; i < c.length; i++) {
|
||||||
levelCodes.push(c[i].value);
|
levelCodes.push(c[i].value);
|
||||||
}
|
}
|
||||||
levelCodes.pop();
|
levelCodes.pop();
|
||||||
|
|
||||||
if (!(document.getElementById("usefastcode").checked) || levelCodes.length <= 1) return false;
|
if (!(document.getElementById("usefastcode").checked) || levelCodes.length <= 1) return false;
|
||||||
|
|
||||||
let game = JSON.parse(atob(document.getElementById("route_levels").getAttribute("data-json")));
|
let game = JSON.parse(atob(document.getElementById("route_levels").getAttribute("data-json")));
|
||||||
const order = document.getElementById("route_order").value;
|
const order = document.getElementById("route_order").value;
|
||||||
const ending = document.getElementById("route_ending").value;
|
const ending = document.getElementById("route_ending").value;
|
||||||
const branchBase = 0x18 + 0x24 * (order !== 'list');
|
const branchBase = 0x18 + 0x24 * (order !== 'list');
|
||||||
const asm = [];
|
const asm = [];
|
||||||
asm.push("48" + ("00000" + (Math.ceil(levelCodes.length / 2) + 1 << 2 | 1).toString(16).toUpperCase()).slice(-6)); // bl code
|
asm.push("48" + ("00000" + (Math.ceil(levelCodes.length / 2) + 1 << 2 | 1).toString(16).toUpperCase()).slice(-6)); // bl code
|
||||||
for (let i = levelCodes.length - 1; i >= 0; i -= 2) {
|
for (let i = levelCodes.length - 1; i >= 0; i -= 2) {
|
||||||
asm.push(levelCodes[i] + (levelCodes[i - 1] || "0000"));
|
asm.push(levelCodes[i] + (levelCodes[i - 1] || "0000"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// code:
|
// code:
|
||||||
//Timer compatibility
|
//Timer compatibility
|
||||||
asm.push("3C80817F"); // lis r4, 0x817F
|
asm.push("3C80817F"); // lis r4, 0x817F
|
||||||
asm.push("38000000"); // li r0, 0
|
asm.push("38000000"); // li r0, 0
|
||||||
asm.push("9004010C"); // stw r0, 0x010C(r4)
|
asm.push("9004010C"); // stw r0, 0x010C(r4)
|
||||||
asm.push("38000001"); // li r0, 1
|
asm.push("38000001"); // li r0, 1
|
||||||
asm.push("98040101"); // stb r0, 0x0101(r4)
|
asm.push("98040101"); // stb r0, 0x0101(r4)
|
||||||
|
|
||||||
asm.push("887F0012"); // lbz r3, 0x12(r31)
|
asm.push("887F0012"); // lbz r3, 0x12(r31)
|
||||||
asm.push("2C030001"); // cmpwi r3, 1
|
asm.push("2C030001"); // cmpwi r3, 1
|
||||||
asm.push("4181" + ("000" + (branchBase + 0x48).toString(16).toUpperCase()).slice(-4)); // bgt- done
|
asm.push("4181" + ("000" + (branchBase + 0x48).toString(16).toUpperCase()).slice(-4)); // bgt- done
|
||||||
|
|
||||||
asm.push("98040100"); // stb r0, 0x0100(r4)
|
asm.push("98040100"); // stb r0, 0x0100(r4)
|
||||||
|
|
||||||
asm.push("80AD" + game.fmOffset); // lwz r5, TFlagManager::smInstance
|
asm.push("80AD" + game.fmOffset); // lwz r5, TFlagManager::smInstance
|
||||||
asm.push("7CC802A6"); // mflr r6
|
asm.push("7CC802A6"); // mflr r6
|
||||||
asm.push("80640000"); // lwz r3, 0(r4)
|
asm.push("80640000"); // lwz r3, 0(r4)
|
||||||
|
|
||||||
asm.push("881F000E"); // lbz r0, 0x0E(r31)
|
asm.push("881F000E"); // lbz r0, 0x0E(r31)
|
||||||
asm.push("2C00000F"); // cmpwi r0, 15
|
asm.push("2C00000F"); // cmpwi r0, 15
|
||||||
asm.push("40820010"); // bne- 0x10
|
asm.push("40820010"); // bne- 0x10
|
||||||
asm.push("3860" + ("000" + ((levelCodes.length - (order === 'random')) * 2).toString(16).toUpperCase()).slice(-4)); // li r3, length
|
asm.push("3860" + ("000" + ((levelCodes.length - (order === 'random')) * 2).toString(16).toUpperCase()).slice(-4)); // li r3, length
|
||||||
asm.push("90640000"); // stw r3, 0(r4)
|
asm.push("90640000"); // stw r3, 0(r4)
|
||||||
asm.push("48000018"); // b 0x18
|
asm.push("48000018"); // b 0x18
|
||||||
asm.push("2C030000"); // cmpwi r3, 0
|
asm.push("2C030000"); // cmpwi r3, 0
|
||||||
asm.push("4180" + ("000" + (0x1C + 0x14 * (order !== "list")).toString(16).toUpperCase()).slice(-4)); // blt- loadEnding
|
asm.push("4180" + ("000" + (0x1C + 0x14 * (order !== "list")).toString(16).toUpperCase()).slice(-4)); // blt- loadEnding
|
||||||
asm.push("880500CC"); // lbz r0, 0xCC(r5)
|
asm.push("880500CC"); // lbz r0, 0xCC(r5)
|
||||||
asm.push("54000673"); // rlwinm. r0, r0, 0, 25, 25
|
asm.push("54000673"); // rlwinm. r0, r0, 0, 25, 25
|
||||||
asm.push("4182" + ("000" + branchBase.toString(16).toUpperCase()).slice(-4)); // beq- loadIndex
|
asm.push("4182" + ("000" + branchBase.toString(16).toUpperCase()).slice(-4)); // beq- loadIndex
|
||||||
|
|
||||||
if (order === "random") {
|
if (order === "random") {
|
||||||
asm.push("38630002"); // addi r3, r3, 2
|
asm.push("38630002"); // addi r3, r3, 2
|
||||||
}
|
}
|
||||||
|
|
||||||
if (order !== "list") {
|
if (order !== "list") {
|
||||||
asm.push("7CEC42E6"); // mftbl r7
|
asm.push("7CEC42E6"); // mftbl r7
|
||||||
asm.push("7C071B96"); // divwu r0, r7, r3
|
asm.push("7C071B96"); // divwu r0, r7, r3
|
||||||
asm.push("7C0019D6"); // mullw r0, r0, r3
|
asm.push("7C0019D6"); // mullw r0, r0, r3
|
||||||
asm.push("7CE03850"); // sub r7, r7, r0
|
asm.push("7CE03850"); // sub r7, r7, r0
|
||||||
asm.push("54E7003C"); // rlwinm r7, r7, 0, 0, 30
|
asm.push("54E7003C"); // rlwinm r7, r7, 0, 0, 30
|
||||||
}
|
}
|
||||||
|
|
||||||
asm.push("3463FFFE"); // subic. r3, r3, 2
|
asm.push("3463FFFE"); // subic. r3, r3, 2
|
||||||
if (order !== "random") {
|
if (order !== "random") {
|
||||||
asm.push("90640000"); // stw r3, 0(r4)
|
asm.push("90640000"); // stw r3, 0(r4)
|
||||||
}
|
}
|
||||||
|
|
||||||
asm.push("4080000C"); // bge- 0xC
|
asm.push("4080000C"); // bge- 0xC
|
||||||
|
|
||||||
// loadEnding:
|
// loadEnding:
|
||||||
asm.push("3860" + ending); // li r3, ending
|
asm.push("3860" + ending); // li r3, ending
|
||||||
asm.push("4800" + ("000" + (0x8 + 0x10 * (order !== "list")).toString(16).toUpperCase()).slice(-4)); // b loadStage
|
asm.push("4800" + ("000" + (0x8 + 0x10 * (order !== "list")).toString(16).toUpperCase()).slice(-4)); // b loadStage
|
||||||
|
|
||||||
if (order !== "list") {
|
if (order !== "list") {
|
||||||
asm.push("7C061A2E"); // lhzx r0, r6, r3
|
asm.push("7C061A2E"); // lhzx r0, r6, r3
|
||||||
asm.push("7C863A2E"); // lhzx r4, r6, r7
|
asm.push("7C863A2E"); // lhzx r4, r6, r7
|
||||||
asm.push("7C063B2E"); // sthx r0, r6, r7
|
asm.push("7C063B2E"); // sthx r0, r6, r7
|
||||||
asm.push("7C861B2E"); // sthx r4, r6, r3
|
asm.push("7C861B2E"); // sthx r4, r6, r3
|
||||||
}
|
}
|
||||||
|
|
||||||
// loadIndex:
|
// loadIndex:
|
||||||
asm.push("7C661A2E"); // lhzx r3, r6, r3
|
asm.push("7C661A2E"); // lhzx r3, r6, r3
|
||||||
|
|
||||||
// loadStage:
|
// loadStage:
|
||||||
asm.push("B07F0012"); // sth r3, 0x12(r31)
|
asm.push("B07F0012"); // sth r3, 0x12(r31)
|
||||||
asm.push("986500DF"); // stb r3, 0xDF(r5)
|
asm.push("986500DF"); // stb r3, 0xDF(r5)
|
||||||
|
|
||||||
// done:
|
// done:
|
||||||
asm.push("807F0020"); // lwz r3, 0x20(r31)
|
asm.push("807F0020"); // lwz r3, 0x20(r31)
|
||||||
|
|
||||||
if (asm.length % 2 === 0) {
|
if (asm.length % 2 === 0) {
|
||||||
asm.push("60000000"); // nop
|
asm.push("60000000"); // nop
|
||||||
}
|
}
|
||||||
asm.push("00000000");
|
asm.push("00000000");
|
||||||
|
|
||||||
const geckoLines = asm.length / 2;
|
const geckoLines = asm.length / 2;
|
||||||
let gecko = "C2" + game.injectAddr + " " + ("0000000" + geckoLines.toString(16).toUpperCase()).slice(-8) + "\r\n";
|
let gecko = "C2" + game.injectAddr + " " + ("0000000" + geckoLines.toString(16).toUpperCase()).slice(-8) + "\r\n";
|
||||||
for (let i = 0; i < geckoLines; ++i) {
|
for (let i = 0; i < geckoLines; ++i) {
|
||||||
gecko += asm[2 * i] + " " + asm[2 * i + 1] + "\r\n";
|
gecko += asm[2 * i] + " " + asm[2 * i + 1] + "\r\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
let codes = gecko +
|
let codes = gecko +
|
||||||
game.notext[document.getElementById("route_notext").value] +
|
game.notext[document.getElementById("route_notext").value] +
|
||||||
game.nofmvs[document.getElementById("route_nofmvs").value];
|
game.nofmvs[document.getElementById("route_nofmvs").value];
|
||||||
|
|
||||||
return codes.replace(/[^0-9A-F]/g, '');
|
return codes.replace(/[^0-9A-F]/g, '');
|
||||||
}
|
}
|
||||||
|
|
582
index.html
582
index.html
|
@ -1,291 +1,291 @@
|
||||||
<!DOCTYPE HTML>
|
<!DOCTYPE HTML>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
<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="description" content="Generates cheatfiles for Super Mario Sunshine speedrun practice.">
|
||||||
<meta name="viewport" content="width=480px, initial-scale=1.0">
|
<meta name="viewport" content="width=480px, initial-scale=1.0">
|
||||||
<link rel="stylesheet" href="style/style.css">
|
<link rel="stylesheet" href="style/style.css">
|
||||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
||||||
<title>Super Mario Sunshine Practice Code Generator</title>
|
<title>Super Mario Sunshine Practice Code Generator</title>
|
||||||
</head>
|
</head>
|
||||||
<body onload="updateChangelog()">
|
<body onload="updateChangelog()">
|
||||||
<div id="mainContainer">
|
<div id="mainContainer">
|
||||||
<input type="checkbox" id="usefastcode" style="display:none" autocomplete="off" />
|
<input type="checkbox" id="usefastcode" style="display:none" autocomplete="off" />
|
||||||
<div id="left" class="section">
|
<div id="left" class="section">
|
||||||
<div id="generalsettings">
|
<div id="generalsettings">
|
||||||
<table><tbody>
|
<table><tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td nowrap>
|
<td nowrap>
|
||||||
Game Version:
|
Game Version:
|
||||||
</td>
|
</td>
|
||||||
<td id="ph_gameversion" style="width:100%">
|
<td id="ph_gameversion" style="width:100%">
|
||||||
<select id="gameversion" onchange="updateCodelist()" autocomplete="off" style="visibility:hidden">
|
<select id="gameversion" onchange="updateCodelist()" autocomplete="off" style="visibility:hidden">
|
||||||
<option selected disabled>Choose Version</option>
|
<option selected disabled>Choose Version</option>
|
||||||
<option value="GMSE01">GMSE01 (NTSC-U)</option>
|
<option value="GMSE01">GMSE01 (NTSC-U)</option>
|
||||||
<option value="GMSP01">GMSP01 (PAL)</option>
|
<option value="GMSP01">GMSP01 (PAL)</option>
|
||||||
<option value="GMSJ01">GMSJ01 (NTSC-J 1.0)</option>
|
<option value="GMSJ01">GMSJ01 (NTSC-J 1.0)</option>
|
||||||
<option value="GMSJ0A">GMSJ01 (NTSC-J 1.1/A)</option>
|
<option value="GMSJ0A">GMSJ01 (NTSC-J 1.1/A)</option>
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="initialhidden">
|
<tr class="initialhidden">
|
||||||
<td nowrap>
|
<td nowrap>
|
||||||
Stage Loader:
|
Stage Loader:
|
||||||
</td>
|
</td>
|
||||||
<td style="width:100%">
|
<td style="width:100%">
|
||||||
<select id="stageloader" onmouseover="updateUIDescription(this)" onchange="document.getElementById('usefastcode').checked = (this.value === 'yes');" style="width:100%" autocomplete="off">
|
<select id="stageloader" onmouseover="updateUIDescription(this)" onchange="document.getElementById('usefastcode').checked = (this.value === 'yes');" style="width:100%" autocomplete="off">
|
||||||
<option value="yes">Yes</option>
|
<option value="yes">Yes</option>
|
||||||
<option selected value="no">No</option>
|
<option selected value="no">No</option>
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="initialhidden">
|
<tr class="initialhidden">
|
||||||
<td nowrap>
|
<td nowrap>
|
||||||
File Format:
|
File Format:
|
||||||
</td>
|
</td>
|
||||||
<td style="width:100%">
|
<td style="width:100%">
|
||||||
<select id="downloadformat" onmouseover="updateUIDescription(this)" style="width:100%">
|
<select id="downloadformat" onmouseover="updateUIDescription(this)" style="width:100%">
|
||||||
<option selected value="gct">GCT</option>
|
<option selected value="gct">GCT</option>
|
||||||
<option value="ini">Dolphin INI</option>
|
<option value="ini">Dolphin INI</option>
|
||||||
<option value="gcm">Cheat Manager TXT</option>
|
<option value="gcm">Cheat Manager TXT</option>
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="initialhidden">
|
<tr class="initialhidden">
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<button onclick="downloadCodes()" id="downloadbutton">Download</button>
|
<button onclick="downloadCodes()" id="downloadbutton">Download</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody></table>
|
</tbody></table>
|
||||||
</div>
|
</div>
|
||||||
<div id="codes" class="framed initialhidden">
|
<div id="codes" class="framed initialhidden">
|
||||||
|
|
||||||
<ul id="checklist"></ul>
|
<ul id="checklist"></ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="center" class="section initialhidden">
|
<div id="center" class="section initialhidden">
|
||||||
<div class="framed">
|
<div class="framed">
|
||||||
<h2>Stage Loader</h2>
|
<h2>Stage Loader</h2>
|
||||||
<div>
|
<div>
|
||||||
<table style="width:100%"><tbody>
|
<table style="width:100%"><tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td nowrap>
|
<td nowrap>
|
||||||
<label for="route_notext">Remove Dialogue:</label>
|
<label for="route_notext">Remove Dialogue:</label>
|
||||||
</td>
|
</td>
|
||||||
<td style="width:100%">
|
<td style="width:100%">
|
||||||
<select id="route_notext" style="width:100%" onmouseover="updateUIDescription(this)">
|
<select id="route_notext" style="width:100%" onmouseover="updateUIDescription(this)">
|
||||||
<option value="yes">Always</option>
|
<option value="yes">Always</option>
|
||||||
<option selected value="pv5">Not in Pianta 5</option>
|
<option selected value="pv5">Not in Pianta 5</option>
|
||||||
<option value="no">Don't include</option>
|
<option value="no">Don't include</option>
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td nowrap>
|
<td nowrap>
|
||||||
<label for="route_nofmvs">Skippable Cutscenes:</label>
|
<label for="route_nofmvs">Skippable Cutscenes:</label>
|
||||||
</td>
|
</td>
|
||||||
<td style="width:100%">
|
<td style="width:100%">
|
||||||
<select id="route_nofmvs" style="width:100%" onmouseover="updateUIDescription(this)">
|
<select id="route_nofmvs" style="width:100%" onmouseover="updateUIDescription(this)">
|
||||||
<option value="yes">Always</option>
|
<option value="yes">Always</option>
|
||||||
<option selected value="pp1">Not in Pinna 1</option>
|
<option selected value="pp1">Not in Pinna 1</option>
|
||||||
<option value="no">Don't include</option>
|
<option value="no">Don't include</option>
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td nowrap>
|
<td nowrap>
|
||||||
<label for="route_order">Level Order:</label>
|
<label for="route_order">Level Order:</label>
|
||||||
</td>
|
</td>
|
||||||
<td style="width:100%">
|
<td style="width:100%">
|
||||||
<select id="route_order" style="width:100%" onmouseover="updateUIDescription(this)">
|
<select id="route_order" style="width:100%" onmouseover="updateUIDescription(this)">
|
||||||
<option selected value="list">As specified</option>
|
<option selected value="list">As specified</option>
|
||||||
<option value="shuffle">Random, no duplicates</option>
|
<option value="shuffle">Random, no duplicates</option>
|
||||||
<option value="random">Fully random</option>
|
<option value="random">Fully random</option>
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td nowrap>
|
<td nowrap>
|
||||||
<label for="route_ending">After the last level:</label>
|
<label for="route_ending">After the last level:</label>
|
||||||
</td>
|
</td>
|
||||||
<td style="width:100%">
|
<td style="width:100%">
|
||||||
<select id="route_ending" style="width:100%" onmouseover="updateUIDescription(this)">
|
<select id="route_ending" style="width:100%" onmouseover="updateUIDescription(this)">
|
||||||
<option selected value="0F00">Return to the title screen</option>
|
<option selected value="0F00">Return to the title screen</option>
|
||||||
<option value="3400">Load Corona Mountain</option>
|
<option value="3400">Load Corona Mountain</option>
|
||||||
<option value="3C00">Load the Bowser fight</option>
|
<option value="3C00">Load the Bowser fight</option>
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody></table>
|
</tbody></table>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<ul id="route_levels">
|
<ul id="route_levels">
|
||||||
<li draggable="false">
|
<li draggable="false">
|
||||||
<div class="route_drag">≡</div>
|
<div class="route_drag">≡</div>
|
||||||
<select>
|
<select>
|
||||||
<option value="0F00" selected disabled>Select a level…</option>
|
<option value="0F00" selected disabled>Select a level…</option>
|
||||||
<optgroup label="Delfino Plaza">
|
<optgroup label="Delfino Plaza">
|
||||||
<option value="1400">Airstrip (red coins)</option>
|
<option value="1400">Airstrip (red coins)</option>
|
||||||
<option value="1500">Slide</option>
|
<option value="1500">Slide</option>
|
||||||
<option value="1600">Pachinko</option>
|
<option value="1600">Pachinko</option>
|
||||||
<option value="1700">Grass pipe</option>
|
<option value="1700">Grass pipe</option>
|
||||||
<option value="1800">Lily Pad Ride</option>
|
<option value="1800">Lily Pad Ride</option>
|
||||||
<option value="1D00">Jail secret</option>
|
<option value="1D00">Jail secret</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
<optgroup label="Bianco Hills">
|
<optgroup label="Bianco Hills">
|
||||||
<option value="0200">Bianco 1</option>
|
<option value="0200">Bianco 1</option>
|
||||||
<option value="0201">Bianco 2</option>
|
<option value="0201">Bianco 2</option>
|
||||||
<option value="0202">Bianco 3</option>
|
<option value="0202">Bianco 3</option>
|
||||||
<option value="0203">Bianco 4</option>
|
<option value="0203">Bianco 4</option>
|
||||||
<option value="0204">Bianco 5</option>
|
<option value="0204">Bianco 5</option>
|
||||||
<option value="0205">Bianco 6</option>
|
<option value="0205">Bianco 6</option>
|
||||||
<option value="0206">Bianco 7</option>
|
<option value="0206">Bianco 7</option>
|
||||||
<option value="0207">Bianco 8</option>
|
<option value="0207">Bianco 8</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
<optgroup label="Ricco Harbor">
|
<optgroup label="Ricco Harbor">
|
||||||
<option value="0300">Ricco 1</option>
|
<option value="0300">Ricco 1</option>
|
||||||
<option value="0301">Ricco 2</option>
|
<option value="0301">Ricco 2</option>
|
||||||
<option value="0302">Ricco 3</option>
|
<option value="0302">Ricco 3</option>
|
||||||
<option value="0303">Ricco 4</option>
|
<option value="0303">Ricco 4</option>
|
||||||
<option value="0304">Ricco 5</option>
|
<option value="0304">Ricco 5</option>
|
||||||
<option value="0305">Ricco 6</option>
|
<option value="0305">Ricco 6</option>
|
||||||
<option value="0306">Ricco 7</option>
|
<option value="0306">Ricco 7</option>
|
||||||
<option value="0307">Ricco 8</option>
|
<option value="0307">Ricco 8</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
<optgroup label="Gelato Beach">
|
<optgroup label="Gelato Beach">
|
||||||
<option value="0400">Gelato 1</option>
|
<option value="0400">Gelato 1</option>
|
||||||
<option value="0401">Gelato 2</option>
|
<option value="0401">Gelato 2</option>
|
||||||
<option value="0402">Gelato 3</option>
|
<option value="0402">Gelato 3</option>
|
||||||
<option value="0403">Gelato 4</option>
|
<option value="0403">Gelato 4</option>
|
||||||
<option value="0404">Gelato 5</option>
|
<option value="0404">Gelato 5</option>
|
||||||
<option value="0405">Gelato 6</option>
|
<option value="0405">Gelato 6</option>
|
||||||
<option value="0406">Gelato 7</option>
|
<option value="0406">Gelato 7</option>
|
||||||
<option value="0407">Gelato 8</option>
|
<option value="0407">Gelato 8</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
<optgroup label="Pinna Park">
|
<optgroup label="Pinna Park">
|
||||||
<option value="0500">Pinna 1</option>
|
<option value="0500">Pinna 1</option>
|
||||||
<option value="0501">Pinna 2</option>
|
<option value="0501">Pinna 2</option>
|
||||||
<option value="0502">Pinna 3</option>
|
<option value="0502">Pinna 3</option>
|
||||||
<option value="0503">Pinna 4</option>
|
<option value="0503">Pinna 4</option>
|
||||||
<option value="0504">Pinna 5</option>
|
<option value="0504">Pinna 5</option>
|
||||||
<option value="0505">Pinna 6</option>
|
<option value="0505">Pinna 6</option>
|
||||||
<option value="0506">Pinna 7</option>
|
<option value="0506">Pinna 7</option>
|
||||||
<option value="0507">Pinna 8</option>
|
<option value="0507">Pinna 8</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
<optgroup label="Sirena Beach">
|
<optgroup label="Sirena Beach">
|
||||||
<option value="0600">Sirena 1</option>
|
<option value="0600">Sirena 1</option>
|
||||||
<option value="0601">Sirena 2</option>
|
<option value="0601">Sirena 2</option>
|
||||||
<option value="0602">Sirena 3</option>
|
<option value="0602">Sirena 3</option>
|
||||||
<option value="0603">Sirena 4</option>
|
<option value="0603">Sirena 4</option>
|
||||||
<option value="0604">Sirena 5</option>
|
<option value="0604">Sirena 5</option>
|
||||||
<option value="0605">Sirena 6</option>
|
<option value="0605">Sirena 6</option>
|
||||||
<option value="0606">Sirena 7</option>
|
<option value="0606">Sirena 7</option>
|
||||||
<option value="0607">Sirena 8</option>
|
<option value="0607">Sirena 8</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
<optgroup label="Noki Bay">
|
<optgroup label="Noki Bay">
|
||||||
<option value="0900">Noki 1</option>
|
<option value="0900">Noki 1</option>
|
||||||
<option value="0901">Noki 2</option>
|
<option value="0901">Noki 2</option>
|
||||||
<option value="0902">Noki 3</option>
|
<option value="0902">Noki 3</option>
|
||||||
<option value="0903">Noki 4</option>
|
<option value="0903">Noki 4</option>
|
||||||
<option value="0904">Noki 5</option>
|
<option value="0904">Noki 5</option>
|
||||||
<option value="0905">Noki 6</option>
|
<option value="0905">Noki 6</option>
|
||||||
<option value="0906">Noki 7</option>
|
<option value="0906">Noki 7</option>
|
||||||
<option value="0907">Noki 8</option>
|
<option value="0907">Noki 8</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
<optgroup label="Pianta Village">
|
<optgroup label="Pianta Village">
|
||||||
<option value="0800">Pianta 1</option>
|
<option value="0800">Pianta 1</option>
|
||||||
<option value="0801">Pianta 2</option>
|
<option value="0801">Pianta 2</option>
|
||||||
<option value="0802">Pianta 3</option>
|
<option value="0802">Pianta 3</option>
|
||||||
<option value="0803">Pianta 4</option>
|
<option value="0803">Pianta 4</option>
|
||||||
<option value="0804">Pianta 5</option>
|
<option value="0804">Pianta 5</option>
|
||||||
<option value="0805">Pianta 6</option>
|
<option value="0805">Pianta 6</option>
|
||||||
<option value="0806">Pianta 7</option>
|
<option value="0806">Pianta 7</option>
|
||||||
<option value="0807">Pianta 8</option>
|
<option value="0807">Pianta 8</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
<optgroup label="Secret areas">
|
<optgroup label="Secret areas">
|
||||||
<option value="2F00">Bianco 3 secret</option>
|
<option value="2F00">Bianco 3 secret</option>
|
||||||
<option value="2E00">Bianco 6 secret</option>
|
<option value="2E00">Bianco 6 secret</option>
|
||||||
<option value="3000">Ricco 4 secret</option>
|
<option value="3000">Ricco 4 secret</option>
|
||||||
<option value="2000">Gelato 1 secret</option>
|
<option value="2000">Gelato 1 secret</option>
|
||||||
<option value="3200">Pinna 2 secret</option>
|
<option value="3200">Pinna 2 secret</option>
|
||||||
<option value="2900">Pinna 6 secret</option>
|
<option value="2900">Pinna 6 secret</option>
|
||||||
<option value="3300">Sirena 2 secret</option>
|
<option value="3300">Sirena 2 secret</option>
|
||||||
<option value="2800">Sirena 4 secret</option>
|
<option value="2800">Sirena 4 secret</option>
|
||||||
<option value="1F00">Noki 6 secret</option>
|
<option value="1F00">Noki 6 secret</option>
|
||||||
<option value="2A00">Pianta 5 secret</option>
|
<option value="2A00">Pianta 5 secret</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
<optgroup label="Sublevels">
|
<optgroup label="Sublevels">
|
||||||
<option value="3700">Petey Piranha fight (Bianco 2)</option>
|
<option value="3700">Petey Piranha fight (Bianco 2)</option>
|
||||||
<option value="3B00">Gooper Blooper fight (Ricco 1)</option>
|
<option value="3B00">Gooper Blooper fight (Ricco 1)</option>
|
||||||
<option value="1E00">Race course (Ricco 2)</option>
|
<option value="1E00">Race course (Ricco 2)</option>
|
||||||
<option value="2100">Sand bird (Gelato 4)</option>
|
<option value="2100">Sand bird (Gelato 4)</option>
|
||||||
<option value="3A01">Mecha-Bowser fight (Pinna 1)</option>
|
<option value="3A01">Mecha-Bowser fight (Pinna 1)</option>
|
||||||
<option value="3A00">Rollercoaster (Pinna 8)</option>
|
<option value="3A00">Rollercoaster (Pinna 8)</option>
|
||||||
<option value="0E00">Casino Delfino (Sirena 4)</option>
|
<option value="0E00">Casino Delfino (Sirena 4)</option>
|
||||||
<option value="0E01">Casino Delfino (Sirena 5)</option>
|
<option value="0E01">Casino Delfino (Sirena 5)</option>
|
||||||
<option value="3800">King Boo fight (Sirena 5)</option>
|
<option value="3800">King Boo fight (Sirena 5)</option>
|
||||||
<option value="2C00">Bottle (Noki 3)</option>
|
<option value="2C00">Bottle (Noki 3)</option>
|
||||||
<option value="3900">Deep Sea of Mare (Noki 4)</option>
|
<option value="3900">Deep Sea of Mare (Noki 4)</option>
|
||||||
<option value="1000">Deep Sea of Mare (Noki 8)</option>
|
<option value="1000">Deep Sea of Mare (Noki 8)</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
</select>
|
</select>
|
||||||
<button type="button" class="route_remove">×</button>
|
<button type="button" class="route_remove">×</button>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div style="text-align:center">
|
<div style="text-align:center">
|
||||||
<button id="route_clear" type="button">Clear list</button>
|
<button id="route_clear" type="button">Clear list</button>
|
||||||
<select id="route_presets">
|
<select id="route_presets">
|
||||||
<option value="" selected>Load a preset…</option>
|
<option value="" selected>Load a preset…</option>
|
||||||
<option value="020002020203020404000406080008010802080308040805080605000501050205030502050603000301030203030304030503060205020606000601060206030604060506060900090109020903090409050906;3400">Any% usual route</option>
|
<option value="020002020203020404000406080008010802080308040805080605000501050205030502050603000301030203030304030503060205020606000601060206030604060506060900090109020903090409050906;3400">Any% usual route</option>
|
||||||
<option value="020002020203020404000406080008010802080308040805080605000501050205030502050602050206060006010602060306040605060609000901090209030904090509060300030103020303030403050306;3400">Any% Ricco late</option>
|
<option value="020002020203020404000406080008010802080308040805080605000501050205030502050602050206060006010602060306040605060609000901090209030904090509060300030103020303030403050306;3400">Any% Ricco late</option>
|
||||||
<option value="020002020203020404000401040204030404040504060500050105020503050405050506030003010302030303040305030602050206060006010602060306040605060609000901090209030904090509060800080108020803080408050806;3400">Any% No Major Skips</option>
|
<option value="020002020203020404000401040204030404040504060500050105020503050405050506030003010302030303040305030602050206060006010602060306040605060609000901090209030904090509060800080108020803080408050806;3400">Any% No Major Skips</option>
|
||||||
<option value="02000201020202030800080108020803080408050806080705000501050205030504050505060507030003010302030303040305030603070204020502060207060006010602060306040605060606070900090109020903090409050906090704000401040204030404040304050406;3400">All Episodes</option>
|
<option value="02000201020202030800080108020803080408050806080705000501050205030504050505060507030003010302030303040305030603070204020502060207060006010602060306040605060606070900090109020903090409050906090704000401040204030404040304050406;3400">All Episodes</option>
|
||||||
<option value="02000201020202020800080108020803080408040804080508060807080705000501050105020503050405040505050505060507030003010301030203030303030403050305030603070203020402050205020502060207060006010601060206030603060306040605060606070900090109010901090209030904090509050906090704000400040004010402040304050404040304020406;3400">All Level Shines</option>
|
<option value="02000201020202020800080108020803080408040804080508060807080705000501050105020503050405040505050505060507030003010301030203030303030403050305030603070203020402050205020502060207060006010601060206030603060306040605060606070900090109010901090209030904090509050906090704000400040004010402040304050404040304020406;3400">All Level Shines</option>
|
||||||
<optgroup label="Individual Worlds">
|
<optgroup label="Individual Worlds">
|
||||||
<option value="020002020203020402050206">Bianco Hills</option>
|
<option value="020002020203020402050206">Bianco Hills</option>
|
||||||
<option value="0300030103020303030403050306">Ricco Harbor</option>
|
<option value="0300030103020303030403050306">Ricco Harbor</option>
|
||||||
<option value="0400040104020403040404050406">Gelato Beach</option>
|
<option value="0400040104020403040404050406">Gelato Beach</option>
|
||||||
<option value="050005010502050305020506">Pinna Park</option>
|
<option value="050005010502050305020506">Pinna Park</option>
|
||||||
<option value="0600060106020603060406050606">Sirena Beach</option>
|
<option value="0600060106020603060406050606">Sirena Beach</option>
|
||||||
<option value="0900090109020903090409050906">Noki Bay</option>
|
<option value="0900090109020903090409050906">Noki Bay</option>
|
||||||
<option value="0800080108020803080408050806">Pianta Village</option>
|
<option value="0800080108020803080408050806">Pianta Village</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
<optgroup label="All Shines IWs">
|
<optgroup label="All Shines IWs">
|
||||||
<option value="02000201020202020203020402050205020502060207">Bianco Hills</option>
|
<option value="02000201020202020203020402050205020502060207">Bianco Hills</option>
|
||||||
<option value="03000301030103020303030303040305030503060307">Ricco Harbor</option>
|
<option value="03000301030103020303030303040305030503060307">Ricco Harbor</option>
|
||||||
<option value="04000406040404060401040504000400040204020403">Gelato Beach</option>
|
<option value="04000406040404060401040504000400040204020403">Gelato Beach</option>
|
||||||
<option value="05000501050105020503050405040505050505060507">Pinna Park</option>
|
<option value="05000501050105020503050405040505050505060507">Pinna Park</option>
|
||||||
<option value="06000601060106020603060306030604060506060607">Sirena Beach</option>
|
<option value="06000601060106020603060306030604060506060607">Sirena Beach</option>
|
||||||
<option value="09000901090109020903090409050905090609060907">Noki Bay</option>
|
<option value="09000901090109020903090409050905090609060907">Noki Bay</option>
|
||||||
<option value="08000801080208030804080408040805080608070807">Pianta Village</option>
|
<option value="08000801080208030804080408040805080608070807">Pianta Village</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="right" class="section">
|
<div id="right" class="section">
|
||||||
<div id="descriptionbox" class="framed">
|
<div id="descriptionbox" class="framed">
|
||||||
<h1>Super Mario Sunshine Practice Code Generator v2</h1>
|
<h1>Super Mario Sunshine Practice Code Generator v2</h1>
|
||||||
<p style="margin:0"><i id="lastupdate"></i></p>
|
<p style="margin-top:0"><i id="lastupdate"></i></p>
|
||||||
<br />
|
<br />
|
||||||
<p>This is a cheatfile generator for Super Mario Sunshine speedrun practice. A guide on how to use the generator and practice codes on your Wii can be found here: <a target="_blank" href="guide.html">Guide</a>. Visit the <a target="_blank" href="guide.html#3">troubleshooting section</a> if you encounter any issues.</p>
|
<p>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 />
|
<br />
|
||||||
<h4>Changelog:</h4>
|
<h4>Changelog:</h4>
|
||||||
<div id="changelog"></div>
|
<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> & <a target="_blank" href="https://twitter.com/srlmilk">Milk</a></i></p>
|
<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> & <a target="_blank" href="https://twitter.com/srlmilk">Milk</a></i></p>
|
||||||
<hr />
|
<hr />
|
||||||
<div id="smscommunity">
|
<div id="smscommunity">
|
||||||
<a target="_blank" href="https://discord.gg/0SoktBcRDw8B1NJB" title="Sunshine Community Discord"><img src="img/discord_bubble.png" alt="Sunshine Community Discord" /></a>
|
<a target="_blank" href="https://discord.gg/0SoktBcRDw8B1NJB" title="Sunshine Community Discord"><img src="img/discord_bubble.png" alt="Sunshine Community Discord" /></a>
|
||||||
<a target="_blank" href="https://speedrun.com/sms" title="Sunshine Leaderboards"><img src="img/src_bubble.png" alt="Sunshine Leaderboards" /></a>
|
<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>
|
<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://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>
|
<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>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script language="javascript" src="gctGenerator.js"></script>
|
<script language="javascript" src="gctGenerator.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
806
style/style.css
806
style/style.css
|
@ -1,403 +1,403 @@
|
||||||
html {
|
html {
|
||||||
background-color:#f0f1f0;
|
background-color:#f0f1f0;
|
||||||
color:#000;
|
color:#000;
|
||||||
font-family:Calibri;
|
font-family:Calibri;
|
||||||
text-align:left
|
text-align:left
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
display:inline-block;
|
display:inline-block;
|
||||||
margin:10px 0px;
|
margin:10px 0px;
|
||||||
min-height:450px;
|
min-height:450px;
|
||||||
font-size:1em;
|
font-size:1em;
|
||||||
text-align:left
|
text-align:left
|
||||||
}
|
}
|
||||||
|
|
||||||
h1,h2,h3,h4{
|
h1,h2,h3,h4{
|
||||||
margin:5px 0px
|
margin:5px 0px
|
||||||
}
|
}
|
||||||
|
|
||||||
h2,h3 {
|
h2,h3 {
|
||||||
text-align:center
|
text-align:center
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
font-size:1.3em
|
font-size:1.3em
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
font-size:1.1em
|
font-size:1.1em
|
||||||
}
|
}
|
||||||
|
|
||||||
h3,h4 {
|
h3,h4 {
|
||||||
margin-top:15px;
|
margin-top:15px;
|
||||||
font-size:1em
|
font-size:1em
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
margin:10px 0px 0px 0px
|
margin:10px 5px 0px 2px
|
||||||
}
|
}
|
||||||
|
|
||||||
img {
|
img {
|
||||||
border-radius:4px;
|
border-radius:4px;
|
||||||
max-width:100%
|
max-width:100%
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color:#ff0029;
|
color:#ff0029;
|
||||||
text-decoration:none
|
text-decoration:none
|
||||||
}
|
}
|
||||||
|
|
||||||
a:hover {
|
a:hover {
|
||||||
color:#1185fd
|
color:#1185fd
|
||||||
}
|
}
|
||||||
|
|
||||||
hr {
|
hr {
|
||||||
border-color:#f3f3f3
|
border-color:#f3f3f3
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=checkbox] {
|
input[type=checkbox] {
|
||||||
vertical-align:middle;
|
vertical-align:middle;
|
||||||
width:15px;
|
width:15px;
|
||||||
height:15px;
|
height:15px;
|
||||||
margin:0;
|
margin:0;
|
||||||
-webkit-appearance: checkbox;
|
-webkit-appearance: checkbox;
|
||||||
box-sizing: border-box
|
box-sizing: border-box
|
||||||
}
|
}
|
||||||
|
|
||||||
tr td:first-child {
|
tr td:first-child {
|
||||||
padding-right:5px
|
padding-right:5px
|
||||||
}
|
}
|
||||||
|
|
||||||
td {
|
td {
|
||||||
vertical-align:middle
|
vertical-align:middle
|
||||||
}
|
}
|
||||||
|
|
||||||
#mainContainer {
|
#mainContainer {
|
||||||
width:100vw;
|
width:100vw;
|
||||||
text-align:center
|
text-align:center
|
||||||
}
|
}
|
||||||
|
|
||||||
.initialhidden {
|
.initialhidden {
|
||||||
visibility:hidden;
|
visibility:hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.section {
|
.section {
|
||||||
display:inline-block;
|
display:inline-block;
|
||||||
vertical-align:top;
|
vertical-align:top;
|
||||||
margin:20px 8px;
|
margin:20px 8px;
|
||||||
text-align:left
|
text-align:left
|
||||||
}
|
}
|
||||||
|
|
||||||
.framed {
|
.framed {
|
||||||
padding:12px;
|
padding:12px;
|
||||||
text-align:justify;
|
text-align:justify;
|
||||||
border-style:solid;
|
border-style:solid;
|
||||||
border-color:#000;
|
border-color:#000;
|
||||||
border-width:1px;
|
border-width:1px;
|
||||||
border-radius:0px
|
border-radius:0px
|
||||||
}
|
}
|
||||||
|
|
||||||
.section .framed {
|
.section .framed {
|
||||||
margin-top:16px
|
margin-top:16px
|
||||||
}
|
}
|
||||||
|
|
||||||
.section .framed:first-of-type {
|
.section .framed:first-of-type {
|
||||||
margin-top:0px
|
margin-top:0px
|
||||||
}
|
}
|
||||||
|
|
||||||
#gameversion {
|
#gameversion {
|
||||||
width:100%;
|
width:100%;
|
||||||
margin-top:0
|
margin-top:0
|
||||||
}
|
}
|
||||||
|
|
||||||
#downloadbutton {
|
#downloadbutton {
|
||||||
width:100%;
|
width:100%;
|
||||||
margin-top:2px
|
margin-top:2px
|
||||||
}
|
}
|
||||||
|
|
||||||
#generalsettings table {
|
#generalsettings table {
|
||||||
width:100%
|
width:100%
|
||||||
}
|
}
|
||||||
|
|
||||||
#home {
|
#home {
|
||||||
display:inline-block;
|
display:inline-block;
|
||||||
min-width:400px;
|
min-width:400px;
|
||||||
width:50vw;
|
width:50vw;
|
||||||
margin:10px 0px;
|
margin:10px 0px;
|
||||||
padding:4px;
|
padding:4px;
|
||||||
text-align:justify
|
text-align:justify
|
||||||
}
|
}
|
||||||
|
|
||||||
#smscommunity {
|
#smscommunity {
|
||||||
display:block;
|
display:block;
|
||||||
text-align:center;
|
text-align:center;
|
||||||
margin:18px 0px 7px 0px
|
margin:18px 0px 7px 0px
|
||||||
}
|
}
|
||||||
|
|
||||||
#smscommunity img {
|
#smscommunity img {
|
||||||
margin:0px 3px;
|
margin:0px 3px;
|
||||||
vertical-align:middle
|
vertical-align:middle
|
||||||
}
|
}
|
||||||
|
|
||||||
#left {
|
#left {
|
||||||
width:30vw;
|
width:30vw;
|
||||||
min-width:300px;
|
min-width:300px;
|
||||||
max-width:400px
|
max-width:400px
|
||||||
}
|
}
|
||||||
|
|
||||||
#center {
|
#center {
|
||||||
display:none
|
display:none
|
||||||
}
|
}
|
||||||
|
|
||||||
#right {
|
#right {
|
||||||
width:50vw;
|
width:50vw;
|
||||||
min-width:300px;
|
min-width:300px;
|
||||||
max-width:800px
|
max-width:800px
|
||||||
}
|
}
|
||||||
|
|
||||||
#usefastcode:checked ~ #center {
|
#usefastcode:checked ~ #center {
|
||||||
display:inline-block;
|
display:inline-block;
|
||||||
width:20vw;
|
width:20vw;
|
||||||
min-width:300px;
|
min-width:300px;
|
||||||
max-width:400px
|
max-width:400px
|
||||||
}
|
}
|
||||||
|
|
||||||
#usefastcode:checked ~ #left {
|
#usefastcode:checked ~ #left {
|
||||||
width:20vw
|
width:20vw
|
||||||
}
|
}
|
||||||
|
|
||||||
#usefastcode:checked ~ #right {
|
#usefastcode:checked ~ #right {
|
||||||
width:35vw
|
width:35vw
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width:1100px) {
|
@media screen and (max-width:1100px) {
|
||||||
|
|
||||||
#usefastcode:checked ~ #left, #usefastcode:checked ~ #center{
|
#usefastcode:checked ~ #left, #usefastcode:checked ~ #center{
|
||||||
min-width:45vw;
|
min-width:45vw;
|
||||||
max-width:45vw
|
max-width:45vw
|
||||||
}
|
}
|
||||||
|
|
||||||
#usefastcode:checked ~ #right {
|
#usefastcode:checked ~ #right {
|
||||||
min-width:90vw;
|
min-width:90vw;
|
||||||
min-width:calc(90vw + 24px);
|
min-width:calc(90vw + 24px);
|
||||||
max-width:90vw
|
max-width:90vw
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width:700px) {
|
@media screen and (max-width:700px) {
|
||||||
|
|
||||||
#left,#center,#usefastcode:checked ~ #left, #usefastcode:checked ~ #center{
|
#left,#center,#usefastcode:checked ~ #left, #usefastcode:checked ~ #center{
|
||||||
min-width:400px;
|
min-width:400px;
|
||||||
max-width:90vw;
|
max-width:90vw;
|
||||||
width:90vw
|
width:90vw
|
||||||
}
|
}
|
||||||
|
|
||||||
#right,#usefastcode:checked ~ #right {
|
#right,#usefastcode:checked ~ #right {
|
||||||
display:none
|
display:none
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
button {
|
button {
|
||||||
padding:6px;
|
padding:6px;
|
||||||
margin:auto;
|
margin:auto;
|
||||||
color:#f1f1f1;
|
color:#f1f1f1;
|
||||||
background-color:#ca0707;
|
background-color:#ca0707;
|
||||||
border-style:none;
|
border-style:none;
|
||||||
border-radius:4px;
|
border-radius:4px;
|
||||||
cursor:pointer;
|
cursor:pointer;
|
||||||
outline:none
|
outline:none
|
||||||
}
|
}
|
||||||
|
|
||||||
button:hover {
|
button:hover {
|
||||||
background-color:#ff5151;
|
background-color:#ff5151;
|
||||||
}
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
margin:2px 0px;
|
margin:2px 0px;
|
||||||
background-color:#ca0707;
|
background-color:#ca0707;
|
||||||
padding:5px;
|
padding:5px;
|
||||||
color:#fff;
|
color:#fff;
|
||||||
width:200px;
|
width:200px;
|
||||||
border-style:none;
|
border-style:none;
|
||||||
border-radius:4px;
|
border-radius:4px;
|
||||||
-webkit-user-select:none;
|
-webkit-user-select:none;
|
||||||
-moz-user-select:none;
|
-moz-user-select:none;
|
||||||
-ms-user-select:none;
|
-ms-user-select:none;
|
||||||
user-select:none;
|
user-select:none;
|
||||||
outline:none
|
outline:none
|
||||||
}
|
}
|
||||||
|
|
||||||
select:disabled {
|
select:disabled {
|
||||||
background:#e2e2e2;
|
background:#e2e2e2;
|
||||||
color: grey
|
color: grey
|
||||||
}
|
}
|
||||||
|
|
||||||
optgroup {
|
optgroup {
|
||||||
background:#ff5151
|
background:#ff5151
|
||||||
}
|
}
|
||||||
|
|
||||||
option {
|
option {
|
||||||
background:#ca0707
|
background:#ca0707
|
||||||
}
|
}
|
||||||
|
|
||||||
label {
|
label {
|
||||||
-webkit-user-select:none;
|
-webkit-user-select:none;
|
||||||
-moz-user-select:none;
|
-moz-user-select:none;
|
||||||
-ms-user-select:none;
|
-ms-user-select:none;
|
||||||
user-select:none
|
user-select:none
|
||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
margin:0;
|
margin:0;
|
||||||
padding:0;
|
padding:0;
|
||||||
width:100%;
|
width:100%;
|
||||||
list-style-type:none
|
list-style-type:none
|
||||||
}
|
}
|
||||||
|
|
||||||
ul li {
|
ul li {
|
||||||
margin-top:2px;
|
margin-top:2px;
|
||||||
cursor:pointer;
|
cursor:pointer;
|
||||||
position:relative;
|
position:relative;
|
||||||
padding:4px;
|
padding:4px;
|
||||||
color:#262626;
|
color:#262626;
|
||||||
text-align:left;
|
text-align:left;
|
||||||
transition:.1s;
|
transition:.1s;
|
||||||
-webkit-user-select:none;
|
-webkit-user-select:none;
|
||||||
-moz-user-select:none;
|
-moz-user-select:none;
|
||||||
-ms-user-select:none;
|
-ms-user-select:none;
|
||||||
user-select:none;
|
user-select:none;
|
||||||
outline:none
|
outline:none
|
||||||
}
|
}
|
||||||
|
|
||||||
ul li:nth-child(odd) {
|
ul li:nth-child(odd) {
|
||||||
background:#e2e2e2
|
background:#e2e2e2
|
||||||
}
|
}
|
||||||
|
|
||||||
ul li:hover {
|
ul li:hover {
|
||||||
background:#ca0707;
|
background:#ca0707;
|
||||||
color:#fff;
|
color:#fff;
|
||||||
border-color:#000
|
border-color:#000
|
||||||
}
|
}
|
||||||
|
|
||||||
ul li.checked:hover {
|
ul li.checked:hover {
|
||||||
background:#ca0707;
|
background:#ca0707;
|
||||||
color:#fff
|
color:#fff
|
||||||
}
|
}
|
||||||
|
|
||||||
ul li.checked {
|
ul li.checked {
|
||||||
background:#434343;
|
background:#434343;
|
||||||
color:#fff;
|
color:#fff;
|
||||||
border-color:#262626
|
border-color:#262626
|
||||||
}
|
}
|
||||||
|
|
||||||
[draggable] {
|
[draggable] {
|
||||||
-moz-user-select: none;
|
-moz-user-select: none;
|
||||||
-khtml-user-select: none;
|
-khtml-user-select: none;
|
||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
-khtml-user-drag: element;
|
-khtml-user-drag: element;
|
||||||
-webkit-user-drag: element
|
-webkit-user-drag: element
|
||||||
}
|
}
|
||||||
|
|
||||||
#route_levels {
|
#route_levels {
|
||||||
margin:10px 0px;
|
margin:10px 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#route_levels li {
|
#route_levels li {
|
||||||
padding:0px 10px;
|
padding:0px 10px;
|
||||||
margin:0
|
margin:0
|
||||||
}
|
}
|
||||||
|
|
||||||
#route_levels li.dragover {
|
#route_levels li.dragover {
|
||||||
padding-bottom:20px;
|
padding-bottom:20px;
|
||||||
background-color:white
|
background-color:white
|
||||||
}
|
}
|
||||||
|
|
||||||
#route_levels li select {
|
#route_levels li select {
|
||||||
margin:0;
|
margin:0;
|
||||||
width:calc(100% - 40px);
|
width:calc(100% - 40px);
|
||||||
margin:0px 6px;
|
margin:0px 6px;
|
||||||
color:black;
|
color:black;
|
||||||
background-color:inherit
|
background-color:inherit
|
||||||
}
|
}
|
||||||
|
|
||||||
#route_levels li select:hover {
|
#route_levels li select:hover {
|
||||||
color:white
|
color:white
|
||||||
}
|
}
|
||||||
|
|
||||||
#route_levels li:hover select {
|
#route_levels li:hover select {
|
||||||
color:white
|
color:white
|
||||||
}
|
}
|
||||||
|
|
||||||
#route_levels li:last-child {
|
#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 {
|
#route_levels li:last-child .route_remove, #route_levels li:last-child .route_drag {
|
||||||
display:none
|
display:none
|
||||||
}
|
}
|
||||||
|
|
||||||
#checklist li {
|
#checklist li {
|
||||||
padding-left: 26px;
|
padding-left: 26px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#checklist li::before {
|
#checklist li::before {
|
||||||
content:'';
|
content:'';
|
||||||
position:absolute;
|
position:absolute;
|
||||||
border-color:#a6a6a6;
|
border-color:#a6a6a6;
|
||||||
border-style:solid;
|
border-style:solid;
|
||||||
border-width:2px;
|
border-width:2px;
|
||||||
border-radius:50%;
|
border-radius:50%;
|
||||||
-webkit-transform: translateY(20%);
|
-webkit-transform: translateY(20%);
|
||||||
-moz-transform: translateY(20%);
|
-moz-transform: translateY(20%);
|
||||||
-ms-transform: translateY(20%);
|
-ms-transform: translateY(20%);
|
||||||
-o-transform: translateY(20%);
|
-o-transform: translateY(20%);
|
||||||
transform: translateY(20%);
|
transform: translateY(20%);
|
||||||
transform: translateY(20%);
|
transform: translateY(20%);
|
||||||
left:6px;
|
left:6px;
|
||||||
height:10px;
|
height:10px;
|
||||||
width:10px
|
width:10px
|
||||||
}
|
}
|
||||||
|
|
||||||
#checklist li:hover::before {
|
#checklist li:hover::before {
|
||||||
border-color:#fff;
|
border-color:#fff;
|
||||||
background-color:#ffc0cb
|
background-color:#ffc0cb
|
||||||
}
|
}
|
||||||
|
|
||||||
#checklist li.checked::before {
|
#checklist li.checked::before {
|
||||||
border-color:#fff;
|
border-color:#fff;
|
||||||
background-color:#d85e55
|
background-color:#d85e55
|
||||||
}
|
}
|
||||||
|
|
||||||
.dragelement {
|
.dragelement {
|
||||||
opacity:0.3
|
opacity:0.3
|
||||||
}
|
}
|
||||||
|
|
||||||
.route_remove {
|
.route_remove {
|
||||||
background:inherit;
|
background:inherit;
|
||||||
color:red;
|
color:red;
|
||||||
font-weight:bold;
|
font-weight:bold;
|
||||||
border-radius:0;
|
border-radius:0;
|
||||||
vertical-align:middle;
|
vertical-align:middle;
|
||||||
padding:0
|
padding:0
|
||||||
}
|
}
|
||||||
|
|
||||||
.route_remove:hover {
|
.route_remove:hover {
|
||||||
background:inherit;
|
background:inherit;
|
||||||
color:white
|
color:white
|
||||||
}
|
}
|
||||||
|
|
||||||
.route_drag {
|
.route_drag {
|
||||||
display:inline;
|
display:inline;
|
||||||
background-color:inherit;
|
background-color:inherit;
|
||||||
color:#aaa;
|
color:#aaa;
|
||||||
border-radius:0;
|
border-radius:0;
|
||||||
vertical-align:middle;
|
vertical-align:middle;
|
||||||
margin:0;
|
margin:0;
|
||||||
padding:0
|
padding:0
|
||||||
}
|
}
|
||||||
|
|
||||||
.route_clear, .route_presets {
|
.route_clear, .route_presets {
|
||||||
display:inline-block
|
display:inline-block
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue