*added ability to boot main.dol directly for channels (real and emu). The launcher method can be setup in the loader setting.

*added channel hooking (real and emu).
*proper catch of none existing cheats on server if file is not found
*added back channel nand emulation mode and per game nand emu settings for channels (emulation mode can't be set to OFF for emu channels)
*improved handle of cached titles. (on first boot of this revision the cache title file will be renewed)
*settings title, keyboard text and key color can be changed by themes now
*added optional background image for list/carousel/grid layouts. The files do not actually exist in the loader. They are loaded if they exists otherwise the default background image is used.See here for filenames: http://code.google.com/p/usbloader-gui/source/browse/trunk/source/themes/filelist.h?r=1148#776
*add flush of homebrew memory before launching app_booter
*change: if titles from wiitdb is not enabled the title will be read from game disc header on /title [ID6]/[ID6].wbfs (iso/ciso) pattern. Title caching can still be used and is recommended in that case.
*added keep of AHBPROT flag on IOS Reload. Homebrews booted now have AHBPROT. (thanks davebaol)
*fixed loading ocarina files from SD when doing nand emulation from SD
*fix port libs includes reference in Makefile
This commit is contained in:
strtoul 2012-01-08 18:24:46 +00:00
parent b9c86e8db9
commit 63631b8028
56 changed files with 1390 additions and 943 deletions

View File

@ -2,8 +2,8 @@
<app version="1">
<name> USB Loader GX</name>
<coder>USB Loader GX Team</coder>
<version>2.3 r1147</version>
<release_date>201201052225</release_date>
<version>2.3 r1148</version>
<release_date>201201081807</release_date>
<!-- // remove this line to enable arguments
<arguments>
<arg>--ios=250</arg>

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: David Jelinek (djelinek@hotmail.com) e->e,r->r,u->u, c->c \n"
"Language-Team: r1056 - last version on http://djelinek.sweb.cz/_USBLoderGX/czech.lang \n"
@ -235,6 +235,9 @@ msgstr "Zablokovat spouštění titulu"
msgid "Block Updates"
msgstr "Zablokovat aktualizace"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr ""
@ -290,6 +293,9 @@ msgstr ""
msgid "Change Play Path"
msgstr "Zmena cesty prehrávání"
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr ""
@ -1048,6 +1054,9 @@ msgstr "Hudební smycka"
msgid "Loop Sound"
msgstr "Zvuková smycka"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr "Muj tester:"
@ -1078,6 +1087,9 @@ msgstr "Mód hudební smycky"
msgid "Music Volume"
msgstr "Hlasitost hudby"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: Fox888[dk]\n"
"Language-Team: [dk]\n"
@ -235,6 +235,9 @@ msgstr "Bloker indlæsning af titler"
msgid "Block Updates"
msgstr "Bloker opdateringer"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr ""
@ -290,6 +293,9 @@ msgstr "Kategorier:"
msgid "Change Play Path"
msgstr "Ændre sti til musik"
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr ""
@ -1048,6 +1054,9 @@ msgstr "Afspil musik i løkke"
msgid "Loop Sound"
msgstr "Afspil lyd i løkke"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr "Hoved tester:"
@ -1078,6 +1087,9 @@ msgstr "Musik i løkke"
msgid "Music Volume"
msgstr "Lydstyrke"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2011-12-17 14:22+0100\n"
"Last-Translator: Arthur117\n"
"Language-Team: tj_cool, glowy, Arthur117\n"
@ -235,6 +235,9 @@ msgstr "Blokkeer Titel Launcher"
msgid "Block Updates"
msgstr "Blokkeer Updates"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "Start/Standaard"
@ -290,6 +293,9 @@ msgstr "Categorieën:"
msgid "Change Play Path"
msgstr "Verander afspeel locatie"
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr ""
@ -1048,6 +1054,9 @@ msgstr "Herhaal Muziek"
msgid "Loop Sound"
msgstr "Geluid herhalen"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr "Hoofd tester:"
@ -1078,6 +1087,9 @@ msgstr "Muziek Herhaal Mode"
msgid "Music Volume"
msgstr "Muziekvolume"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -235,6 +235,9 @@ msgstr ""
msgid "Block Updates"
msgstr ""
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr ""
@ -290,6 +293,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr ""
@ -1048,6 +1054,9 @@ msgstr ""
msgid "Loop Sound"
msgstr ""
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr ""
@ -1078,6 +1087,9 @@ msgstr ""
msgid "Music Volume"
msgstr ""
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: c64rmx\n"
"Language-Team: \n"
@ -235,6 +235,9 @@ msgstr ""
msgid "Block Updates"
msgstr ""
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "Käynnistys/Standardi"
@ -290,6 +293,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr ""
@ -1048,6 +1054,9 @@ msgstr ""
msgid "Loop Sound"
msgstr ""
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr ""
@ -1078,6 +1087,9 @@ msgstr ""
msgid "Music Volume"
msgstr "Voimakkuus"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: Cyan\n"
"Language-Team: Badablek, Amour, ikya, Cyan & Kin8\n"
@ -235,6 +235,9 @@ msgstr "Bloquer Menu Chaînes"
msgid "Block Updates"
msgstr "Bloquer Mise à jour"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "IOS par défaut"
@ -290,6 +293,9 @@ msgstr "Catégories:"
msgid "Change Play Path"
msgstr "Changer dossier"
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr "Chaînes"
@ -1048,6 +1054,9 @@ msgstr "Répéter musique"
msgid "Loop Sound"
msgstr "Intro en boucle"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr "Testeur:"
@ -1078,6 +1087,9 @@ msgstr "Type de boucle"
msgid "Music Volume"
msgstr "Volume musique"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr "Chaînes sur Nand réel"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2010-07-03 17:35-0800\n"
"Last-Translator: TheRealVisitor\n"
"Language-Team: Bertilax, Snoozer, wishmasterf, ZEN.13, TheRealVisitor\n"
@ -235,6 +235,9 @@ msgstr "Blocke Title Launcher"
msgid "Block Updates"
msgstr "Blocke Updates"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "Bootstandard (cIOS)"
@ -290,6 +293,9 @@ msgstr "Kategorien:"
msgid "Change Play Path"
msgstr "Pfad ändern"
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr "Kanäle"
@ -1048,6 +1054,9 @@ msgstr "Wiederholung"
msgid "Loop Sound"
msgstr "Wiederholung"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr "Haupttester:"
@ -1078,6 +1087,9 @@ msgstr "HGM Wiederholung"
msgid "Music Volume"
msgstr "Musik Lautstärke"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr "Nand Kanäle"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-12-29 11:05+0100\n"
"Last-Translator: Springdale\n"
"Language-Team: Tusk, Springdale\n"
@ -235,6 +235,9 @@ msgstr ""
msgid "Block Updates"
msgstr ""
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "Boot/Alapértelmezett"
@ -290,6 +293,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr "Csatornák"
@ -1048,6 +1054,9 @@ msgstr ""
msgid "Loop Sound"
msgstr "Folyamatos hang"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr ""
@ -1078,6 +1087,9 @@ msgstr ""
msgid "Music Volume"
msgstr "Zene Hangerõ"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2011-09-11 12:19+0100\n"
"Last-Translator: xFede\n"
"Language-Team: Cambo\n"
@ -235,6 +235,9 @@ msgstr "Blocca Avvia Titoli"
msgid "Block Updates"
msgstr "Blocca Aggiornamenti"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "cIOS Predefinito"
@ -290,6 +293,9 @@ msgstr "Categorie:"
msgid "Change Play Path"
msgstr "Cambia Percorso Musica"
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr "Canali"
@ -1048,6 +1054,9 @@ msgstr "Ripeti Brano"
msgid "Loop Sound"
msgstr "Suono Ripetuto"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr "Tester principale:"
@ -1078,6 +1087,9 @@ msgstr "Ripeti Musica Sottof."
msgid "Music Volume"
msgstr "Volume Musica"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr "Canali NAND"
@ -1817,4 +1829,4 @@ msgid "of"
msgstr "di"
msgid "seconds left"
msgstr "secondi rimanenti"
msgstr "secondi rimanenti"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: hosigumayuugi\n"
"Language-Team: hosigumayuugi\n"
@ -235,6 +235,9 @@ msgstr "タイトル起動を制限"
msgid "Block Updates"
msgstr "更新を制限"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "使用するcIOS"
@ -290,6 +293,9 @@ msgstr "カテゴリ:"
msgid "Change Play Path"
msgstr "パスの変更"
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr "チャンネル"
@ -1048,6 +1054,9 @@ msgstr "ループさせる"
msgid "Loop Sound"
msgstr "ループさせる"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr "メインテスター:"
@ -1078,6 +1087,9 @@ msgstr "ループ機能"
msgid "Music Volume"
msgstr "BGMの音量"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr "Wii本体NANDチャンネル"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: nextos@korea.com\n"
"Language-Team: \n"
@ -235,6 +235,9 @@ msgstr ""
msgid "Block Updates"
msgstr ""
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "기본 부팅설정"
@ -290,6 +293,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr ""
@ -1048,6 +1054,9 @@ msgstr ""
msgid "Loop Sound"
msgstr ""
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr ""
@ -1078,6 +1087,9 @@ msgstr ""
msgid "Music Volume"
msgstr "음량"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: raschi\n"
"Language-Team: raschi\n"
@ -235,6 +235,9 @@ msgstr "Blokkér title launcher"
msgid "Block Updates"
msgstr "Blokkér oppdateringer"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "Boot/Standard"
@ -290,6 +293,9 @@ msgstr "Kategorier:"
msgid "Change Play Path"
msgstr "Endre spill sti"
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr ""
@ -1048,6 +1054,9 @@ msgstr "Loop musikk"
msgid "Loop Sound"
msgstr "Loop lyd"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr "Hovedtester:"
@ -1078,6 +1087,9 @@ msgstr "Musikk loop modus"
msgid "Music Volume"
msgstr "Musikk volum"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: ziom666 (zadania_prog@vp.pl)\n"
"Language-Team: \n"
@ -235,6 +235,9 @@ msgstr ""
msgid "Block Updates"
msgstr ""
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr ""
@ -290,6 +293,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr "Kanaly"
@ -1048,6 +1054,9 @@ msgstr ""
msgid "Loop Sound"
msgstr "Zapetl dzwieki"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr ""
@ -1078,6 +1087,9 @@ msgstr ""
msgid "Music Volume"
msgstr "Poziom glosnosci"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-23 18:52+0200\n"
"Last-Translator: aniemotion\n"
"Language-Team: boto12, aniemotion\n"
@ -235,6 +235,9 @@ msgstr "Bloquear título do lançador"
msgid "Block Updates"
msgstr "Bloquear atualizações"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "Carregar/Standard"
@ -290,6 +293,9 @@ msgstr "Categorias:"
msgid "Change Play Path"
msgstr "Alterar Caminho para Play"
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr ""
@ -1048,6 +1054,9 @@ msgstr "Repitir Música"
msgid "Loop Sound"
msgstr "Repitir Som"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr ""
@ -1078,6 +1087,9 @@ msgstr "Modo Repetição de Música"
msgid "Music Volume"
msgstr "Volume da Música"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2011-11-03 11:00+0000\n"
"Last-Translator: pplucky <pplucky@gmail.com>\n"
"Language-Team: Sky8000, pplucky\n"
@ -235,6 +235,9 @@ msgstr "Bloquear Gestor de Títulos"
msgid "Block Updates"
msgstr "Bloquear Actualizações"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "Arranque/Std"
@ -290,6 +293,9 @@ msgstr "Categorias:"
msgid "Change Play Path"
msgstr "Alterar Caminho de Músicas"
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr ""
@ -1048,6 +1054,9 @@ msgstr "Repetir Música"
msgid "Loop Sound"
msgstr "Repetir Sons"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr "Tester principal:"
@ -1078,6 +1087,9 @@ msgstr "Modo de Repetição"
msgid "Music Volume"
msgstr "Volume Música"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: nikolai_ca\n"
"Language-Team: Kir, alendit, nikolai_ca\n"
@ -235,6 +235,9 @@ msgstr ""
msgid "Block Updates"
msgstr ""
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "Загрузка/Стандарт"
@ -290,6 +293,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr "Каналы"
@ -1048,6 +1054,9 @@ msgstr ""
msgid "Loop Sound"
msgstr "Зациклить звут"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr ""
@ -1078,6 +1087,9 @@ msgstr ""
msgid "Music Volume"
msgstr "Громкость"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: knife.hu kavid emul8ion\n"
"Language-Team: kavid\n"
@ -235,6 +235,9 @@ msgstr "Title启动器"
msgid "Block Updates"
msgstr "更新"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "启动/标准"
@ -290,6 +293,9 @@ msgstr ""
msgid "Change Play Path"
msgstr "更改游戏路径"
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr "频道"
@ -1048,6 +1054,9 @@ msgstr "循环音乐"
msgid "Loop Sound"
msgstr "循环声音"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr "主要测试员"
@ -1078,6 +1087,9 @@ msgstr "音乐循环模式"
msgid "Music Volume"
msgstr "音量"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2011-07-25 16:40+0200\n"
"Last-Translator: Galen/xFede\n"
"Language-Team: Penn, SirPalax, hvy109\n"
@ -235,6 +235,9 @@ msgstr "Bloq. Lanzador Canales"
msgid "Block Updates"
msgstr "Bloq. Actualizaciones"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "Inicio/Estándar"
@ -290,6 +293,9 @@ msgstr "Categorías:"
msgid "Change Play Path"
msgstr "Cambiar Ruta"
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr ""
@ -1048,6 +1054,9 @@ msgstr "Bucle musical"
msgid "Loop Sound"
msgstr "Bucle de sonido"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr "Probador principal:"
@ -1078,6 +1087,9 @@ msgstr "Modo Bucle Musical"
msgid "Music Volume"
msgstr "Volumen de la Música"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2010-01-19 17:39+0200\n"
"Last-Translator: Katsurou\n"
"Language-Team: Katsurou, pirateX\n"
@ -235,6 +235,9 @@ msgstr ""
msgid "Block Updates"
msgstr ""
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "Boot/Standard"
@ -290,6 +293,9 @@ msgstr ""
msgid "Change Play Path"
msgstr "Ändra spel sökväg"
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr "Kannaler"
@ -1048,6 +1054,9 @@ msgstr ""
msgid "Loop Sound"
msgstr "Loopa ljudet"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr ""
@ -1078,6 +1087,9 @@ msgstr "Musik Återuppspelningsläge"
msgid "Music Volume"
msgstr "Volym"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2010-02-15 21:00+0800\n"
"Last-Translator: Jane.H\n"
"Language-Team: kyogc, Miller, Mika Li, Jane.H\n"
@ -235,6 +235,9 @@ msgstr "封鎖 Title 啟動"
msgid "Block Updates"
msgstr "封鎖更新"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "啟動/標準"
@ -290,6 +293,9 @@ msgstr "類別:"
msgid "Change Play Path"
msgstr "變更執行路徑"
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr ""
@ -1048,6 +1054,9 @@ msgstr "重複音樂"
msgid "Loop Sound"
msgstr "重複音樂"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr "主要測試者:"
@ -1078,6 +1087,9 @@ msgstr "音樂循環模式"
msgid "Music Volume"
msgstr "音樂音量"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: Nitro_subzero \n"
"Language-Team: Nitro_subzero\n"
@ -235,6 +235,9 @@ msgstr ""
msgid "Block Updates"
msgstr ""
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "บูต/มาตราฐาน"
@ -290,6 +293,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr "แชนแนล"
@ -1048,6 +1054,9 @@ msgstr ""
msgid "Loop Sound"
msgstr "เล่นเสียงซ้ำ"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr ""
@ -1078,6 +1087,9 @@ msgstr ""
msgid "Music Volume"
msgstr "ความดังเสียงเพลง"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-03 19:16+0100\n"
"POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: omercigingelini\n"
"Language-Team: omercigingelini\n"
@ -235,6 +235,9 @@ msgstr ""
msgid "Block Updates"
msgstr ""
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard"
msgstr "Boot/Standart"
@ -290,6 +293,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channel Launcher"
msgstr ""
msgid "Channels"
msgstr "Kanallar"
@ -1048,6 +1054,9 @@ msgstr ""
msgid "Loop Sound"
msgstr "Döngüdeki Ses"
msgid "Main DOL"
msgstr ""
msgid "Main tester:"
msgstr ""
@ -1078,6 +1087,9 @@ msgstr ""
msgid "Music Volume"
msgstr "Ses Seviyesi"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels"
msgstr ""

View File

@ -133,8 +133,8 @@ export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \
#---------------------------------------------------------------------------------
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
-I$(CURDIR)/$(BUILD) \
-I$(LIBOGC_INC) -I$(PORTLIBS)/include/freetype2
-I$(CURDIR)/$(BUILD) -I$(LIBOGC_INC) \
-I$(PORTLIBS) -I$(PORTLIBS)/include/freetype2
#---------------------------------------------------------------------------------
# build a list of library paths

File diff suppressed because it is too large Load Diff

View File

@ -52,6 +52,9 @@ do
echo -e '\t{"'$i'", '$filename'_'$extension', '$filename'_'$extension'_size, NULL, 0},' >> $outFile
done
echo -e '\t{"listBackground.png", NULL, 0, NULL, 0},\t// Optional' >> $outFile
echo -e '\t{"carouselBackground.png", NULL, 0, NULL, 0},\t// Optional' >> $outFile
echo -e '\t{"gridBackground.png", NULL, 0, NULL, 0},\t// Optional' >> $outFile
echo -e '\t{NULL, NULL, 0, NULL, 0}' >> $outFile
echo '};' >> $outFile

File diff suppressed because one or more lines are too long

View File

@ -32,6 +32,7 @@
#include "settings/GameTitles.h"
#include "patches/gamepatches.h"
#include "wad/nandtitle.h"
#include "memory/memory.h"
#include "utils/lz77.h"
#include "gecko.h"
@ -141,34 +142,55 @@ vector<struct discHdr> & Channels::GetEmuHeaders(void)
u8 * Channels::GetDol(const u64 &title, u8 *tmdBuffer)
{
bool found = false;
static const u8 dolsign[6] = {0x00, 0x00, 0x01, 0x00, 0x00, 0x00};
static u8 dolhead[32] ATTRIBUTE_ALIGN(32);
u8 *buffer = NULL;
u32 filesize = 0;
u32 bootcontent;
u32 bootcontent = 0xDEADBEAF;
u32 high = TITLE_UPPER(title);
u32 low = TITLE_LOWER(title);
_tmd * tmd_file = (_tmd *) SIGNATURE_PAYLOAD((u32 *)tmdBuffer);
for(u32 i = 0; i < tmd_file->num_contents; ++i)
{
if(tmd_file->contents[i].index == tmd_file->boot_index)
{
bootcontent = tmd_file->contents[i].cid;
found = true;
break;
}
}
if(!found)
{
gprintf("Channel main.dol boot index not found\n");
return NULL;
}
char *filepath = (char *) memalign(32, ISFS_MAXPATH);
if(!filepath)
return NULL;
_tmd * tmd_file = (_tmd *) SIGNATURE_PAYLOAD((u32 *)tmdBuffer);
if(!Settings.UseChanLauncher)
{
for(u32 i = 0; i < tmd_file->num_contents; ++i)
{
if(tmd_file->contents[i].index == tmd_file->boot_index)
continue; // Skip loader
snprintf(filepath, ISFS_MAXPATH, "/title/%08x/%08x/content/%08x.app", high, low, tmd_file->contents[i].cid);
s32 fd = ISFS_Open(filepath, ISFS_OPEN_READ);
if(fd < 0)
continue;
s32 ret = ISFS_Read(fd, dolhead, 32);
ISFS_Close(fd);
if(ret != 32)
continue;
if(memcmp(dolhead, dolsign, sizeof(dolsign)) == 0)
{
bootcontent = tmd_file->contents[i].cid;
break;
}
}
}
//! Fall back to boot content if dol is not found
if(bootcontent == 0xDEADBEAF)
{
bootcontent = tmd_file->contents[tmd_file->boot_index].cid;
if(!Settings.UseChanLauncher) gprintf("Main dol not found -> ");
gprintf("Loading boot content index\n");
}
snprintf(filepath, ISFS_MAXPATH, "/title/%08x/%08x/content/%08x.app", high, low, bootcontent);
gprintf("Loading Channel DOL: %s\n", filepath);
@ -293,12 +315,18 @@ u32 Channels::LoadChannel(const u64 &chantitle)
if(dolfile->bss_start)
{
if(!(dolfile->bss_start & 0x80000000))
dolfile->bss_start |= 0x80000000;
dolfile->bss_start |= 0x80000000;
ICInvalidateRange((void *)dolfile->bss_start, dolfile->bss_size);
memset((void *)dolfile->bss_start, 0, dolfile->bss_size);
DCFlushRange((void *)dolfile->bss_start, dolfile->bss_size);
if(dolfile->bss_start < 0x81800000)
{
// For homebrews...not all have it clean.
if(dolfile->bss_start + dolfile->bss_size >= 0x81800000)
dolfile->bss_size = 0x81800000 - dolfile->bss_start;
memset((void *)dolfile->bss_start, 0, dolfile->bss_size);
DCFlushRange((void *)dolfile->bss_start, dolfile->bss_size);
ICInvalidateRange((void *)dolfile->bss_start, dolfile->bss_size);
}
}
int i;
@ -312,9 +340,9 @@ u32 Channels::LoadChannel(const u64 &chantitle)
u8 *dolChunkOffset = (u8 *)dolfile->section_start[i];
u32 dolChunkSize = dolfile->section_size[i];
ICInvalidateRange(dolChunkOffset, dolChunkSize);
memmove (dolChunkOffset, chanDOL + dolfile->section_pos[i], dolChunkSize);
DCFlushRange(dolChunkOffset, dolChunkSize);
ICInvalidateRange(dolChunkOffset, dolChunkSize);
RegisterDOL(dolChunkOffset, dolChunkSize);
}
@ -323,16 +351,22 @@ u32 Channels::LoadChannel(const u64 &chantitle)
free(dolfile);
// Preparations
memset((void *)Disc_ID, 0, 6);
*Disc_ID = TITLE_LOWER(chantitle); // Game ID
*Arena_H = 0; // Arena High, the apploader does this too
*BI2 = 0x817FE000; // BI2, the apploader does this too
*Bus_Speed = 0x0E7BE2C0; // bus speed
*CPU_Speed = 0x2B73A840; // cpu speed
*GameID_Address = 0x81000000; // Game id address, while there's all 0s at 0x81000000 when using the apploader...
memcpy((void *)Online_Check, (void *)Disc_ID, 4);// online check
memset((void *)0x817FE000, 0, 0x2000); // Clearing BI2
DCFlushRange((void*)0x817FE000, 0x2000);
// IOS Version Check
*(vu32*)0x80003140 = ((ios << 16)) | 0xFFFF;
*(vu32*)0x80003188 = ((ios << 16)) | 0xFFFF;
DCFlushRange((void *)0x80003140, 4);
DCFlushRange((void *)0x80003188, 4);
// Game ID Online Check
memset((void *)0x80000000, 0, 6);
*(vu32 *)0x80000000 = TITLE_LOWER(chantitle);
DCFlushRange((void *)0x80000000, 6);
ISFS_Deinitialize();

View File

@ -213,7 +213,7 @@ GuiKeyboard::GuiKeyboard(char * t, u32 max, int minimum, int lang)
keyTextboxImg->SetPosition(0, 40);//(0,0);
this->Append(keyTextboxImg);
kbText = new GuiText(kbtextstr, 20, ( GXColor ) {0, 0, 0, 0xff});
kbText = new GuiText(kbtextstr, 20, thColor("r=0 g=0 b=0 a=255 - keyboard text color"));
kbText->SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
kbText->SetPosition(0, 53);//(0, 13);
this->Append(kbText);
@ -238,13 +238,11 @@ GuiKeyboard::GuiKeyboard(char * t, u32 max, int minimum, int lang)
keyBackOverImg = new GuiImage(keyMedium);
if (mode == 3)
{
keyBackText = new GuiText("Retour", 20, ( GXColor )
{ 0, 0, 0, 0xff});
keyBackText = new GuiText("Retour", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
}
else
{
keyBackText = new GuiText("Back", 20, ( GXColor )
{ 0, 0, 0, 0xff});
keyBackText = new GuiText("Back", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
}
//keyBack = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight());
keyBack = new GuiButton(keyBackImg, keyBackOverImg, 0, 3, 11 * 42 + 40 + eurocheck, 0 * 42 + 120, trigA,
@ -271,13 +269,11 @@ GuiKeyboard::GuiKeyboard(char * t, u32 max, int minimum, int lang)
keyClearOverImg = new GuiImage(keyMedium);
if (mode == 3)
{
keyClearText = new GuiText("Effacer", 20, ( GXColor )
{ 0, 0, 0, 0xff});
keyClearText = new GuiText("Effacer", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
}
else
{
keyClearText = new GuiText("Clear", 20, ( GXColor )
{ 0, 0, 0, 0xff});
keyClearText = new GuiText("Clear", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
}
keyClear = new GuiButton(keyClearImg, keyClearOverImg, 0, 3, (10 * 42 + 40) + eurocheck, 4 * 42 + 120, trigA,
btnSoundOver, btnSoundClick, 1);
@ -294,8 +290,7 @@ GuiKeyboard::GuiKeyboard(char * t, u32 max, int minimum, int lang)
keyAltImg = new GuiImage(keyMedium);
keyAltOverImg = new GuiImage(keyMedium);
keyAltText = new GuiText("Alt Gr", 20, ( GXColor )
{ 0, 0, 0, 0xff});
keyAltText = new GuiText("Alt Gr", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
keyAlt = new GuiButton(keyAltImg, keyAltOverImg, 0, 3, 84 + eurocheck, 4 * 42 + 120, trigA, btnSoundOver,
btnSoundClick, 1);
//keyAlt = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight());
@ -314,8 +309,7 @@ GuiKeyboard::GuiKeyboard(char * t, u32 max, int minimum, int lang)
keyAlt2Img = new GuiImage(keyMedium);
keyAlt2OverImg = new GuiImage(keyMedium);
keyAlt2Text = new GuiText("Accent", 20, ( GXColor )
{ 0, 0, 0, 0xff});
keyAlt2Text = new GuiText("Accent", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
keyAlt2 = new GuiButton(keyAlt2Img, keyAlt2OverImg, 0, 3, (8 * 42 + 40) + eurocheck, 4 * 42 + 120, trigA,
btnSoundOver, btnSoundClick, 1);
//keyAlt2 = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight());
@ -334,8 +328,7 @@ GuiKeyboard::GuiKeyboard(char * t, u32 max, int minimum, int lang)
keyCapsImg = new GuiImage(keyMedium);
keyCapsOverImg = new GuiImage(keyMedium);
keyCapsText = new GuiText("Caps", 20, ( GXColor )
{ 0, 0, 0, 0xff});
keyCapsText = new GuiText("Caps", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
keyCaps = new GuiButton(keyCapsImg, keyCapsOverImg, 0, 3, 0 + eurocheck, 2 * 42 + 120, trigA, btnSoundOver,
btnSoundClick, 1);
//keyCaps = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight());
@ -351,8 +344,7 @@ GuiKeyboard::GuiKeyboard(char * t, u32 max, int minimum, int lang)
keyShiftImg = new GuiImage(keyMedium);
keyShiftOverImg = new GuiImage(keyMedium);
keyShiftText = new GuiText("Shift", 20, ( GXColor )
{ 0, 0, 0, 0xff});
keyShiftText = new GuiText("Shift", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
keyShift = new GuiButton(keyShiftImg, keyShiftOverImg, 0, 3, 21 + eurocheck, 3 * 42 + 120, trigA, btnSoundOver,
btnSoundClick, 1);
//keyShift = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight());
@ -391,8 +383,7 @@ GuiKeyboard::GuiKeyboard(char * t, u32 max, int minimum, int lang)
keyImg[i][j] = new GuiImage(key);
keyImgOver[i][j] = new GuiImage(keyOver);
txt[0] = keys[i][j].ch;
keyTxt[i][j] = new GuiText(txt, 20, ( GXColor )
{ 0, 0, 0, 0xff});
keyTxt[i][j] = new GuiText(txt, 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
keyTxt[i][j]->SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
keyTxt[i][j]->SetPosition(0, -10);
keyBtn[i][j] = new GuiButton(keyImg[i][j], keyImgOver[i][j], 0, 3, (j * 42 + 21 * i + 40) + eurocheck,

View File

@ -14,6 +14,7 @@
#include "settings/CGameSettings.h"
#include "settings/CGameStatistics.h"
#include "settings/CGameCategories.hpp"
#include "settings/GameTitles.h"
#include "usbloader/usbstorage2.h"
#include "usbloader/MountGamePartition.h"
#include "usbloader/GameBooter.hpp"
@ -261,6 +262,8 @@ int StartUpProcess::Execute()
gprintf("\tLoading game categories...%s\n", GameCategories.Load(Settings.ConfigPath) ? "done" : "failed");
gprintf("\tLoading font...%s\n", Theme::LoadFont(Settings.ConfigPath) ? "done" : "failed (using default)");
gprintf("\tLoading theme...%s\n", Theme::Load(Settings.theme) ? "done" : "failed (using default)");
if(Settings.CacheTitles)
gprintf("\tLoading cached titles...%s\n", GameTitles.ReadCachedTitles(Settings.titlestxt_path) ? "done" : "failed (using default)");
//! Init the rest of the System
Sys_Init();

View File

@ -10,6 +10,7 @@
#include <string>
#include "Controls/DeviceHandler.hpp"
#include "settings/CSettings.h"
#include "system/IosLoader.h"
#include "lstub.h"
#include "sys.h"
#include "gecko.h"
@ -97,13 +98,15 @@ static int RunAppbooter()
ExitApp();
if(Settings.EntryIOS != IOS_GetVersion())
IOS_ReloadIOS(Settings.EntryIOS);
IosLoader::ReloadIosKeepingRights(Settings.EntryIOS);
struct __argv args;
SetupARGV(&args);
u32 cpu_isr;
DCFlushRange(homebrewbuffer, homebrewsize);
memcpy(BOOTER_ADDR, app_booter_bin, app_booter_bin_size);
DCFlushRange(BOOTER_ADDR, app_booter_bin_size);

View File

@ -53,6 +53,9 @@ GameBrowseMenu::GameBrowseMenu()
gameCoverImg = NULL;
GameIDTxt = NULL;
GameRegionTxt = NULL;
listBackground = NULL;
carouselBackground = NULL;
gridBackground = NULL;
WDVD_GetCoverStatus(&DiscDriveCoverOld);
gameList.FilterList();
HDDSizeCallback.SetCallback(this, &GameBrowseMenu::UpdateFreeSpace);
@ -360,6 +363,12 @@ GameBrowseMenu::~GameBrowseMenu()
RemoveAll();
//! Reset optional background image
bgImg->SetImage(background);
delete listBackground;
delete carouselBackground;
delete gridBackground;
delete btnInstall;
delete btnInstallOver;
delete btnSettings;
@ -658,6 +667,16 @@ void GameBrowseMenu::ReloadBrowser()
gameBrowser->SetPosition(thInt("200 - game list layout pos x"), thInt("49 - game list layout pos y"));
gameBrowser->SetAlignment(ALIGN_LEFT, ALIGN_CENTRE);
gameBrowser->SetSelectedOption(Settings.SelectedGame);
//! Setup optional background image
const u8 *backgroundImgData = Resources::GetFile("listBackground.png");
u32 backgroundImgDataSize = Resources::GetFileSize("listBackground.png");
if(backgroundImgData && !listBackground)
listBackground = new GuiImageData(backgroundImgData, backgroundImgDataSize);
if(listBackground)
bgImg->SetImage(listBackground);
else
bgImg->SetImage(background);
}
else if (Settings.gameDisplay == GRID_MODE)
{
@ -694,6 +713,16 @@ void GameBrowseMenu::ReloadBrowser()
gameBrowser = new GuiGameGrid(thInt("640 - game grid layout width"), thInt("400 - game grid layout height"), Settings.theme_path, Settings.GameListOffset);
gameBrowser->SetPosition(thInt("0 - game grid layout pos x"), thInt("20 - game grid layout pos y"));
gameBrowser->SetAlignment(ALIGN_LEFT, ALIGN_CENTRE);
//! Setup optional background image
const u8 *backgroundImgData = Resources::GetFile("gridBackground.png");
u32 backgroundImgDataSize = Resources::GetFileSize("gridBackground.png");
if(backgroundImgData && !gridBackground)
gridBackground = new GuiImageData(backgroundImgData, backgroundImgDataSize);
if(gridBackground)
bgImg->SetImage(gridBackground);
else
bgImg->SetImage(background);
}
else if (Settings.gameDisplay == CAROUSEL_MODE)
{
@ -730,6 +759,16 @@ void GameBrowseMenu::ReloadBrowser()
gameBrowser = new GuiGameCarousel(thInt("640 - game carousel layout width"), thInt("400 - game carousel layout height"), Settings.theme_path, Settings.GameListOffset);
gameBrowser->SetPosition(thInt("0 - game carousel layout pos x"), thInt("-20 - game carousel layout pos y"));
gameBrowser->SetAlignment(ALIGN_LEFT, ALIGN_CENTRE);
//! Setup optional background image
const u8 *backgroundImgData = Resources::GetFile("carouselBackground.png");
u32 backgroundImgDataSize = Resources::GetFileSize("carouselBackground.png");
if(backgroundImgData && !carouselBackground)
carouselBackground = new GuiImageData(backgroundImgData, backgroundImgDataSize);
if(carouselBackground)
bgImg->SetImage(carouselBackground);
else
bgImg->SetImage(background);
}
@ -854,7 +893,7 @@ int GameBrowseMenu::MainLoop()
else
{
gameList.ReadGameList();
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false, false);
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false);
if(Settings.ShowFreeSpace)
{
ThreadedTask::Instance()->AddCallback(&HDDSizeCallback);
@ -1158,7 +1197,7 @@ int GameBrowseMenu::MainLoop()
}
wString oldFilter(gameList.GetCurrentFilter());
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false, false);
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false);
gameList.FilterList(oldFilter.c_str());
ReloadBrowser();
}

View File

@ -37,6 +37,9 @@ class GameBrowseMenu : public GuiWindow
GuiGameBrowser * gameBrowser;
GuiSearchBar * searchBar;
GuiImageData * listBackground;
GuiImageData * carouselBackground;
GuiImageData * gridBackground;
GuiImageData * btnInstall;
GuiImageData * btnInstallOver;
GuiImageData * btnSettings;

View File

@ -160,8 +160,9 @@ int UpdateGameTDB()
//! The zip file is not needed anymore so we can remove it
remove(ZipPath.c_str());
//! Reload all titles because the file changed now.
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, true);
//! Reload all titles and reload cached titles because the file changed now.
GameTitles.SetDefault();
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
return (result ? filesize : -1);
}

View File

@ -194,6 +194,7 @@ void dogamehooks(u32 hooktype, void *addr, u32 len)
if(hooktype == 0x00)
return;
bool isChannel = (*((char *) 0x80000005) == 0) && (*((char *) 0x80000006) == 0);
void *addr_start = addr;
void *addr_end = addr+len;
@ -210,9 +211,6 @@ void dogamehooks(u32 hooktype, void *addr, u32 len)
if(memcmp(addr_start, viwiihooks, sizeof(viwiihooks))==0){
patchhook((u32)addr_start, len);
}
if(memcmp(addr_start, multidolhooks, sizeof(multidolhooks))==0){
multidolhook((u32)addr_start+sizeof(multidolhooks)-4);
}
break;
case 0x02:
@ -224,9 +222,6 @@ void dogamehooks(u32 hooktype, void *addr, u32 len)
if(memcmp(addr_start, kpadoldhooks, sizeof(kpadoldhooks))==0){
patchhook((u32)addr_start, len);
}
if(memcmp(addr_start, multidolhooks, sizeof(multidolhooks))==0){
multidolhook((u32)addr_start+sizeof(multidolhooks)-4);
}
break;
case 0x03:
@ -234,9 +229,6 @@ void dogamehooks(u32 hooktype, void *addr, u32 len)
if(memcmp(addr_start, joypadhooks, sizeof(joypadhooks))==0){
patchhook((u32)addr_start, len);
}
if(memcmp(addr_start, multidolhooks, sizeof(multidolhooks))==0){
multidolhook((u32)addr_start+sizeof(multidolhooks)-4);
}
break;
case 0x04:
@ -244,9 +236,6 @@ void dogamehooks(u32 hooktype, void *addr, u32 len)
if(memcmp(addr_start, gxdrawhooks, sizeof(gxdrawhooks))==0){
patchhook((u32)addr_start, len);
}
if(memcmp(addr_start, multidolhooks, sizeof(multidolhooks))==0){
multidolhook((u32)addr_start+sizeof(multidolhooks)-4);
}
break;
case 0x05:
@ -254,9 +243,6 @@ void dogamehooks(u32 hooktype, void *addr, u32 len)
if(memcmp(addr_start, gxflushhooks, sizeof(gxflushhooks))==0){
patchhook((u32)addr_start, len);
}
if(memcmp(addr_start, multidolhooks, sizeof(multidolhooks))==0){
multidolhook((u32)addr_start+sizeof(multidolhooks)-4);
}
break;
case 0x06:
@ -264,9 +250,6 @@ void dogamehooks(u32 hooktype, void *addr, u32 len)
if(memcmp(addr_start, ossleepthreadhooks, sizeof(ossleepthreadhooks))==0){
patchhook((u32)addr_start, len);
}
if(memcmp(addr_start, multidolhooks, sizeof(multidolhooks))==0){
multidolhook((u32)addr_start+sizeof(multidolhooks)-4);
}
break;
case 0x07:
@ -274,9 +257,6 @@ void dogamehooks(u32 hooktype, void *addr, u32 len)
if(memcmp(addr_start, axnextframehooks, sizeof(axnextframehooks))==0){
patchhook((u32)addr_start, len);
}
if(memcmp(addr_start, multidolhooks, sizeof(multidolhooks))==0){
multidolhook((u32)addr_start+sizeof(multidolhooks)-4);
}
break;
/*
case 0x08:
@ -290,6 +270,20 @@ void dogamehooks(u32 hooktype, void *addr, u32 len)
break;
*/
}
if(memcmp(addr_start, multidolhooks, sizeof(multidolhooks))==0)
{
multidolhook((u32)addr_start+sizeof(multidolhooks)-4);
}
if(isChannel && memcmp(addr_start, multidolchanhooks, sizeof(multidolchanhooks)) == 0)
{
*(((u32*)addr_start)+1) = 0x7FE802A6;
DCFlushRange(((u32*)addr_start)+1, 4);
ICInvalidateRange(((u32*)addr_start)+1, 4);
multidolhook((u32)addr_start+sizeof(multidolchanhooks)-4);
}
addr_start += 4;
}
}

View File

@ -1317,13 +1317,16 @@ int CodeDownload(const char *id)
if (file.data != NULL)
{
bool validUrl = false;
char *textCpy = new (std::nothrow) char[file.size+1];
if(textCpy)
if(file.size > 0)
{
memcpy(textCpy, file.data, file.size);
textCpy[file.size] = '\0';
validUrl = (strcasestr(textCpy, "404 Not Found") == 0);
delete [] textCpy;
char *textCpy = new (std::nothrow) char[file.size+1];
if(textCpy)
{
memcpy(textCpy, file.data, file.size);
textCpy[file.size] = '\0';
validUrl = (strcasestr(textCpy, "404 Not Found") == 0);
delete [] textCpy;
}
}
if(!validUrl)

View File

@ -130,6 +130,7 @@ void CSettings::SetDefault()
GameListOffset = 0;
sneekVideoPatch = OFF;
NandEmuMode = OFF;
NandEmuChanMode = 2;
UseSystemFont = ON;
Hooktype = 0;
WiirdDebugger = OFF;
@ -140,6 +141,7 @@ void CSettings::SetDefault()
SearchMode = SEARCH_BEGINNING;
GameAspectRatio = ASPECT_SYSTEM_DEFAULT;
PointerSpeed = 0.15f;
UseChanLauncher = OFF;
}
bool CSettings::Load()
@ -305,6 +307,7 @@ bool CSettings::Save()
fprintf(file, "GameListOffset = %d\n", GameListOffset);
fprintf(file, "sneekVideoPatch = %d\n", sneekVideoPatch);
fprintf(file, "NandEmuMode = %d\n", NandEmuMode);
fprintf(file, "NandEmuChanMode = %d\n", NandEmuChanMode);
fprintf(file, "NandEmuPath = %s\n", NandEmuPath);
fprintf(file, "NandEmuChanPath = %s\n", NandEmuChanPath);
fprintf(file, "UseSystemFont = %d\n", UseSystemFont);
@ -316,6 +319,7 @@ bool CSettings::Save()
fprintf(file, "SearchMode = %d\n", SearchMode);
fprintf(file, "GameAspectRatio = %d\n", GameAspectRatio);
fprintf(file, "PointerSpeed = %g\n", PointerSpeed);
fprintf(file, "UseChanLauncher = %d\n", UseChanLauncher);
fclose(file);
return true;
@ -625,6 +629,10 @@ bool CSettings::SetSetting(char *name, char *value)
{
if (sscanf(value, "%d", &i) == 1) NandEmuMode = i;
}
else if(strcmp(name, "NandEmuChanMode") == 0)
{
if (sscanf(value, "%d", &i) == 1) NandEmuChanMode = i;
}
else if(strcmp(name, "LoaderMode") == 0)
{
if (sscanf(value, "%d", &i) == 1) LoaderMode = i;
@ -637,6 +645,10 @@ bool CSettings::SetSetting(char *name, char *value)
{
if (sscanf(value, "%d", &i) == 1) GameAspectRatio = i;
}
else if(strcmp(name, "UseChanLauncher") == 0)
{
if (sscanf(value, "%d", &i) == 1) UseChanLauncher = i;
}
else if (strcmp(name, "InstallPartitions") == 0)
{
InstallPartitions = strtoul(value, 0, 16);

View File

@ -130,6 +130,7 @@ class CSettings
std::vector<u32> EnabledCategories;
u8 EntryIOS;
short NandEmuMode;
short NandEmuChanMode;
short UseSystemFont;
short Hooktype;
short WiirdDebugger;
@ -139,6 +140,7 @@ class CSettings
short LoaderMode;
short SearchMode;
short GameAspectRatio;
short UseChanLauncher;
// This variable is not saved to the settings file
bool FirstTimeRun;

View File

@ -4,6 +4,10 @@
#include "usbloader/GameList.h"
#include "Channels/channels.h"
#include "xml/GameTDB.hpp"
#include "svnrev.h"
#include "gecko.h"
#define VALID_CACHE_REVISION 1148
CGameTitles GameTitles;
@ -22,8 +26,11 @@ void CGameTitles::SetGameTitle(const char * id, const char * title)
}
GameTitle newTitle;
newTitle.Title = title;
snprintf(newTitle.GameID, sizeof(newTitle.GameID), id);
newTitle.Title = title;
newTitle.ParentalRating = -1;
newTitle.PlayersCount = 1;
newTitle.FromWiiTDB = 0;
TitleList.push_back(newTitle);
}
@ -103,6 +110,7 @@ typedef struct _CacheTitle
{
char GameID[7];
char Title[100];
char FromWiiTDB;
int ParentalRating;
int PlayersCount;
@ -110,10 +118,25 @@ typedef struct _CacheTitle
u32 CGameTitles::ReadCachedTitles(const char * path)
{
std::string Cachepath = path;
if(path[strlen(path)-1] != '/')
Cachepath += '/';
Cachepath += "TitlesCache.bin";
//! Load cached least so that the titles are preloaded before reading list
FILE * f = fopen(path, "rb");
FILE * f = fopen(Cachepath.c_str(), "rb");
if(!f) return 0;
u32 revision = 0;
fread(&revision, 1, 4, f);
if(revision < VALID_CACHE_REVISION)
{
fclose(f);
return 0;
}
char LangCode[11];
memset(LangCode, 0, sizeof(LangCode));
@ -141,6 +164,7 @@ u32 CGameTitles::ReadCachedTitles(const char * path)
TitleList[i].Title = CachedList[i].Title;
TitleList[i].ParentalRating = CachedList[i].ParentalRating;
TitleList[i].PlayersCount = CachedList[i].PlayersCount;
TitleList[i].FromWiiTDB = CachedList[i].FromWiiTDB;
}
return count;
@ -148,13 +172,19 @@ u32 CGameTitles::ReadCachedTitles(const char * path)
void CGameTitles::WriteCachedTitles(const char * path)
{
FILE *f = fopen(path, "wb");
std::string Cachepath = path;
if(path[strlen(path)-1] != '/')
Cachepath += '/';
Cachepath += "TitlesCache.bin";
FILE *f = fopen(Cachepath.c_str(), "wb");
if(!f)
return;
CacheTitle Cache;
u32 count = TitleList.size();
u32 revision = atoi(GetRev());
fwrite(&revision, 1, 4, f);
fwrite(Settings.db_language, 1, 10, f);
fwrite(&count, 1, 4, f);
@ -162,10 +192,11 @@ void CGameTitles::WriteCachedTitles(const char * path)
{
memset(&Cache, 0, sizeof(CacheTitle));
strcpy(Cache.GameID, TitleList[i].GameID);
snprintf(Cache.Title, sizeof(Cache.Title), TitleList[i].Title.c_str());
strncpy(Cache.GameID, TitleList[i].GameID, sizeof(Cache.GameID)-1);
strncpy(Cache.Title, TitleList[i].Title.c_str(), sizeof(Cache.Title)-1);
Cache.ParentalRating = TitleList[i].ParentalRating;
Cache.PlayersCount = TitleList[i].PlayersCount;
Cache.FromWiiTDB = TitleList[i].FromWiiTDB;
fwrite(&Cache, 1, sizeof(CacheTitle), f);
}
@ -187,7 +218,8 @@ void CGameTitles::GetMissingTitles(std::vector<std::string> &MissingTitles, bool
if(strncasecmp(TitleList[n].GameID, (const char *) FullList[i]->id, 6) == 0)
{
UsedCachedList[n] = true;
isCached = true;
//! If the title is not from WiiTDB, try to reload it
isCached = TitleList[n].FromWiiTDB;
break;
}
}
@ -213,10 +245,8 @@ void CGameTitles::GetMissingTitles(std::vector<std::string> &MissingTitles, bool
}
}
void CGameTitles::LoadTitlesFromGameTDB(const char * path, bool forceCacheReload, bool removeUnused)
void CGameTitles::LoadTitlesFromGameTDB(const char * path, bool removeUnused)
{
this->SetDefault();
if(!path || !Settings.titlesOverride)
return;
@ -224,14 +254,8 @@ void CGameTitles::LoadTitlesFromGameTDB(const char * path, bool forceCacheReload
if(path[strlen(path)-1] != '/')
Filepath += '/';
std::string Cachepath = Filepath;
Cachepath += "TitlesCache.bin";
Filepath += "wiitdb.xml";
//! Read game titles cache database
if(!forceCacheReload && Settings.CacheTitles)
ReadCachedTitles(Cachepath.c_str());
//! Read game list
gameList.LoadUnfiltered();
@ -240,10 +264,7 @@ void CGameTitles::LoadTitlesFromGameTDB(const char * path, bool forceCacheReload
GetMissingTitles(MissingTitles, removeUnused);
if(MissingTitles.size() == 0)
{
WriteCachedTitles(Cachepath.c_str());
return;
}
std::string Title;
@ -258,9 +279,8 @@ void CGameTitles::LoadTitlesFromGameTDB(const char * path, bool forceCacheReload
continue;
this->SetGameTitle(MissingTitles[i].c_str(), Title.c_str());
TitleList[TitleList.size()-1].ParentalRating = -1;
TitleList[TitleList.size()-1].PlayersCount = 1;
//! Title is loaded from WiiTDB, remember that it's good
TitleList[TitleList.size()-1].FromWiiTDB = 1;
Rating = XML_DB.GetRating(MissingTitles[i].c_str());
if(Rating < 0)
@ -274,7 +294,4 @@ void CGameTitles::LoadTitlesFromGameTDB(const char * path, bool forceCacheReload
if(ret > 0)
TitleList[TitleList.size()-1].PlayersCount = ret;
}
if(Settings.CacheTitles)
WriteCachedTitles(Cachepath.c_str());
}

View File

@ -12,6 +12,7 @@ typedef struct _GameTitle
std::string Title;
int ParentalRating;
int PlayersCount;
char FromWiiTDB;
} GameTitle;
@ -35,14 +36,15 @@ class CGameTitles
//! Get possible number of players for this game
int GetPlayersCount(const char * id) const;
//! Load Game Titles from GameTDB
void LoadTitlesFromGameTDB(const char * path, bool forceCacheReload = false, bool removeUnused = true);
void LoadTitlesFromGameTDB(const char * path, bool removeUnused = true);
//! Set default game titles
void SetDefault();
//! Free memory and remove all titles - Same as SetDefault()
void Clear() { SetDefault(); }
protected:
//! Cache titles functions
u32 ReadCachedTitles(const char * path);
void WriteCachedTitles(const char * path);
protected:
void GetMissingTitles(std::vector<std::string> &MissingTitles, bool removeUnused);
std::vector<GameTitle> TitleList;

View File

@ -89,8 +89,6 @@ int MenuLanguageSelect()
int cnt = 0;
int ret = 0, choice = 0;
int returnhere = 0;
char OldLangCode[10];
snprintf(OldLangCode, sizeof(OldLangCode), Settings.db_language);
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
GuiImageData settingsbg(Resources::GetFile("settings_background.png"), Resources::GetFileSize("settings_background.png"));
@ -312,12 +310,6 @@ int MenuLanguageSelect()
}
//! Reload game list in new language
if(strcmp(Settings.db_language, OldLangCode) != 0)
{
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
}
w.SetEffect( EFFECT_FADE, -20 );
while ( w.GetEffect() > 0 ) usleep( 50 );

View File

@ -69,17 +69,24 @@ FeatureSettingsMenu::FeatureSettingsMenu()
Options->SetName(Idx++, "%s", tr( "Install WAD to EmuNand" ));
OldTitlesOverride = Settings.titlesOverride;
OldCacheTitles = Settings.CacheTitles;
SetOptionValues();
}
FeatureSettingsMenu::~FeatureSettingsMenu()
{
if (Settings.titlesOverride != OldTitlesOverride)
if ( Settings.titlesOverride != OldTitlesOverride
|| Settings.CacheTitles != OldCacheTitles)
{
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, true);
if(!Settings.titlesOverride)
//! Remove cached titles and reload new titles
GameTitles.SetDefault();
if(Settings.titlesOverride) {
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
}
else
{
//! Don't override titles, in other words read them from disc header or directory names
gameList.ReadGameList();
gameList.LoadUnfiltered();
}
@ -144,9 +151,6 @@ int FeatureSettingsMenu::GetMenuInternal()
else if (ret == ++Idx)
{
if (++Settings.CacheTitles >= MAX_ON_OFF) Settings.CacheTitles = 0;
if(Settings.CacheTitles) //! create new cache file
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
}
//! Settings: Wiilight
@ -253,7 +257,7 @@ int FeatureSettingsMenu::GetMenuInternal()
{
if(gameList[i]->type != TYPE_GAME_WII && gameList[i]->type != TYPE_GAME_NANDCHAN)
continue;
if(gameList[i]->tid != 0) //! Channels
{
snprintf(nandPath, sizeof(nandPath), "/title/%08x/%08x/data", (u32) (gameList[i]->tid >> 32), (u32) gameList[i]->tid );

View File

@ -36,6 +36,7 @@ class FeatureSettingsMenu : public SettingsMenu
int GetMenuInternal();
int OldTitlesOverride;
int OldCacheTitles;
OptionList GuiOptions;
};

View File

@ -278,7 +278,7 @@ void FlyingButtonsMenu::ShowMenu()
//! Free memory if not done yet because new is allocated
HideMenu();
titleTxt = new GuiText(MenuTitle.c_str(), 28, ( GXColor ) {0, 0, 0, 255});
titleTxt = new GuiText(MenuTitle.c_str(), 28, thColor("r=0 g=0 b=0 a=255 - settings title text color"));
titleTxt->SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt->SetPosition(0, 40);
titleTxt->SetMaxWidth(310, SCROLL_HORIZONTAL);

View File

@ -233,7 +233,8 @@ int GuiSettingsMenu::GetMenuInternal()
if (returnhere == 2)
{
//! Language changed. Reload game titles with new lang code.
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, true);
GameTitles.SetDefault();
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
return MENU_SETTINGS;
}

View File

@ -187,7 +187,7 @@ void GameLoadSM::SetOptionNames()
Options->SetName(Idx++, "%s", tr( "Select DOL Offset" ));
}
Options->SetName(Idx++, "%s", tr( "Block IOS Reload" ));
if(Header->type == TYPE_GAME_WII)
if(Header->type == TYPE_GAME_WII || Header->type == TYPE_GAME_EMUNANDCHAN)
{
Options->SetName(Idx++, "%s", tr( "Nand Emulation" ));
Options->SetName(Idx++, "%s", tr( "Nand Emu Path" ));
@ -296,7 +296,7 @@ void GameLoadSM::SetOptionValues()
else
Options->SetValue(Idx++, "%s", tr( OnOffText[GameConfig.iosreloadblock]) );
if(Header->type == TYPE_GAME_WII)
if(Header->type == TYPE_GAME_WII || Header->type == TYPE_GAME_EMUNANDCHAN)
{
//! Settings: Nand Emulation
if(GameConfig.NandEmuMode == INHERIT)
@ -482,15 +482,19 @@ int GameLoadSM::GetMenuInternal()
}
//! Settings: Nand Emulation
else if ((Header->type == TYPE_GAME_WII) && ret == ++Idx)
else if ((Header->type == TYPE_GAME_WII || Header->type == TYPE_GAME_EMUNANDCHAN) && ret == ++Idx)
{
if(!IosLoader::IsD2X())
WindowPrompt(tr("Error:"), tr("Nand Emulation is only available on D2X cIOS!"), tr("OK"));
else if (++GameConfig.NandEmuMode >= 3) GameConfig.NandEmuMode = INHERIT;
//! On titles from emulated nand path disabling the nand emu mode is not allowed
if(Header->type == TYPE_GAME_EMUNANDCHAN && GameConfig.NandEmuMode == OFF)
GameConfig.NandEmuMode = 1;
}
//! Settings: Nand Emu Path
else if ((Header->type == TYPE_GAME_WII) && ret == ++Idx)
else if ((Header->type == TYPE_GAME_WII || Header->type == TYPE_GAME_EMUNANDCHAN) && ret == ++Idx)
{
if(!IosLoader::IsD2X())
WindowPrompt(tr("Error:"), tr("Nand Emulation is only available on D2X cIOS!"), tr("OK"));

View File

@ -114,7 +114,7 @@ HardDriveSM::~HardDriveSM()
//! Reload the new game titles
gameList.ReadGameList();
gameList.LoadUnfiltered();
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false);
}
}

View File

@ -111,6 +111,12 @@ static const char * HooktypeText[] =
trNOOP( "AXNextFrame" ),
};
static const char * ChannelLaunchText[] =
{
trNOOP( "Main DOL" ),
trNOOP( "Boot Content" ),
};
LoaderSettings::LoaderSettings()
: SettingsMenu(tr("Loader Settings"), &GuiOptions, MENU_NONE)
{
@ -130,9 +136,11 @@ LoaderSettings::LoaderSettings()
Options->SetName(Idx++, "%s", tr( "Block IOS Reload" ));
Options->SetName(Idx++, "%s", tr( "Return To" ));
Options->SetName(Idx++, "%s", tr( "Nand Saves Emulation" ));
Options->SetName(Idx++, "%s", tr( "Nand Chan. Emulation" ));
Options->SetName(Idx++, "%s", tr( "Hooktype" ));
Options->SetName(Idx++, "%s", tr( "Wiird Debugger" ));
Options->SetName(Idx++, "%s", tr( "Debugger Paused Start" ));
Options->SetName(Idx++, "%s", tr( "Channel Launcher" ));
SetOptionValues();
@ -150,7 +158,7 @@ LoaderSettings::~LoaderSettings()
}
gameList.LoadUnfiltered();
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false, false);
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false);
}
}
@ -213,6 +221,9 @@ void LoaderSettings::SetOptionValues()
//! Settings: Nand Emulation
Options->SetValue(Idx++, "%s", tr( NandEmuText[Settings.NandEmuMode] ));
//! Settings: Nand Chan. Emulation
Options->SetValue(Idx++, "%s", tr( NandEmuText[Settings.NandEmuChanMode] ));
//! Settings: Hooktype
Options->SetValue(Idx++, "%s", tr( HooktypeText[Settings.Hooktype] ));
@ -221,6 +232,9 @@ void LoaderSettings::SetOptionValues()
//! Settings: Wiird Debugger Pause on Start
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.WiirdDebuggerPause] ));
//! Settings: Channel Launcher
Options->SetValue(Idx++, "%s", tr( ChannelLaunchText[Settings.UseChanLauncher] ));
}
int LoaderSettings::GetMenuInternal()
@ -344,6 +358,14 @@ int LoaderSettings::GetMenuInternal()
else if (++Settings.NandEmuMode >= 3) Settings.NandEmuMode = 0;
}
//! Settings: Nand Chan. Emulation
else if (ret == ++Idx )
{
if(!IosLoader::IsD2X())
WindowPrompt(tr("Error:"), tr("Nand Emulation is only available on D2X cIOS!"), tr("OK"));
else if (++Settings.NandEmuChanMode >= 3) Settings.NandEmuChanMode = 1;
}
//! Settings: Hooktype
else if (ret == ++Idx )
{
@ -362,6 +384,12 @@ int LoaderSettings::GetMenuInternal()
if (++Settings.WiirdDebuggerPause >= MAX_ON_OFF) Settings.WiirdDebuggerPause = 0;
}
//! Settings: Channel Launcher
else if (ret == ++Idx )
{
if (++Settings.UseChanLauncher >= MAX_ON_OFF) Settings.UseChanLauncher = 0;
}
SetOptionValues();
return MENU_NONE;

View File

@ -74,6 +74,8 @@ void AppCleanUp(void)
extern u8 mountMethod;
gprintf("Exiting main GUI. mountMethod = %d\n", mountMethod);
if(Settings.CacheTitles)
GameTitles.WriteCachedTitles(Settings.titlestxt_path);
Settings.Save();
ExitGUIThreads();

View File

@ -1,4 +1,5 @@
#include <gctypes.h>
#include <ogc/machine/processor.h>
#include "IosLoader.h"
#include "Controls/DeviceHandler.hpp"
@ -17,6 +18,11 @@
#include "utils/tools.h"
#include "gecko.h"
#define CheckAHBPROT() (read32(0x0D800064) == 0xFFFFFFFF)
#define MEM2_PROT 0x0D8B420A
#define ES_MODULE_START ((u16 *)0x939F0000)
#define ES_MODULE_END (ES_MODULE_START + 0x4000)
#define ES_HACK_OFFSET 4
/*
* Buffer variables for the IOS info to avoid loading it several times
@ -148,7 +154,7 @@ s32 IosLoader::ReloadIosSafe(s32 ios)
return -33;
}
s32 r = IOS_ReloadIOS(ios);
s32 r = ReloadIosKeepingRights(ios);
if (r >= 0) WII_Initialize();
IosLoader::LoadIOSModules(IOS_GetVersion(), IOS_GetRevision());
@ -156,6 +162,45 @@ s32 IosLoader::ReloadIosSafe(s32 ios)
return r;
}
/*
* Reloads a certain IOS and keeps the AHBPROT flag enabled if available.
*/
s32 IosLoader::ReloadIosKeepingRights(s32 ios)
{
if (CheckAHBPROT())
{
static const u16 ticket_check[] = {
0x685B, // ldr r3, [r3, #4] ; Get TMD pointer
0x22EC, 0x0052, // movs r2, 0x1D8 ; Set offset of access rights field in TMD
0x189B, // adds r3, r3, r2 ; Add offset to TMD pointer
0x681B, // ldr r3, [r3] ; Load access rights. We'll hack it with full access rights!!!
0x4698, // mov r8, r3 ; Store it for the DVD video bitcheck later
0x07DB // lsls r3, r3, 0x1F ; check AHBPROT bit
};
/* Disable MEM 2 protection */
write16(MEM2_PROT, 2);
for (u16 *patchme = ES_MODULE_START; patchme < ES_MODULE_END; patchme++)
{
if (!memcmp(patchme, ticket_check, sizeof(ticket_check)))
{
gprintf("ReloadIos: Found TMD access rights check at %p\n", patchme);
/* Apply patch */
patchme[ES_HACK_OFFSET] = 0x23FF; // li r3, 0xFF ; Set full access rights
/* Flush cache */
DCFlushRange(patchme+ES_HACK_OFFSET, 2);
break;
}
}
}
/* Reload IOS. MEM2 protection is implicitly re-enabled */
return IOS_ReloadIOS(ios);
}
/******************************************************************************
* Private/Protected Methods:
******************************************************************************/

View File

@ -19,6 +19,7 @@ class IosLoader
static s32 LoadAppCios();
static s32 LoadGameCios(s32 ios);
static s32 ReloadIosSafe(s32 ios);
static s32 ReloadIosKeepingRights(s32 ios);
static bool IsHermesIOS(s32 ios = IOS_GetVersion());
static bool IsWaninkokoIOS(s32 ios = IOS_GetVersion());
static bool IsD2X(s32 ios = IOS_GetVersion());

View File

@ -38,6 +38,9 @@ extern const u32 arrangeList_png_size;
extern const u8 arrangeList_gray_png[];
extern const u32 arrangeList_gray_png_size;
extern const u8 background_png[];
extern const u32 background_png_size;
extern const u8 balanceboard_png[];
extern const u32 balanceboard_png_size;
@ -161,6 +164,9 @@ extern const u32 drums_png_size;
extern const u8 drumsR_png[];
extern const u32 drumsR_png_size;
extern const u8 dvd_png[];
extern const u32 dvd_png_size;
extern const u8 dvd_gray_png[];
extern const u32 dvd_gray_png_size;
@ -200,33 +206,9 @@ extern const u32 exit_top_over_png_size;
extern const u8 favIcon_png[];
extern const u32 favIcon_png_size;
extern const u8 background_png[];
extern const u32 background_png_size;
extern const u8 dvd_png[];
extern const u32 dvd_png_size;
extern const u8 favIcon_gray_png[];
extern const u32 favIcon_gray_png_size;
extern const u8 icon_folder_png[];
extern const u32 icon_folder_png_size;
extern const u8 nintendodsR_png[];
extern const u32 nintendodsR_png_size;
extern const u8 playersSort_png[];
extern const u32 playersSort_png_size;
extern const u8 rplayer3_point_png[];
extern const u32 rplayer3_point_png_size;
extern const u8 sdcard_png[];
extern const u32 sdcard_png_size;
extern const u8 startgame_arrow_left_png[];
extern const u32 startgame_arrow_left_png_size;
extern const u8 favorite_png[];
extern const u32 favorite_png_size;
@ -257,6 +239,9 @@ extern const u32 guitarR_png_size;
extern const u8 gxlogo_png[];
extern const u32 gxlogo_png_size;
extern const u8 icon_folder_png[];
extern const u32 icon_folder_png_size;
extern const u8 keyboard_backspace_over_png[];
extern const u32 keyboard_backspace_over_png_size;
@ -314,6 +299,9 @@ extern const u32 new_png_size;
extern const u8 nintendods_png[];
extern const u32 nintendods_png_size;
extern const u8 nintendodsR_png[];
extern const u32 nintendodsR_png_size;
extern const u8 nocover_png[];
extern const u32 nocover_png_size;
@ -389,6 +377,9 @@ extern const u32 player4_grab_png_size;
extern const u8 player4_point_png[];
extern const u32 player4_point_png_size;
extern const u8 playersSort_png[];
extern const u32 playersSort_png_size;
extern const u8 progressbar_png[];
extern const u32 progressbar_png_size;
@ -410,6 +401,9 @@ extern const u32 rplayer1_point_png_size;
extern const u8 rplayer2_point_png[];
extern const u32 rplayer2_point_png_size;
extern const u8 rplayer3_point_png[];
extern const u32 rplayer3_point_png_size;
extern const u8 rplayer4_point_png[];
extern const u32 rplayer4_point_png_size;
@ -431,6 +425,9 @@ extern const u32 scrollbar_arrowup_png_size;
extern const u8 scrollbar_box_png[];
extern const u32 scrollbar_box_png_size;
extern const u8 sdcard_png[];
extern const u32 sdcard_png_size;
extern const u8 sdcard_over_png[];
extern const u32 sdcard_over_png_size;
@ -455,6 +452,9 @@ extern const u32 settings_title_png_size;
extern const u8 settings_title_over_png[];
extern const u32 settings_title_over_png_size;
extern const u8 startgame_arrow_left_png[];
extern const u32 startgame_arrow_left_png_size;
extern const u8 startgame_arrow_right_png[];
extern const u32 startgame_arrow_right_png_size;
@ -592,6 +592,7 @@ RecourceFile Resources::RecourceFiles[] =
{"arrangeGrid_gray.png", arrangeGrid_gray_png, arrangeGrid_gray_png_size, NULL, 0},
{"arrangeList.png", arrangeList_png, arrangeList_png_size, NULL, 0},
{"arrangeList_gray.png", arrangeList_gray_png, arrangeList_gray_png_size, NULL, 0},
{"background.png", background_png, background_png_size, NULL, 0},
{"balanceboard.png", balanceboard_png, balanceboard_png_size, NULL, 0},
{"balanceboardR.png", balanceboardR_png, balanceboardR_png_size, NULL, 0},
{"battery.png", battery_png, battery_png_size, NULL, 0},
@ -633,6 +634,7 @@ RecourceFile Resources::RecourceFiles[] =
{"dialogue_box_startgame.png", dialogue_box_startgame_png, dialogue_box_startgame_png_size, NULL, 0},
{"drums.png", drums_png, drums_png_size, NULL, 0},
{"drumsR.png", drumsR_png, drumsR_png_size, NULL, 0},
{"dvd.png", dvd_png, dvd_png_size, NULL, 0},
{"dvd_gray.png", dvd_gray_png, dvd_gray_png_size, NULL, 0},
{"esrb_ao.png", esrb_ao_png, esrb_ao_png_size, NULL, 0},
{"esrb_e.png", esrb_e_png, esrb_e_png_size, NULL, 0},
@ -646,15 +648,7 @@ RecourceFile Resources::RecourceFiles[] =
{"exit_top.png", exit_top_png, exit_top_png_size, NULL, 0},
{"exit_top_over.png", exit_top_over_png, exit_top_over_png_size, NULL, 0},
{"favIcon.png", favIcon_png, favIcon_png_size, NULL, 0},
{"background.png", background_png, background_png_size, NULL, 0},
{"dvd.png", dvd_png, dvd_png_size, NULL, 0},
{"favIcon_gray.png", favIcon_gray_png, favIcon_gray_png_size, NULL, 0},
{"icon_folder.png", icon_folder_png, icon_folder_png_size, NULL, 0},
{"nintendodsR.png", nintendodsR_png, nintendodsR_png_size, NULL, 0},
{"playersSort.png", playersSort_png, playersSort_png_size, NULL, 0},
{"rplayer3_point.png", rplayer3_point_png, rplayer3_point_png_size, NULL, 0},
{"sdcard.png", sdcard_png, sdcard_png_size, NULL, 0},
{"startgame_arrow_left.png", startgame_arrow_left_png, startgame_arrow_left_png_size, NULL, 0},
{"favorite.png", favorite_png, favorite_png_size, NULL, 0},
{"gameinfo1.png", gameinfo1_png, gameinfo1_png_size, NULL, 0},
{"gameinfo1a.png", gameinfo1a_png, gameinfo1a_png_size, NULL, 0},
@ -665,6 +659,7 @@ RecourceFile Resources::RecourceFiles[] =
{"guitar.png", guitar_png, guitar_png_size, NULL, 0},
{"guitarR.png", guitarR_png, guitarR_png_size, NULL, 0},
{"gxlogo.png", gxlogo_png, gxlogo_png_size, NULL, 0},
{"icon_folder.png", icon_folder_png, icon_folder_png_size, NULL, 0},
{"keyboard_backspace_over.png", keyboard_backspace_over_png, keyboard_backspace_over_png_size, NULL, 0},
{"keyboard_clear_over.png", keyboard_clear_over_png, keyboard_clear_over_png_size, NULL, 0},
{"keyboard_key.png", keyboard_key_png, keyboard_key_png_size, NULL, 0},
@ -684,6 +679,7 @@ RecourceFile Resources::RecourceFiles[] =
{"motionplusR.png", motionplusR_png, motionplusR_png_size, NULL, 0},
{"new.png", new_png, new_png_size, NULL, 0},
{"nintendods.png", nintendods_png, nintendods_png_size, NULL, 0},
{"nintendodsR.png", nintendodsR_png, nintendodsR_png_size, NULL, 0},
{"nocover.png", nocover_png, nocover_png_size, NULL, 0},
{"nocoverFlat.png", nocoverFlat_png, nocoverFlat_png_size, NULL, 0},
{"nocoverFull.png", nocoverFull_png, nocoverFull_png_size, NULL, 0},
@ -709,6 +705,7 @@ RecourceFile Resources::RecourceFiles[] =
{"player3_point.png", player3_point_png, player3_point_png_size, NULL, 0},
{"player4_grab.png", player4_grab_png, player4_grab_png_size, NULL, 0},
{"player4_point.png", player4_point_png, player4_point_png_size, NULL, 0},
{"playersSort.png", playersSort_png, playersSort_png_size, NULL, 0},
{"progressbar.png", progressbar_png, progressbar_png_size, NULL, 0},
{"progressbar_empty.png", progressbar_empty_png, progressbar_empty_png_size, NULL, 0},
{"progressbar_outline.png", progressbar_outline_png, progressbar_outline_png_size, NULL, 0},
@ -716,6 +713,7 @@ RecourceFile Resources::RecourceFiles[] =
{"remove.png", remove_png, remove_png_size, NULL, 0},
{"rplayer1_point.png", rplayer1_point_png, rplayer1_point_png_size, NULL, 0},
{"rplayer2_point.png", rplayer2_point_png, rplayer2_point_png_size, NULL, 0},
{"rplayer3_point.png", rplayer3_point_png, rplayer3_point_png_size, NULL, 0},
{"rplayer4_point.png", rplayer4_point_png, rplayer4_point_png_size, NULL, 0},
{"scrollBarBottom.png", scrollBarBottom_png, scrollBarBottom_png_size, NULL, 0},
{"scrollBarTile.png", scrollBarTile_png, scrollBarTile_png_size, NULL, 0},
@ -723,6 +721,7 @@ RecourceFile Resources::RecourceFiles[] =
{"scrollbar_arrowdown.png", scrollbar_arrowdown_png, scrollbar_arrowdown_png_size, NULL, 0},
{"scrollbar_arrowup.png", scrollbar_arrowup_png, scrollbar_arrowup_png_size, NULL, 0},
{"scrollbar_box.png", scrollbar_box_png, scrollbar_box_png_size, NULL, 0},
{"sdcard.png", sdcard_png, sdcard_png_size, NULL, 0},
{"sdcard_over.png", sdcard_over_png, sdcard_over_png_size, NULL, 0},
{"searchIcon.png", searchIcon_png, searchIcon_png_size, NULL, 0},
{"searchIcon_gray.png", searchIcon_gray_png, searchIcon_gray_png_size, NULL, 0},
@ -731,6 +730,7 @@ RecourceFile Resources::RecourceFiles[] =
{"settings_button_over.png", settings_button_over_png, settings_button_over_png_size, NULL, 0},
{"settings_title.png", settings_title_png, settings_title_png_size, NULL, 0},
{"settings_title_over.png", settings_title_over_png, settings_title_over_png_size, NULL, 0},
{"startgame_arrow_left.png", startgame_arrow_left_png, startgame_arrow_left_png_size, NULL, 0},
{"startgame_arrow_right.png", startgame_arrow_right_png, startgame_arrow_right_png_size, NULL, 0},
{"theme_box.png", theme_box_png, theme_box_png_size, NULL, 0},
{"theme_dialogue_box.png", theme_dialogue_box_png, theme_dialogue_box_png_size, NULL, 0},
@ -773,6 +773,9 @@ RecourceFile Resources::RecourceFiles[] =
{"success.ogg", success_ogg, success_ogg_size, NULL, 0},
{"clock.ttf", clock_ttf, clock_ttf_size, NULL, 0},
{"font.ttf", font_ttf, font_ttf_size, NULL, 0},
{"listBackground.png", NULL, 0, NULL, 0}, // Optional
{"carouselBackground.png", NULL, 0, NULL, 0}, // Optional
{"gridBackground.png", NULL, 0, NULL, 0}, // Optional
{NULL, NULL, 0, NULL, 0}
};

View File

@ -131,10 +131,6 @@ void GameBooter::SetupNandEmu(u8 NandEmuMode, const char *NandEmuPath, struct di
DeviceHandler::Instance()->UnMountSD();
Enable_Emu(strncmp(NandEmuPath, "usb", 3) == 0 ? EMU_USB : EMU_SD);
//! Remount SD again after activating NAND emu
if(strncmp(NandEmuPath, "sd", 2) == 0)
DeviceHandler::Instance()->MountSD();
}
}
@ -238,7 +234,9 @@ int GameBooter::BootGame(struct discHdr *gameHdr)
const char *NandEmuPath = game_cfg->NandEmuPath.size() == 0 ? Settings.NandEmuPath : game_cfg->NandEmuPath.c_str();
if(gameHeader.tid != 0)
{
NandEmuMode = (gameHeader.type == TYPE_GAME_EMUNANDCHAN) ? 2 : 0; // If from emu nand set full emulation mode
NandEmuMode = (gameHeader.type == TYPE_GAME_EMUNANDCHAN)
? (game_cfg->NandEmuMode == INHERIT ? Settings.NandEmuChanMode : game_cfg->NandEmuMode) //! Emulated nand title
: 0; //! Real nand title
NandEmuPath = game_cfg->NandEmuPath.size() == 0 ? Settings.NandEmuChanPath : game_cfg->NandEmuPath.c_str();
}
@ -261,16 +259,16 @@ int GameBooter::BootGame(struct discHdr *gameHdr)
if(Settings.PlaylogUpdate)
Playlog_Update((char *) gameHeader.id, BNRInstance::Instance()->GetIMETTitle(CONF_GetLanguage()));
//! Setup NAND emulation
SetupNandEmu(NandEmuMode, NandEmuPath, gameHeader);
// Load wip codes
//! Load wip codes
load_wip_code(gameHeader.id);
//! Load Ocarina codes
if (ocarinaChoice)
ocarina_load_code(Settings.Cheatcodespath, gameHeader.id);
//! Setup NAND emulation
SetupNandEmu(NandEmuMode, NandEmuPath, gameHeader);
//! Setup disc stuff if we load a game
if(gameHeader.tid == 0)
{
@ -334,8 +332,6 @@ int GameBooter::BootGame(struct discHdr *gameHdr)
gprintf("\tChannel Boot\n");
// Load dol
AppEntrypoint = Channels::LoadChannel(gameHeader.tid);
/* Setup low memory */
Disc_SetLowMem();
/* Setup video mode */
Disc_SelectVMode(videoChoice);
}

View File

@ -164,9 +164,6 @@ int MountGamePartition(bool ShowGUI)
}
gprintf("LoadTitlesFromGameTDB\n");
//! Clear list if available
GameTitles.Clear();
//! gameList is loaded in GameTitles.LoadTitlesFromGameTDB after cache file load
//! for speed up purpose. If titles override active, load game list here.
if(Settings.titlesOverride)

View File

@ -61,19 +61,14 @@ void Disc_SelectVMode(u8 videoselected)
/* Get video mode configuration */
bool progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable();
bool PAL60 = CONF_GetEuRGB60() > 0;
u32 tvmode = CONF_GetVideo();
/* Select video mode register */
switch (tvmode)
{
case CONF_VIDEO_PAL:
if (CONF_GetEuRGB60() > 0)
{
vmode_reg = VI_EURGB60;
vmode = progressive ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf;
}
else
vmode_reg = VI_PAL;
vmode_reg = PAL60 ? VI_EURGB60 : VI_PAL;
break;
case CONF_VIDEO_MPAL:
@ -100,41 +95,42 @@ void Disc_SelectVMode(u8 videoselected)
case 'Y':
if (tvmode != CONF_VIDEO_PAL)
{
vmode_reg = VI_PAL;
vmode = progressive ? &TVNtsc480Prog : &TVNtsc480IntDf;
vmode_reg = PAL60 ? VI_EURGB60 : VI_PAL;
vmode = progressive ? &TVNtsc480Prog : (PAL60 ? &TVEurgb60Hz480IntDf : &TVPal528IntDf);
}
break;
// NTSC
case 'E':
case 'J':
default:
if (tvmode != CONF_VIDEO_NTSC)
{
vmode_reg = VI_NTSC;
vmode = progressive ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf;
}
break;
default:
break;
}
break;
case VIDEO_MODE_PAL50: // PAL50
vmode = &TVPal528IntDf;
vmode_reg = vmode->viTVMode >> 2;
vmode_reg = VI_PAL;
break;
case VIDEO_MODE_PAL60: // PAL60
vmode = progressive ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf;
vmode_reg = progressive ? TVEurgb60Hz480Prog.viTVMode >> 2 : vmode->viTVMode >> 2;
vmode_reg = VI_EURGB60;
break;
case VIDEO_MODE_NTSC: // NTSC
vmode = progressive ? &TVNtsc480Prog : &TVNtsc480IntDf;
vmode_reg = vmode->viTVMode >> 2;
vmode_reg = VI_NTSC;
break;
case VIDEO_MODE_PAL480P:
vmode = &TVNtsc480Prog;
vmode_reg = TVEurgb60Hz480Prog.viTVMode >> 2;
vmode_reg = VI_EURGB60;
break;
case VIDEO_MODE_NTSC480P:
vmode = &TVNtsc480Prog;
vmode_reg = vmode->viTVMode >> 2;
vmode_reg = VI_NTSC;
break;
case VIDEO_MODE_SYSDEFAULT: // AUTO PATCH TO SYSTEM
break;
@ -145,12 +141,11 @@ void __Disc_SetVMode(void)
{
/* Set video mode register */
*Video_Mode = vmode_reg;
DCFlushRange((void *) Video_Mode, 4);
/* Set video mode */
if (vmode != NULL)
{
VIDEO_Configure(vmode);
}
/* Setup video */
VIDEO_SetBlack(TRUE);
@ -289,7 +284,7 @@ s32 Disc_JumpToEntrypoint(s32 hooktype, u32 dolparameter)
{
if(hooktype)
{
__asm__(
asm volatile (
"lis %r3, returnpoint@h\n"
"ori %r3, %r3, returnpoint@l\n"
"mtlr %r3\n"
@ -311,7 +306,7 @@ s32 Disc_JumpToEntrypoint(s32 hooktype, u32 dolparameter)
}
else
{
__asm__(
asm volatile (
"isync\n"
"lis %r3, AppEntrypoint@h\n"
"ori %r3, %r3, AppEntrypoint@l\n"
@ -327,7 +322,7 @@ s32 Disc_JumpToEntrypoint(s32 hooktype, u32 dolparameter)
}
else if (hooktype)
{
__asm__(
asm volatile (
"lis %r3, AppEntrypoint@h\n"
"ori %r3, %r3, AppEntrypoint@l\n"
"lwz %r3, 0(%r3)\n"
@ -341,7 +336,7 @@ s32 Disc_JumpToEntrypoint(s32 hooktype, u32 dolparameter)
}
else
{
__asm__(
asm volatile (
"lis %r3, AppEntrypoint@h\n"
"ori %r3, %r3, AppEntrypoint@l\n"
"lwz %r3, 0(%r3)\n"

View File

@ -447,7 +447,7 @@ s32 Wbfs_Fat::GetHeadersCount()
// if we have titles.txt entry use that
title = GameTitles.GetTitle(id);
// if no titles.txt get title from dir or file name
if ((!title || *title == 0) && *fname_title != 0)
if ((!title || *title == 0) && *fname_title != 0 && Settings.titlesOverride)
title = fname_title;
if (title && *title != 0)
@ -562,6 +562,7 @@ s32 Wbfs_Fat::GetHeadersCount()
fat_hdr_list = tmpList;
memcpy(&fat_hdr_list[fat_hdr_count - 1], &tmpHdr, sizeof(struct discHdr));
GameTitles.SetGameTitle(tmpHdr.id, tmpHdr.title);
}
closedir(dir_iter);