Fastcode integration (#5)
* mainpage frontend framework * fastcode interface * timer compatibility fix and fastcode descriptions * cleanup main site * adjust guide stylesheet & prettyprint * cleanup fastcode JSON * keep layout intuitive * Update changelog
This commit is contained in:
parent
ee1588e069
commit
705a4283d0
18 changed files with 1183 additions and 583 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
|||
[Bb]eta/
|
||||
[Tt]rash/
|
||||
*.db
|
|
@ -2,19 +2,19 @@
|
|||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=480px, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="style/guide.css">
|
||||
<style>
|
||||
h2{margin:20px 0px 0px 0px}
|
||||
h3{margin:5px 30px}
|
||||
</style>
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
||||
<title>Changelog</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="guide_content">
|
||||
<div id="guide_content" class="framed">
|
||||
<h1 style="text-align:center;width:100%;">Full Changelog</h1>
|
||||
<h2 id="180124"><a href="#180124">Jan 24, 2048</a> </h2>
|
||||
<h3 id="1801241"><a href="#1801241">Optimized 'Fast Any%'</h3>
|
||||
<h2 id="180202"><a href="#180202">Feb 02, 2018</a></h2>
|
||||
<h3 id="1802021"><a href="#1802021">Site changes</a></h3>
|
||||
<p>Integrated <a href="https://qberoot.github.io/fastcodes/">Noki Dokis Stage Loader</a> into the Generator.</p>
|
||||
<h2 id="180124"><a href="#180124">Jan 24, 2018</a></h2>
|
||||
<h3 id="1801241"><a href="#1801241">Optimized 'Fast Any%'</a></h3>
|
||||
<p>Shortens the code by a few lines</p>
|
||||
<h2 id="180120"><a href="#180120">Jan 20, 2018</a> </h2>
|
||||
<h3 id="1801201"><a href="#1801201">Added 'Remove Save Boxes'</a></h3>
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<updates>
|
||||
<update>
|
||||
<date>Feb 02, 2018</date>
|
||||
<change>Integrated Noki Dokis Stage Loader.</change>
|
||||
</update>
|
||||
<update>
|
||||
<date>Jan 24, 2018</date>
|
||||
<change>Optimized 'Fast Any%'.</change>
|
||||
|
|
|
@ -132,7 +132,7 @@
|
|||
<author>Psychonauter</author>
|
||||
<version>1.6</version>
|
||||
<date>Nov 29, 2017</date>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending when you touch a Shine.<br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending when you touch a Shine.<br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>]]></description>
|
||||
<source>
|
||||
C2031F68 0000000F
|
||||
3CC0817F 60C60100
|
||||
|
@ -233,7 +233,7 @@
|
|||
<title lang="en">Shine Get Timer</title>
|
||||
<author>Psychonauter</author>
|
||||
<version>1.6</version>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (Similiar to the x-cam timer of SM64). <br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (Similiar to the x-cam timer of SM64). <br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>]]></description>
|
||||
<date>Nov 29, 2017</date>
|
||||
<source>
|
||||
C2031F68 0000000F
|
||||
|
@ -345,7 +345,7 @@
|
|||
<author>Psychonauter, Dan Salvato, Noki Doki</author>
|
||||
<version>1.5</version>
|
||||
<date>Nov 06, 2017</date>
|
||||
<description><![CDATA[Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. Codes:<br /><br /><img src="img/levelselect.png" width="500px">]]></description>
|
||||
<description><![CDATA[Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. This code is not compatible with the Fast Any%, Stage Loader or Stage Randomizer code. Codes:<br /><br /><div style="text-align:center"><img src="img/levelselect.png" width="500px"></div>]]></description>
|
||||
<source>
|
||||
C22A6710 0000007F
|
||||
3C60803E 60639710
|
||||
|
@ -481,7 +481,7 @@
|
|||
<title lang="en">Fast Any%</title>
|
||||
<author>Psychonauter, Noki Doki</author>
|
||||
<version>1.3.2</version>
|
||||
<description>Loads stages in any% order, skips all save boxes, replaces all dialog with "!!!" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select or Stage Randomizer code.</description>
|
||||
<description>Loads stages in any% order, skips all save boxes, replaces all dialog with "!!!" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select, Stage Loader or Stage Randomizer code.</description>
|
||||
<date>Jan 24, 2018</date>
|
||||
<source>
|
||||
C22A6710 00000077
|
||||
|
|
|
@ -134,7 +134,7 @@
|
|||
<author>Psychonauter</author>
|
||||
<version>1.6</version>
|
||||
<date>Nov 29, 2017</date>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending when you touch a Shine. <br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending when you touch a Shine. <br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>]]></description>
|
||||
<source>
|
||||
C23617C4 0000000F
|
||||
3CC0817F 60C60100
|
||||
|
@ -235,7 +235,7 @@
|
|||
<title lang="en">Shine Get Timer</title>
|
||||
<author>Psychonauter</author>
|
||||
<version>1.6</version>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (Similiar to the x-cam timer of SM64).<br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (Similiar to the x-cam timer of SM64).<br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>]]></description>
|
||||
<date>Nov 29, 2017</date>
|
||||
<source>
|
||||
C23617C4 0000000F
|
||||
|
@ -347,7 +347,7 @@
|
|||
<author>Psychonauter, Dan Salvato, ParadoxKarl, Noki Doki</author>
|
||||
<version>1.5</version>
|
||||
<date>Nov 06, 2017</date>
|
||||
<description><![CDATA[Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. Codes:<br /><br /><img src="img/levelselect.png" width="500px">]]></description>
|
||||
<description><![CDATA[Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. This code is not compatible with the Fast Any% or Stage Loader code. Codes:<br /><br /><div style="text-align:center"><img src="img/levelselect.png" width="500px"></div>]]></description>
|
||||
<source>
|
||||
C20FA19C 0000007F
|
||||
3C60803E 60636010
|
||||
|
@ -484,7 +484,7 @@
|
|||
<author>Psychonauter, Noki Doki</author>
|
||||
<version>1.3.2</version>
|
||||
<date>Jan 24, 2018</date>
|
||||
<description>Loads stages in any% order, skips all save boxes, replaces all dialog with "!!!" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select code.</description>
|
||||
<description>Loads stages in any% order, skips all save boxes, replaces all dialog with "!!!" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select or Stage Loader code.</description>
|
||||
<source>
|
||||
C20FA19C 00000077
|
||||
3C60817F 60630100
|
||||
|
|
|
@ -134,7 +134,7 @@
|
|||
<author>Psychonauter, Noki Doki</author>
|
||||
<version>1.6</version>
|
||||
<date>Jan 17, 2018</date>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending when you touch a Shine. <br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending when you touch a Shine. <br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>]]></description>
|
||||
<source>
|
||||
C2363E70 0000000F
|
||||
3CC0817F 60C60100
|
||||
|
@ -235,7 +235,7 @@
|
|||
<title lang="en">Shine Get Timer</title>
|
||||
<author>Psychonauter, Noki Doki</author>
|
||||
<version>1.6</version>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (Similiar to the x-cam timer of SM64).<br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (Similiar to the x-cam timer of SM64).<br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>]]></description>
|
||||
<date>Jan 17, 2018</date>
|
||||
<source>
|
||||
C2363E70 0000000F
|
||||
|
@ -347,7 +347,7 @@
|
|||
<author>Psychonauter, Dan Salvato, ParadoxKarl, Noki Doki</author>
|
||||
<version>1.5</version>
|
||||
<date>Jan 17, 2018</date>
|
||||
<description><![CDATA[Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. Codes:<br /><br /><img src="img/levelselect.png" width="500px">]]></description>
|
||||
<description><![CDATA[Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. This code is not compatible with the Fast Any% or Stage Loader code. Codes:<br /><br /><div style="text-align:center"><img src="img/levelselect.png" width="500px"></div>]]></description>
|
||||
<source>
|
||||
C20FA19C 0000007F
|
||||
3C60803D 6063A8F0
|
||||
|
@ -484,7 +484,7 @@
|
|||
<author>Psychonauter, Noki Doki</author>
|
||||
<version>1.3.2</version>
|
||||
<date>Jan 24, 2018</date>
|
||||
<description>Loads stages in any% order, skips all save boxes, replaces all dialog with "!!!" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select code.</description>
|
||||
<description>Loads stages in any% order, skips all save boxes, replaces all dialog with "!!!" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select or Stage Loader code.</description>
|
||||
<source>
|
||||
C22865F4 00000077
|
||||
3C60817F 60630100
|
||||
|
|
|
@ -142,7 +142,7 @@
|
|||
<author>Psychonauter</author>
|
||||
<version>1.6</version>
|
||||
<date>Nov 29, 2017</date>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending when you touch a Shine.<br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending when you touch a Shine.<br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>]]></description>
|
||||
<source>
|
||||
C2032020 0000000F
|
||||
3CC0817F 60C60100
|
||||
|
@ -243,7 +243,7 @@
|
|||
<title lang="en">Shine Get Timer</title>
|
||||
<author>Psychonauter</author>
|
||||
<version>1.6</version>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (Similiar to the x-cam timer of SM64). <br /><br /><b><font color ="#ff8297">Requires the Level Select code or Fast Any% to be active.</font></b>]]></description>
|
||||
<description><![CDATA[Adds the ingame timer to every level, starting on the last black frame after the loading screen and ending as soon as the 'Shine Get' animation starts (Similiar to the x-cam timer of SM64). <br /><br /><b><font color ="#0046da">Requires the Level Select code, Fast Any% or Stage Loader to be active.</font></b>]]></description>
|
||||
<date>Nov 29, 2017</date>
|
||||
<source>
|
||||
C2032020 0000000F
|
||||
|
@ -355,7 +355,7 @@
|
|||
<author>Psychonauter, Dan Salvato, Noki Doki</author>
|
||||
<version>1.5.1</version>
|
||||
<date>Nov 29, 2017</date>
|
||||
<description><![CDATA[Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. Codes:<br /><br /><img src="img/levelselect.png" width="500px">]]></description>
|
||||
<description><![CDATA[Allows warping to other levels when starting a file or when exiting level by holding the combination until the screen turns black. This code is not compatible with the Fast Any% or Stage Loader code. Codes:<br /><br /><div style="text-align:center"><img src="img/levelselect.png" width="500px"></div>]]></description>
|
||||
<source>
|
||||
C229E668 0000007F
|
||||
3C60803E 606310D0
|
||||
|
@ -492,7 +492,7 @@
|
|||
<author>Psychonauter, Noki Doki</author>
|
||||
<version>1.3.2</version>
|
||||
<date>Jan 24, 2018</date>
|
||||
<description>Loads stages in any% order, skips all save boxes, replaces all dialog with "!!!" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select code.</description>
|
||||
<description>Loads stages in any% order, skips all save boxes, replaces all dialog with "!!!" (except for the Pianta 5 secret) and makes all FMVs skippable (except for the Pinna 1 cutscenes). This code is not compatible with the Level Select or Stage Loader code.</description>
|
||||
<source>
|
||||
C229E668 00000077
|
||||
3C60817F 60630100
|
||||
|
|
1
codes/fast/GMSE01.json
Normal file
1
codes/fast/GMSE01.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"injectAddr":"2A6710","fmOffset":"9FA0","notext":{"yes":"048D3A3C 21000000\r\n04153DA0 38000000\r\n0415317C 38005000\r\n","pv5":"048D3A3C 21000000\r\n283E9712 00002A00\r\n04153DA0 801C0004\r\n0415317C A81C0340\r\nE2000001 00000000\r\n2A3E9712 00002A00\r\n04153DA0 38000000\r\n0415317C 38005000\r\nE2000001 00000000\r\n","no":""},"nofmvs":{"yes":"042B5EF4 38600001\r\n042B5E8C 38600001\r\n","pp1":"C22B5EF0 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\nC22B5E88 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\n","no":""}}
|
1
codes/fast/GMSJ01.json
Normal file
1
codes/fast/GMSJ01.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"injectAddr":"0FA19C","fmOffset":"97D0","notext":{"yes":"048D8A7C D6008149\r\n048D8A80 81498149\r\n048D8A84 00000000\r\n04215290 38000000\r\n04214610 38005000\r\n","pv5":"048D8A7C D6008149\r\n048D8A80 81498149\r\n048D8A84 00000000\r\n283E6012 00002A00\r\n04215290 801C0004\r\n04214610 A81C0340\r\nE2000001 00000000\r\n2A3E6012 00002A00\r\n04215290 38000000\r\n04214610 38005000\r\nE2000001 00000000\r\n","no":""},"nofmvs":{"yes":"0410AF5C 38600001\r\n0410AFC0 38600001\r\n","pp1":"C210AF58 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\nC210AFBC 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\n","no":""}}
|
1
codes/fast/GMSJ0A.json
Normal file
1
codes/fast/GMSJ0A.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"injectAddr":"2865F4","fmOffset":"9E60","notext":{"yes":"048CD55C D6008149\r\n048CD560 81498149\r\n048CD564 00000000\r\n041351C4 38000000\r\n04134524 38005000\r\n","pv5":"048CD55C D6008149\r\n048CD560 81498149\r\n048CD564 00000000\r\n283DA8F2 00002A00\r\n041351C4 801C0004\r\n04134524 A81C0340\r\nE2000001 00000000\r\n2A3DA8F2 00002A00\r\n041351C4 38000000\r\n04134524 38005000\r\nE2000001 00000000\r\n","no":""},"nofmvs":{"yes":"04295AB4 38600001\r\n04295B18 38600001\r\n","pp1":"C2295AB0 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\nC2295B14 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\n","no":""}}
|
1
codes/fast/GMSP01.json
Normal file
1
codes/fast/GMSP01.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"injectAddr":"29E668","fmOffset":"9EC8","notext":{"yes":"20570B7C 00000000\r\n0474E87C 21000000\r\n20570B7D 00000001\r\n0474E9F4 21210000\r\n20570B7D 00000002\r\n0474ED38 00000000\r\n20570B7D 00000003\r\n0474EE04 A1000000\r\n20570B7D 00000004\r\n0474EBDC 21210000\r\nE2000001 00000000\r\n04148D20 38000000\r\n04147F98 38005000\r\n","pv5":"283E10D2 00002A00\r\n04148D20 801C0004\r\n04147F98 A81C0340\r\nE2000001 00000000\r\n2A3E10D2 00002A00\r\n04148D20 38000000\r\n04147F98 38005000\r\nE2000001 00000000\r\n20570B7C 00000000\r\n0474E87C 21000000\r\n20570B7D 00000001\r\n0474E9F4 21210000\r\n20570B7D 00000002\r\n0474ED38 00000000\r\n20570B7D 00000003\r\n0474EE04 A1000000\r\n20570B7D 00000004\r\n0474EBDC 21210000\r\nE2000001 00000000\r\n","no":""},"nofmvs":{"yes":"042ADE20 38600001\r\n042ADE88 38600001\r\n","pp1":"C22ADE1C 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\nC22ADE84 00000004\r\n38840391 5480043C\r\n2C000398 4182000C\r\n3C800001 6084039A\r\n60000000 00000000\r\n","no":""}}
|
350
gctGenerator.js
350
gctGenerator.js
|
@ -6,7 +6,7 @@ if (navigator.userAgent.toLowerCase().indexOf("firefox") > -1) {
|
|||
}
|
||||
}
|
||||
|
||||
document.getElementById("checkList").addEventListener("click", function(ev) {
|
||||
document.getElementById("checklist").addEventListener("click", function(ev) {
|
||||
if (ev.target && ev.target.nodeName == "LI") {
|
||||
ev.target.classList.toggle("checked");
|
||||
}
|
||||
|
@ -27,26 +27,20 @@ function parseXML(name) {
|
|||
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("data-codename", btoa(xmlData[i].getElementsByTagName("title")[0].textContent));
|
||||
li.setAttribute("data-codeauthor", btoa(xmlData[i].getElementsByTagName("author")[0].textContent));
|
||||
li.setAttribute("data-codedesc", btoa(xmlData[i].getElementsByTagName("description")[0].textContent));
|
||||
li.setAttribute("data-codeversion", btoa(xmlData[i].getElementsByTagName("version")[0].textContent));
|
||||
li.setAttribute("data-codedate", btoa(xmlData[i].getElementsByTagName("date")[0].textContent));
|
||||
li.setAttribute("data-codesrc", btoa(xmlData[i].getElementsByTagName("source")[0].textContent.replace(/[\s\n\r\t]+/gm, "")));
|
||||
li.setAttribute("onmouseover", "updateDescription(this)");
|
||||
document.getElementById("checkList").appendChild(li);
|
||||
document.getElementById("checklist").appendChild(li);
|
||||
}
|
||||
|
||||
button = document.getElementById("downloadButton");
|
||||
button.style.visibility = "visible";
|
||||
button.disabled = false;
|
||||
button = document.getElementById("dolphinDownloadButton");
|
||||
button.style.visibility = "visible";
|
||||
button.disabled = false;
|
||||
button = document.getElementById("gcmDownloadButton");
|
||||
button.style.visibility = "visible";
|
||||
button.disabled = false;
|
||||
document.getElementById("gameID").disabled = false;
|
||||
var buttons = document.getElementsByTagName("button");
|
||||
for (var i = 0; i < buttons.length; i++) buttons[i].disabled = false;
|
||||
|
||||
document.getElementById("gameversion").disabled = false;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -54,44 +48,58 @@ function parseXML(name) {
|
|||
xml.send();
|
||||
}
|
||||
|
||||
function downloadFile(data, filename) {
|
||||
function updateFastCode(name) {
|
||||
var xml = new XMLHttpRequest();
|
||||
var file = "codes/fast/" + name + ".json";
|
||||
xml.onreadystatechange = function() {
|
||||
if (this.status == 200 && this.readyState == 4) {
|
||||
document.getElementById("route_levels").setAttribute("data-json", btoa(xml.responseText));
|
||||
}
|
||||
}
|
||||
xml.open("GET",file);
|
||||
xml.send();
|
||||
}
|
||||
|
||||
var fname = filename.replace("GMSJ0A","GMSJ01");
|
||||
function downloadFile(data, filename) {
|
||||
|
||||
var file = new Blob([data], {
|
||||
type: "application/octet-stream"
|
||||
});
|
||||
|
||||
if (window.navigator.msSaveOrOpenBlob)
|
||||
window.navigator.msSaveOrOpenBlob(file, fname);
|
||||
if (window.navigator.msSaveOrOpenBlob) window.navigator.msSaveOrOpenBlob(file, filename.replace("GMSJ0A","GMSJ01"));
|
||||
else {
|
||||
var a = document.createElement("a"),
|
||||
url = window.URL.createObjectURL(file);
|
||||
a.href = url;
|
||||
a.download = fname;
|
||||
a.download = filename.replace("GMSJ0A","GMSJ01");
|
||||
a.click();
|
||||
setTimeout(function() {
|
||||
window.URL.revokeObjectURL(url);
|
||||
}, 500);
|
||||
setTimeout(function() { window.URL.revokeObjectURL(url); }, 500);
|
||||
}
|
||||
}
|
||||
|
||||
function generateGCT() {
|
||||
|
||||
if (document.getElementById("gameID").value === "Choose Version") {
|
||||
if (document.getElementById("gameversion").value === "Choose Version") {
|
||||
alert("Select the game version!");
|
||||
return;
|
||||
}
|
||||
var data = "00D0C0DE00D0C0DE";
|
||||
var codeList = document.getElementById("checkList").getElementsByTagName("li");
|
||||
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");
|
||||
data += atob(codeList[i].getAttribute("data-codesrc"));
|
||||
valueSelected = true;
|
||||
}
|
||||
}
|
||||
|
||||
var fastcode = getFastCode();
|
||||
|
||||
if(fastcode !== false) {
|
||||
data += fastcode;
|
||||
valueSelected = true;
|
||||
}
|
||||
|
||||
if (valueSelected) {
|
||||
data += "FF00000000000000";
|
||||
var rawData = new Uint8Array(data.length / 2);
|
||||
|
@ -100,79 +108,99 @@ function generateGCT() {
|
|||
rawData[x] = parseInt(data.substr(x * 2, 2), 16);
|
||||
}
|
||||
|
||||
downloadFile(rawData, document.getElementById("gameID").value + ".gct");
|
||||
downloadFile(rawData, document.getElementById("gameversion").value + ".gct");
|
||||
} else {
|
||||
alert("No cheat(s) selected!");
|
||||
}
|
||||
}
|
||||
|
||||
function generateTXT(s) {
|
||||
if (document.getElementById("gameID").value === "Choose Version") {
|
||||
function generateTXT() {
|
||||
|
||||
var dolphin = (document.getElementById("downloadformat").value === "ini");
|
||||
|
||||
if (document.getElementById("gameversion").value === "Choose Version") {
|
||||
alert("Select the game version!");
|
||||
return;
|
||||
}
|
||||
if (s.id === "dolphinDownloadButton") var data = "Paste the following on top of your games .ini file:\r\n[Gecko]";
|
||||
else var data = document.getElementById("gameID").value.replace("GMSJ0A","GMSJ01") + "\r\nSuper Mario Sunshine";
|
||||
var codeList = document.getElementById("checkList").getElementsByTagName("li");
|
||||
if (dolphin) var data = "Paste the following on top of your games .ini file:\r\n[Gecko]";
|
||||
else var data = document.getElementById("gameversion").value.replace("GMSJ0A","GMSJ01") + "\r\nSuper Mario Sunshine";
|
||||
var codeList = document.getElementById("checklist").getElementsByTagName("li");
|
||||
var valueSelected = false;
|
||||
for (var i = 0; i < codeList.length; i++) {
|
||||
if (codeList[i].className === "checked") {
|
||||
data += "\r\n";
|
||||
if (s.id === "gcmDownloadButton") data += "\r\n";
|
||||
else data += "$";
|
||||
data += codeList[i].getAttribute("data-codename") + " (" + codeList[i].getAttribute("data-codedate") + ") [" + codeList[i].getAttribute("data-codeauthor") + "]\r\n";
|
||||
data += (codeList[i].getAttribute("data-codesrc").match(/.{8}/g).join(" ")).replace(/(.{17})./g, "$1\r\n");
|
||||
if (dolphin) data += "$";
|
||||
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-codesrc")).match(/.{8}/g).join(" ")).replace(/(.{17})./g, "$1\r\n");
|
||||
valueSelected = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (valueSelected) {
|
||||
downloadFile(data, document.getElementById("gameID").value + ".txt");
|
||||
} else {
|
||||
alert("No cheat(s) selected!");
|
||||
var fastcode = getFastCode();
|
||||
|
||||
if(fastcode !== false) {
|
||||
data += "\r\n";
|
||||
if (dolphin) data += "$";
|
||||
else data += "\r\n";
|
||||
data += "Stage list loader [Noki Doki]\r\n";
|
||||
data += (fastcode.match(/.{8}/g).join(" ")).replace(/(.{17})./g, "$1\r\n");
|
||||
valueSelected = true;
|
||||
}
|
||||
|
||||
if (valueSelected)
|
||||
downloadFile(data, document.getElementById("gameversion").value + ".txt");
|
||||
else alert("No cheat(s) selected!");
|
||||
}
|
||||
|
||||
function downloadCodes() {
|
||||
if (document.getElementById("downloadformat").value === "gct") generateGCT();
|
||||
else generateTXT();
|
||||
}
|
||||
|
||||
function updateCodelist() {
|
||||
resetDescription();
|
||||
document.getElementById("gameID").disabled = true;
|
||||
button = document.getElementById("downloadButton");
|
||||
button.style.visibility = "hidden";
|
||||
button.disabled = true;
|
||||
button = document.getElementById("dolphinDownloadButton");
|
||||
button.style.visibility = "hidden";
|
||||
button.disabled = true;
|
||||
button = document.getElementById("gcmDownloadButton");
|
||||
button.style.visibility = "hidden";
|
||||
button.disabled = true;
|
||||
document.getElementById("checkList").innerHTML = "";
|
||||
var gameVersion = document.getElementById("gameID").value;
|
||||
document.getElementById("gameversion").disabled = true;
|
||||
var buttons = document.getElementsByTagName("button");
|
||||
for (var i = 0; i < buttons.length; i++) buttons[i].disabled = true;
|
||||
document.getElementById("checklist").innerHTML = "";
|
||||
var gameVersion = document.getElementById("gameversion").value;
|
||||
parseXML(gameVersion);
|
||||
updateFastCode(gameVersion);
|
||||
document.getElementById("left").style.visibility = "visible";
|
||||
while (document.getElementsByClassName("initialhidden").length > 0) {
|
||||
document.getElementsByClassName("initialhidden")[0].classList.remove("initialhidden");
|
||||
}
|
||||
}
|
||||
|
||||
function updateDescription(s) {
|
||||
document.getElementById("descriptionBox").innerHTML = "<h2>" +
|
||||
s.getAttribute("data-codename") + "</h2><p style=\"margin:0\"><i>Author(s): " +
|
||||
s.getAttribute("data-codeauthor") + "</i></p><p style=\"margin:0\"><i>Version: " +
|
||||
s.getAttribute("data-codeversion") + " (" +
|
||||
s.getAttribute("data-codedate") + ")</i></p>" + "<h4>Description:</h4><p>" +
|
||||
s.getAttribute("data-codedesc") + "</p>";
|
||||
document.getElementById("descriptionbox").innerHTML = "<h2>" +
|
||||
atob(s.getAttribute("data-codename")) + "</h2><p style=\"margin:0\"><i>Author(s): " +
|
||||
atob(s.getAttribute("data-codeauthor")) + "</i></p><p style=\"margin:0\"><i>Version: " +
|
||||
atob(s.getAttribute("data-codeversion")) + " (" +
|
||||
atob(s.getAttribute("data-codedate")) + ")</i></p>" + "<br /><h4>Description:</h4><p>" +
|
||||
atob(s.getAttribute("data-codedesc")) + "</p>";
|
||||
}
|
||||
|
||||
function setButtonDescription(s) {
|
||||
if (s.id === "downloadButton")
|
||||
document.getElementById("descriptionBox").innerHTML = "<h2>Download GCT</h2><p>Download the cheats in the GCT format for use with Nintendont.</p>";
|
||||
else if (s.id === "dolphinDownloadButton")
|
||||
document.getElementById("descriptionBox").innerHTML = "<h2>Download for Dolphin</h2><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 \"<i>Properties</i>\" and then \"<i>Edit configuration</i>\".</p>";
|
||||
else
|
||||
document.getElementById("descriptionBox").innerHTML = "<h2>Download for Gecko Cheat Manager</h2><p>Download the cheats in a textfile formatted for use with the <a 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 href=\"files/GCMCodes.zip\">here</a>.";
|
||||
function updateUIDescription(s) {
|
||||
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>";
|
||||
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>";
|
||||
else if (s.id === "route_random")
|
||||
document.getElementById("descriptionbox").innerHTML = "<h2>Random Level Order</h2><p>Randomizes what level is loaded next - it can be any from the levels you choose on the list. Even levels that you've finished already.</p>";
|
||||
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>";
|
||||
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>";
|
||||
}
|
||||
|
||||
function resetDescription() {
|
||||
document.getElementById("descriptionBox").innerHTML = "<p><h3>Select your codes from the list...</h3></p>";
|
||||
document.getElementById("descriptionbox").innerHTML = "<p><h3>Choose your codes from the list...</h3></p>";
|
||||
}
|
||||
|
||||
function updateChangelog() {
|
||||
document.getElementById("gameversion").style.visibility = "visible";
|
||||
var xml = new XMLHttpRequest();
|
||||
var file = "changelog.xml";
|
||||
xml.onload = function() {
|
||||
|
@ -181,6 +209,7 @@ function updateChangelog() {
|
|||
changelogData = (new DOMParser()).parseFromString(xml.responseText, "text/xml");
|
||||
changelogData = changelogData.getElementsByTagName("update");
|
||||
|
||||
document.getElementById("lastupdate").innerHTML = "Last Updated: " + changelogData[0].getElementsByTagName("date")[0].textContent;
|
||||
for (var i = 0; i < changelogData.length && i < 5; i++) {
|
||||
document.getElementById("changelog").innerHTML += "<p style=\"margin:0\"><i>" + changelogData[i].getElementsByTagName("date")[0].textContent + ":</i> " + changelogData[i].getElementsByTagName("change")[0].textContent + "</p>";
|
||||
}
|
||||
|
@ -188,6 +217,189 @@ function updateChangelog() {
|
|||
document.getElementById("changelog").innerHTML += "<a target=\"_blank\" href=\"changelog.html\"><i>more ...</i></a>";
|
||||
};
|
||||
}
|
||||
|
||||
xml.open("GET", file);
|
||||
xml.send();
|
||||
}
|
||||
|
||||
/****************************
|
||||
*
|
||||
* Fastcode, https://github.com/QbeRoot/fastcodes/blob/master/script.js
|
||||
*
|
||||
****************************/
|
||||
|
||||
'strict mode'
|
||||
const levels = document.querySelector("#route_levels");
|
||||
const template = levels.lastElementChild;
|
||||
template.ondragstart = function() { return false; };
|
||||
|
||||
function appendLevel(code) {
|
||||
const clone = template.cloneNode(true);
|
||||
clone.draggable = true;
|
||||
selSetHandlers(clone);
|
||||
clone.querySelector("select").value = code;
|
||||
levels.insertBefore(clone, template);
|
||||
}
|
||||
|
||||
function clearLevels() {
|
||||
while (levels.firstChild !== template) levels.removeChild(levels.firstChild);
|
||||
}
|
||||
|
||||
template.addEventListener("change", function () {
|
||||
appendLevel(template.querySelector("select").value);
|
||||
template.querySelector("select").value = "0F00";
|
||||
})
|
||||
|
||||
levels.addEventListener("change", function ({target: t}) {
|
||||
if (t.value === "0F00" && t.parentNode !== template) levels.removeChild(t.parentNode);
|
||||
})
|
||||
|
||||
levels.addEventListener("click", function ({target: t}) {
|
||||
if (t.tagName.toUpperCase() === "BUTTON") levels.removeChild(t.parentNode);
|
||||
})
|
||||
|
||||
document.querySelector("#route_presets").addEventListener("change", function ({currentTarget: t}) {
|
||||
if (levels.childElementCount <= 1 || confirm("Loading a preset will erase your current list. Continue?")) {
|
||||
clearLevels();
|
||||
const preset = t.value;
|
||||
for (let i = 0; i <= preset.length - 4; i += 4) appendLevel(preset.substr(i, 4));
|
||||
}
|
||||
t.value = ""
|
||||
})
|
||||
|
||||
document.querySelector("#route_clear").addEventListener("click", function () {
|
||||
confirm("Do you really want to clear the list?") && clearLevels();
|
||||
})
|
||||
|
||||
{
|
||||
let selection;
|
||||
|
||||
function selDragStart(e) {
|
||||
selection = this;
|
||||
e.dataTransfer.effectAllowed = "move";
|
||||
e.dataTransfer.setData("text/html", this.querySelector("select").value);
|
||||
|
||||
this.classList.add("dragelement");
|
||||
}
|
||||
|
||||
function selDragOver(e) {
|
||||
if (e.preventDefault) {
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
this.classList.add("dragover");
|
||||
e.dataTransfer.dropEffect = "move";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function selDragLeave() {
|
||||
this.classList.remove("dragover");
|
||||
}
|
||||
|
||||
function selDragDrop(e) {
|
||||
if (e.stopPropagation) {
|
||||
e.stopPropagation();
|
||||
}
|
||||
|
||||
if (selection != this) {
|
||||
this.parentNode.removeChild(selection);
|
||||
this.insertAdjacentHTML("afterend", template.outerHTML);
|
||||
this.nextSibling.querySelector("select").value = e.dataTransfer.getData('text/html');
|
||||
this.nextSibling.draggable = true;
|
||||
selSetHandlers(this.nextSibling);
|
||||
}
|
||||
|
||||
this.classList.remove("dragover");
|
||||
return false;
|
||||
}
|
||||
|
||||
function selDragEnd() {
|
||||
this.classList.remove("dragelement");
|
||||
}
|
||||
|
||||
function selSetHandlers(elem) {
|
||||
elem.addEventListener('dragstart', selDragStart, false);
|
||||
elem.addEventListener('dragover', selDragOver, false);
|
||||
elem.addEventListener('dragleave', selDragLeave, false);
|
||||
elem.addEventListener('drop', selDragDrop, false);
|
||||
elem.addEventListener('dragend', selDragEnd, false);
|
||||
}
|
||||
}
|
||||
|
||||
//Interface
|
||||
function getFastCode() {
|
||||
|
||||
const levelCodes = Array.prototype.map.call(levels.querySelectorAll("select"), s => s.value);
|
||||
|
||||
levelCodes.pop();
|
||||
|
||||
if (!(document.getElementById("usefastcode").checked) || levelCodes.length <= 1) return false;
|
||||
|
||||
let game = JSON.parse(atob(document.getElementById("route_levels").getAttribute("data-json")));
|
||||
const randomize = (document.getElementById("route_random").value === "yes");
|
||||
const levelWords = Math.ceil(levelCodes.length / 2);
|
||||
const asm = [];
|
||||
asm.push("48" + ("00000" + (levelWords + 1 << 2 | 1).toString(16).toUpperCase()).slice(-6)); // bl to the code
|
||||
for (let i = 0; i < levelWords; ++i) {
|
||||
asm.push(levelCodes[2 * i] + (levelCodes[2 * i + 1] || "0000"));
|
||||
}
|
||||
|
||||
//Timer compatibility
|
||||
asm.push("3C80817F"); // lis r4, 0x817F
|
||||
asm.push("38000000"); // li r0, 0
|
||||
asm.push("9004010C"); // stw r0, 0x010C(r4)
|
||||
asm.push("38000001"); // li r0, 1
|
||||
asm.push("98040101"); // stb r0, 0x0101(r4)
|
||||
|
||||
asm.push("881F0012"); // lbz r0, 0x12(r31)
|
||||
|
||||
if (!randomize) {
|
||||
asm.push("2C00000F"); // cmpwi r0, 15
|
||||
asm.push("40820010"); // bne- 0x10
|
||||
asm.push("38000000"); // li r0, 0
|
||||
asm.push("90040000"); // stw r0, 0(r4)
|
||||
asm.push("4800002C"); // b 0x2C
|
||||
}
|
||||
|
||||
asm.push("2C000001"); // cmpwi r0, 1
|
||||
|
||||
if (randomize) {
|
||||
asm.push("41810030"); // bgt- 0x30
|
||||
asm.push("7C6C42E6"); // mftbl r3
|
||||
asm.push("3880" + ("000" + (levelCodes.length * 2).toString(16).toUpperCase()).slice(-4)); // li r4, length
|
||||
asm.push("7C032396"); // divwu r0, r3, r4
|
||||
asm.push("7C0021D6"); // mullw r0, r0, r4
|
||||
asm.push("7C601850"); // sub r3, r3, r0
|
||||
asm.push("5463003C"); // rlwinm r3, r3, 0, 0, 30
|
||||
} else {
|
||||
asm.push("41810024"); // bgt- 0x24
|
||||
asm.push("80640000"); // lwz r3, 0(r4)
|
||||
asm.push("38030002"); // addi r0, r3, 2
|
||||
asm.push("90040000"); // stw r0, 0(r4)
|
||||
}
|
||||
|
||||
asm.push("7C8802A6"); // mflr r4
|
||||
asm.push("7C641A2E"); // lhzx r3, r4, r3
|
||||
asm.push("B07F0012"); // sth r3, 0x12(r31)
|
||||
asm.push("808D" + game.fmOffset); // lwz r4, TFlagManager::smInstance
|
||||
asm.push("986400DF"); // stb r3, 0xDF(r4)
|
||||
asm.push("807F0020"); // lwz r3, 0x20(r31)
|
||||
|
||||
if (asm.length % 2 === 0) {
|
||||
asm.push("60000000"); // nop
|
||||
}
|
||||
asm.push("00000000");
|
||||
|
||||
const geckoLines = asm.length / 2;
|
||||
let gecko = "C2" + game.injectAddr + " " + ("0000000" + geckoLines.toString(16).toUpperCase()).slice(-8) + "\r\n";
|
||||
for (let i = 0; i < geckoLines; ++i) {
|
||||
gecko += asm[2 * i] + " " + asm[2 * i + 1] + "\r\n";
|
||||
}
|
||||
|
||||
let codes = gecko +
|
||||
game.notext[document.getElementById("route_notext").value] +
|
||||
game.nofmvs[document.getElementById("route_nofmvs").value];
|
||||
|
||||
return codes.replace(/[^0-9A-F]/g, '');
|
||||
}
|
||||
|
|
|
@ -2,12 +2,13 @@
|
|||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=480px, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="style/guide.css">
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
||||
<title>Guide</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="guide_content">
|
||||
<div id="guide_content" class="framed">
|
||||
<h1 style="text-align:center;width:100%">How to install and use practice codes</h1>
|
||||
<p style="margin:0;text-align:center;width:100%;">This page is a simple guide to explain the recommended way to install practice codes on your Nintendo Wii.</p>
|
||||
<br />
|
||||
|
|
266
index.html
266
index.html
|
@ -3,55 +3,251 @@
|
|||
<head>
|
||||
<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="viewport" content="width=480px, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="style/style.css">
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
||||
<title>SMS GCT Generator</title>
|
||||
<title>Super Mario Sunshine Practice Code Generator</title>
|
||||
</head>
|
||||
<body onload="updateChangelog()">
|
||||
<div style="width:100%;overflow:hidden;">
|
||||
<div style="width: 400px; float: left;">
|
||||
<center>
|
||||
<select id="gameID" class="selectionHeader" onchange="updateCodelist()" autocomplete="off">
|
||||
<option selected disabled hidden>Choose Version</option>
|
||||
<div id="mainContainer">
|
||||
<input type="checkbox" id="usefastcode" style="display:none" autocomplete="off" />
|
||||
<div id="left" class="section">
|
||||
<div id="generalsettings">
|
||||
<table><tbody>
|
||||
<tr>
|
||||
<td nowrap>
|
||||
Game Version:
|
||||
</td>
|
||||
<td id="ph_gameversion" style="width:100%">
|
||||
<select id="gameversion" onchange="updateCodelist()" autocomplete="off" style="visibility:hidden">
|
||||
<option selected disabled>Choose Version</option>
|
||||
<option value="GMSE01">GMSE01 (NTSC-U)</option>
|
||||
<option value="GMSP01">GMSP01 (PAL)</option>
|
||||
<option value="GMSJ01">GMSJ01 (NTSC-J 1.0)</option>
|
||||
<option value="GMSJ0A">GMSJ01 (NTSC-J 1.1/A)</option>
|
||||
</select>
|
||||
<ul id="checkList">
|
||||
</ul>
|
||||
<button id="downloadButton" onclick="generateGCT()" onmouseover="setButtonDescription(this)" style="visibility:hidden;">Download .GCT</button>
|
||||
<button id="dolphinDownloadButton" onclick="generateTXT(this)" onmouseover="setButtonDescription(this)" style="visibility:hidden;">Dolphin INI</button>
|
||||
<button id="gcmDownloadButton" onclick="generateTXT(this)" onmouseover="setButtonDescription(this)" style="visibility:hidden;">GCM TXT</button>
|
||||
</center>
|
||||
</div>
|
||||
<div style="margin-left:420px;">
|
||||
<table id="warningMessage">
|
||||
<tr>
|
||||
<th><a target="_blank" href="http://smsunshine.challonge.com/any2018"><img src="img/challonge.png" alt="Challonge" align="left" /></a></th>
|
||||
<th style="text-align:center">
|
||||
<a target="_blank" href="http://smsunshine.challonge.com/any2018">2018 Super Mario Sunshine Any% Tournament</a><br />
|
||||
Signup deadline: February 14th
|
||||
</th>
|
||||
<th><a target="_blank" href="http://smsunshine.challonge.com/any2018"><img src="img/challonge.png" alt="Challonge" align="right" /></a></th>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="descriptionBox" class="framed">
|
||||
<h2>Mario Sunshine Cheatfile Generator</h2>
|
||||
<p style="margin:0"><i>Authors: <a target="_blank" href="https://twitter.com/psychonauter">Psy</a> & <a target="_blank" href="https://twitter.com/srlmilk">Milk</a></i></p>
|
||||
<p style="margin:0"><i>Last Updated: Jan 24, 2018</i></p>
|
||||
<h4>Description:</h4>
|
||||
<tr class="initialhidden">
|
||||
<td nowrap>
|
||||
Stage Loader:
|
||||
</td>
|
||||
<td style="width:100%">
|
||||
<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 selected value="no">No</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="initialhidden">
|
||||
<td nowrap>
|
||||
File Format:
|
||||
</td>
|
||||
<td style="width:100%">
|
||||
<select id="downloadformat" onmouseover="updateUIDescription(this)" style="width:100%">
|
||||
<option selected value="gct">GCT</option>
|
||||
<option value="ini">Dolphin INI</option>
|
||||
<option value="gcm">Cheat Manager TXT</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="initialhidden">
|
||||
<td></td>
|
||||
<td>
|
||||
<button onclick="downloadCodes()" id="downloadbutton">Download</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
</div>
|
||||
<div id="codes" class="framed initialhidden">
|
||||
|
||||
<ul id="checklist"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="center" class="section initialhidden">
|
||||
<div class="framed">
|
||||
<h2>Stage Loader</h2>
|
||||
<div>
|
||||
<table style="width:100%"><tbody>
|
||||
<tr>
|
||||
<td nowrap>
|
||||
<label for="route_notext">Remove Dialogue:</label>
|
||||
</td>
|
||||
<td style="width:100%">
|
||||
<select id="route_notext" style="width:100%" onmouseover="updateUIDescription(this)">
|
||||
<option value="yes">Always</option>
|
||||
<option selected value="pv5">Not in Pianta 5</option>
|
||||
<option value="no">Don't include</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td nowrap>
|
||||
<label for="route_nofmvs">Skippable Cutscenes:</label>
|
||||
</td>
|
||||
<td style="width:100%">
|
||||
<select id="route_nofmvs" style="width:100%" onmouseover="updateUIDescription(this)">
|
||||
<option value="yes">Always</option>
|
||||
<option selected value="pp1">Not in Pinna 1</option>
|
||||
<option value="no">Don't include</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td nowrap>
|
||||
<label for="route_random">Random Level Order:</label>
|
||||
</td>
|
||||
<td style="width:100%">
|
||||
<select id="route_random" style="width:100%" onmouseover="updateUIDescription(this)">
|
||||
<option value="yes">Yes</option>
|
||||
<option selected value="no">No</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
</div>
|
||||
<div>
|
||||
<ul id="route_levels">
|
||||
<li draggable="false">
|
||||
<div class="route_drag">≡</div>
|
||||
<select>
|
||||
<option value="0F00" selected disabled>Select a level…</option>
|
||||
<optgroup label="Delfino Plaza">
|
||||
<option value="1400">Airstrip (red coins)</option>
|
||||
<option value="1500">Slide</option>
|
||||
<option value="1600">Pachinko</option>
|
||||
<option value="1700">Grass pipe</option>
|
||||
<option value="1800">Lily Pad Ride</option>
|
||||
<option value="1D00">Jail secret</option>
|
||||
<option value="3400">Corona Mountain</option>
|
||||
</optgroup>
|
||||
<optgroup label="Bianco Hills">
|
||||
<option value="0200">Bianco 1</option>
|
||||
<option value="0201">Bianco 2</option>
|
||||
<option value="0202">Bianco 3</option>
|
||||
<option value="0203">Bianco 4</option>
|
||||
<option value="0204">Bianco 5</option>
|
||||
<option value="0205">Bianco 6</option>
|
||||
<option value="0206">Bianco 7</option>
|
||||
<option value="0207">Bianco 8</option>
|
||||
</optgroup>
|
||||
<optgroup label="Ricco Harbor">
|
||||
<option value="0300">Ricco 1</option>
|
||||
<option value="0301">Ricco 2</option>
|
||||
<option value="0302">Ricco 3</option>
|
||||
<option value="0303">Ricco 4</option>
|
||||
<option value="0304">Ricco 5</option>
|
||||
<option value="0305">Ricco 6</option>
|
||||
<option value="0306">Ricco 7</option>
|
||||
<option value="0307">Ricco 8</option>
|
||||
</optgroup>
|
||||
<optgroup label="Gelato Beach">
|
||||
<option value="0400">Gelato 1</option>
|
||||
<option value="0401">Gelato 2</option>
|
||||
<option value="0402">Gelato 3</option>
|
||||
<option value="0403">Gelato 4</option>
|
||||
<option value="0404">Gelato 5</option>
|
||||
<option value="0405">Gelato 6</option>
|
||||
<option value="0406">Gelato 7</option>
|
||||
<option value="0407">Gelato 8</option>
|
||||
</optgroup>
|
||||
<optgroup label="Pinna Park">
|
||||
<option value="0500">Pinna 1</option>
|
||||
<option value="0501">Pinna 2</option>
|
||||
<option value="0502">Pinna 3</option>
|
||||
<option value="0503">Pinna 4</option>
|
||||
<option value="0504">Pinna 5</option>
|
||||
<option value="0505">Pinna 6</option>
|
||||
<option value="0506">Pinna 7</option>
|
||||
<option value="0507">Pinna 8</option>
|
||||
</optgroup>
|
||||
<optgroup label="Sirena Beach">
|
||||
<option value="0600">Sirena 1</option>
|
||||
<option value="0601">Sirena 2</option>
|
||||
<option value="0602">Sirena 3</option>
|
||||
<option value="0603">Sirena 4</option>
|
||||
<option value="0604">Sirena 5</option>
|
||||
<option value="0605">Sirena 6</option>
|
||||
<option value="0606">Sirena 7</option>
|
||||
<option value="0607">Sirena 8</option>
|
||||
</optgroup>
|
||||
<optgroup label="Noki Bay">
|
||||
<option value="0900">Noki 1</option>
|
||||
<option value="0901">Noki 2</option>
|
||||
<option value="0902">Noki 3</option>
|
||||
<option value="0903">Noki 4</option>
|
||||
<option value="0904">Noki 5</option>
|
||||
<option value="0905">Noki 6</option>
|
||||
<option value="0906">Noki 7</option>
|
||||
<option value="0907">Noki 8</option>
|
||||
</optgroup>
|
||||
<optgroup label="Pianta Village">
|
||||
<option value="0800">Pianta 1</option>
|
||||
<option value="0801">Pianta 2</option>
|
||||
<option value="0802">Pianta 3</option>
|
||||
<option value="0803">Pianta 4</option>
|
||||
<option value="0804">Pianta 5</option>
|
||||
<option value="0805">Pianta 6</option>
|
||||
<option value="0806">Pianta 7</option>
|
||||
<option value="0807">Pianta 8</option>
|
||||
</optgroup>
|
||||
<optgroup label="Secret areas">
|
||||
<option value="2F00">Bianco 3 secret</option>
|
||||
<option value="2E00">Bianco 6 secret</option>
|
||||
<option value="3000">Ricco 4 secret</option>
|
||||
<option value="2000">Gelato 1 secret</option>
|
||||
<option value="3200">Pinna 2 secret</option>
|
||||
<option value="2900">Pinna 6 secret</option>
|
||||
<option value="3300">Sirena 2 secret</option>
|
||||
<option value="2800">Sirena 4 secret</option>
|
||||
<option value="1F00">Noki 6 secret</option>
|
||||
<option value="2A00">Pianta 5 secret</option>
|
||||
</optgroup>
|
||||
<optgroup label="Sublevels">
|
||||
<option value="3700">Windmill (Bianco 2)</option>
|
||||
<option value="1E00">Race course (Ricco 2)</option>
|
||||
<option value="2100">Sand bird (Gelato 4)</option>
|
||||
<option value="3A01">Mecha-Bowser fight (Pinna 1)</option>
|
||||
<option value="0E00">Casino Delfino (Sirena 4)</option>
|
||||
<option value="0E01">Casino Delfino (Sirena 5)</option>
|
||||
<option value="3900">Deep Sea of Mare (Noki 4)</option>
|
||||
<option value="3C00">Bowser fight (Corona)</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
<button type="button" class="route_remove">×</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="text-align:center">
|
||||
<button id="route_clear" type="button">Clear list</button>
|
||||
<select id="route_presets">
|
||||
<option value="" selected>Load a preset…</option>
|
||||
<option value="0200020202030204040004060800080108020803080408050806050005010502050305020506030003010302030303040305030602050206060006010602060306040605060609000901090209030904090509063400">Any% usual route</option>
|
||||
<option value="0200020202030204040004060800080108020803080408050806050005010502050305020506020502060600060106020603060406050606090009010902090309040905090603000301030203030304030503063400">Any% Ricco late</option>
|
||||
<option value="0200020202030204040004010402040304040405040605000501050205030504050505060300030103020303030403050306020502060600060106020603060406050606090009010902090309040905090608000801080208030804080508063400">Any% No Major Skips</option>
|
||||
<option value="020002010202020308000801080208030804080508060807050005010502050305040505050605070300030103020303030403050306030702040205020602070600060106020603060406050606060709000901090209030904090509060907040004010402040304040403040504063400">All Episodes</option>
|
||||
<option value="020002010202020208000801080208030804080408040805080608070807050005010501050205030504050405050505050605070300030103010302030303030304030503050306030702030204020502050205020602070600060106010602060306030603060406050606060709000901090109010902090309040905090509060907040004000400040104020403040504040403040204063400">All Level Shines</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="right" class="section">
|
||||
<div id="descriptionbox" class="framed">
|
||||
<h1>Super Mario Sunshine Practice Code Generator v2</h1>
|
||||
<p style="margin:0"><i id="lastupdate"></i></p>
|
||||
<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><i>For creating a cheatfile that automatically loads levels in a custom order (similiar to 'Fast Any%') you can use this tool: <a target="_blank" href="https://qberoot.github.io/fastcodes/">Fastcodes by Noki Doki</a>.</i></p>
|
||||
<br />
|
||||
<h4>Changelog:</h4>
|
||||
<p id="changelog"></p>
|
||||
<hr style="border-color:grey;">
|
||||
<div style="text-align:center;margin:18px 0px 7px 0px">
|
||||
<a target="_blank" href="https://discord.gg/0SoktBcRDw8B1NJB" title="Sunshine Community Discord"><img src="img/discord_bubble.png" style="margin:0px 7px;vertical-align:middle" alt="Sunshine Community Discord" /></a>
|
||||
<a target="_blank" href="https://speedrun.com/sms" title="Sunshine Leaderboards"><img src="img/src_bubble.png" style="margin:0px 7px;vertical-align:middle" alt="Sunshine Leaderboards" /></a>
|
||||
<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 />
|
||||
<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://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>
|
||||
<a target="_blank" href="https://twitter.com/SMSCommunity" title="Sunshine Community Twitter"><img src="img/twitter_bubble.png" style="margin:0px 7px;vertical-align:middle" alt="Sunshine Community Twitter" /></a>
|
||||
<a target="_blank" href="https://www.twitch.tv/SunshineCommunity" title="Sunshine Community Twitch"><img src="img/twitch_bubble.png" style="margin:0px 7px;vertical-align:middle" alt="Sunshine Community Twitch" /></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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -2,12 +2,13 @@
|
|||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=480px, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="style/guide.css">
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
||||
<title>Installing IOS58</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="guide_content">
|
||||
<div id="guide_content" class="framed">
|
||||
<h1 style="text-align:center;width:100%">Installing IOS58</h1>
|
||||
<p style="margin:0;text-align:center;width:100%;">Requires Homebrew! <a href="http://gct.zint.ch/guide.html">Main Guide</a></p>
|
||||
<br />
|
||||
|
@ -23,7 +24,8 @@
|
|||
<h3 id="1.4"><a href="#1.4">1.4 Download WiiMod</a></h3>
|
||||
<p>Download WiiMod from <a target="_blank" href="https://gbatemp.net/threads/wii-mod.272321/">GBAtemp</a> and place the app into your apps folder. Put the SD card back into your Wii and open the homebrew channel.</p>
|
||||
<br />
|
||||
<div id="iosinstall">
|
||||
<hr />
|
||||
<div id="iosinstall" style="clear:both">
|
||||
<h2 id="2"><a href="#2">2. Install IOS58</a></h2>
|
||||
<div>
|
||||
<h3 id="2.1"><a href="#2.1">2.1 Launch WiiMod and select "IOSs"</a></h3>
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
html {
|
||||
background-color:#0D0D0D;
|
||||
color:#f1f1f1;
|
||||
font-family:Calibri;
|
||||
text-align:center
|
||||
}
|
||||
|
||||
body {
|
||||
display:inline-block;
|
||||
}
|
||||
|
||||
img {
|
||||
border-radius:4px
|
||||
}
|
||||
|
||||
a {
|
||||
color:#ff8297;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color:#ffffff;
|
||||
}
|
103
style/guide.css
103
style/guide.css
|
@ -1,84 +1,79 @@
|
|||
@import url('common.css');
|
||||
|
||||
body {
|
||||
margin:30px 0px;
|
||||
html {
|
||||
background-color:#f0f1f0;
|
||||
color:#000;
|
||||
font-family:Calibri;
|
||||
text-align:center
|
||||
}
|
||||
|
||||
div {
|
||||
padding:0;
|
||||
body {
|
||||
display:inline-block;
|
||||
margin:10px 0px;
|
||||
min-height:450px;
|
||||
font-size:1em;
|
||||
text-align:left
|
||||
}
|
||||
|
||||
h1,h2,h3,h4{
|
||||
margin:10px 20px
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin:50px 0px 20px 0px;
|
||||
line-height:28px
|
||||
font-size:1.3em
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size:16px;
|
||||
margin:30px 0px 0px 0px
|
||||
font-size:1.1em
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size:15px;
|
||||
margin:20px 0px 5px 20px
|
||||
h3,h4 {
|
||||
margin-top:15px;
|
||||
font-size:1em
|
||||
}
|
||||
|
||||
p {
|
||||
margin:10px 0px 0px 0px
|
||||
}
|
||||
|
||||
img {
|
||||
margin:0px 40px;
|
||||
border-radius:4px;
|
||||
max-width:100%
|
||||
}
|
||||
|
||||
a {
|
||||
color:#ff0029;
|
||||
text-decoration:none
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color:#1185fd
|
||||
}
|
||||
|
||||
p {
|
||||
margin:0px 30px
|
||||
}
|
||||
|
||||
ul li {
|
||||
margin:0px 0px 10px 60px;
|
||||
width:80%
|
||||
margin-top:7px
|
||||
}
|
||||
|
||||
hr {
|
||||
border-color:#ccc
|
||||
.framed {
|
||||
padding:12px;
|
||||
text-align:justify;
|
||||
border-style:solid;
|
||||
border-color:#000;
|
||||
border-width:1px;
|
||||
border-radius:0px
|
||||
}
|
||||
|
||||
#guide_content {
|
||||
display:inline-block;
|
||||
background:#232323;
|
||||
width:80%;
|
||||
min-width:450px;
|
||||
max-width:1200px;
|
||||
overflow:hidden;
|
||||
border:1px solid #333;
|
||||
border-radius:4px;
|
||||
border-color:#aaa;
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
margin:0;
|
||||
padding:0px 30px 30px 30px;
|
||||
font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
font-size:14px;
|
||||
line-height:20px;
|
||||
text-align:justify
|
||||
}
|
||||
|
||||
#indexlisting h2, #indexlisting h3{
|
||||
font-size:14px;
|
||||
font-weight:normal;
|
||||
margin:0
|
||||
max-width:1000px
|
||||
}
|
||||
|
||||
#iosinstall {
|
||||
clear:both;
|
||||
margin-top:100px;
|
||||
text-align:center
|
||||
}
|
||||
|
||||
#iosinstall h2 {
|
||||
text-align:left
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
#iosinstall div {
|
||||
margin:0px 30px 0px 30px;
|
||||
display:inline-block
|
||||
}
|
||||
|
||||
#iosinstall div h3 {
|
||||
margin:10px;
|
||||
text-align:left
|
||||
display:inline-block;
|
||||
}
|
486
style/style.css
486
style/style.css
|
@ -1,77 +1,226 @@
|
|||
@import url('common.css');
|
||||
|
||||
body {
|
||||
margin:50px;
|
||||
width:980px;
|
||||
min-height:450px;
|
||||
html {
|
||||
background-color:#f0f1f0;
|
||||
color:#000;
|
||||
font-family:Calibri;
|
||||
text-align:left
|
||||
}
|
||||
|
||||
body button {
|
||||
padding:10px;
|
||||
body {
|
||||
display:inline-block;
|
||||
margin:10px 0px;
|
||||
min-height:450px;
|
||||
font-size:1em;
|
||||
text-align:left
|
||||
}
|
||||
|
||||
h1,h2,h3,h4{
|
||||
margin:5px 0px
|
||||
}
|
||||
|
||||
h2,h3 {
|
||||
text-align:center
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size:1.3em
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size:1.1em
|
||||
}
|
||||
|
||||
h3,h4 {
|
||||
margin-top:15px;
|
||||
font-size:1em
|
||||
}
|
||||
|
||||
p {
|
||||
margin:10px 0px 0px 0px
|
||||
}
|
||||
|
||||
img {
|
||||
border-radius:4px;
|
||||
max-width:100%
|
||||
}
|
||||
|
||||
a {
|
||||
color:#ff0029;
|
||||
text-decoration:none
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color:#1185fd
|
||||
}
|
||||
|
||||
hr {
|
||||
border-color:#f3f3f3
|
||||
}
|
||||
|
||||
input[type=checkbox] {
|
||||
vertical-align:middle;
|
||||
width:15px;
|
||||
height:15px;
|
||||
margin:0;
|
||||
-webkit-appearance: checkbox;
|
||||
box-sizing: border-box
|
||||
}
|
||||
|
||||
tr td:first-child {
|
||||
padding-right:5px
|
||||
}
|
||||
|
||||
td {
|
||||
vertical-align:middle
|
||||
}
|
||||
|
||||
#mainContainer {
|
||||
width:100vw;
|
||||
text-align:center
|
||||
}
|
||||
|
||||
.initialhidden {
|
||||
visibility:hidden;
|
||||
}
|
||||
|
||||
.section {
|
||||
display:inline-block;
|
||||
vertical-align:top;
|
||||
margin:20px 8px;
|
||||
text-align:left
|
||||
}
|
||||
|
||||
.framed {
|
||||
padding:12px;
|
||||
text-align:justify;
|
||||
border-style:solid;
|
||||
border-color:#000;
|
||||
border-width:1px;
|
||||
border-radius:0px
|
||||
}
|
||||
|
||||
.section .framed {
|
||||
margin-top:16px
|
||||
}
|
||||
|
||||
.section .framed:first-of-type {
|
||||
margin-top:0px
|
||||
}
|
||||
|
||||
#gameversion {
|
||||
width:100%;
|
||||
margin-top:0
|
||||
}
|
||||
|
||||
#downloadbutton {
|
||||
width:100%;
|
||||
margin-top:2px
|
||||
}
|
||||
|
||||
#generalsettings table {
|
||||
width:100%
|
||||
}
|
||||
|
||||
#home {
|
||||
display:inline-block;
|
||||
min-width:400px;
|
||||
width:50vw;
|
||||
margin:10px 0px;
|
||||
padding:4px;
|
||||
text-align:justify
|
||||
}
|
||||
|
||||
#smscommunity {
|
||||
display:block;
|
||||
text-align:center;
|
||||
margin:18px 0px 7px 0px
|
||||
}
|
||||
|
||||
#smscommunity img {
|
||||
margin:0px 3px;
|
||||
vertical-align:middle
|
||||
}
|
||||
|
||||
#left {
|
||||
width:30vw;
|
||||
min-width:300px;
|
||||
max-width:400px
|
||||
}
|
||||
|
||||
#center {
|
||||
display:none
|
||||
}
|
||||
|
||||
#right {
|
||||
width:50vw;
|
||||
min-width:300px;
|
||||
max-width:800px
|
||||
}
|
||||
|
||||
#usefastcode:checked ~ #center {
|
||||
display:inline-block;
|
||||
width:20vw;
|
||||
min-width:300px;
|
||||
max-width:400px
|
||||
}
|
||||
|
||||
#usefastcode:checked ~ #left {
|
||||
width:20vw
|
||||
}
|
||||
|
||||
#usefastcode:checked ~ #right {
|
||||
width:35vw
|
||||
}
|
||||
|
||||
@media screen and (max-width:1100px) {
|
||||
|
||||
#usefastcode:checked ~ #left, #usefastcode:checked ~ #center{
|
||||
min-width:45vw;
|
||||
max-width:45vw
|
||||
}
|
||||
|
||||
#usefastcode:checked ~ #right {
|
||||
min-width:90vw;
|
||||
min-width:calc(90vw + 24px);
|
||||
max-width:90vw
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width:700px) {
|
||||
|
||||
#left,#center,#usefastcode:checked ~ #left, #usefastcode:checked ~ #center{
|
||||
min-width:400px;
|
||||
max-width:90vw;
|
||||
width:90vw
|
||||
}
|
||||
|
||||
#right,#usefastcode:checked ~ #right {
|
||||
display:none
|
||||
}
|
||||
}
|
||||
|
||||
button {
|
||||
padding:6px;
|
||||
margin:auto;
|
||||
font-size:18px;
|
||||
color:#f1f1f1;
|
||||
background-color:#f44336;
|
||||
background-color:#ca0707;
|
||||
border-style:none;
|
||||
border-radius:4px;
|
||||
cursor:pointer;
|
||||
margin-top:5px;
|
||||
outline:none
|
||||
}
|
||||
|
||||
#downloadButton {
|
||||
width:390px;
|
||||
display:block
|
||||
button:hover {
|
||||
background-color:#ff5151;
|
||||
}
|
||||
|
||||
#downloadButton:hover {
|
||||
background-color:#ea7d75
|
||||
}
|
||||
|
||||
#dolphinDownloadButton {
|
||||
width:193px;
|
||||
display:inline-block;
|
||||
background-color:#5c90aa
|
||||
}
|
||||
|
||||
#dolphinDownloadButton:hover {
|
||||
background-color:#9cb6c3
|
||||
}
|
||||
|
||||
#gameID {
|
||||
margin:10px 0 5px
|
||||
}
|
||||
|
||||
#gcmDownloadButton {
|
||||
width:193px;
|
||||
display:inline-block;
|
||||
background-color:#629045
|
||||
}
|
||||
|
||||
#gcmDownloadButton:hover {
|
||||
background-color:#8eb575
|
||||
}
|
||||
|
||||
ul {
|
||||
margin:0;
|
||||
padding:0;
|
||||
width:390px;
|
||||
list-style-type:none
|
||||
}
|
||||
|
||||
ul li {
|
||||
cursor:pointer;
|
||||
position:relative;
|
||||
padding:8px 8px 8px 40px;
|
||||
select {
|
||||
margin:2px 0px;
|
||||
background-color:#ca0707;
|
||||
padding:5px;
|
||||
color:#fff;
|
||||
width:200px;
|
||||
border-style:none;
|
||||
border-radius:4px;
|
||||
border-style:solid;
|
||||
border-width:1px;
|
||||
background:#ffefef;
|
||||
color:#262626;
|
||||
font-size:18px;
|
||||
text-align:left;
|
||||
transition:.2s;
|
||||
-webkit-user-select:none;
|
||||
-moz-user-select:none;
|
||||
-ms-user-select:none;
|
||||
|
@ -79,36 +228,55 @@ ul li {
|
|||
outline:none
|
||||
}
|
||||
|
||||
ul li::before {
|
||||
content:'';
|
||||
position:absolute;
|
||||
border-color:#a6a6a6;
|
||||
border-style:solid;
|
||||
border-width:1.5px;
|
||||
border-radius:50%;
|
||||
top:11px;
|
||||
left:12px;
|
||||
height:14px;
|
||||
width:14px
|
||||
optgroup {
|
||||
background:#ff5151
|
||||
}
|
||||
|
||||
option {
|
||||
background:#ca0707
|
||||
}
|
||||
|
||||
label {
|
||||
-webkit-user-select:none;
|
||||
-moz-user-select:none;
|
||||
-ms-user-select:none;
|
||||
user-select:none
|
||||
}
|
||||
|
||||
ul {
|
||||
margin:0;
|
||||
padding:0;
|
||||
width:100%;
|
||||
list-style-type:none
|
||||
}
|
||||
|
||||
ul li {
|
||||
margin-top:2px;
|
||||
cursor:pointer;
|
||||
position:relative;
|
||||
padding:4px;
|
||||
color:#262626;
|
||||
text-align:left;
|
||||
transition:.1s;
|
||||
-webkit-user-select:none;
|
||||
-moz-user-select:none;
|
||||
-ms-user-select:none;
|
||||
user-select:none;
|
||||
outline:none
|
||||
}
|
||||
|
||||
ul li:nth-child(odd) {
|
||||
background:#fdfdfd
|
||||
background:#e2e2e2
|
||||
}
|
||||
|
||||
ul li:hover {
|
||||
background:#d84035;
|
||||
background:#ca0707;
|
||||
color:#fff;
|
||||
border-color:#000
|
||||
}
|
||||
|
||||
ul li:hover::before {
|
||||
border-color:#fff;
|
||||
background-color:#ffc0cb
|
||||
}
|
||||
|
||||
ul li.checked:hover {
|
||||
background:#d84035;
|
||||
background:#ca0707;
|
||||
color:#fff
|
||||
}
|
||||
|
||||
|
@ -118,73 +286,113 @@ ul li.checked {
|
|||
border-color:#262626
|
||||
}
|
||||
|
||||
ul li.checked::before {
|
||||
content:'';
|
||||
position:absolute;
|
||||
border-color:#fff;
|
||||
border-style:solid;
|
||||
border-width:1.5px;
|
||||
border-radius:50%;
|
||||
top:11px;
|
||||
left:12px;
|
||||
height:14px;
|
||||
width:14px;
|
||||
background-color:#d85e55
|
||||
}
|
||||
|
||||
th {
|
||||
font-weight:400
|
||||
}
|
||||
|
||||
.selectionHeader {
|
||||
background-color:#f44336;
|
||||
padding:10px;
|
||||
color:#fff;
|
||||
width:390px;
|
||||
font-size:16px;
|
||||
border-style:none;
|
||||
border-radius:4px;
|
||||
-webkit-user-select:none;
|
||||
[draggable] {
|
||||
-moz-user-select: none;
|
||||
-ms-user-select:none;
|
||||
-khtml-user-select: none;
|
||||
-webkit-user-select: none;
|
||||
user-select: none;
|
||||
outline:none
|
||||
-khtml-user-drag: element;
|
||||
-webkit-user-drag: element
|
||||
}
|
||||
|
||||
.framed {
|
||||
position:relative;
|
||||
margin:11px 0 10px;
|
||||
padding:0 12px 12px;
|
||||
background:#232323;
|
||||
font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
font-size:14px;
|
||||
text-align:justify;
|
||||
line-height:18px;
|
||||
border-color:#fff;
|
||||
border-style:solid;
|
||||
border-width:1px;
|
||||
border-radius:4px;
|
||||
width:500px;
|
||||
min-height:150px;
|
||||
overflow-y:auto;
|
||||
overflow-x:hidden;
|
||||
-ms-overflow-style:none
|
||||
#route_levels {
|
||||
margin:10px 0px;
|
||||
}
|
||||
|
||||
.framed::-webkit-scrollbar {
|
||||
#route_levels li {
|
||||
padding:0px 10px;
|
||||
margin:0
|
||||
}
|
||||
|
||||
#route_levels li.dragover {
|
||||
padding-bottom:20px;
|
||||
background-color:white
|
||||
}
|
||||
|
||||
#route_levels li select {
|
||||
margin:0;
|
||||
width:calc(100% - 40px);
|
||||
margin:0px 6px;
|
||||
color:black;
|
||||
background-color:inherit
|
||||
}
|
||||
|
||||
#route_levels li select:hover {
|
||||
color:white
|
||||
}
|
||||
|
||||
#route_levels li:hover select {
|
||||
color:white
|
||||
}
|
||||
|
||||
#route_levels li:last-child {
|
||||
padding-left:24px
|
||||
}
|
||||
|
||||
#route_levels li:last-child .route_remove, #route_levels li:last-child .route_drag {
|
||||
display:none
|
||||
}
|
||||
|
||||
#warningMessage {
|
||||
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;
|
||||
background:#232323;
|
||||
width:526px;
|
||||
padding:6px 12px;
|
||||
margin:11px 0 0
|
||||
#checklist li {
|
||||
padding-left: 26px;
|
||||
}
|
||||
|
||||
#checklist li::before {
|
||||
content:'';
|
||||
position:absolute;
|
||||
border-color:#a6a6a6;
|
||||
border-style:solid;
|
||||
border-width:2px;
|
||||
border-radius:50%;
|
||||
-webkit-transform: translateY(20%);
|
||||
-moz-transform: translateY(20%);
|
||||
-ms-transform: translateY(20%);
|
||||
-o-transform: translateY(20%);
|
||||
transform: translateY(20%);
|
||||
transform: translateY(20%);
|
||||
left:6px;
|
||||
height:10px;
|
||||
width:10px
|
||||
}
|
||||
|
||||
#checklist li:hover::before {
|
||||
border-color:#fff;
|
||||
background-color:#ffc0cb
|
||||
}
|
||||
|
||||
#checklist li.checked::before {
|
||||
border-color:#fff;
|
||||
background-color:#d85e55
|
||||
}
|
||||
|
||||
.dragelement {
|
||||
opacity:0.3
|
||||
}
|
||||
|
||||
.route_remove {
|
||||
background:inherit;
|
||||
color:red;
|
||||
font-weight:bold;
|
||||
border-radius:0;
|
||||
vertical-align:middle;
|
||||
padding:0
|
||||
}
|
||||
|
||||
.route_remove:hover {
|
||||
background:inherit;
|
||||
color:white
|
||||
}
|
||||
|
||||
.route_drag {
|
||||
display:inline;
|
||||
background-color:inherit;
|
||||
color:#aaa;
|
||||
border-radius:0;
|
||||
vertical-align:middle;
|
||||
margin:0;
|
||||
padding:0
|
||||
}
|
||||
|
||||
.route_clear, .route_presets {
|
||||
display:inline-block
|
||||
}
|
Loading…
Add table
Reference in a new issue