mirror of
https://github.com/rvtr/wiki.git
synced 2025-06-19 03:25:40 -04:00
Add simple GBA ROM title ID changer
This commit is contained in:
parent
bdd2186442
commit
f29fa2e445
@ -327,10 +327,29 @@ html[dir=rtl] {
|
|||||||
border-color: $light-border;
|
border-color: $light-border;
|
||||||
}
|
}
|
||||||
.form-control, .form-control:focus, .form-control::placeholder {
|
.form-control, .form-control:focus, .form-control::placeholder {
|
||||||
color: $light-placeholder;
|
color: $main-color;
|
||||||
background-color: $light;
|
background-color: $light;
|
||||||
border-color: $light-border;
|
border-color: $light-border;
|
||||||
}
|
}
|
||||||
|
.form-control:disabled {
|
||||||
|
background-color: $light-disabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group-text, .form-control::-webkit-file-upload-button {
|
||||||
|
background-color: $alert-secondary-bg;
|
||||||
|
color: $main-color;
|
||||||
|
}
|
||||||
|
.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
|
||||||
|
background-color: $alert-secondary-border;
|
||||||
|
}
|
||||||
|
// Safari is dumb and doesn't let the Firefox one be with the others
|
||||||
|
.form-control::file-selector-button {
|
||||||
|
background-color: $alert-secondary-bg;
|
||||||
|
color: $main-color;
|
||||||
|
}
|
||||||
|
.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
|
||||||
|
background-color: $alert-secondary-border;
|
||||||
|
}
|
||||||
|
|
||||||
// Cards
|
// Cards
|
||||||
.card {
|
.card {
|
||||||
|
@ -44,6 +44,7 @@ $dark: #f8f9fa;
|
|||||||
$light: #3f3f3f;
|
$light: #3f3f3f;
|
||||||
$light-border: #292929;
|
$light-border: #292929;
|
||||||
$light-placeholder: #999;
|
$light-placeholder: #999;
|
||||||
|
$light-disabled: #303030;
|
||||||
|
|
||||||
/// Import base style
|
/// Import base style
|
||||||
@import "base";
|
@import "base";
|
||||||
|
@ -44,6 +44,7 @@ $dark: #343a40;
|
|||||||
$light: #f8f9fa;
|
$light: #f8f9fa;
|
||||||
$light-border: #ced4da;
|
$light-border: #ced4da;
|
||||||
$light-placeholder: darkgray;
|
$light-placeholder: darkgray;
|
||||||
|
$light-disabled: #e9ecef;
|
||||||
|
|
||||||
/// Import base style
|
/// Import base style
|
||||||
@import "base";
|
@import "base";
|
||||||
|
64
assets/js/change-gba-tid.js
Normal file
64
assets/js/change-gba-tid.js
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
var rom = null;
|
||||||
|
var name = null;
|
||||||
|
|
||||||
|
function loadRom(file) {
|
||||||
|
// Read the file
|
||||||
|
var reader = new FileReader();
|
||||||
|
reader.readAsArrayBuffer(file);
|
||||||
|
reader.onload = function() {
|
||||||
|
rom = new Uint8Array(this.result);
|
||||||
|
name = file.name;
|
||||||
|
|
||||||
|
// Simple check if GBA ROM
|
||||||
|
if(rom[0xB2] != 0x96) {
|
||||||
|
document.getElementById("tid-input").value = "";
|
||||||
|
document.getElementById("tid-input").disabled = true;
|
||||||
|
document.getElementById("save").disabled = true;
|
||||||
|
alert("Error! File is not a valid GBA ROM.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the title ID
|
||||||
|
var titleId = "";
|
||||||
|
for(var i = 0; i < 4; i++)
|
||||||
|
titleId += String.fromCharCode(rom[0xAC + i]);
|
||||||
|
|
||||||
|
// Enable TID input
|
||||||
|
document.getElementById("tid-input").value = titleId;
|
||||||
|
document.getElementById("tid-input").disabled = false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateTid(newTid) {
|
||||||
|
// Check that it's the right length
|
||||||
|
if(newTid.length != 4) {
|
||||||
|
document.getElementById("save").disabled = true;
|
||||||
|
alert("Error! Title ID must be exactly 4 ASCII letters long");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the new TID
|
||||||
|
for(var i = 0; i < 4; i++) {
|
||||||
|
var charCode = newTid.charCodeAt(i);
|
||||||
|
if(charCode > 0x7F) {
|
||||||
|
document.getElementById("save").disabled = true;
|
||||||
|
alert("Error! Title ID must be exactly 4 ASCII letters long");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
rom[0xAC + i] = charCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enable saving
|
||||||
|
document.getElementById("save").disabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function save() {
|
||||||
|
// Save the updated file
|
||||||
|
var blob = new Blob([rom], {type: "application/octet-stream"});
|
||||||
|
var a = document.createElement("a");
|
||||||
|
var url = window.URL.createObjectURL(blob);
|
||||||
|
a.href = url;
|
||||||
|
a.download = name;
|
||||||
|
a.click();
|
||||||
|
window.URL.revokeObjectURL(url);
|
||||||
|
}
|
@ -25,4 +25,14 @@ Usually, the builds that are included with TWiLight Menu++ is enough. For more i
|
|||||||
You will need a build from the [wifi_link](https://github.com/Gericom/GBARunner2/tree/wifi_link) branch to use the features. You can find detailed instructions on how to setup the builds on its [GBAtemp Wiki page](https://wiki.gbatemp.net/wiki/GBARunner2/Link).
|
You will need a build from the [wifi_link](https://github.com/Gericom/GBARunner2/tree/wifi_link) branch to use the features. You can find detailed instructions on how to setup the builds on its [GBAtemp Wiki page](https://wiki.gbatemp.net/wiki/GBARunner2/Link).
|
||||||
|
|
||||||
#### Why isn't RTC (Real Time Clock) supported in a ROM hack?
|
#### Why isn't RTC (Real Time Clock) supported in a ROM hack?
|
||||||
RTC is supported on a per-game basis. You will have to change the ROM's game code to that of the original game so that GBARunner2 will recognize it.
|
RTC is supported on a per-game basis. You will have to change the ROM's title ID to that of a game that supports RTC so that GBARunner2 will recognize it.
|
||||||
|
|
||||||
|
You can change the game code using the following:
|
||||||
|
1. <label for="file-input" class="form-label">Select GBA ROM file:</label>
|
||||||
|
<input id="file-input" class="form-control mb-2" type="file" onchange="loadRom(this.files[0])">
|
||||||
|
1. <label for="file-input" class="form-label">Enter desired title ID:</label>
|
||||||
|
<input id="tid-input" class="form-control mb-2" type="text" maxlength="4" onchange="updateTid(this.value)" disabled>
|
||||||
|
3. <label for="file-input" class="form-label">Save updated file:</label>
|
||||||
|
<input id="save" class="btn btn-secondary" type="button" value="Save" onclick="save()" disabled>
|
||||||
|
|
||||||
|
<script src="/assets/js/change-gba-tid.js"></script>
|
||||||
|
Loading…
Reference in New Issue
Block a user