116 lines
No EOL
4.3 KiB
HTML
116 lines
No EOL
4.3 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
|
<link rel="stylesheet" href="style/style.css">
|
|
<title>GCT Generator</title>
|
|
|
|
<script language="javascript">
|
|
function getCodeNamesFromXML(name) {
|
|
var xml = new XMLHttpRequest();
|
|
var file = "codes/" + name + ".xml";
|
|
xml.onload = function() {
|
|
if (this.status == 200 && this.responseXML != null) {
|
|
var xmlData = xml.responseXML;
|
|
xmlData = (new DOMParser()).parseFromString(xml.responseText, "text/xml");
|
|
xmlData = xmlData.getElementsByTagName("code");
|
|
|
|
for (var i = 0; i < xmlData.length; i++) {
|
|
var li = document.createElement("li");
|
|
var desc = xmlData[i].getElementsByTagName("title")[0].textContent;
|
|
desc += " (v" + xmlData[i].getElementsByTagName("version")[0].textContent + ", " + xmlData[i].getElementsByTagName("date")[0].textContent + ")";
|
|
var t = document.createTextNode(desc);
|
|
li.appendChild(t);
|
|
|
|
document.getElementById("checkList").appendChild(li);
|
|
}
|
|
}
|
|
};
|
|
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();
|
|
window.URL.revokeObjectURL(url);
|
|
}
|
|
}
|
|
|
|
function generateGCT() {
|
|
|
|
var xml = new XMLHttpRequest();
|
|
var file = "codes/" + document.getElementById("gameID").value + ".xml";
|
|
xml.onload = function() {
|
|
if (this.status == 200 && this.responseXML != null) {
|
|
var data = "00D0C0DE00D0C0DE";
|
|
var xmlData = xml.responseXML;
|
|
xmlData = (new DOMParser()).parseFromString(xml.responseText, "text/xml");
|
|
xmlData = xmlData.getElementsByTagName("code");
|
|
var codeList = document.getElementById("checkList").getElementsByTagName("li");
|
|
for (var i = 0; i < codeList.length; i++) {
|
|
if (codeList[i].className === "checked")
|
|
data += xmlData[i].getElementsByTagName("source")[0].textContent;
|
|
}
|
|
|
|
data = data.replace(/[\s\n\r\t]+/gm, "");
|
|
data += "FF00000000000000";
|
|
|
|
downloadGCT(data, document.getElementById("gameID").value + ".gct");
|
|
}
|
|
}
|
|
xml.open("GET", file);
|
|
xml.send();
|
|
}
|
|
|
|
function updateCodelist() {
|
|
document.getElementById("checkList").innerHTML = "";
|
|
var gameVersion = document.getElementById("gameID").value;
|
|
getCodeNamesFromXML(gameVersion);
|
|
}
|
|
</script>
|
|
</head>
|
|
|
|
<body>
|
|
<h2>Mario Sunshine Cheatfile Generator</h2>
|
|
<select id="gameID" class="selectionHeader" onchange="updateCodelist()" >
|
|
<option selected disabled hidden>Choose Version</option>
|
|
<option value="GMSE01">GMSE01 (NTSC-U)</option>
|
|
<option value="GMSJ01">GMSJ01 (NTSC-J 1.0)</option>
|
|
<option value="GMSP01">GMSP01 (PAL)</option>
|
|
</select>
|
|
|
|
<ul id="checkList">
|
|
</ul>
|
|
|
|
<button onclick="generateGCT()">Download</button>
|
|
</body>
|
|
|
|
<script language="javascript">
|
|
document.getElementById("checkList").addEventListener("click", function(ev) {
|
|
if (ev.target && ev.target.nodeName == "LI") {
|
|
ev.target.classList.toggle("checked");
|
|
}
|
|
});
|
|
</script>
|
|
|
|
|
|
</html> |