*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"> <app version="1">
<name> USB Loader GX</name> <name> USB Loader GX</name>
<coder>USB Loader GX Team</coder> <coder>USB Loader GX Team</coder>
<version>2.3 r1147</version> <version>2.3 r1148</version>
<release_date>201201052225</release_date> <release_date>201201081807</release_date>
<!-- // remove this line to enable arguments <!-- // remove this line to enable arguments
<arguments> <arguments>
<arg>--ios=250</arg> <arg>--ios=250</arg>

View File

@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: USB Loader GX\n" "Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \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" "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" "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" "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" msgid "Block Updates"
msgstr "Zablokovat aktualizace" msgstr "Zablokovat aktualizace"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard" msgid "Boot/Standard"
msgstr "" msgstr ""
@ -290,6 +293,9 @@ msgstr ""
msgid "Change Play Path" msgid "Change Play Path"
msgstr "Zmena cesty prehrávání" msgstr "Zmena cesty prehrávání"
msgid "Channel Launcher"
msgstr ""
msgid "Channels" msgid "Channels"
msgstr "" msgstr ""
@ -1048,6 +1054,9 @@ msgstr "Hudební smycka"
msgid "Loop Sound" msgid "Loop Sound"
msgstr "Zvuková smycka" msgstr "Zvuková smycka"
msgid "Main DOL"
msgstr ""
msgid "Main tester:" msgid "Main tester:"
msgstr "Muj tester:" msgstr "Muj tester:"
@ -1078,6 +1087,9 @@ msgstr "Mód hudební smycky"
msgid "Music Volume" msgid "Music Volume"
msgstr "Hlasitost hudby" msgstr "Hlasitost hudby"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels" msgid "Nand Channels"
msgstr "" msgstr ""

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: USB Loader GX\n" "Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2011-09-11 12:19+0100\n"
"Last-Translator: xFede\n" "Last-Translator: xFede\n"
"Language-Team: Cambo\n" "Language-Team: Cambo\n"
@ -235,6 +235,9 @@ msgstr "Blocca Avvia Titoli"
msgid "Block Updates" msgid "Block Updates"
msgstr "Blocca Aggiornamenti" msgstr "Blocca Aggiornamenti"
msgid "Boot Content"
msgstr ""
msgid "Boot/Standard" msgid "Boot/Standard"
msgstr "cIOS Predefinito" msgstr "cIOS Predefinito"
@ -290,6 +293,9 @@ msgstr "Categorie:"
msgid "Change Play Path" msgid "Change Play Path"
msgstr "Cambia Percorso Musica" msgstr "Cambia Percorso Musica"
msgid "Channel Launcher"
msgstr ""
msgid "Channels" msgid "Channels"
msgstr "Canali" msgstr "Canali"
@ -1048,6 +1054,9 @@ msgstr "Ripeti Brano"
msgid "Loop Sound" msgid "Loop Sound"
msgstr "Suono Ripetuto" msgstr "Suono Ripetuto"
msgid "Main DOL"
msgstr ""
msgid "Main tester:" msgid "Main tester:"
msgstr "Tester principale:" msgstr "Tester principale:"
@ -1078,6 +1087,9 @@ msgstr "Ripeti Musica Sottof."
msgid "Music Volume" msgid "Music Volume"
msgstr "Volume Musica" msgstr "Volume Musica"
msgid "Nand Chan. Emulation"
msgstr ""
msgid "Nand Channels" msgid "Nand Channels"
msgstr "Canali NAND" msgstr "Canali NAND"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: USB Loader GX\n" "Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-12-21 19:17+0100\n" "POT-Creation-Date: 2012-01-08 19:07+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
@ -91,6 +91,12 @@ msgstr ""
msgid "r=0 g=0 b=0 a=255 - game browser list text color over" msgid "r=0 g=0 b=0 a=255 - game browser list text color over"
msgstr "" msgstr ""
msgid "r=0 g=0 b=0 a=255 - keyboard text color"
msgstr ""
msgid "r=0 g=0 b=0 a=255 - keyboard key text color"
msgstr ""
msgid "right - options browser scrollbar align hor" msgid "right - options browser scrollbar align hor"
msgstr "" msgstr ""
@ -673,6 +679,9 @@ msgstr ""
msgid "r=30 g=30 b=240 a=255 - game window details button over text color" msgid "r=30 g=30 b=240 a=255 - game window details button over text color"
msgstr "" msgstr ""
msgid "r=0 g=0 b=0 a=255 - settings title text color"
msgstr ""
msgid "center - category game prompt align hor" msgid "center - category game prompt align hor"
msgstr "" msgstr ""
@ -697,9 +706,6 @@ msgstr ""
msgid "90 - settings option browser pos y" msgid "90 - settings option browser pos y"
msgstr "" msgstr ""
msgid "r=0 g=0 b=0 a=255 - settings title text color"
msgstr ""
msgid "center - settings title text align hor" msgid "center - settings title text align hor"
msgstr "" msgstr ""

View File

@ -52,6 +52,9 @@ do
echo -e '\t{"'$i'", '$filename'_'$extension', '$filename'_'$extension'_size, NULL, 0},' >> $outFile echo -e '\t{"'$i'", '$filename'_'$extension', '$filename'_'$extension'_size, NULL, 0},' >> $outFile
done 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 -e '\t{NULL, NULL, 0, NULL, 0}' >> $outFile
echo '};' >> $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 "settings/GameTitles.h"
#include "patches/gamepatches.h" #include "patches/gamepatches.h"
#include "wad/nandtitle.h" #include "wad/nandtitle.h"
#include "memory/memory.h"
#include "utils/lz77.h" #include "utils/lz77.h"
#include "gecko.h" #include "gecko.h"
@ -141,34 +142,55 @@ vector<struct discHdr> & Channels::GetEmuHeaders(void)
u8 * Channels::GetDol(const u64 &title, u8 *tmdBuffer) 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; u8 *buffer = NULL;
u32 filesize = 0; u32 filesize = 0;
u32 bootcontent; u32 bootcontent = 0xDEADBEAF;
u32 high = TITLE_UPPER(title); u32 high = TITLE_UPPER(title);
u32 low = TITLE_LOWER(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); char *filepath = (char *) memalign(32, ISFS_MAXPATH);
if(!filepath) if(!filepath)
return NULL; 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); snprintf(filepath, ISFS_MAXPATH, "/title/%08x/%08x/content/%08x.app", high, low, bootcontent);
gprintf("Loading Channel DOL: %s\n", filepath); 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)
{ {
if(!(dolfile->bss_start & 0x80000000)) dolfile->bss_start |= 0x80000000;
dolfile->bss_start |= 0x80000000;
ICInvalidateRange((void *)dolfile->bss_start, dolfile->bss_size); if(dolfile->bss_start < 0x81800000)
memset((void *)dolfile->bss_start, 0, dolfile->bss_size); {
DCFlushRange((void *)dolfile->bss_start, dolfile->bss_size); // 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; int i;
@ -312,9 +340,9 @@ u32 Channels::LoadChannel(const u64 &chantitle)
u8 *dolChunkOffset = (u8 *)dolfile->section_start[i]; u8 *dolChunkOffset = (u8 *)dolfile->section_start[i];
u32 dolChunkSize = dolfile->section_size[i]; u32 dolChunkSize = dolfile->section_size[i];
ICInvalidateRange(dolChunkOffset, dolChunkSize);
memmove (dolChunkOffset, chanDOL + dolfile->section_pos[i], dolChunkSize); memmove (dolChunkOffset, chanDOL + dolfile->section_pos[i], dolChunkSize);
DCFlushRange(dolChunkOffset, dolChunkSize); DCFlushRange(dolChunkOffset, dolChunkSize);
ICInvalidateRange(dolChunkOffset, dolChunkSize);
RegisterDOL(dolChunkOffset, dolChunkSize); RegisterDOL(dolChunkOffset, dolChunkSize);
} }
@ -323,16 +351,22 @@ u32 Channels::LoadChannel(const u64 &chantitle)
free(dolfile); 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 // IOS Version Check
*(vu32*)0x80003140 = ((ios << 16)) | 0xFFFF; *(vu32*)0x80003140 = ((ios << 16)) | 0xFFFF;
*(vu32*)0x80003188 = ((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(); ISFS_Deinitialize();

View File

@ -213,7 +213,7 @@ GuiKeyboard::GuiKeyboard(char * t, u32 max, int minimum, int lang)
keyTextboxImg->SetPosition(0, 40);//(0,0); keyTextboxImg->SetPosition(0, 40);//(0,0);
this->Append(keyTextboxImg); 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->SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
kbText->SetPosition(0, 53);//(0, 13); kbText->SetPosition(0, 53);//(0, 13);
this->Append(kbText); this->Append(kbText);
@ -238,13 +238,11 @@ GuiKeyboard::GuiKeyboard(char * t, u32 max, int minimum, int lang)
keyBackOverImg = new GuiImage(keyMedium); keyBackOverImg = new GuiImage(keyMedium);
if (mode == 3) if (mode == 3)
{ {
keyBackText = new GuiText("Retour", 20, ( GXColor ) keyBackText = new GuiText("Retour", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
{ 0, 0, 0, 0xff});
} }
else else
{ {
keyBackText = new GuiText("Back", 20, ( GXColor ) keyBackText = new GuiText("Back", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
{ 0, 0, 0, 0xff});
} }
//keyBack = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight()); //keyBack = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight());
keyBack = new GuiButton(keyBackImg, keyBackOverImg, 0, 3, 11 * 42 + 40 + eurocheck, 0 * 42 + 120, trigA, 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); keyClearOverImg = new GuiImage(keyMedium);
if (mode == 3) if (mode == 3)
{ {
keyClearText = new GuiText("Effacer", 20, ( GXColor ) keyClearText = new GuiText("Effacer", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
{ 0, 0, 0, 0xff});
} }
else else
{ {
keyClearText = new GuiText("Clear", 20, ( GXColor ) keyClearText = new GuiText("Clear", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
{ 0, 0, 0, 0xff});
} }
keyClear = new GuiButton(keyClearImg, keyClearOverImg, 0, 3, (10 * 42 + 40) + eurocheck, 4 * 42 + 120, trigA, keyClear = new GuiButton(keyClearImg, keyClearOverImg, 0, 3, (10 * 42 + 40) + eurocheck, 4 * 42 + 120, trigA,
btnSoundOver, btnSoundClick, 1); btnSoundOver, btnSoundClick, 1);
@ -294,8 +290,7 @@ GuiKeyboard::GuiKeyboard(char * t, u32 max, int minimum, int lang)
keyAltImg = new GuiImage(keyMedium); keyAltImg = new GuiImage(keyMedium);
keyAltOverImg = new GuiImage(keyMedium); keyAltOverImg = new GuiImage(keyMedium);
keyAltText = new GuiText("Alt Gr", 20, ( GXColor ) keyAltText = new GuiText("Alt Gr", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
{ 0, 0, 0, 0xff});
keyAlt = new GuiButton(keyAltImg, keyAltOverImg, 0, 3, 84 + eurocheck, 4 * 42 + 120, trigA, btnSoundOver, keyAlt = new GuiButton(keyAltImg, keyAltOverImg, 0, 3, 84 + eurocheck, 4 * 42 + 120, trigA, btnSoundOver,
btnSoundClick, 1); btnSoundClick, 1);
//keyAlt = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight()); //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); keyAlt2Img = new GuiImage(keyMedium);
keyAlt2OverImg = new GuiImage(keyMedium); keyAlt2OverImg = new GuiImage(keyMedium);
keyAlt2Text = new GuiText("Accent", 20, ( GXColor ) keyAlt2Text = new GuiText("Accent", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
{ 0, 0, 0, 0xff});
keyAlt2 = new GuiButton(keyAlt2Img, keyAlt2OverImg, 0, 3, (8 * 42 + 40) + eurocheck, 4 * 42 + 120, trigA, keyAlt2 = new GuiButton(keyAlt2Img, keyAlt2OverImg, 0, 3, (8 * 42 + 40) + eurocheck, 4 * 42 + 120, trigA,
btnSoundOver, btnSoundClick, 1); btnSoundOver, btnSoundClick, 1);
//keyAlt2 = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight()); //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); keyCapsImg = new GuiImage(keyMedium);
keyCapsOverImg = new GuiImage(keyMedium); keyCapsOverImg = new GuiImage(keyMedium);
keyCapsText = new GuiText("Caps", 20, ( GXColor ) keyCapsText = new GuiText("Caps", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
{ 0, 0, 0, 0xff});
keyCaps = new GuiButton(keyCapsImg, keyCapsOverImg, 0, 3, 0 + eurocheck, 2 * 42 + 120, trigA, btnSoundOver, keyCaps = new GuiButton(keyCapsImg, keyCapsOverImg, 0, 3, 0 + eurocheck, 2 * 42 + 120, trigA, btnSoundOver,
btnSoundClick, 1); btnSoundClick, 1);
//keyCaps = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight()); //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); keyShiftImg = new GuiImage(keyMedium);
keyShiftOverImg = new GuiImage(keyMedium); keyShiftOverImg = new GuiImage(keyMedium);
keyShiftText = new GuiText("Shift", 20, ( GXColor ) keyShiftText = new GuiText("Shift", 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
{ 0, 0, 0, 0xff});
keyShift = new GuiButton(keyShiftImg, keyShiftOverImg, 0, 3, 21 + eurocheck, 3 * 42 + 120, trigA, btnSoundOver, keyShift = new GuiButton(keyShiftImg, keyShiftOverImg, 0, 3, 21 + eurocheck, 3 * 42 + 120, trigA, btnSoundOver,
btnSoundClick, 1); btnSoundClick, 1);
//keyShift = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight()); //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); keyImg[i][j] = new GuiImage(key);
keyImgOver[i][j] = new GuiImage(keyOver); keyImgOver[i][j] = new GuiImage(keyOver);
txt[0] = keys[i][j].ch; txt[0] = keys[i][j].ch;
keyTxt[i][j] = new GuiText(txt, 20, ( GXColor ) keyTxt[i][j] = new GuiText(txt, 20, thColor("r=0 g=0 b=0 a=255 - keyboard key text color"));
{ 0, 0, 0, 0xff});
keyTxt[i][j]->SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); keyTxt[i][j]->SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
keyTxt[i][j]->SetPosition(0, -10); 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, 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/CGameSettings.h"
#include "settings/CGameStatistics.h" #include "settings/CGameStatistics.h"
#include "settings/CGameCategories.hpp" #include "settings/CGameCategories.hpp"
#include "settings/GameTitles.h"
#include "usbloader/usbstorage2.h" #include "usbloader/usbstorage2.h"
#include "usbloader/MountGamePartition.h" #include "usbloader/MountGamePartition.h"
#include "usbloader/GameBooter.hpp" #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 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 font...%s\n", Theme::LoadFont(Settings.ConfigPath) ? "done" : "failed (using default)");
gprintf("\tLoading theme...%s\n", Theme::Load(Settings.theme) ? "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 //! Init the rest of the System
Sys_Init(); Sys_Init();

View File

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

View File

@ -53,6 +53,9 @@ GameBrowseMenu::GameBrowseMenu()
gameCoverImg = NULL; gameCoverImg = NULL;
GameIDTxt = NULL; GameIDTxt = NULL;
GameRegionTxt = NULL; GameRegionTxt = NULL;
listBackground = NULL;
carouselBackground = NULL;
gridBackground = NULL;
WDVD_GetCoverStatus(&DiscDriveCoverOld); WDVD_GetCoverStatus(&DiscDriveCoverOld);
gameList.FilterList(); gameList.FilterList();
HDDSizeCallback.SetCallback(this, &GameBrowseMenu::UpdateFreeSpace); HDDSizeCallback.SetCallback(this, &GameBrowseMenu::UpdateFreeSpace);
@ -360,6 +363,12 @@ GameBrowseMenu::~GameBrowseMenu()
RemoveAll(); RemoveAll();
//! Reset optional background image
bgImg->SetImage(background);
delete listBackground;
delete carouselBackground;
delete gridBackground;
delete btnInstall; delete btnInstall;
delete btnInstallOver; delete btnInstallOver;
delete btnSettings; 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->SetPosition(thInt("200 - game list layout pos x"), thInt("49 - game list layout pos y"));
gameBrowser->SetAlignment(ALIGN_LEFT, ALIGN_CENTRE); gameBrowser->SetAlignment(ALIGN_LEFT, ALIGN_CENTRE);
gameBrowser->SetSelectedOption(Settings.SelectedGame); 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) 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 = 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->SetPosition(thInt("0 - game grid layout pos x"), thInt("20 - game grid layout pos y"));
gameBrowser->SetAlignment(ALIGN_LEFT, ALIGN_CENTRE); 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) 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 = 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->SetPosition(thInt("0 - game carousel layout pos x"), thInt("-20 - game carousel layout pos y"));
gameBrowser->SetAlignment(ALIGN_LEFT, ALIGN_CENTRE); 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 else
{ {
gameList.ReadGameList(); gameList.ReadGameList();
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false, false); GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false);
if(Settings.ShowFreeSpace) if(Settings.ShowFreeSpace)
{ {
ThreadedTask::Instance()->AddCallback(&HDDSizeCallback); ThreadedTask::Instance()->AddCallback(&HDDSizeCallback);
@ -1158,7 +1197,7 @@ int GameBrowseMenu::MainLoop()
} }
wString oldFilter(gameList.GetCurrentFilter()); wString oldFilter(gameList.GetCurrentFilter());
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false, false); GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false);
gameList.FilterList(oldFilter.c_str()); gameList.FilterList(oldFilter.c_str());
ReloadBrowser(); ReloadBrowser();
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -89,8 +89,6 @@ int MenuLanguageSelect()
int cnt = 0; int cnt = 0;
int ret = 0, choice = 0; int ret = 0, choice = 0;
int returnhere = 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 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")); 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 ); w.SetEffect( EFFECT_FADE, -20 );
while ( w.GetEffect() > 0 ) usleep( 50 ); while ( w.GetEffect() > 0 ) usleep( 50 );

View File

@ -69,17 +69,24 @@ FeatureSettingsMenu::FeatureSettingsMenu()
Options->SetName(Idx++, "%s", tr( "Install WAD to EmuNand" )); Options->SetName(Idx++, "%s", tr( "Install WAD to EmuNand" ));
OldTitlesOverride = Settings.titlesOverride; OldTitlesOverride = Settings.titlesOverride;
OldCacheTitles = Settings.CacheTitles;
SetOptionValues(); SetOptionValues();
} }
FeatureSettingsMenu::~FeatureSettingsMenu() FeatureSettingsMenu::~FeatureSettingsMenu()
{ {
if (Settings.titlesOverride != OldTitlesOverride) if ( Settings.titlesOverride != OldTitlesOverride
|| Settings.CacheTitles != OldCacheTitles)
{ {
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, true); //! Remove cached titles and reload new titles
if(!Settings.titlesOverride) 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.ReadGameList();
gameList.LoadUnfiltered(); gameList.LoadUnfiltered();
} }
@ -144,9 +151,6 @@ int FeatureSettingsMenu::GetMenuInternal()
else if (ret == ++Idx) else if (ret == ++Idx)
{ {
if (++Settings.CacheTitles >= MAX_ON_OFF) Settings.CacheTitles = 0; if (++Settings.CacheTitles >= MAX_ON_OFF) Settings.CacheTitles = 0;
if(Settings.CacheTitles) //! create new cache file
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
} }
//! Settings: Wiilight //! Settings: Wiilight

View File

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

View File

@ -278,7 +278,7 @@ void FlyingButtonsMenu::ShowMenu()
//! Free memory if not done yet because new is allocated //! Free memory if not done yet because new is allocated
HideMenu(); 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->SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt->SetPosition(0, 40); titleTxt->SetPosition(0, 40);
titleTxt->SetMaxWidth(310, SCROLL_HORIZONTAL); titleTxt->SetMaxWidth(310, SCROLL_HORIZONTAL);

View File

@ -233,7 +233,8 @@ int GuiSettingsMenu::GetMenuInternal()
if (returnhere == 2) if (returnhere == 2)
{ {
//! Language changed. Reload game titles with new lang code. //! 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; 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( "Select DOL Offset" ));
} }
Options->SetName(Idx++, "%s", tr( "Block IOS Reload" )); 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 Emulation" ));
Options->SetName(Idx++, "%s", tr( "Nand Emu Path" )); Options->SetName(Idx++, "%s", tr( "Nand Emu Path" ));
@ -296,7 +296,7 @@ void GameLoadSM::SetOptionValues()
else else
Options->SetValue(Idx++, "%s", tr( OnOffText[GameConfig.iosreloadblock]) ); 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 //! Settings: Nand Emulation
if(GameConfig.NandEmuMode == INHERIT) if(GameConfig.NandEmuMode == INHERIT)
@ -482,15 +482,19 @@ int GameLoadSM::GetMenuInternal()
} }
//! Settings: Nand Emulation //! 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()) if(!IosLoader::IsD2X())
WindowPrompt(tr("Error:"), tr("Nand Emulation is only available on D2X cIOS!"), tr("OK")); WindowPrompt(tr("Error:"), tr("Nand Emulation is only available on D2X cIOS!"), tr("OK"));
else if (++GameConfig.NandEmuMode >= 3) GameConfig.NandEmuMode = INHERIT; 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 //! 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()) if(!IosLoader::IsD2X())
WindowPrompt(tr("Error:"), tr("Nand Emulation is only available on D2X cIOS!"), tr("OK")); 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 //! Reload the new game titles
gameList.ReadGameList(); gameList.ReadGameList();
gameList.LoadUnfiltered(); 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" ), trNOOP( "AXNextFrame" ),
}; };
static const char * ChannelLaunchText[] =
{
trNOOP( "Main DOL" ),
trNOOP( "Boot Content" ),
};
LoaderSettings::LoaderSettings() LoaderSettings::LoaderSettings()
: SettingsMenu(tr("Loader Settings"), &GuiOptions, MENU_NONE) : 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( "Block IOS Reload" ));
Options->SetName(Idx++, "%s", tr( "Return To" )); Options->SetName(Idx++, "%s", tr( "Return To" ));
Options->SetName(Idx++, "%s", tr( "Nand Saves Emulation" )); 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( "Hooktype" ));
Options->SetName(Idx++, "%s", tr( "Wiird Debugger" )); Options->SetName(Idx++, "%s", tr( "Wiird Debugger" ));
Options->SetName(Idx++, "%s", tr( "Debugger Paused Start" )); Options->SetName(Idx++, "%s", tr( "Debugger Paused Start" ));
Options->SetName(Idx++, "%s", tr( "Channel Launcher" ));
SetOptionValues(); SetOptionValues();
@ -150,7 +158,7 @@ LoaderSettings::~LoaderSettings()
} }
gameList.LoadUnfiltered(); 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 //! Settings: Nand Emulation
Options->SetValue(Idx++, "%s", tr( NandEmuText[Settings.NandEmuMode] )); Options->SetValue(Idx++, "%s", tr( NandEmuText[Settings.NandEmuMode] ));
//! Settings: Nand Chan. Emulation
Options->SetValue(Idx++, "%s", tr( NandEmuText[Settings.NandEmuChanMode] ));
//! Settings: Hooktype //! Settings: Hooktype
Options->SetValue(Idx++, "%s", tr( HooktypeText[Settings.Hooktype] )); Options->SetValue(Idx++, "%s", tr( HooktypeText[Settings.Hooktype] ));
@ -221,6 +232,9 @@ void LoaderSettings::SetOptionValues()
//! Settings: Wiird Debugger Pause on Start //! Settings: Wiird Debugger Pause on Start
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.WiirdDebuggerPause] )); Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.WiirdDebuggerPause] ));
//! Settings: Channel Launcher
Options->SetValue(Idx++, "%s", tr( ChannelLaunchText[Settings.UseChanLauncher] ));
} }
int LoaderSettings::GetMenuInternal() int LoaderSettings::GetMenuInternal()
@ -344,6 +358,14 @@ int LoaderSettings::GetMenuInternal()
else if (++Settings.NandEmuMode >= 3) Settings.NandEmuMode = 0; 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 //! Settings: Hooktype
else if (ret == ++Idx ) else if (ret == ++Idx )
{ {
@ -362,6 +384,12 @@ int LoaderSettings::GetMenuInternal()
if (++Settings.WiirdDebuggerPause >= MAX_ON_OFF) Settings.WiirdDebuggerPause = 0; 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(); SetOptionValues();
return MENU_NONE; return MENU_NONE;

View File

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

View File

@ -1,4 +1,5 @@
#include <gctypes.h> #include <gctypes.h>
#include <ogc/machine/processor.h>
#include "IosLoader.h" #include "IosLoader.h"
#include "Controls/DeviceHandler.hpp" #include "Controls/DeviceHandler.hpp"
@ -17,6 +18,11 @@
#include "utils/tools.h" #include "utils/tools.h"
#include "gecko.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 * Buffer variables for the IOS info to avoid loading it several times
@ -148,7 +154,7 @@ s32 IosLoader::ReloadIosSafe(s32 ios)
return -33; return -33;
} }
s32 r = IOS_ReloadIOS(ios); s32 r = ReloadIosKeepingRights(ios);
if (r >= 0) WII_Initialize(); if (r >= 0) WII_Initialize();
IosLoader::LoadIOSModules(IOS_GetVersion(), IOS_GetRevision()); IosLoader::LoadIOSModules(IOS_GetVersion(), IOS_GetRevision());
@ -156,6 +162,45 @@ s32 IosLoader::ReloadIosSafe(s32 ios)
return r; 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: * Private/Protected Methods:
******************************************************************************/ ******************************************************************************/

View File

@ -19,6 +19,7 @@ class IosLoader
static s32 LoadAppCios(); static s32 LoadAppCios();
static s32 LoadGameCios(s32 ios); static s32 LoadGameCios(s32 ios);
static s32 ReloadIosSafe(s32 ios); static s32 ReloadIosSafe(s32 ios);
static s32 ReloadIosKeepingRights(s32 ios);
static bool IsHermesIOS(s32 ios = IOS_GetVersion()); static bool IsHermesIOS(s32 ios = IOS_GetVersion());
static bool IsWaninkokoIOS(s32 ios = IOS_GetVersion()); static bool IsWaninkokoIOS(s32 ios = IOS_GetVersion());
static bool IsD2X(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 u8 arrangeList_gray_png[];
extern const u32 arrangeList_gray_png_size; 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 u8 balanceboard_png[];
extern const u32 balanceboard_png_size; extern const u32 balanceboard_png_size;
@ -161,6 +164,9 @@ extern const u32 drums_png_size;
extern const u8 drumsR_png[]; extern const u8 drumsR_png[];
extern const u32 drumsR_png_size; 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 u8 dvd_gray_png[];
extern const u32 dvd_gray_png_size; 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 u8 favIcon_png[];
extern const u32 favIcon_png_size; 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 u8 favIcon_gray_png[];
extern const u32 favIcon_gray_png_size; 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 u8 favorite_png[];
extern const u32 favorite_png_size; extern const u32 favorite_png_size;
@ -257,6 +239,9 @@ extern const u32 guitarR_png_size;
extern const u8 gxlogo_png[]; extern const u8 gxlogo_png[];
extern const u32 gxlogo_png_size; 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 u8 keyboard_backspace_over_png[];
extern const u32 keyboard_backspace_over_png_size; 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 u8 nintendods_png[];
extern const u32 nintendods_png_size; extern const u32 nintendods_png_size;
extern const u8 nintendodsR_png[];
extern const u32 nintendodsR_png_size;
extern const u8 nocover_png[]; extern const u8 nocover_png[];
extern const u32 nocover_png_size; 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 u8 player4_point_png[];
extern const u32 player4_point_png_size; 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 u8 progressbar_png[];
extern const u32 progressbar_png_size; 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 u8 rplayer2_point_png[];
extern const u32 rplayer2_point_png_size; 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 u8 rplayer4_point_png[];
extern const u32 rplayer4_point_png_size; 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 u8 scrollbar_box_png[];
extern const u32 scrollbar_box_png_size; 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 u8 sdcard_over_png[];
extern const u32 sdcard_over_png_size; 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 u8 settings_title_over_png[];
extern const u32 settings_title_over_png_size; 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 u8 startgame_arrow_right_png[];
extern const u32 startgame_arrow_right_png_size; 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}, {"arrangeGrid_gray.png", arrangeGrid_gray_png, arrangeGrid_gray_png_size, NULL, 0},
{"arrangeList.png", arrangeList_png, arrangeList_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}, {"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}, {"balanceboard.png", balanceboard_png, balanceboard_png_size, NULL, 0},
{"balanceboardR.png", balanceboardR_png, balanceboardR_png_size, NULL, 0}, {"balanceboardR.png", balanceboardR_png, balanceboardR_png_size, NULL, 0},
{"battery.png", battery_png, battery_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}, {"dialogue_box_startgame.png", dialogue_box_startgame_png, dialogue_box_startgame_png_size, NULL, 0},
{"drums.png", drums_png, drums_png_size, NULL, 0}, {"drums.png", drums_png, drums_png_size, NULL, 0},
{"drumsR.png", drumsR_png, drumsR_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}, {"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_ao.png", esrb_ao_png, esrb_ao_png_size, NULL, 0},
{"esrb_e.png", esrb_e_png, esrb_e_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.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}, {"exit_top_over.png", exit_top_over_png, exit_top_over_png_size, NULL, 0},
{"favIcon.png", favIcon_png, favIcon_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}, {"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}, {"favorite.png", favorite_png, favorite_png_size, NULL, 0},
{"gameinfo1.png", gameinfo1_png, gameinfo1_png_size, NULL, 0}, {"gameinfo1.png", gameinfo1_png, gameinfo1_png_size, NULL, 0},
{"gameinfo1a.png", gameinfo1a_png, gameinfo1a_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}, {"guitar.png", guitar_png, guitar_png_size, NULL, 0},
{"guitarR.png", guitarR_png, guitarR_png_size, NULL, 0}, {"guitarR.png", guitarR_png, guitarR_png_size, NULL, 0},
{"gxlogo.png", gxlogo_png, gxlogo_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_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_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}, {"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}, {"motionplusR.png", motionplusR_png, motionplusR_png_size, NULL, 0},
{"new.png", new_png, new_png_size, NULL, 0}, {"new.png", new_png, new_png_size, NULL, 0},
{"nintendods.png", nintendods_png, nintendods_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}, {"nocover.png", nocover_png, nocover_png_size, NULL, 0},
{"nocoverFlat.png", nocoverFlat_png, nocoverFlat_png_size, NULL, 0}, {"nocoverFlat.png", nocoverFlat_png, nocoverFlat_png_size, NULL, 0},
{"nocoverFull.png", nocoverFull_png, nocoverFull_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}, {"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_grab.png", player4_grab_png, player4_grab_png_size, NULL, 0},
{"player4_point.png", player4_point_png, player4_point_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.png", progressbar_png, progressbar_png_size, NULL, 0},
{"progressbar_empty.png", progressbar_empty_png, progressbar_empty_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}, {"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}, {"remove.png", remove_png, remove_png_size, NULL, 0},
{"rplayer1_point.png", rplayer1_point_png, rplayer1_point_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}, {"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}, {"rplayer4_point.png", rplayer4_point_png, rplayer4_point_png_size, NULL, 0},
{"scrollBarBottom.png", scrollBarBottom_png, scrollBarBottom_png_size, NULL, 0}, {"scrollBarBottom.png", scrollBarBottom_png, scrollBarBottom_png_size, NULL, 0},
{"scrollBarTile.png", scrollBarTile_png, scrollBarTile_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_arrowdown.png", scrollbar_arrowdown_png, scrollbar_arrowdown_png_size, NULL, 0},
{"scrollbar_arrowup.png", scrollbar_arrowup_png, scrollbar_arrowup_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}, {"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}, {"sdcard_over.png", sdcard_over_png, sdcard_over_png_size, NULL, 0},
{"searchIcon.png", searchIcon_png, searchIcon_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}, {"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_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.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}, {"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}, {"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_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}, {"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}, {"success.ogg", success_ogg, success_ogg_size, NULL, 0},
{"clock.ttf", clock_ttf, clock_ttf_size, NULL, 0}, {"clock.ttf", clock_ttf, clock_ttf_size, NULL, 0},
{"font.ttf", font_ttf, font_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} {NULL, NULL, 0, NULL, 0}
}; };

View File

@ -131,10 +131,6 @@ void GameBooter::SetupNandEmu(u8 NandEmuMode, const char *NandEmuPath, struct di
DeviceHandler::Instance()->UnMountSD(); DeviceHandler::Instance()->UnMountSD();
Enable_Emu(strncmp(NandEmuPath, "usb", 3) == 0 ? EMU_USB : EMU_SD); 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(); const char *NandEmuPath = game_cfg->NandEmuPath.size() == 0 ? Settings.NandEmuPath : game_cfg->NandEmuPath.c_str();
if(gameHeader.tid != 0) 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(); 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) if(Settings.PlaylogUpdate)
Playlog_Update((char *) gameHeader.id, BNRInstance::Instance()->GetIMETTitle(CONF_GetLanguage())); Playlog_Update((char *) gameHeader.id, BNRInstance::Instance()->GetIMETTitle(CONF_GetLanguage()));
//! Setup NAND emulation //! Load wip codes
SetupNandEmu(NandEmuMode, NandEmuPath, gameHeader);
// Load wip codes
load_wip_code(gameHeader.id); load_wip_code(gameHeader.id);
//! Load Ocarina codes //! Load Ocarina codes
if (ocarinaChoice) if (ocarinaChoice)
ocarina_load_code(Settings.Cheatcodespath, gameHeader.id); ocarina_load_code(Settings.Cheatcodespath, gameHeader.id);
//! Setup NAND emulation
SetupNandEmu(NandEmuMode, NandEmuPath, gameHeader);
//! Setup disc stuff if we load a game //! Setup disc stuff if we load a game
if(gameHeader.tid == 0) if(gameHeader.tid == 0)
{ {
@ -334,8 +332,6 @@ int GameBooter::BootGame(struct discHdr *gameHdr)
gprintf("\tChannel Boot\n"); gprintf("\tChannel Boot\n");
// Load dol // Load dol
AppEntrypoint = Channels::LoadChannel(gameHeader.tid); AppEntrypoint = Channels::LoadChannel(gameHeader.tid);
/* Setup low memory */
Disc_SetLowMem();
/* Setup video mode */ /* Setup video mode */
Disc_SelectVMode(videoChoice); Disc_SelectVMode(videoChoice);
} }

View File

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

View File

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

View File

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