Better regioning and "use local files" now works

This commit is contained in:
Campbell 2024-04-13 22:54:25 -04:00
parent b528a87175
commit 249585f531
Signed by: NinjaCheetah
GPG Key ID: B547958AF96ED344
4 changed files with 202 additions and 62 deletions

View File

@ -6,10 +6,12 @@ import pathlib
import libWiiPy import libWiiPy
from PySide6.QtWidgets import QApplication, QMainWindow, QMessageBox, QTreeWidgetItem from PySide6.QtWidgets import QApplication, QMainWindow, QMessageBox, QTreeWidgetItem
from PySide6.QtCore import QRunnable, Slot, QThreadPool, Signal, QObject from PySide6.QtCore import QRunnable, Slot, QThreadPool, Signal, QObject, Qt
from qt.py.ui_MainMenu import Ui_MainWindow from qt.py.ui_MainMenu import Ui_MainWindow
regions = [["USA", "USA/NTSC", "45"], ["JAP", "Japan", "4A"], ["EUR", "Europe/PAL", "50"], ["KOR", "Korea", "4B"]]
class WorkerSignals(QObject): class WorkerSignals(QObject):
result = Signal(int) result = Signal(int)
@ -29,6 +31,7 @@ class Worker(QRunnable):
def run(self): def run(self):
try: try:
self.fn(**self.kwargs) self.fn(**self.kwargs)
# TODO: Handle errors better than this
except ValueError: except ValueError:
self.signals.result.emit(1) self.signals.result.emit(1)
else: else:
@ -48,17 +51,29 @@ class MainWindow(QMainWindow, Ui_MainWindow):
tree = self.ui.title_tree tree = self.ui.title_tree
self.tree_categories = [] self.tree_categories = []
global regions
for key in wii_database: for key in wii_database:
new_category = QTreeWidgetItem() new_category = QTreeWidgetItem()
new_category.setText(0, key) new_category.setText(0, key)
for title in wii_database[key]: for title in wii_database[key]:
new_title = QTreeWidgetItem() new_title = QTreeWidgetItem()
new_title.setText(0, title["TID"] + " - " + title["Name"]) new_title.setText(0, title["TID"] + " - " + title["Name"])
for version in title["Versions"]:
new_version = QTreeWidgetItem()
new_version.setText(0, str(version))
new_title.addChild(new_version) for region in title["Versions"]:
new_region = QTreeWidgetItem()
region_title = ""
if region == "World":
region_title = "World"
else:
for entry in regions:
if entry[0] == region:
region_title = entry[1]
new_region.setText(0, region_title)
for version in title["Versions"][region]:
new_version = QTreeWidgetItem()
new_version.setText(0, "v" + str(version))
new_region.addChild(new_version)
new_title.addChild(new_region)
new_category.addChild(new_title) new_category.addChild(new_title)
self.tree_categories.append(new_category) self.tree_categories.append(new_category)
@ -67,13 +82,18 @@ class MainWindow(QMainWindow, Ui_MainWindow):
@Slot(QTreeWidgetItem, int) @Slot(QTreeWidgetItem, int)
def onItemClicked(self, item, col): def onItemClicked(self, item, col):
global regions
region_names = []
for region in regions:
region_names.append(region[1])
if item.parent() is not None and item.parent() not in self.tree_categories: if item.parent() is not None and item.parent() not in self.tree_categories:
category = item.parent().parent().text(0) category = item.parent().parent().parent().text(0)
for title in wii_database[category]: for title in wii_database[category]:
if item.parent().text(0) == (title["TID"] + " - " + title["Name"]): if item.parent().parent().text(0) == (title["TID"] + " - " + title["Name"]):
selected_title = title selected_title = title
selected_version = item.text(0) selected_version = item.text(0)
self.load_title_data(selected_title, selected_version) selected_region = item.parent().text(0)
self.load_title_data(selected_title, selected_version, selected_region)
def update_log_text(self, new_text): def update_log_text(self, new_text):
self.log_text += new_text + "\n" self.log_text += new_text + "\n"
@ -82,8 +102,18 @@ class MainWindow(QMainWindow, Ui_MainWindow):
scrollBar = self.ui.log_text_browser.verticalScrollBar() scrollBar = self.ui.log_text_browser.verticalScrollBar()
scrollBar.setValue(scrollBar.maximum()) scrollBar.setValue(scrollBar.maximum())
def load_title_data(self, selected_title, selected_version): def load_title_data(self, selected_title, selected_version, selected_region=None):
self.ui.tid_entry.setText(selected_title["TID"]) selected_version = selected_version[1:]
if selected_title["TID"][-2:] == "XX":
global regions
region_code = ""
for region in regions:
if region[1] == selected_region:
region_code = region[2]
tid = selected_title["TID"][:-2] + region_code
else:
tid = selected_title["TID"]
self.ui.tid_entry.setText(tid)
self.ui.version_entry.setText(selected_version) self.ui.version_entry.setText(selected_version)
wad_name = selected_title["WAD Name"] + "-v" + selected_version + ".wad" wad_name = selected_title["WAD Name"] + "-v" + selected_version + ".wad"
self.ui.wad_file_entry.setText(wad_name) self.ui.wad_file_entry.setText(wad_name)
@ -92,8 +122,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
danger_text = selected_title["Danger"] danger_text = selected_title["Danger"]
except KeyError: except KeyError:
pass pass
self.log_text = (selected_title["TID"] + " - " + selected_title["Name"] + "\n" + "Version: " + selected_version self.log_text = (tid + " - " + selected_title["Name"] + "\n" + "Version: " + selected_version + "\n\n" +
+ "\n\n" + danger_text + "\n") danger_text + "\n")
self.ui.log_text_browser.setText(self.log_text) self.ui.log_text_browser.setText(self.log_text)
def download_btn_pressed(self): def download_btn_pressed(self):
@ -164,19 +194,30 @@ class MainWindow(QMainWindow, Ui_MainWindow):
title.load_content_records() title.load_content_records()
content_list = [] content_list = []
for content in range(len(title.tmd.content_records)): for content in range(len(title.tmd.content_records)):
progress_callback.emit(" - Downloading content " + str(content + 1) + " of " + content_id_hex = hex(title.tmd.content_records[content].content_id)[2:]
str(len(title.tmd.content_records)) + " (" + if len(content_id_hex) < 2:
str(title.tmd.content_records[content].content_size) + " bytes)...") content_id_hex = "0" + content_id_hex
content_list.append(libWiiPy.download_content(tid, title.tmd.content_records[content].content_id)) content_file_name = "000000" + content_id_hex
progress_callback.emit(" - Done!") if self.ui.use_local_chkbox.isChecked() is True and os.path.exists(os.path.join(version_dir,
if self.ui.keep_enc_chkbox.isChecked() is True: content_file_name)):
content_id_hex = hex(title.tmd.content_records[content].content_id)[2:] progress_callback.emit(" - Using local copy of content " + str(content + 1) + " of " +
if len(content_id_hex) < 2: str(len(title.tmd.content_records)))
content_id_hex = "0" + content_id_hex local_file = open(os.path.join(version_dir, content_file_name), "rb")
content_file_name = "000000" + content_id_hex content_list.append(local_file.read())
enc_content_out = open(os.path.join(version_dir, content_file_name), "wb") else:
enc_content_out.write(content_list[content]) progress_callback.emit(" - Downloading content " + str(content + 1) + " of " +
enc_content_out.close() str(len(title.tmd.content_records)) + " (" +
str(title.tmd.content_records[content].content_size) + " bytes)...")
content_list.append(libWiiPy.download_content(tid, title.tmd.content_records[content].content_id))
progress_callback.emit(" - Done!")
if self.ui.keep_enc_chkbox.isChecked() is True:
content_id_hex = hex(title.tmd.content_records[content].content_id)[2:]
if len(content_id_hex) < 2:
content_id_hex = "0" + content_id_hex
content_file_name = "000000" + content_id_hex
enc_content_out = open(os.path.join(version_dir, content_file_name), "wb")
enc_content_out.write(content_list[content])
enc_content_out.close()
title.content.content_list = content_list title.content.content_list = content_list
if self.ui.create_dec_chkbox.isChecked() is True: if self.ui.create_dec_chkbox.isChecked() is True:

View File

@ -116,7 +116,7 @@ class Ui_MainWindow(object):
self.use_local_chkbox = QCheckBox(self.centralwidget) self.use_local_chkbox = QCheckBox(self.centralwidget)
self.use_local_chkbox.setObjectName(u"use_local_chkbox") self.use_local_chkbox.setObjectName(u"use_local_chkbox")
self.use_local_chkbox.setEnabled(False) self.use_local_chkbox.setEnabled(True)
self.verticalLayout_3.addWidget(self.use_local_chkbox) self.verticalLayout_3.addWidget(self.use_local_chkbox)

View File

@ -159,7 +159,7 @@ p, li { white-space: pre-wrap; }
<item> <item>
<widget class="QCheckBox" name="use_local_chkbox"> <widget class="QCheckBox" name="use_local_chkbox">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>true</bool>
</property> </property>
<property name="text"> <property name="text">
<string>Use Local Files If They Exist</string> <string>Use Local Files If They Exist</string>

View File

@ -3,7 +3,9 @@
{ {
"Name": "boot2", "Name": "boot2",
"TID": "0000000100000001", "TID": "0000000100000001",
"Versions": [4], "Versions": {
"World": [4]
},
"Ticket": true, "Ticket": true,
"WAD Name": "boot2-NUS", "WAD Name": "boot2-NUS",
"Danger": "boot2 is a critical part of the Wii's boot process, and should not be modified. You're also likely to already be running boot2v4, which is the only version of boot2 available on the NUS." "Danger": "boot2 is a critical part of the Wii's boot process, and should not be modified. You're also likely to already be running boot2v4, which is the only version of boot2 available on the NUS."
@ -11,7 +13,12 @@
{ {
"Name": "System Menu", "Name": "System Menu",
"TID": "0000000100000002", "TID": "0000000100000002",
"Versions": [97, 128, 130, 162, 192, 193, 194, 224, 225, 226, 256, 257, 258, 288, 289, 290, 352, 353, 354, 384, 385, 386, 390, 416, 417, 418, 448, 449, 450, 454, 480, 481, 482, 486,512, 513, 514, 518], "Versions": {
"USA": [97, 193, 225, 257, 289, 353, 385, 417, 449, 481, 513],
"EUR": [130, 162, 194, 226, 258, 290, 354, 386, 418, 450, 482, 514],
"JAP": [128, 192, 224, 256, 288, 352, 384, 416, 448, 480, 512],
"KOR": [390, 454, 486, 518]
},
"Ticket": true, "Ticket": true,
"WAD Name": "RVL-WiiSystemmenu", "WAD Name": "RVL-WiiSystemmenu",
"Danger": "The System Menu is a critical part of the Wii's operation, and should not be modified without proper brick prevention in place. You should have BootMii installed as boot2 if possible, and if not, Priiloader installed before making changes to the System Menu." "Danger": "The System Menu is a critical part of the Wii's operation, and should not be modified without proper brick prevention in place. You should have BootMii installed as boot2 if possible, and if not, Priiloader installed before making changes to the System Menu."
@ -19,7 +26,9 @@
{ {
"Name": "BC", "Name": "BC",
"TID": "0000000100000100", "TID": "0000000100000100",
"Versions": [2, 4, 5, 6], "Versions": {
"World": [2, 4, 5, 6]
},
"Ticket": true, "Ticket": true,
"WAD Name": "BC-NUS", "WAD Name": "BC-NUS",
"Danger": "BC is required for the Wii's backwards compatibility with the GameCube. GameCube games will not run properly if BC is damaged or not present, and BC will need to be reinstalled." "Danger": "BC is required for the Wii's backwards compatibility with the GameCube. GameCube games will not run properly if BC is damaged or not present, and BC will need to be reinstalled."
@ -27,17 +36,47 @@
{ {
"Name": "MIOS", "Name": "MIOS",
"TID": "0000000100000101", "TID": "0000000100000101",
"Versions": [4, 5, 8, 9, 10], "Versions": {
"World": [4, 5, 8, 9, 10]
},
"Ticket": true, "Ticket": true,
"WAD Name": "MIOS-NUS", "WAD Name": "MIOS-NUS",
"Danger": "MIOS is required for the Wii's backwards compatibility with the GameCube. GameCube games will not run properly if MIOS is damaged or not present, and MIOS will need to be reinstalled." "Danger": "MIOS is required for the Wii's backwards compatibility with the GameCube. GameCube games will not run properly if MIOS is damaged or not present, and MIOS will need to be reinstalled."
},
{
"Name": "EULA",
"TID": "0001000848414BXX",
"Versions": {
"USA": [1, 2, 3],
"EUR": [1, 2, 3],
"JAP": [1, 2, 3],
"KOR": [1, 2, 3]
},
"Ticket": true,
"WAD Name": "EULA-NUS",
"Danger": "EULA is required to accept the End User License Agreement required to connect to WiiConnect24. Online services may not work correctly if EULA is damaged or not present, and EULA will need to be reinstalled."
},
{
"Name": "Region Select",
"TID": "0001000848414CXX",
"Versions": {
"USA": [1, 2],
"EUR": [1, 2],
"JAP": [1, 2],
"KOR": [2]
},
"Ticket": true,
"WAD Name": "Region-Select-NUS",
"Danger": "Region Select during the Wii's initial setup. It is unlikely to cause functional problems after initial setup, but you will not be able to set up your console again if you factory reset it if Region Select is damaged or not present, and Region Select will need to be reinstalled."
} }
], ],
"IOS": [ "IOS": [
{ {
"Name": "IOS 4", "Name": "IOS 4",
"TID": "0000000100000004", "TID": "0000000100000004",
"Versions": [65280], "Versions": {
"World": [65280]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS4-64", "WAD Name": "IOS4-64",
"Danger": "This IOS is a stub, and no longer offers any functionality. It cannot be used to run any code." "Danger": "This IOS is a stub, and no longer offers any functionality. It cannot be used to run any code."
@ -45,21 +84,27 @@
{ {
"Name": "IOS 9", "Name": "IOS 9",
"TID": "0000000100000009", "TID": "0000000100000009",
"Versions": [520, 521, 778, 1034], "Versions": {
"World": [520, 521, 778, 1034]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS9-64" "WAD Name": "IOS9-64"
}, },
{ {
"Name": "IOS 10", "Name": "IOS 10",
"TID": "000000010000000A", "TID": "000000010000000A",
"Versions": [768], "Versions": {
"World": [768]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS10-64" "WAD Name": "IOS10-64"
}, },
{ {
"Name": "IOS 11", "Name": "IOS 11",
"TID": "000000010000000B", "TID": "000000010000000B",
"Versions": [10, 256], "Versions": {
"World": [10, 256]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS11-64", "WAD Name": "IOS11-64",
"Danger": "Version 256 of IOS 11 is a stub, and no longer offers any functionality. It cannot be used to run any code. If you're using System Menu 2.0-2.1, DO NOT install version 256, as the System Menu relies on IOS 11." "Danger": "Version 256 of IOS 11 is a stub, and no longer offers any functionality. It cannot be used to run any code. If you're using System Menu 2.0-2.1, DO NOT install version 256, as the System Menu relies on IOS 11."
@ -67,35 +112,45 @@
{ {
"Name": "IOS 12", "Name": "IOS 12",
"TID": "000000010000000C", "TID": "000000010000000C",
"Versions": [6, 11, 12, 269, 525, 526], "Versions": {
"World": [6, 11, 12, 269, 525, 526]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS12-64" "WAD Name": "IOS12-64"
}, },
{ {
"Name": "IOS 13", "Name": "IOS 13",
"TID": "000000010000000D", "TID": "000000010000000D",
"Versions": [10, 15, 16, 273, 1031, 1032], "Versions": {
"World": [10, 15, 16, 273, 1031, 1032]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS13-64" "WAD Name": "IOS13-64"
}, },
{ {
"Name": "IOS 14", "Name": "IOS 14",
"TID": "000000010000000E", "TID": "000000010000000E",
"Versions": [262, 263, 520, 1031, 1032], "Versions": {
"World": [262, 263, 520, 1031, 1032]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS14-64" "WAD Name": "IOS14-64"
}, },
{ {
"Name": "IOS 15", "Name": "IOS 15",
"TID": "000000010000000F", "TID": "000000010000000F",
"Versions": [257, 258, 259, 260, 265, 266, 523, 1031, 1032], "Versions": {
"World": [257, 258, 259, 260, 265, 266, 523, 1031, 1032]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS15-64" "WAD Name": "IOS15-64"
}, },
{ {
"Name": "IOS 16", "Name": "IOS 16",
"TID": "0000000100000010", "TID": "0000000100000010",
"Versions": [512], "Versions": {
"World": [512]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS16-64", "WAD Name": "IOS16-64",
"Danger": "This IOS is a stub, and no longer offers any functionality. It cannot be used to run any code." "Danger": "This IOS is a stub, and no longer offers any functionality. It cannot be used to run any code."
@ -103,14 +158,18 @@
{ {
"Name": "IOS 17", "Name": "IOS 17",
"TID": "0000000100000011", "TID": "0000000100000011",
"Versions": [512, 517, 518, 775, 1031, 1032], "Versions": {
"World": [512, 517, 518, 775, 1031, 1032]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS17-64" "WAD Name": "IOS17-64"
}, },
{ {
"Name": "IOS 20", "Name": "IOS 20",
"TID": "0000000100000014", "TID": "0000000100000014",
"Versions": [12, 256], "Versions": {
"World": [12, 256]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS20-64", "WAD Name": "IOS20-64",
"Danger": "Version 256 of IOS 20 is a stub, and no longer offers any functionality. It cannot be used to run any code. If you're using System Menu 2.2, DO NOT install version 256, as the System Menu relies on IOS 20." "Danger": "Version 256 of IOS 20 is a stub, and no longer offers any functionality. It cannot be used to run any code. If you're using System Menu 2.2, DO NOT install version 256, as the System Menu relies on IOS 20."
@ -118,28 +177,36 @@
{ {
"Name": "IOS 21", "Name": "IOS 21",
"TID": "0000000100000015", "TID": "0000000100000015",
"Versions": [514, 515, 516, 517, 522, 525, 782, 1038, 1039], "Versions": {
"World": [514, 515, 516, 517, 522, 525, 782, 1038, 1039]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS21-64" "WAD Name": "IOS21-64"
}, },
{ {
"Name": "IOS 22", "Name": "IOS 22",
"TID": "0000000100000016", "TID": "0000000100000016",
"Versions": [777, 780, 1037, 1293, 1294], "Versions": {
"World": [777, 780, 1037, 1293, 1294]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS22-64" "WAD Name": "IOS22-64"
}, },
{ {
"Name": "IOS 28", "Name": "IOS 28",
"TID": "000000010000001C", "TID": "000000010000001C",
"Versions": [1292, 1293, 1550, 1806, 1807], "Versions": {
"World": [1292, 1293, 1550, 1806, 1807]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS28-64" "WAD Name": "IOS28-64"
}, },
{ {
"Name": "IOS 30", "Name": "IOS 30",
"TID": "000000010000001E", "TID": "000000010000001E",
"Versions": [1037, 1039, 1040, 2576, 2816], "Versions": {
"World": [1037, 1039, 1040, 2576, 2816]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS30-64", "WAD Name": "IOS30-64",
"Danger": "Version 2816 of IOS 30 is a stub, and no longer offers any functionality. It cannot be used to run any code. If you're using System Menu 3.0-3.3, DO NOT install version 2816, as the System Menu relies on IOS 30." "Danger": "Version 2816 of IOS 30 is a stub, and no longer offers any functionality. It cannot be used to run any code. If you're using System Menu 3.0-3.3, DO NOT install version 2816, as the System Menu relies on IOS 30."
@ -147,56 +214,72 @@
{ {
"Name": "IOS 31", "Name": "IOS 31",
"TID": "000000010000001F", "TID": "000000010000001F",
"Versions": [1037, 1039, 1040, 2576, 3088, 3092, 3349, 3607, 3608], "Versions": {
"World": [1037, 1039, 1040, 2576, 3088, 3092, 3349, 3607, 3608]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS31-64" "WAD Name": "IOS31-64"
}, },
{ {
"Name": "IOS 33", "Name": "IOS 33",
"TID": "0000000100000021", "TID": "0000000100000021",
"Versions": [1040, 2832, 2834, 3091, 3607, 3608], "Versions": {
"World": [1040, 2832, 2834, 3091, 3607, 3608]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS33-64" "WAD Name": "IOS33-64"
}, },
{ {
"Name": "IOS 34", "Name": "IOS 34",
"TID": "0000000100000022", "TID": "0000000100000022",
"Versions": [1039, 3087, 3091, 3348, 3607, 3608], "Versions": {
"World": [1039, 3087, 3091, 3348, 3607, 3608]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS34-64" "WAD Name": "IOS34-64"
}, },
{ {
"Name": "IOS 35", "Name": "IOS 35",
"TID": "0000000100000023", "TID": "0000000100000023",
"Versions": [1040, 3088, 3092, 3349, 3607, 3608], "Versions": {
"World": [1040, 3088, 3092, 3349, 3607, 3608]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS35-64" "WAD Name": "IOS35-64"
}, },
{ {
"Name": "IOS 36", "Name": "IOS 36",
"TID": "0000000100000024", "TID": "0000000100000024",
"Versions": [1042, 3090, 3094, 3351, 3607, 3608], "Versions": {
"World": [1042, 3090, 3094, 3351, 3607, 3608]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS36-64" "WAD Name": "IOS36-64"
}, },
{ {
"Name": "IOS 37", "Name": "IOS 37",
"TID": "0000000100000025", "TID": "0000000100000025",
"Versions": [2070, 3609, 3612, 3869, 5662, 5663], "Versions": {
"World": [2070, 3609, 3612, 3869, 5662, 5663]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS37-64" "WAD Name": "IOS37-64"
}, },
{ {
"Name": "IOS 38", "Name": "IOS 38",
"TID": "0000000100000026", "TID": "0000000100000026",
"Versions": [3610, 3867, 4123, 4124], "Versions": {
"World": [3610, 3867, 4123, 4124]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS38-64" "WAD Name": "IOS38-64"
}, },
{ {
"Name": "IOS 40", "Name": "IOS 40",
"TID": "0000000100000028", "TID": "0000000100000028",
"Versions": [3072], "Versions": {
"World": [3072]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS40-64", "WAD Name": "IOS40-64",
"Danger": "Version 3072 of IOS 40 is a stub, and no longer offers any functionality. It cannot be used to run any code. If you're using System Menu 3.3K, DO NOT install version 3072, as the System Menu relies on IOS 40." "Danger": "Version 3072 of IOS 40 is a stub, and no longer offers any functionality. It cannot be used to run any code. If you're using System Menu 3.3K, DO NOT install version 3072, as the System Menu relies on IOS 40."
@ -204,42 +287,54 @@
{ {
"Name": "IOS 41", "Name": "IOS 41",
"TID": "0000000100000029", "TID": "0000000100000029",
"Versions": [2835, 3091, 3348, 3606, 3607], "Versions": {
"World": [2835, 3091, 3348, 3606, 3607]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS41-64" "WAD Name": "IOS41-64"
}, },
{ {
"Name": "IOS 43", "Name": "IOS 43",
"TID": "000000010000002B", "TID": "000000010000002B",
"Versions": [2835, 3091, 3348, 3606, 3607], "Versions": {
"World": [2835, 3091, 3348, 3606, 3607]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS43-64" "WAD Name": "IOS43-64"
}, },
{ {
"Name": "IOS 45", "Name": "IOS 45",
"TID": "000000010000002D", "TID": "000000010000002D",
"Versions": [2835, 3091, 3348, 3606, 3607], "Versions": {
"World": [2835, 3091, 3348, 3606, 3607]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS45-64" "WAD Name": "IOS45-64"
}, },
{ {
"Name": "IOS 46", "Name": "IOS 46",
"TID": "000000010000002E", "TID": "000000010000002E",
"Versions": [2837, 3093, 3350, 3606, 3607], "Versions": {
"World": [2837, 3093, 3350, 3606, 3607]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS46-64" "WAD Name": "IOS46-64"
}, },
{ {
"Name": "IOS 48", "Name": "IOS 48",
"TID": "0000000100000030", "TID": "0000000100000030",
"Versions": [4123, 4124], "Versions": {
"World": [4123, 4124]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS48-64" "WAD Name": "IOS48-64"
}, },
{ {
"Name": "IOS 50", "Name": "IOS 50",
"TID": "0000000100000032", "TID": "0000000100000032",
"Versions": [4889, 5120], "Versions": {
"World": [4889, 5120]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS50-64", "WAD Name": "IOS50-64",
"Danger": "Version 5120 of IOS 50 is a stub, and no longer offers any functionality. It cannot be used to run any code. If you're using System Menu 3.3K, DO NOT install version 5120, as the System Menu relies on IOS 50." "Danger": "Version 5120 of IOS 50 is a stub, and no longer offers any functionality. It cannot be used to run any code. If you're using System Menu 3.3K, DO NOT install version 5120, as the System Menu relies on IOS 50."
@ -247,7 +342,9 @@
{ {
"Name": "IOS 51", "Name": "IOS 51",
"TID": "0000000100000033", "TID": "0000000100000033",
"Versions": [4633, 4864], "Versions": {
"World": [4633, 4864]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS51-64", "WAD Name": "IOS51-64",
"Danger": "Version 4864 of IOS 50 is a stub, and no longer offers any functionality. It cannot be used to run any code." "Danger": "Version 4864 of IOS 50 is a stub, and no longer offers any functionality. It cannot be used to run any code."
@ -255,7 +352,9 @@
{ {
"Name": "IOS 52", "Name": "IOS 52",
"TID": "0000000100000034", "TID": "0000000100000034",
"Versions": [5661, 5888], "Versions": {
"World": [5661, 5888]
},
"Ticket": true, "Ticket": true,
"WAD Name": "IOS52-64", "WAD Name": "IOS52-64",
"Danger": "Version 5888 of IOS 50 is a stub, and no longer offers any functionality. It cannot be used to run any code. If you're using System Menu 3.5, DO NOT install version 5888, as the System Menu relies on IOS 50." "Danger": "Version 5888 of IOS 50 is a stub, and no longer offers any functionality. It cannot be used to run any code. If you're using System Menu 3.5, DO NOT install version 5888, as the System Menu relies on IOS 50."