gctGenerator/index.html
2017-10-15 06:09:50 +02:00

143 lines
No EOL
6.4 KiB
HTML

<!DOCTYPE HTML>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="style/style.css">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<title>SMS GCT Generator</title>
<script language="javascript">
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);
}
}
function parseXML(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;
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);
}
}
};
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() {
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 = data.replace(/[\s\n\r\t]+/gm, "");
data += "FF00000000000000";
downloadGCT(data, document.getElementById("gameID").value + ".gct");
} else {
alert("No cheat(s) selected!");
}
}
function updateCodelist() {
document.getElementById("downloadButton").style.visibility = "visible";
document.getElementById("checkList").innerHTML = "";
var gameVersion = document.getElementById("gameID").value;
parseXML(gameVersion);
}
function updateDescription($this) {
document.getElementById("descriptionBox").style.visibility = "visible";
var description = "<p><h2>" + $this.getAttribute("data-codeName") + "</h2></p><p><i>Author: " + $this.getAttribute("data-codeAuthor") + "<br />Version: " + $this.getAttribute("data-codeVersion") + " (" + $this.getAttribute("data-codeDate") + ")</i></p>" + "<p>Description:<br />" + $this.getAttribute("data-codeDesc") + "</p>";
document.getElementById("descriptionBox").innerHTML = description;
}
function hideDescription() {
document.getElementById("descriptionBox").style.visibility = "hidden";
}
</script>
</head>
<body>
<div style="width: 100%; overflow: hidden;">
<h2>Mario Sunshine Cheatfile Generator (<a href="guide.html">Guide</a>) <span style="font-size:12px;font-style:italic;">by <a href="https://twitter.com/psychonauter">Psy</a> & <a href="https://twitter.com/srlMilk">Milk</a></span></h2>
<div style="width: 510px; float: left;">
<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" onmouseleave="hideDescription()">
</ul>
<button id="downloadButton" onclick="generateGCT()" style="visibility:hidden;">Download</button>
</div>
<div style="margin-left: 530px;">
<div id="descriptionBox" class="framed" style="visibility:hidden;">
</div>
</div>
</div>
</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>