* Improved GameCube controller functions (patch by Dynamit)

R+Z=Screenshot, X=Gameinfo window, Y=Covers download
* Added Classic Controller and GameCube Controller support
  in GameInfo window: 
  Right stick=3D Cover movement, X=Flip 3DCover 180°, L/R=Zoom
* Added Wifi6 and wifi10 pictures for GameInfo window.
  (Thanks OriginalHamster)
* Added device priority selection for GameCube listing
  in global Loader settings (SD->USB, or USB->SD)
* Added a "Use global" language setting for Gamecube games.
* Added support for USB devices with modified MBR's signature
  to prevent WiiU's format message.
* Prevent Rockband cursor display on GameCube and WiiWare
  games with "band" in the title (Crach bandicoot, Beach
  Bandits, etc.)
* Added Dol's Video mode patcher in Loader/Game settings,
  for games which couldn't be forced. (MadWorld, MotoGP08,
  Mario Party 8, etc.)
    ♦ Region patch = Patches the dol's known video modes
            to the region selected in "Video mode" setting,
            but keep interlace/progressive references.
    ♦ ON = Patch all dol's known video modes to the one
            selected in "Video mode" setting.
    ♦ ALL = Patch all dol's found video mode patterns 
            (even unknown video modes) to the one selected 
            in "Video mode" setting.

* DML: Updated DM(L) version detection up to v2.10
* DML: Automatically enable PADHook if Screenshot setting
       is enabled
* DML: Fixed a bug where multiple video modes could be set
       at the same time
* DEVO: Added a prompt if trying to launch a game from a 
        non FAT32 partition.
* DEVO: Added Direct Mapping Buttons setting (Devo r200+)
* DEVO: Added support for Language setting

* Language files updated: Chinese, French
This commit is contained in:
Cyan 2013-08-18 14:30:39 +00:00
parent 96b36741d4
commit cd3b443f4e
53 changed files with 1561 additions and 742 deletions

View File

@ -2,8 +2,8 @@
<app version="1">
<name> USB Loader GX</name>
<coder>USB Loader GX Team</coder>
<version>3.0 r1215</version>
<release_date>20130526121306</release_date>
<version>3.0 r1216</version>
<release_date>20130818134939</release_date>
<!-- // remove this line to enable arguments
<arguments>
<arg>--ios=250</arg>

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+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"
"Language-Team: r1056 - last version on http://djelinek.sweb.cz/_USBLoderGX/czech.lang \n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr "Upravené/Originál"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr "Prejete si synchronizovat informace o volných sektorech na vsech FAT 32
msgid "Do you wish to update/download all language files?"
msgstr "Prejete si zaktualizovat vsechny jazykové soubory?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "Stažení"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: Fox888[dk]\n"
"Language-Team: [dk]\n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr "Tilpassede/Originale"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr "Vil du synkronisere fri plads info sector på alle FAT32 Partitioner?"
msgid "Do you wish to update/download all language files?"
msgstr "Skal alle sprogfiler opdateres/downloades?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr ""
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2011-12-17 14:22+0100\n"
"Last-Translator: Arthur117\n"
"Language-Team: tj_cool, glowy, Arthur117\n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr "Aangepast/Origineel"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr "Wil je de vrije ruimte informatie sector synchroniseren op alle FAT32 pa
msgid "Do you wish to update/download all language files?"
msgstr "Wil je alle taalbestanden updaten/downloaden?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr ""
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr ""
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr ""
msgid "Do you wish to update/download all language files?"
msgstr ""
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr ""
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: c64rmx\n"
"Language-Team: \n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr "Omat/Alkuperäiset"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr ""
msgid "Do you wish to update/download all language files?"
msgstr "Haluatko päivittää/ladata kaikki kielitiedostot?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr ""
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

View File

@ -1,11 +1,11 @@
# USB Loader GX language source file.
# French.lang - r1211
# French.lang - r1216
# don't delete/change this line (é).
msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: Cyan\n"
"Language-Team: Badablek, Amour, ikya, Cyan & Kin8\n"
@ -494,6 +494,12 @@ msgstr "Persos"
msgid "Customs/Original"
msgstr "Persos/Originaux"
msgid "DEVO D Buttons"
msgstr "DEVO Boutons directs"
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr "DEVO Forcer 16:9"
@ -503,6 +509,9 @@ msgstr "DEVO LED detect. activité"
msgid "DEVO MemCard Emulation"
msgstr "DEVO MemCard Émulation"
msgid "DEVO Timer Fix"
msgstr "DEVO Correction timing"
msgid "DML Auto"
msgstr "Auto"
@ -719,6 +728,9 @@ msgstr "Voulez-vous synchroniser l'information d'espace libre disponible sur tou
msgid "Do you wish to update/download all language files?"
msgstr "Voulez-vous actualiser/télécharger tous les fichiers langue ?"
msgid "Dol Video Patch"
msgstr "Patch vidéo Dol"
msgid "Download"
msgstr "Télécharger"
@ -1986,6 +1998,9 @@ msgstr "Pour lancer les jeux GameCube avec DIOS MIOS vous devez utiliser une par
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr "Pour lancer les jeux GameCube avec Devolution vous devez placer le fichier loader.bin dans le Dossier Loader Devolution."
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr "Pour lancer les jeux GameCube avec Devolution vous devez utiliser une partition FAT32."
msgid "Tooltip Delay"
msgstr "Délai des Info-bulles"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2010-07-03 17:35-0800\n"
"Last-Translator: TheRealVisitor\n"
"Language-Team: Bertilax, Snoozer, wishmasterf, ZEN.13, TheRealVisitor\n"
@ -494,6 +494,12 @@ msgstr "Community"
msgid "Customs/Original"
msgstr "Community/Original"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr "DEVO LED Aktivität"
msgid "DEVO MemCard Emulation"
msgstr "DEVO MemCard Emulation"
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr "DML Auto"
@ -719,6 +728,9 @@ msgstr "Soll die freier Speicher Info auf allen Partitionen synchronisiert werde
msgid "Do you wish to update/download all language files?"
msgstr "Alle Sprachdateien aktualisieren?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "Herunterladen"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr "Um GameCube Spiele mit Devolution zu starten, muss sich die loader.bin Datei in Devolution Pfad befinden."
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr "Tooltip Verzögerung"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"Last-Translator: nakata6790\n"
"Language-Team: nakata6790 (aka0107@gmail.com)\n"
"MIME-Version: 1.0\n"
@ -493,6 +493,12 @@ msgstr "ÔñïðïðïéçìÝíá"
msgid "Customs/Original"
msgstr "ÔñïðïðïéçìÝíá/ÁõèåíôéêÜ"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -502,6 +508,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr "åîïìïßùóç ôçò memory card áðü ôï devolution"
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr "áõôüìáôá áðü ôï DML"
@ -718,6 +727,9 @@ msgstr "ÈÝëåôå íá óõã÷ñïíßóåôå ôïí êåíü ÷þñï áð
msgid "Do you wish to update/download all language files?"
msgstr "ÈÝëåôå íá áíáâáèìßóåôå/êáôåâÜóåôå üëá ôá áñ÷åßá ìåôáöñÜóåùí;"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "ËÞøç"
@ -1985,6 +1997,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr "Ãéá áíáðáñáãùãÞ ôßôëùí Gamecube ìå ôï ðñüãñáììá devolution ÷ñåéÜæåóôå ôï áñ÷åßï loader.bin óôï êáèïñéìÝíï ìïíïðÜôé ôïõ devolution."
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr "ÊáèõóôÝñçóç åìöÜíéóçò åôéêåôþí"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2009-12-29 11:05+0100\n"
"Last-Translator: Springdale\n"
"Language-Team: Tusk, Springdale\n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr "Egyéni/Eredeti"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr ""
msgid "Do you wish to update/download all language files?"
msgstr "Minden nyelvi fájl letöltése/frissítése?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "Letöltés"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2011-09-11 12:19+0100\n"
"Last-Translator: xFede\n"
"Language-Team: xFede (fedeanto11@gmail.com)\n"
@ -494,6 +494,12 @@ msgstr "Personalizzati"
msgid "Customs/Original"
msgstr "Modific./origin."
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr "Led attività DEVO"
msgid "DEVO MemCard Emulation"
msgstr "Emulazione memory card DEVO"
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr "Patch auto DML"
@ -719,6 +728,9 @@ msgstr "Vuoi sincronizzare le info sullo spazio libero in tutte le partizioni FA
msgid "Do you wish to update/download all language files?"
msgstr "Vuoi scaricare/aggiornare tutte le traduzioni?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "Scarica"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr "Per avviare i giochi Gamecube con devolution devi avere il file loader.bin nel tuo percorso devolution."
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr "Ritardo suggerimenti"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: hosigumayuugi\n"
"Language-Team: hosigumayuugi\n"
@ -494,6 +494,12 @@ msgstr "カスタム"
msgid "Customs/Original"
msgstr "カスタムを優先"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr "DEVOメモカエミュ"
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr "DML 自動"
@ -719,6 +728,9 @@ msgstr "全てのFAT32領域のセクタで空き容量情報を同期します
msgid "Do you wish to update/download all language files?"
msgstr "すべての言語をダウンロードしますか?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "ダウンロード"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr "GCゲームをDevolutionで起動するにはloader.binがDevolutionのパスにある必要があります"
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr "ヒントバルーンの遅延"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: nextos@korea.com\n"
"Language-Team: \n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr "커스텀/오리지널"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr ""
msgid "Do you wish to update/download all language files?"
msgstr "정말로 모든 언어화일을 업데이트하고 다운로드 할까요?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr ""
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: raschi\n"
"Language-Team: raschi\n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr "Custom/Original"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr "Vil du synkronisere ledig plass info sektor på alle FAT32 partisjoner?"
msgid "Do you wish to update/download all language files?"
msgstr "Vil du oppdatere/laste ned alle språkfiler?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "Last ned"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: ziom666 (zadania_prog@vp.pl)\n"
"Language-Team: \n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr ""
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr ""
msgid "Do you wish to update/download all language files?"
msgstr "Zaktualizowac wszystkie pliki jezykowe?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "Pobierz"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2009-10-23 18:52+0200\n"
"Last-Translator: aniemotion\n"
"Language-Team: boto12, aniemotion\n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr "Alternativas/Originais"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr ""
msgid "Do you wish to update/download all language files?"
msgstr "Deseja atualizar todos os arquivos de idioma?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "Baixar"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2011-11-03 11:00+0000\n"
"Last-Translator: pplucky <pplucky@gmail.com>\n"
"Language-Team: Sky8000, pplucky\n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr "Personalizadas/Originais"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr "Deseja sincronizar a info de espaço livre em todas as partições FAT32
msgid "Do you wish to update/download all language files?"
msgstr "Queres actualizar todos os ficheiros de idioma?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "Descarregar"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: nikolai_ca\n"
"Language-Team: Kir, alendit, nikolai_ca\n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr "Измененный/Оригинальные"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr ""
msgid "Do you wish to update/download all language files?"
msgstr "Вы действительно хотите обновить/загрузить все языковые файлы?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "Загрузка"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2011-07-25 16:40+0200\n"
"Last-Translator: Galen/xFede\n"
"Language-Team: Penn, SirPalax, hvy109\n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr "Artísticas/Originales"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr "¿Quieres sincronizar el sector de información de espacio libre en toda
msgid "Do you wish to update/download all language files?"
msgstr "¿Quieres actualizar/descargar todos los archivos de idiomas?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "Descargar"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr "Retraso de ayuda rapida"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2010-01-19 17:39+0200\n"
"Last-Translator: Katsurou\n"
"Language-Team: Katsurou, pirateX\n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr "Anpassade/Original"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr ""
msgid "Do you wish to update/download all language files?"
msgstr "Vill du uppdatera/ladda ner alla språkfiler?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "Ladda ner"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2010-02-15 21:00+0800\n"
"Last-Translator: Jane.H\n"
"Language-Team: kyogc, Miller, Mika Li, Jane.H\n"
@ -494,6 +494,12 @@ msgstr "自訂"
msgid "Customs/Original"
msgstr "自製/原始"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr "DEVO LED燈 開啟"
msgid "DEVO MemCard Emulation"
msgstr "DEVO 記憶卡模擬"
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr "DML 自動"
@ -719,6 +728,9 @@ msgstr "是否要同步所有FAT32分區可用空間資訊"
msgid "Do you wish to update/download all language files?"
msgstr "是否要更新/下載所有語言檔案嗎?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "下載"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr "用Devolution執行GameCube遊戲你需在Devolution 路徑中放置loader.bin檔。"
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr "提示訊息 延遲時間"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: Nitro_subzero \n"
"Language-Team: Nitro_subzero\n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr "กำหนดเอง/ดั้งเดิม"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr ""
msgid "Do you wish to update/download all language files?"
msgstr "ต้องการอัพเดทหรือดาวน์โหลด ไฟล์ภาษา ทั้งหมด?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "ดาวน์โหลด"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-17 13:57+0100\n"
"POT-Creation-Date: 2013-08-18 15:50+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: omercigingelini\n"
"Language-Team: omercigingelini\n"
@ -494,6 +494,12 @@ msgstr ""
msgid "Customs/Original"
msgstr "Kişisel/Orjinal"
msgid "DEVO D Buttons"
msgstr ""
msgid "DEVO F-Zero AX"
msgstr ""
msgid "DEVO Force Widescreen"
msgstr ""
@ -503,6 +509,9 @@ msgstr ""
msgid "DEVO MemCard Emulation"
msgstr ""
msgid "DEVO Timer Fix"
msgstr ""
msgid "DML Auto"
msgstr ""
@ -719,6 +728,9 @@ msgstr ""
msgid "Do you wish to update/download all language files?"
msgstr "Tüm dil dosyalarını indirmek/güncellemek istiyor musunuz?"
msgid "Dol Video Patch"
msgstr ""
msgid "Download"
msgstr "İndir"
@ -1986,6 +1998,9 @@ msgstr ""
msgid "To run GameCube games with Devolution you need the loader.bin file in your Devolution Path."
msgstr ""
msgid "To run GameCube games with Devolution you need to use a FAT32 partition."
msgstr ""
msgid "Tooltip Delay"
msgstr ""

BIN
data/images/wifi10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
data/images/wifi6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -87,7 +87,7 @@ BoxCover::~BoxCover()
//! Remove me later
void BoxCover::WiiPADControl(GuiTrigger *t)
{
if(t->wpad.btns_d & WPAD_BUTTON_A)
if((t->wpad.btns_d & WPAD_BUTTON_A) || (t->wpad.btns_h & WPAD_CLASSIC_BUTTON_A) || (t->pad.btns_h & PAD_BUTTON_A))
{
if(t->wpad.ir.valid)
{
@ -98,8 +98,23 @@ void BoxCover::WiiPADControl(GuiTrigger *t)
PosY += movePosY;
movePosX = 0.0f;
movePosY = 0.0f;
if(moveChan >= 0 && moveChan < 3)
// GameCube and Classic Controller
s8 movX = fabs(t->pad.stickX) > 10.0f ? t->pad.stickX : t->WPAD_Stick(0, 0);
s8 movY = fabs(t->pad.stickY) > 10.0f ? t->pad.stickY : t->WPAD_Stick(0, 1);
//! Drop stick moves of less than 10 because of sensitivity
if(fabs(movX) < 10.0f) movX = 0;
if(fabs(movY) < 10.0f) movY = 0;
if(movX < -PADCAL)
PosX += (movX + PADCAL) * Settings.PointerSpeed * fabs(PosZ)/3400.f;
if(movX > PADCAL)
PosX += (movX - PADCAL) * Settings.PointerSpeed * fabs(PosZ)/3400.f;
if(movY < -PADCAL)
PosY += (movY + PADCAL) * Settings.PointerSpeed * fabs(PosZ)/3400.f;
if(movY > PADCAL)
PosY += (movY - PADCAL) * Settings.PointerSpeed * fabs(PosZ)/3400.f;
if(moveChan >= 0 && moveChan < 4)
{
char name[50];
snprintf(name, sizeof(name), "player%i_grab.png", moveChan+1);
@ -109,15 +124,15 @@ void BoxCover::WiiPADControl(GuiTrigger *t)
else
moveChan = -1;
}
else if((t->wpad.btns_h & WPAD_BUTTON_A) && moveChan == t->chan && t->wpad.ir.valid && !effects)
else if(((t->wpad.btns_h & WPAD_BUTTON_A) || (t->wpad.btns_h & WPAD_CLASSIC_BUTTON_A) || (t->pad.btns_h & PAD_BUTTON_A)) && moveChan == t->chan && t->wpad.ir.valid && !effects)
{
movePosX = (t->wpad.ir.x-moveStartPosX) * fabs(PosZ)/3400.f;
movePosY = (moveStartPosY-t->wpad.ir.y) * fabs(PosZ)/3400.f;
last_manual_move_frame = frameCount;
}
else if(!(t->wpad.btns_h & WPAD_BUTTON_A) && moveChan == t->chan)
else if(!(t->wpad.btns_h & WPAD_BUTTON_A) && !(t->wpad.btns_h & WPAD_CLASSIC_BUTTON_A) && !(t->pad.btns_h & PAD_BUTTON_A) && moveChan == t->chan)
{
if(moveChan >= 0 && moveChan < 3)
if(moveChan >= 0 && moveChan < 4)
{
char name[50];
snprintf(name, sizeof(name), "player%i_point.png", moveChan+1);
@ -125,27 +140,27 @@ void BoxCover::WiiPADControl(GuiTrigger *t)
}
}
if(t->wpad.btns_h & WPAD_BUTTON_UP)
if((t->wpad.btns_h & WPAD_BUTTON_UP) || (t->pad.substickY > PADCAL))
{
RotX -= 2.0f;
last_manual_move_frame = frameCount;
}
if(t->wpad.btns_h & WPAD_BUTTON_DOWN)
if((t->wpad.btns_h & WPAD_BUTTON_DOWN) || (t->pad.substickY < -PADCAL))
{
RotX += 2.0f;
last_manual_move_frame = frameCount;
}
if(t->wpad.btns_h & WPAD_BUTTON_LEFT)
if((t->wpad.btns_h & WPAD_BUTTON_LEFT) || (t->pad.substickX < -PADCAL))
{
RotY -= 2.0f;
last_manual_move_frame = frameCount;
}
if(t->wpad.btns_h & WPAD_BUTTON_RIGHT)
if((t->wpad.btns_h & WPAD_BUTTON_RIGHT) || (t->pad.substickX > PADCAL))
{
RotY += 2.0f;
last_manual_move_frame = frameCount;
}
if(t->wpad.btns_d & WPAD_BUTTON_2)
if((t->wpad.btns_d & WPAD_BUTTON_2) || (t->pad.btns_d & PAD_BUTTON_X) || (t->wpad.btns_d & WPAD_CLASSIC_BUTTON_X))
{
if(RotY < 180.0f)
SetEffect(EFFECT_BOX_ROTATE_X, 10, 180);
@ -153,12 +168,12 @@ void BoxCover::WiiPADControl(GuiTrigger *t)
SetEffect(EFFECT_BOX_ROTATE_X, -10, -180);
last_manual_move_frame = frameCount;
}
if(t->wpad.btns_h & WPAD_BUTTON_PLUS)
if((t->wpad.btns_h & WPAD_BUTTON_PLUS) || (t->pad.btns_h & PAD_TRIGGER_R) || (t->wpad.btns_h & WPAD_CLASSIC_BUTTON_FULL_R))
{
if(PosZ < -2.8f)
PosZ += 0.4f*fabs(PosZ)/19.f;
}
if(t->wpad.btns_h & WPAD_BUTTON_MINUS)
if((t->wpad.btns_h & WPAD_BUTTON_MINUS) || (t->pad.btns_h & PAD_TRIGGER_L) || (t->wpad.btns_h & WPAD_CLASSIC_BUTTON_FULL_L))
{
if(PosZ > -43.0f)
PosZ -= 0.4f*fabs(PosZ)/19.f;
@ -167,11 +182,11 @@ void BoxCover::WiiPADControl(GuiTrigger *t)
void BoxCover::Update(GuiTrigger * t)
{
s8 movY = t->WPAD_Stick(0, 0) ;
s8 movX = t->WPAD_Stick(0, 1);
//! Drop nunchuck moves of less than 5 because of sensitivity
if(fabs(movY) < 5.0f) movY = 0;
if(fabs(movX) < 5.0f) movX = 0;
s8 movY = t->WPAD_Stick((t->wpad.exp.type == WPAD_EXP_CLASSIC), 0);
s8 movX = t->WPAD_Stick((t->wpad.exp.type == WPAD_EXP_CLASSIC), 1);
//! Drop stick moves of less than 10 because of sensitivity
if(fabs(movY) < 10.0f) movY = 0;
if(fabs(movX) < 10.0f) movX = 0;
if(movY != 0 || movX != 0)
last_manual_move_frame = frameCount;

View File

@ -246,7 +246,7 @@ int PartitionHandle::FindPartitions()
}
// If this is not the device's master boot record
if (mbr->signature != MBR_SIGNATURE)
if (mbr->signature != MBR_SIGNATURE && mbr->signature != MBR_SIGNATURE_MOD)
{
// Check if the device has only one WBFS partition without a table.
wbfs_head_t *head = (wbfs_head_t *) mbr;

View File

@ -37,6 +37,8 @@
#define MBR_SIGNATURE 0x55AA
#define EBR_SIGNATURE MBR_SIGNATURE
#define MBR_SIGNATURE_MOD 0x55AB /* modified MBR_SIGNATURE to prevent the format message on WiiU */
#define PARTITION_BOOTABLE 0x80 /* Bootable (active) */
#define PARTITION_NONBOOTABLE 0x00 /* Non-bootable */
#define PARTITION_TYPE_GPT 0xEE /* Indicates that a GPT header is available */

View File

@ -20,7 +20,7 @@
#define LAUNCH_DEVO() ((void(*)(void))loader_bin)()
#define DEVO_SIG 0x3EF9DB23
#define DEVO_CONFIG_VERSION 0x0111
#define DEVO_CONFIG_VERSION 0x0112
enum DEVOConfig
{
@ -28,13 +28,14 @@ enum DEVOConfig
DEVO_CFG_WIDE = (1<<1), // added in Devo r142
DEVO_CFG_NOLED = (1<<2),
DEVO_CFG_FZERO_AX = (1<<3), // added in Devo r196, config version x0111
DEVO_CFG_TIMER_FIX = (1<<4)
DEVO_CFG_TIMER_FIX = (1<<4),
DEVO_CFG_D_BUTTONS = (1<<5) // added in Devo r200, config version 0x0112
};
typedef struct _DEVO_CFG
{
u32 signature; //0x3EF9DB23
u16 version; //0x00000110
u16 version; //0x00000112
u16 device_signature;
u32 memcard_cluster;
u32 disc1_cluster;

View File

@ -231,7 +231,7 @@ u32 GCGames::LoadAllGames(void)
for(u32 i = 0; i < sdGCList.size(); ++i)
{
if(Settings.GameCubeSource == GC_SOURCE_AUTO)
if(Settings.GameCubeSource != GC_SOURCE_SD)
{
u32 n;
for(n = 0; n < HeaderList.size(); ++n)
@ -239,11 +239,12 @@ u32 GCGames::LoadAllGames(void)
//! Display only one game if it is present on both SD and USB.
if(memcmp(HeaderList[n].id, sdGCList[i].id, 6) == 0)
{
if(IosLoader::GetMIOSInfo() == DIOS_MIOS || IosLoader::GetMIOSInfo() == QUADFORCE_USB) // DIOS MIOS - Show only the game on USB
if((Settings.GameCubeSource == GC_SOURCE_MAIN_SD) ||
(Settings.GameCubeSource == GC_SOURCE_AUTO && (IosLoader::GetMIOSInfo() == DIOS_MIOS || IosLoader::GetMIOSInfo() == QUADFORCE_USB))) // DIOS MIOS - Show the game on USB in priority
{
break;
}
else // replace the one loaded from USB with the same games on SD since we can load them directly
else // replace the one loaded from USB with the same games on SD
{
memcpy(&HeaderList[n], &sdGCList[i], sizeof(struct discHdr));
PathList[n] = sdGCPathList[i];
@ -258,7 +259,7 @@ u32 GCGames::LoadAllGames(void)
PathList.push_back(sdGCPathList[i]);
}
}
else // GC_SOURCE_SD, or GC_SOURCE_BOTH (show duplicates)
else // GC_SOURCE_SD
{
HeaderList.push_back(sdGCList[i]);
PathList.push_back(sdGCPathList[i]);

View File

@ -54,8 +54,10 @@ void UpdatePads()
if(userInput[i].wpad.exp.type == WPAD_EXP_NUNCHUK)
{
if((userInput[i].wpad.btns_h & WPAD_NUNCHUK_BUTTON_Z) && (userInput[i].wpad.btns_d & WPAD_NUNCHUK_BUTTON_C))
ScreenShot();
ScreenShot();
}
if((userInput[i].pad.btns_h & PAD_TRIGGER_R) && (userInput[i].pad.btns_d & PAD_TRIGGER_Z))
ScreenShot();
}
}

View File

@ -109,9 +109,9 @@ GameBrowseMenu::GameBrowseMenu()
trigHome = new GuiTrigger;
trigHome->SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, PAD_BUTTON_START);
trig2 = new GuiTrigger;
trig2->SetButtonOnlyTrigger(-1, WPAD_BUTTON_2 | WPAD_CLASSIC_BUTTON_X, 0);
trig2->SetButtonOnlyTrigger(-1, WPAD_BUTTON_2 | WPAD_CLASSIC_BUTTON_X, PAD_BUTTON_Y);
trig1 = new GuiTrigger;
trig1->SetButtonOnlyTrigger(-1, WPAD_BUTTON_1 | WPAD_CLASSIC_BUTTON_Y, 0);
trig1->SetButtonOnlyTrigger(-1, WPAD_BUTTON_1 | WPAD_CLASSIC_BUTTON_Y, PAD_BUTTON_X);
usedSpaceTxt = new GuiText(" ", 18, thColor("r=55 g=190 b=237 a=255 - hdd info color"));
usedSpaceTxt->SetAlignment(thAlign("center - hdd info align hor"), thAlign("top - hdd info align ver"));

View File

@ -20,6 +20,7 @@ typedef struct _appDOL
static appDOL *dolList = NULL;
static int dolCount = 0;
extern GXRModeObj *rmode;
void RegisterDOL(u8 *dst, int len)
{
@ -48,7 +49,7 @@ void ClearDOLList()
dolCount = 0;
}
void gamepatches(u8 videoSelected, u8 aspectForce, u8 languageChoice, u8 patchcountrystring,
void gamepatches(u8 videoSelected, u8 videoPatchDol, u8 aspectForce, u8 languageChoice, u8 patchcountrystring,
u8 vipatch, u8 sneekVideoPatch, u8 hooktype, u8 fix002, u64 returnTo)
{
int i;
@ -62,7 +63,7 @@ void gamepatches(u8 videoSelected, u8 aspectForce, u8 languageChoice, u8 patchco
u8 *dst = dolList[i].dst;
int len = dolList[i].len;
VideoModePatcher(dst, len, videoSelected);
VideoModePatcher(dst, len, videoSelected, videoPatchDol);
dogamehooks(hooktype, dst, len);
@ -212,26 +213,131 @@ bool PoPPatch()
/** Insert the individual gamepatches above with the patterns and patch data **/
/** Following is only the VideoPatcher **/
#if 0 /** Isn't used right now **/
// Some missing video modes
static GXRModeObj TVPal528Prog = {
6, // viDisplayMode
640, // fbWidth
528, // efbHeight
528, // xfbHeight
40, // viXOrigin // (VI_MAX_WIDTH_PAL - 640)/2,
23, // viYOrigin // game uses 0x17 instead of 0x18 so we don't use (VI_MAX_HEIGHT_PAL - 528)/2
640, // viWidth
528, // viHeight
VI_XFBMODE_SF, // xFBmode
GX_FALSE, // field_rendering
GX_FALSE, // aa
static GXRModeObj* vmodes[] =
{
// sample points arranged in increasing Y order
{
{6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each
{6,6},{6,6},{6,6}, // pix 1
{6,6},{6,6},{6,6}, // pix 2
{6,6},{6,6},{6,6} // pix 3
},
// vertical filter[7], 1/64 units, 6 bits each
{
0, // line n-1
0, // line n-1
21, // line n
22, // line n
21, // line n
0, // line n+1
0 // line n+1
}
};
static GXRModeObj TVPal528ProgSoft = {
6, // viDisplayMode
640, // fbWidth
528, // efbHeight
528, // xfbHeight
40, // viXOrigin
23, // viYOrigin
640, // viWidth
528, // viHeight
VI_XFBMODE_SF, // xFBmode
GX_FALSE, // field_rendering
GX_FALSE, // aa
// sample points arranged in increasing Y order
{
{6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each
{6,6},{6,6},{6,6}, // pix 1
{6,6},{6,6},{6,6}, // pix 2
{6,6},{6,6},{6,6} // pix 3
},
// vertical filter[7], 1/64 units, 6 bits each
{
8, // line n-1
8, // line n-1
10, // line n
12, // line n
10, // line n
8, // line n+1
8 // line n+1
}
};
static GXRModeObj TVPal524ProgAa = {
6, // viDisplayMode
640, // fbWidth
264, // efbHeight
524, // xfbHeight
40, // viXOrigin
23, // viYOrigin
640, // viWidth
524, // viHeight
VI_XFBMODE_SF, // xFBmode
GX_FALSE, // field_rendering
GX_TRUE, // aa
// sample points arranged in increasing Y order
{
{3,2},{9,6},{3,10}, // pix 0, 3 sample points, 1/12 units, 4 bits each
{3,2},{9,6},{3,10}, // pix 1
{9,2},{3,6},{9,10}, // pix 2
{9,2},{3,6},{9,10} // pix 3
},
// vertical filter[7], 1/64 units, 6 bits each
{
4, // line n-1
8, // line n-1
12, // line n
16, // line n
12, // line n
8, // line n+1
4 // line n+1
}
};
static GXRModeObj* vmodes[] = {
&TVNtsc240Ds,
&TVNtsc240DsAa,
&TVNtsc240Int,
&TVNtsc240IntAa,
&TVNtsc480IntDf,
&TVNtsc480Int,
&TVNtsc480IntAa,
&TVNtsc480IntDf,
&TVNtsc480Prog,
&TVNtsc480ProgSoft,
&TVNtsc480ProgAa,
&TVMpal480IntDf,
&TVPal264Ds,
&TVPal264DsAa,
&TVPal264Int,
&TVPal264IntAa,
&TVPal524ProgAa,
&TVPal524IntAa,
&TVPal528Int,
&TVPal528IntDf,
&TVPal574IntDfScale,
&TVPal528Prog,
&TVPal528ProgSoft,
&TVPal576IntDfScale,
&TVEurgb60Hz240Ds,
&TVEurgb60Hz240DsAa,
&TVEurgb60Hz240Int,
@ -244,26 +350,88 @@ static GXRModeObj* vmodes[] =
&TVEurgb60Hz480ProgAa
};
#endif
static const char * vmodes_name[] = {
"TVNtsc240Ds",
"TVNtsc240DsAa",
"TVNtsc240Int",
"TVNtsc240IntAa",
"TVNtsc480Int",
"TVNtsc480IntDf(Aa)",
"TVNtsc480IntAa",
"TVNtsc480Prog",
"TVNtsc480ProgSoft",
"TVNtsc480ProgAa",
"TVMpal480IntDf",
"TVPal264Ds",
"TVPal264DsAa",
"TVPal264Int",
"TVPal264IntAa",
"TVPal524ProgAa",
"TVPal524IntAa",
"TVPal528Int",
"TVPal528IntDf",
"TVPal528Prog",
"TVPal528ProgSoft",
"TVPal576IntDfScale",
"TVEurgb60Hz240Ds",
"TVEurgb60Hz240DsAa",
"TVEurgb60Hz240Int",
"TVEurgb60Hz240IntAa",
"TVEurgb60Hz480Int",
"TVEurgb60Hz480IntDf",
"TVEurgb60Hz480IntAa",
"TVEurgb60Hz480Prog",
"TVEurgb60Hz480ProgSoft",
"TVEurgb60Hz480ProgAa"
};
static GXRModeObj* PAL2NTSC[] = { &TVMpal480IntDf, &TVNtsc480IntDf, &TVPal264Ds, &TVNtsc240Ds, &TVPal264DsAa,
&TVNtsc240DsAa, &TVPal264Int, &TVNtsc240Int, &TVPal264IntAa, &TVNtsc240IntAa, &TVPal524IntAa, &TVNtsc480IntAa,
&TVPal528Int, &TVNtsc480IntAa, &TVPal528IntDf, &TVNtsc480IntDf, &TVPal576IntDfScale, &TVNtsc480IntDf,
&TVEurgb60Hz240Ds, &TVNtsc240Ds, &TVEurgb60Hz240DsAa, &TVNtsc240DsAa, &TVEurgb60Hz240Int, &TVNtsc240Int,
&TVEurgb60Hz240IntAa, &TVNtsc240IntAa, &TVEurgb60Hz480Int, &TVNtsc480IntAa, &TVEurgb60Hz480IntDf,
&TVNtsc480IntDf, &TVEurgb60Hz480IntAa, &TVNtsc480IntAa, &TVEurgb60Hz480Prog, &TVNtsc480Prog,
&TVEurgb60Hz480ProgSoft, &TVNtsc480Prog, &TVEurgb60Hz480ProgAa, &TVNtsc480Prog, 0, 0
};
static GXRModeObj* PAL2NTSC[] = {
&TVMpal480IntDf, &TVNtsc480IntDf,
&TVPal264Ds, &TVNtsc240Ds,
&TVPal264DsAa, &TVNtsc240DsAa,
&TVPal264Int, &TVNtsc240Int,
&TVPal264IntAa, &TVNtsc240IntAa,
&TVPal524IntAa, &TVNtsc480IntAa,
&TVPal528Int, &TVNtsc480Int,
&TVPal528IntDf, &TVNtsc480IntDf,
&TVPal528Prog, &TVNtsc480Prog,
&TVPal576IntDfScale, &TVNtsc480IntDf,
&TVEurgb60Hz240Ds, &TVNtsc240Ds,
&TVEurgb60Hz240DsAa, &TVNtsc240DsAa,
&TVEurgb60Hz240Int, &TVNtsc240Int,
&TVEurgb60Hz240IntAa, &TVNtsc240IntAa,
&TVEurgb60Hz480Int, &TVNtsc480Int,
&TVEurgb60Hz480IntDf, &TVNtsc480IntDf,
&TVEurgb60Hz480IntAa, &TVNtsc480IntAa,
&TVEurgb60Hz480Prog, &TVNtsc480Prog,
&TVEurgb60Hz480ProgSoft, &TVNtsc480Prog,
&TVEurgb60Hz480ProgAa, &TVNtsc480Prog,
0, 0
};
static GXRModeObj* NTSC2PAL[] = { &TVNtsc240Ds, &TVPal264Ds, &TVNtsc240DsAa, &TVPal264DsAa, &TVNtsc240Int,
&TVPal264Int, &TVNtsc240IntAa, &TVPal264IntAa, &TVNtsc480IntDf, &TVPal528IntDf, &TVNtsc480IntAa,
&TVPal524IntAa, &TVNtsc480Prog, &TVPal528IntDf, 0, 0
};
static GXRModeObj* NTSC2PAL[] = {
&TVNtsc240Ds, &TVPal264Ds,
&TVNtsc240DsAa, &TVPal264DsAa,
&TVNtsc240Int, &TVPal264Int,
&TVNtsc240IntAa, &TVPal264IntAa,
&TVNtsc480Int, &TVPal528Int,
&TVNtsc480IntDf, &TVPal528IntDf,
&TVNtsc480IntAa, &TVPal524IntAa,
&TVNtsc480Prog, &TVPal528Prog,
0, 0
};
static GXRModeObj* NTSC2PAL60[] = { &TVNtsc240Ds, &TVEurgb60Hz240Ds, &TVNtsc240DsAa, &TVEurgb60Hz240DsAa,
&TVNtsc240Int, &TVEurgb60Hz240Int, &TVNtsc240IntAa, &TVEurgb60Hz240IntAa, &TVNtsc480IntDf,
&TVEurgb60Hz480IntDf, &TVNtsc480IntAa, &TVEurgb60Hz480IntAa, &TVNtsc480Prog, &TVEurgb60Hz480Prog, 0, 0
};
static GXRModeObj* NTSC2PAL60[] = {
&TVNtsc240Ds, &TVEurgb60Hz240Ds,
&TVNtsc240DsAa, &TVEurgb60Hz240DsAa,
&TVNtsc240Int, &TVEurgb60Hz240Int,
&TVNtsc240IntAa, &TVEurgb60Hz240IntAa,
&TVNtsc480Int, &TVEurgb60Hz480Int,
&TVNtsc480IntDf, &TVEurgb60Hz480IntDf,
&TVNtsc480IntAa, &TVEurgb60Hz480IntAa,
&TVNtsc480Prog, &TVEurgb60Hz480Prog,
0, 0
};
static bool compare_videomodes(GXRModeObj* mode1, GXRModeObj* mode2)
{
@ -349,7 +517,7 @@ static bool Search_and_patch_Video_Modes(u8 * Address, u32 Size, GXRModeObj* Tab
{
u8 *Addr = (u8 *) Address;
bool found = 0;
u32 i;
u32 i, j;
while (Size >= sizeof(GXRModeObj))
{
@ -357,6 +525,26 @@ static bool Search_and_patch_Video_Modes(u8 * Address, u32 Size, GXRModeObj* Tab
{
if (compare_videomodes(Table[i], (GXRModeObj*) Addr))
{
u8 current_vmode = 0;
u8 target_vmode = 0;
for(j = 0; j < sizeof(vmodes)/sizeof(vmodes[0]); j++)
{
if(compare_videomodes(Table[i], vmodes[j]))
{
current_vmode = j;
break;
}
}
for(j = 0; j < sizeof(vmodes)/sizeof(vmodes[0]); j++)
{
if(compare_videomodes(Table[i+1], vmodes[j]))
{
target_vmode = j;
break;
}
}
gprintf("Video mode found in dol: %s, replaced by: %s \n", vmodes_name[current_vmode], vmodes_name[target_vmode]);
found = 1;
patch_videomode((GXRModeObj*) Addr, Table[i + 1]);
Addr += (sizeof(GXRModeObj) - 4);
@ -372,36 +560,114 @@ static bool Search_and_patch_Video_Modes(u8 * Address, u32 Size, GXRModeObj* Tab
return found;
}
void VideoModePatcher(u8 * dst, int len, u8 videoSelected)
static bool Search_and_patch_Video_To(void *Address, u32 Size, GXRModeObj* Table[], GXRModeObj* rmode, bool patchAll)
{
u8 *Addr = (u8 *)Address;
bool found = 0;
u32 i;
u8 target_vmode = 0;
for(i = 0; i < sizeof(vmodes)/sizeof(vmodes[0]); i++)
{
if(compare_videomodes(Table[i], rmode))
{
target_vmode = i;
break;
}
}
while(Size >= sizeof(GXRModeObj))
{
// Video mode pattern found
if( (((GXRModeObj*)Addr)->fbWidth == 0x0280 && ((GXRModeObj*)Addr)->viWidth == 0x02c4) || // TVEurgb60Hz480Prog
(((GXRModeObj*)Addr)->fbWidth == 0x0280 && ((GXRModeObj*)Addr)->viWidth == 0x0280) ) // All other video modes
{
// display found video mode patterns
GXRModeObj* vidmode = (GXRModeObj*)Addr;
gprintf("Video pattern found \t%08x %04x %04x %04x %04x %04x %04x %04x %08x %04x %04x ",
vidmode->viTVMode, vidmode->fbWidth, vidmode->efbHeight, vidmode->xfbHeight, vidmode->viXOrigin, vidmode->viYOrigin,
vidmode->viWidth, vidmode->viHeight, vidmode->xfbMode, vidmode->field_rendering, vidmode->aa);
gprintf("%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x ",
vidmode->sample_pattern[0][0], vidmode->sample_pattern[1][0], vidmode->sample_pattern[2][0], vidmode->sample_pattern[3][0], vidmode->sample_pattern[4][0],
vidmode->sample_pattern[5][0], vidmode->sample_pattern[6][0], vidmode->sample_pattern[7][0], vidmode->sample_pattern[8][0], vidmode->sample_pattern[9][0],
vidmode->sample_pattern[10][0], vidmode->sample_pattern[11][0], vidmode->sample_pattern[0][1], vidmode->sample_pattern[1][1], vidmode->sample_pattern[2][1],
vidmode->sample_pattern[3][1], vidmode->sample_pattern[4][1], vidmode->sample_pattern[5][1], vidmode->sample_pattern[6][1], vidmode->sample_pattern[7][1],
vidmode->sample_pattern[8][1], vidmode->sample_pattern[9][1], vidmode->sample_pattern[10][1], vidmode->sample_pattern[11][1]);
gprintf("%02x%02x%02x%02x%02x%02x%02x \n",
vidmode->vfilter[0], vidmode->vfilter[1] , vidmode->vfilter[2], vidmode->vfilter[3] , vidmode->vfilter[4],vidmode->vfilter[5], vidmode->vfilter[6]);
found = 0;
for(i = 0; i < sizeof(vmodes)/sizeof(vmodes[0]); i++)
{
if(compare_videomodes(Table[i], (GXRModeObj*)Addr))
{
found = 1;
gprintf("Video mode found in dol: %s, replaced by: %s \n", vmodes_name[i], vmodes_name[target_vmode]);
patch_videomode((GXRModeObj*)Addr, rmode);
Addr += (sizeof(GXRModeObj)-4);
Size -= (sizeof(GXRModeObj)-4);
break;
}
}
if(patchAll && !found)
{
gprintf("Video mode found in dol: Unknown, replaced by: %s \n", vmodes_name[target_vmode]);
patch_videomode((GXRModeObj*)Addr, rmode);
Addr += (sizeof(GXRModeObj)-4);
Size -= (sizeof(GXRModeObj)-4);
}
}
Addr += 4;
Size -= 4;
}
return found;
}
void VideoModePatcher(u8 * dst, int len, u8 videoSelected, u8 VideoPatchDol)
{
GXRModeObj** table = NULL;
if (videoSelected == VIDEO_MODE_PATCH) // patch enum'd in cfg.h
{
switch (CONF_GetVideo())
{
case CONF_VIDEO_PAL:
if (CONF_GetEuRGB60() > 0)
{
table = NTSC2PAL60;
}
else
{
case CONF_VIDEO_PAL:
table = CONF_GetEuRGB60() > 0 ? NTSC2PAL60 : NTSC2PAL;
break;
case CONF_VIDEO_MPAL:
table = NTSC2PAL;
}
break;
case CONF_VIDEO_MPAL:
table = NTSC2PAL;
break;
default:
table = PAL2NTSC;
break;
break;
default:
table = PAL2NTSC;
break;
}
Search_and_patch_Video_Modes(dst, len, table);
}
else if(VideoPatchDol == VIDEO_PATCH_DOL_REGION ) //&& rmode != NULL)
{
switch(rmode->viTVMode >> 2)
{
case VI_PAL:
case VI_MPAL:
table = NTSC2PAL;
break;
case VI_EURGB60:
table = NTSC2PAL60;
break;
default:
table = PAL2NTSC;
}
Search_and_patch_Video_Modes(dst, len, table);
}
else if (VideoPatchDol == VIDEO_PATCH_DOL_ON && rmode != NULL)
{
Search_and_patch_Video_To(dst, len, vmodes, rmode, false);
}
else if (VideoPatchDol == VIDEO_PATCH_DOL_ALL && rmode != NULL)
{
Search_and_patch_Video_To(dst, len, vmodes, rmode, true);
}
}
void sneek_video_patch(void *addr, u32 len)

View File

@ -9,12 +9,12 @@ extern "C" {
void RegisterDOL(u8 *dst, int len);
void ClearDOLList();
void gamepatches(u8 videoSelected, u8 aspectForce, u8 languageChoice, u8 patchcountrystring,
void gamepatches(u8 videoSelected, u8 videoPatchDol, u8 aspectForce, u8 languageChoice, u8 patchcountrystring,
u8 vipatch, u8 sneekVideoPatch, u8 hooktype, u8 fix002, u64 returnTo);
bool Anti_002_fix(u8 * Address, int Size);
bool NSMBPatch();
bool PoPPatch();
void VideoModePatcher(u8 * dst, int len, u8 videoSelected);
void VideoModePatcher(u8 * dst, int len, u8 videoSelected, u8 VideoPatchDol);
void sneek_video_patch(void *addr, u32 len);
bool PatchReturnTo(void *Address, int Size, u32 id);
int PatchNewReturnTo(int es_fd, u64 title);

View File

@ -73,11 +73,13 @@ static const char * DMLVersions[] =
"v2.7", // DML 2.7
"v2.8", // DML 2.8
"v2.8", // DM 2.8
"v2.9+", // DML 2.9
"v2.9+", // DM 2.9
"v2.9", // DML 2.9
"v2.9", // DM 2.9
"v2.0", // QuadForce v2.0
"v3.0", // QuadForce v3.0
"v4.0+", // QuadForce v4.0 SD
"v2.10+", // DML 2.10
"v2.10+", // DM 2.10
"v4.1", // QuadForce v4.1 USB
};

View File

@ -532,6 +532,12 @@ static int InternalShowGameInfo(struct discHdr *header)
else if(GameInfo.WifiPlayers == 4)
wifiplayersImgData = Resources::GetImageData("wifi4.png");
else if(GameInfo.WifiPlayers == 6)
wifiplayersImgData = Resources::GetImageData("wifi6.png");
else if(GameInfo.WifiPlayers == 10)
wifiplayersImgData = Resources::GetImageData("wifi10.png");
else if(GameInfo.WifiPlayers == 8)
wifiplayersImgData =Resources::GetImageData("wifi8.png");

View File

@ -187,6 +187,7 @@ bool CGameSettings::Save()
{
fprintf(f, "game:%s = ", GameList[i].id);
fprintf(f, "video:%d; ", GameList[i].video);
fprintf(f, "videoPatchDol:%d; ", GameList[i].videoPatchDol);
fprintf(f, "aspectratio:%d; ", GameList[i].aspectratio);
fprintf(f, "language:%d; ", GameList[i].language);
fprintf(f, "ocarina:%d; ", GameList[i].ocarina);
@ -221,6 +222,7 @@ bool CGameSettings::Save()
fprintf(f, "DEVOActivityLED:%d; ", GameList[i].DEVOActivityLED);
fprintf(f, "DEVOFZeroAX:%d; ", GameList[i].DEVOFZeroAX);
fprintf(f, "DEVOTimerFix:%d; ", GameList[i].DEVOTimerFix);
fprintf(f, "DEVODButtons:%d; ", GameList[i].DEVODButtons);
fprintf(f, "Locked:%d;\n", GameList[i].Locked);
}
fprintf(f, "# END\n");
@ -236,6 +238,11 @@ bool CGameSettings::SetSetting(GameCFG & game, const char *name, const char *val
game.video = atoi(value);
return true;
}
if (strcmp(name, "videoPatchDol") == 0)
{
game.videoPatchDol = atoi(value);
return true;
}
else if(strcmp(name, "aspectratio") == 0)
{
game.aspectratio = atoi(value);
@ -411,6 +418,11 @@ bool CGameSettings::SetSetting(GameCFG & game, const char *name, const char *val
game.DEVOTimerFix = atoi(value);
return true;
}
else if(strcmp(name, "DEVODButtons") == 0)
{
game.DEVODButtons = atoi(value);
return true;
}
return false;
}
@ -513,6 +525,7 @@ void CGameSettings::SetDefault(GameCFG &game)
{
memset(game.id, 0, sizeof(game.id));
game.video = INHERIT;
game.videoPatchDol = INHERIT;
game.aspectratio = INHERIT;
game.language = INHERIT;
game.ocarina = INHERIT;
@ -547,5 +560,6 @@ void CGameSettings::SetDefault(GameCFG &game)
game.DEVOActivityLED = INHERIT;
game.DEVOFZeroAX = INHERIT;
game.DEVOTimerFix = INHERIT;
game.DEVODButtons = INHERIT;
game.Locked = OFF;
}

View File

@ -11,6 +11,7 @@ typedef struct _GameCFG
{
char id[7];
short video;
short videoPatchDol;
short aspectratio;
short language;
short ocarina;
@ -45,12 +46,14 @@ typedef struct _GameCFG
short DEVOActivityLED;
short DEVOFZeroAX;
short DEVOTimerFix;
short DEVODButtons;
short Locked;
void operator=(const struct _GameCFG &game)
{
memcpy(this->id, game.id, sizeof(game.id));
this->video = game.video;
this->videoPatchDol = game.videoPatchDol;
this->aspectratio = game.aspectratio;
this->language = game.language;
this->ocarina = game.ocarina;
@ -85,6 +88,7 @@ typedef struct _GameCFG
this->DEVOActivityLED = game.DEVOActivityLED;
this->DEVOFZeroAX = game.DEVOFZeroAX;
this->DEVOTimerFix = game.DEVOTimerFix;
this->DEVODButtons = game.DEVODButtons;
this->Locked = game.Locked;
}
} GameCFG;

View File

@ -92,6 +92,7 @@ void CSettings::SetDefault()
godmode = 1;
videomode = VIDEO_MODE_DISCDEFAULT;
videopatch = OFF;
videoPatchDol = OFF;
language = CONSOLE_DEFAULT;
ocarina = OFF;
hddinfo = CLOCK_HR12;
@ -185,6 +186,7 @@ void CSettings::SetDefault()
DEVOActivityLED = ON;
DEVOFZeroAX = OFF;
DEVOTimerFix = OFF;
DEVODButtons = OFF;
GCInstallCompressed = OFF;
GCInstallAligned = OFF;
}
@ -273,6 +275,7 @@ bool CSettings::Save()
fprintf(file, "godmode = %d\n", godmode);
fprintf(file, "videomode = %d\n", videomode);
fprintf(file, "videopatch = %d\n", videopatch);
fprintf(file, "videoPatchDol = %d\n", videoPatchDol);
fprintf(file, "language = %d\n", language);
fprintf(file, "ocarina = %d\n", ocarina);
fprintf(file, "hddinfo = %d\n", hddinfo);
@ -417,6 +420,7 @@ bool CSettings::Save()
fprintf(file, "DEVOActivityLED = %d\n", DEVOActivityLED);
fprintf(file, "DEVOFZeroAX = %d\n", DEVOFZeroAX);
fprintf(file, "DEVOTimerFix = %d\n", DEVOTimerFix);
fprintf(file, "DEVODButtons = %d\n", DEVODButtons);
fprintf(file, "DEVOLoaderPath = %s\n", DEVOLoaderPath);
fprintf(file, "GCInstallCompressed = %d\n", GCInstallCompressed);
fprintf(file, "GCInstallAligned = %d\n", GCInstallAligned);
@ -443,6 +447,11 @@ bool CSettings::SetSetting(char *name, char *value)
videopatch = atoi(value);
return true;
}
else if (strcmp(name, "videoPatchDol") == 0)
{
videoPatchDol = atoi(value);
return true;
}
else if (strcmp(name, "language") == 0)
{
language = atoi(value);
@ -892,6 +901,11 @@ bool CSettings::SetSetting(char *name, char *value)
DEVOTimerFix = atoi(value);
return true;
}
else if (strcmp(name, "DEVODButtons") == 0)
{
DEVODButtons = atoi(value);
return true;
}
else if (strcmp(name, "DEVOLoaderPath") == 0)
{
strlcpy(DEVOLoaderPath, value, sizeof(DEVOLoaderPath));

View File

@ -92,6 +92,7 @@ class CSettings
short language;
short ocarina;
short videopatch;
short videoPatchDol;
short sinfo;
short hddinfo;
short rumble;
@ -187,6 +188,7 @@ class CSettings
short DEVOActivityLED;
short DEVOFZeroAX;
short DEVOTimerFix;
short DEVODButtons;
short GCInstallCompressed;
short GCInstallAligned;

View File

@ -71,6 +71,15 @@ enum
VIDEO_MODE_MAX
};
enum
{
VIDEO_PATCH_DOL_OFF,
VIDEO_PATCH_DOL_REGION,
VIDEO_PATCH_DOL_ON,
VIDEO_PATCH_DOL_ALL,
VIDEO_PATCH_DOL_MAX,
};
enum
{
ASPECT_FORCE_4_3,
@ -285,7 +294,8 @@ enum
GC_SOURCE_MAIN,
GC_SOURCE_SD,
GC_SOURCE_AUTO,
// GC_SOURCE_BOTH, // GCGames::getPath(GameID) always returns the first encountered path in the gameList
GC_SOURCE_MAIN_SD,
GC_SOURCE_SD_MAIN,
CG_SOURCE_MAX_CHOICE
};

View File

@ -181,6 +181,7 @@ void GCGameLoadSM::SetOptionNames()
Options->SetName(Idx++, "%s", tr( "DEVO LED Activity" ));
Options->SetName(Idx++, "%s", tr( "DEVO F-Zero AX" ));
Options->SetName(Idx++, "%s", tr( "DEVO Timer Fix" ));
Options->SetName(Idx++, "%s", tr( "DEVO D Buttons" ));
}
void GCGameLoadSM::SetOptionValues()
@ -201,8 +202,9 @@ void GCGameLoadSM::SetOptionValues()
//! Settings: Game Language
if(GameConfig.language == INHERIT)
GameConfig.language = GC_LANG_CONSOLE_DEFAULT;
Options->SetValue(Idx++, "%s", tr(LanguageText[GameConfig.language]));
Options->SetValue(Idx++, tr("Use global"));
else
Options->SetValue(Idx++, "%s", tr(LanguageText[GameConfig.language]));
//! Settings: Ocarina
if(GameConfig.ocarina == INHERIT)
@ -321,6 +323,11 @@ void GCGameLoadSM::SetOptionValues()
else
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.DEVOTimerFix]));
//! Settings: DEVO Direct Button Mapping
if(GameConfig.DEVODButtons == INHERIT)
Options->SetValue(Idx++, tr("Use global"));
else
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.DEVODButtons]));
}
int GCGameLoadSM::GetMenuInternal()
@ -369,7 +376,7 @@ int GCGameLoadSM::GetMenuInternal()
//! Settings: Game Language
else if (ret == ++Idx)
{
if (++GameConfig.language >= GC_MAX_LANGUAGE) GameConfig.language = GC_ENGLISH;
if (++GameConfig.language >= GC_MAX_LANGUAGE) GameConfig.language = INHERIT;
}
//! Settings: Ocarina
@ -480,6 +487,12 @@ int GCGameLoadSM::GetMenuInternal()
if (++GameConfig.DEVOTimerFix >= MAX_ON_OFF) GameConfig.DEVOTimerFix = INHERIT;
}
//!Settings: DEVO Direct Button Mapping
else if (ret == ++Idx)
{
if (++GameConfig.DEVODButtons >= MAX_ON_OFF) GameConfig.DEVODButtons = INHERIT;
}
SetOptionValues();
return MENU_NONE;

View File

@ -54,6 +54,14 @@ static const char * VideoModeText[] =
trNOOP( "Force NTSC480p" ),
};
static const char * VideoPatchDolText[] =
{
trNOOP( "OFF" ),
trNOOP( "Region Patch" ),
trNOOP( "ON" ),
trNOOP( "All" ),
};
static const char * AspectText[] =
{
trNOOP( "Force 4:3" ),
@ -174,8 +182,9 @@ void GameLoadSM::SetOptionNames()
Options->SetName(Idx++, "%s", tr( "Game Lock" ));
Options->SetName(Idx++, "%s", tr( "Favorite Level" ));
Options->SetName(Idx++, "%s", tr( "Video Mode" ));
Options->SetName(Idx++, "%s", tr( "VIDTV Patch" ));
Options->SetName(Idx++, "%s", tr( "Dol Video Patch" ));
Options->SetName(Idx++, "%s", tr( "Sneek Video Patch" ));
Options->SetName(Idx++, "%s", tr( "VIDTV Patch" ));
Options->SetName(Idx++, "%s", tr( "Aspect Ratio" ));
Options->SetName(Idx++, "%s", tr( "Patch Country Strings" ));
Options->SetName(Idx++, "%s", tr( "Game Language" ));
@ -221,11 +230,11 @@ void GameLoadSM::SetOptionValues()
else
Options->SetValue(Idx++, "%s", tr(VideoModeText[GameConfig.video]));
//! Settings: VIDTV Patch
if(GameConfig.vipatch == INHERIT)
//! Settings: Dol Video Patch
if(GameConfig.videoPatchDol == INHERIT)
Options->SetValue(Idx++, tr("Use global"));
else
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.vipatch]));
Options->SetValue(Idx++, "%s", tr(VideoPatchDolText[GameConfig.videoPatchDol]));
//! Settings: Sneek Video Patch
if(GameConfig.sneekVideoPatch == INHERIT)
@ -233,6 +242,12 @@ void GameLoadSM::SetOptionValues()
else
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.sneekVideoPatch]));
//! Settings: VIDTV Patch
if(GameConfig.vipatch == INHERIT)
Options->SetValue(Idx++, tr("Use global"));
else
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.vipatch]));
//! Settings: Aspect Ratio
if(GameConfig.aspectratio == INHERIT)
Options->SetValue(Idx++, tr("Use global"));
@ -385,10 +400,10 @@ int GameLoadSM::GetMenuInternal()
if (++GameConfig.video >= VIDEO_MODE_MAX) GameConfig.video = INHERIT;
}
//! Settings: VIDTV Patch
if (ret == ++Idx)
//! Settings: Dol Video Patch
else if (ret == ++Idx)
{
if (++GameConfig.vipatch >= MAX_ON_OFF) GameConfig.vipatch = INHERIT;
if (++GameConfig.videoPatchDol >= VIDEO_PATCH_DOL_MAX) GameConfig.videoPatchDol = INHERIT;
}
//! Settings: Sneek Video Patch
@ -397,6 +412,12 @@ int GameLoadSM::GetMenuInternal()
if (++GameConfig.sneekVideoPatch >= MAX_ON_OFF) GameConfig.sneekVideoPatch = INHERIT;
}
//! Settings: VIDTV Patch
if (ret == ++Idx)
{
if (++GameConfig.vipatch >= MAX_ON_OFF) GameConfig.vipatch = INHERIT;
}
//! Settings: Aspect Ratio
else if (ret == ++Idx)
{

View File

@ -63,6 +63,14 @@ static const char * VideoModeText[] =
trNOOP( "Force NTSC480p" ),
};
static const char * VideoPatchDolText[] =
{
trNOOP( "OFF" ),
trNOOP( "Region Patch" ),
trNOOP( "ON" ),
trNOOP( "All" ),
};
static const char * LanguageText[] =
{
trNOOP( "Japanese" ),
@ -116,12 +124,13 @@ static const char * GCMode[] =
trNOOP( "Devolution" ),
};
static const char * GCSourceText[] =
static const char * GCSourceText[][3] =
{
trNOOP( "Main Path" ),
trNOOP( "SD Path" ),
trNOOP( "Auto" ),
trNOOP( "Both" ),
{ trNOOP( "Main Path" ), "", "" },
{ trNOOP( "SD Path" ), "", "" },
{ trNOOP( "Auto" ), "", "" },
{ trNOOP( "Main Path" ), "/", trNOOP( "SD Path" ) },
{ trNOOP( "SD Path" ), "/", trNOOP( "Main Path" ) },
};
static const char * DMLVideoText[] =
@ -158,8 +167,9 @@ LoaderSettings::LoaderSettings()
int Idx = 0;
Options->SetName(Idx++, "%s", tr( "Video Mode" ));
Options->SetName(Idx++, "%s", tr( "VIDTV Patch" ));
Options->SetName(Idx++, "%s", tr( "Dol Video Patch" ));
Options->SetName(Idx++, "%s", tr( "Sneek Video Patch" ));
Options->SetName(Idx++, "%s", tr( "VIDTV Patch" ));
Options->SetName(Idx++, "%s", tr( "Aspect Ratio" ));
Options->SetName(Idx++, "%s", tr( "Game Language" ));
Options->SetName(Idx++, "%s", tr( "Patch Country Strings" ));
@ -192,6 +202,7 @@ LoaderSettings::LoaderSettings()
Options->SetName(Idx++, "%s", tr( "DEVO LED Activity" ));
Options->SetName(Idx++, "%s", tr( "DEVO F-Zero AX" ));
Options->SetName(Idx++, "%s", tr( "DEVO Timer Fix" ));
Options->SetName(Idx++, "%s", tr( "DEVO D Buttons" ));
SetOptionValues();
@ -226,12 +237,15 @@ void LoaderSettings::SetOptionValues()
//! Settings: Video Mode
Options->SetValue(Idx++, "%s", tr(VideoModeText[Settings.videomode]));
//! Settings: VIDTV Patch
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.videopatch] ));
//! Settings: Dol Video Patch
Options->SetValue(Idx++, "%s", tr( VideoPatchDolText[Settings.videoPatchDol] ));
//! Settings: Sneek Video Patch
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.sneekVideoPatch] ));
//! Settings: VIDTV Patch
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.videopatch] ));
//! Settings: Aspect Ratio
Options->SetValue(Idx++, "%s", tr( AspectText[Settings.GameAspectRatio] ));
@ -289,7 +303,8 @@ void LoaderSettings::SetOptionValues()
Options->SetValue(Idx++, "%s", tr(GCMode[Settings.GameCubeMode]));
//! Settings: GameCube Source
Options->SetValue(Idx++, "%s", tr(GCSourceText[Settings.GameCubeSource]));
Options->SetValue(Idx++, "%s%s%s", tr(GCSourceText[Settings.GameCubeSource][0]),
GCSourceText[Settings.GameCubeSource][1], tr(GCSourceText[Settings.GameCubeSource][2]));
//! Settings: DML Video Mode
Options->SetValue(Idx++, "%s", tr(DMLVideoText[Settings.DMLVideo]));
@ -336,6 +351,9 @@ void LoaderSettings::SetOptionValues()
//! Settings: DEVO Timer Fix
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.DEVOTimerFix]));
//! Settings: DEVO Direct Button Mapping
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.DEVODButtons]));
}
int LoaderSettings::GetMenuInternal()
@ -353,10 +371,10 @@ int LoaderSettings::GetMenuInternal()
if (++Settings.videomode >= VIDEO_MODE_MAX) Settings.videomode = 0;
}
//! Settings: VIDTV Patch
else if (ret == ++Idx)
//! Settings: Dol Video Patch
if (ret == ++Idx)
{
if (++Settings.videopatch >= MAX_ON_OFF) Settings.videopatch = 0;
if (++Settings.videoPatchDol >= VIDEO_PATCH_DOL_MAX) Settings.videoPatchDol = 0;
}
//! Settings: Sneek Video Patch
@ -365,6 +383,12 @@ int LoaderSettings::GetMenuInternal()
if (++Settings.sneekVideoPatch >= MAX_ON_OFF) Settings.sneekVideoPatch = 0;
}
//! Settings: VIDTV Patch
else if (ret == ++Idx)
{
if (++Settings.videopatch >= MAX_ON_OFF) Settings.videopatch = 0;
}
//! Settings: Aspect Ratio
else if (ret == ++Idx )
{
@ -579,12 +603,18 @@ int LoaderSettings::GetMenuInternal()
if (++Settings.DEVOFZeroAX >= MAX_ON_OFF) Settings.DEVOFZeroAX = 0;
}
//! Settings: DEVO Activity LED
//! Settings: DEVO Timer Fix
else if (ret == ++Idx)
{
if (++Settings.DEVOTimerFix >= MAX_ON_OFF) Settings.DEVOTimerFix = 0;
}
//! Settings: DEVO Direct Button Mapping
else if (ret == ++Idx)
{
if (++Settings.DEVODButtons >= MAX_ON_OFF) Settings.DEVODButtons = 0;
}
SetOptionValues();
return MENU_NONE;

View File

@ -344,7 +344,12 @@ u8 IosLoader::GetDMLVersion(char* releaseDate)
strptime("Apr 5 2013 18:29:35", "%b %d %Y %H:%M:%S", &time);
const time_t dm_2_9_time = mktime(&time);
if(difftime(unixTime, dm_2_9_time) >= 0) currentDMLVersion = DML_VERSION_DM_2_9;
// Timestamp of DM 2.10
strptime("May 24 2013 21:22:22", "%b %d %Y %H:%M:%S", &time);
const time_t dm_2_10_time = mktime(&time);
if(difftime(unixTime, dm_2_10_time) >= 0) currentDMLVersion = DML_VERSION_DM_2_10;
else if(difftime(unixTime, dm_2_9_time) >= 0) currentDMLVersion = DML_VERSION_DM_2_9;
else if(difftime(unixTime, dm_2_8_time) >= 0) currentDMLVersion = DML_VERSION_DM_2_8;
else if(difftime(unixTime, dm_2_7_time) >= 0) currentDMLVersion = DML_VERSION_DM_2_7;
else if(difftime(unixTime, dm_2_6_1_time) >= 0) currentDMLVersion = DML_VERSION_DM_2_6_1;
@ -414,7 +419,12 @@ u8 IosLoader::GetDMLVersion(char* releaseDate)
strptime("Apr 5 2013 18:20:33", "%b %d %Y %H:%M:%S", &time);
const time_t dml_2_9_time = mktime(&time);
if(difftime(unixTime, dml_2_9_time) >= 0) currentDMLVersion = DML_VERSION_DML_2_9;
// Timestamp of DML 2.10
strptime("May 24 2013 18:51:58", "%b %d %Y %H:%M:%S", &time);
const time_t dml_2_10_time = mktime(&time);
if(difftime(unixTime, dml_2_10_time) >= 0) currentDMLVersion = DML_VERSION_DML_2_10;
else if(difftime(unixTime, dml_2_9_time) >= 0) currentDMLVersion = DML_VERSION_DML_2_9;
else if(difftime(unixTime, dml_2_8_time) >= 0) currentDMLVersion = DML_VERSION_DML_2_8;
else if(difftime(unixTime, dml_2_7_time) >= 0) currentDMLVersion = DML_VERSION_DML_2_7;
else if(difftime(unixTime, dml_2_6_time) >= 0) currentDMLVersion = DML_VERSION_DML_2_6;

View File

@ -63,6 +63,8 @@ enum DMLVersions
DML_VERSION_QUAD_2_0, // Apr 30 2013 17:31:32
DML_VERSION_QUAD_3_0, // May 8 2013 22:21:44
DML_VERSION_QUAD_4_0, // May 12 2013 20:22:57
DML_VERSION_DML_2_10, // May 24 2013 18:51:58
DML_VERSION_DM_2_10, // May 24 2013 21:22:22
DML_VERSION_QUAD_4_1, // May 26 2013 ??:??:?? (USB)
DML_VERSION_MAX_VERSION,
};

View File

@ -1,7 +1,7 @@
/****************************************************************************
* USB Loader GX resource files.
* This file is generated automatically.
* Includes 198 files.
* Includes 200 files.
*
* NOTE:
* Any manual modification of this file will be overwriten by the generation.
@ -506,6 +506,9 @@ extern const u32 wheelR_png_size;
extern const u8 wifi1_png[];
extern const u32 wifi1_png_size;
extern const u8 wifi10_png[];
extern const u32 wifi10_png_size;
extern const u8 wifi12_png[];
extern const u32 wifi12_png_size;
@ -524,6 +527,9 @@ extern const u32 wifi32_png_size;
extern const u8 wifi4_png[];
extern const u32 wifi4_png_size;
extern const u8 wifi6_png[];
extern const u32 wifi6_png_size;
extern const u8 wifi8_png[];
extern const u32 wifi8_png_size;
@ -772,12 +778,14 @@ RecourceFile Resources::RecourceFiles[] =
{"wheel.png", wheel_png, wheel_png_size, NULL, 0},
{"wheelR.png", wheelR_png, wheelR_png_size, NULL, 0},
{"wifi1.png", wifi1_png, wifi1_png_size, NULL, 0},
{"wifi10.png", wifi10_png, wifi10_png_size, NULL, 0},
{"wifi12.png", wifi12_png, wifi12_png_size, NULL, 0},
{"wifi16.png", wifi16_png, wifi16_png_size, NULL, 0},
{"wifi2.png", wifi2_png, wifi2_png_size, NULL, 0},
{"wifi3.png", wifi3_png, wifi3_png_size, NULL, 0},
{"wifi32.png", wifi32_png, wifi32_png_size, NULL, 0},
{"wifi4.png", wifi4_png, wifi4_png_size, NULL, 0},
{"wifi6.png", wifi6_png, wifi6_png_size, NULL, 0},
{"wifi8.png", wifi8_png, wifi8_png_size, NULL, 0},
{"wifi_btn.png", wifi_btn_png, wifi_btn_png_size, NULL, 0},
{"wiimote.png", wiimote_png, wiimote_png_size, NULL, 0},

View File

@ -267,6 +267,7 @@ int GameBooter::BootGame(struct discHdr *gameHdr)
//! Setup game configuration from game settings. If no game settings exist use global/default.
GameCFG * game_cfg = GameSettings.GetGameCFG(gameHeader.id);
u8 videoChoice = game_cfg->video == INHERIT ? Settings.videomode : game_cfg->video;
u8 videoPatchDolChoice = game_cfg->videoPatchDol == INHERIT ? Settings.videoPatchDol : game_cfg->videoPatchDol;
u8 aspectChoice = game_cfg->aspectratio == INHERIT ? Settings.GameAspectRatio : game_cfg->aspectratio;
u8 languageChoice = game_cfg->language == INHERIT ? Settings.language : game_cfg->language;
u8 ocarinaChoice = game_cfg->ocarina == INHERIT ? Settings.ocarina : game_cfg->ocarina;
@ -400,7 +401,7 @@ int GameBooter::BootGame(struct discHdr *gameHdr)
//! Do all the game patches
gprintf("Applying game patches...\n");
gamepatches(videoChoice, aspectChoice, languageChoice, countrystrings, viChoice, sneekChoice, Hooktype, fix002, returnToChoice);
gamepatches(videoChoice, videoPatchDolChoice, aspectChoice, languageChoice, countrystrings, viChoice, sneekChoice, Hooktype, fix002, returnToChoice);
//! Load Code handler if needed
load_handler(Hooktype, WiirdDebugger, Settings.WiirdDebuggerPause);
@ -416,7 +417,7 @@ int GameBooter::BootDIOSMIOS(struct discHdr *gameHdr)
GameCFG * game_cfg = GameSettings.GetGameCFG(gameHdr->id);
u8 videoChoice = game_cfg->video == INHERIT ? Settings.videomode : game_cfg->video;
u8 languageChoice = game_cfg->language == INHERIT ? 6 : game_cfg->language;
s8 languageChoice = game_cfg->language == INHERIT ? Settings.language - 1 : game_cfg->language;
u8 ocarinaChoice = game_cfg->ocarina == INHERIT ? Settings.ocarina : game_cfg->ocarina;
u8 dmlVideoChoice = game_cfg->DMLVideo == INHERIT ? Settings.DMLVideo : game_cfg->DMLVideo;
u8 dmlProgressivePatch = game_cfg->DMLProgPatch == INHERIT ? Settings.DMLProgPatch : game_cfg->DMLProgPatch;
@ -627,7 +628,10 @@ int GameBooter::BootDIOSMIOS(struct discHdr *gameHdr)
if(dmlWidescreenChoice)
dml_config->Config |= DML_CFG_FORCE_WIDE;
if(dmlScreenshotChoice)
{
dml_config->Config |= DML_CFG_SCREENSHOT;
dml_config->Config |= DML_CFG_PADHOOK;
}
if(bootDisc2 && IosLoader::GetDMLVersion() >= DML_VERSION_DM_2_6_0)
dml_config->Config |= DML_CFG_BOOT_DISC2;
@ -646,8 +650,9 @@ int GameBooter::BootDIOSMIOS(struct discHdr *gameHdr)
}
else // Force user choice
{
dml_config->VideoMode = DML_VID_FORCE;
Disc_SelectVMode(videoChoice, false, &dml_config->VideoMode);
if(!(dml_config->VideoMode & DML_VID_DML_AUTO))
dml_config->VideoMode |= DML_VID_FORCE;
}
Disc_SetVMode();
}
@ -664,43 +669,10 @@ int GameBooter::BootDIOSMIOS(struct discHdr *gameHdr)
gprintf("DML: setup configuration 0x%X\n", dml_config->Config);
gprintf("DML: setup video mode 0x%X\n", dml_config->VideoMode);
syssram *sram = __SYS_LockSram();
if(dml_config->VideoMode & DML_VID_FORCE_PROG || dml_config->VideoMode & DML_VID_PROG_PATCH) {
sram->flags |= 0x80; //set progressive flag
}
else {
sram->flags &= 0x7F; //clear progressive flag
}
// setup video mode flags
if (*Video_Mode == VI_NTSC) {
sram->flags &= ~1; // Clear bit 0 to set the video mode to NTSC
sram->ntd &= 0xBF; //clear pal60 flag
}
else {
sram->flags |= 1; // Set bit 0 to set the video mode to PAL
sram->ntd |= 0x40; //set pal60 flag
}
// Set language flag
if(languageChoice <= GC_DUTCH)
{
sram->lang = languageChoice;
}
else // console default
{
sram->lang = GC_ENGLISH;
if(CONF_GetLanguage() >= CONF_LANG_ENGLISH && CONF_GetLanguage() <= CONF_LANG_DUTCH)
{
sram->lang = CONF_GetLanguage()-1;
}
}
gprintf("DML: setup language 0x%X\n", sram->lang);
// Set Sram flags
bool progressive = (dml_config->VideoMode & DML_VID_FORCE_PROG) || (dml_config->VideoMode & DML_VID_PROG_PATCH);
PatchSram(languageChoice, true, progressive);
__SYS_UnlockSram(1); // 1 -> write changes
while(!__SYS_SyncSram())
usleep(100);
/* NTSC-J Patch */ // Thanks to Fix94
u8 *diskid = (u8 *) Disc_ID;
if(dmlJPNPatchChoice && diskid[3] == 'J')
@ -713,16 +685,17 @@ int GameBooter::BootDIOSMIOS(struct discHdr *gameHdr)
int GameBooter::BootDevolution(struct discHdr *gameHdr)
{
const char *RealPath = GCGames::Instance()->GetPath((const char *) gameHdr->id);
// check the settings
GameCFG * game_cfg = GameSettings.GetGameCFG(gameHdr->id);
u8 videoChoice = game_cfg->video == INHERIT ? Settings.videomode : game_cfg->video;
int languageChoice = game_cfg->language == INHERIT ? Settings.language -1 : game_cfg->language;
u8 devoMCEmulation = game_cfg->DEVOMCEmulation == INHERIT ? Settings.DEVOMCEmulation : game_cfg->DEVOMCEmulation;
u8 devoActivityLEDChoice = game_cfg->DEVOActivityLED == INHERIT ? Settings.DEVOActivityLED : game_cfg->DEVOActivityLED;
u8 devoWidescreenChoice = game_cfg->DEVOWidescreen == INHERIT ? Settings.DEVOWidescreen : game_cfg->DEVOWidescreen;
u8 devoFZeroAXChoice = game_cfg->DEVOFZeroAX == INHERIT ? Settings.DEVOFZeroAX : game_cfg->DEVOFZeroAX;
u8 devoTimerFixChoice = game_cfg->DEVOTimerFix == INHERIT ? Settings.DEVOTimerFix : game_cfg->DEVOTimerFix;
u8 devoDButtonsChoice = game_cfg->DEVODButtons == INHERIT ? Settings.DEVODButtons : game_cfg->DEVODButtons;
if(gameHdr->type == TYPE_GAME_GC_DISC)
{
@ -736,6 +709,12 @@ int GameBooter::BootDevolution(struct discHdr *gameHdr)
return 0;
}
if(strncmp(DeviceHandler::PathToFSName(RealPath), "FAT", 3) != 0)
{
WindowPrompt(tr("Error:"), tr("To run GameCube games with Devolution you need to use a FAT32 partition."), tr("OK"));
return 0;
}
// Check if Devolution is available
u8 *loader_bin = NULL;
int DEVO_version = 0;
@ -777,10 +756,6 @@ int GameBooter::BootDevolution(struct discHdr *gameHdr)
// Devolution config
DEVO_CGF *devo_config = (DEVO_CGF*)0x80000020;
// Get the Game's data
const char *RealPath = GCGames::Instance()->GetPath((const char *) gameHdr->id);
char disc1[100];
char disc2[100];
bool multiDisc = false;
@ -834,6 +809,8 @@ int GameBooter::BootDevolution(struct discHdr *gameHdr)
devo_config->options |= DEVO_CFG_FZERO_AX;
if(devoTimerFixChoice && DEVO_version >= 196)
devo_config->options |= DEVO_CFG_TIMER_FIX;
if(devoDButtonsChoice && DEVO_version >= 200)
devo_config->options |= DEVO_CFG_D_BUTTONS;
// check memory card
if(devoMCEmulation == DEVO_MC_OFF)
@ -898,6 +875,8 @@ int GameBooter::BootDevolution(struct discHdr *gameHdr)
Disc_SelectVMode(videoChoice, true, NULL);
Disc_SetVMode();
// Set sram flags
PatchSram(languageChoice, false, false);
// flush disc ID and Devolution config out to memory
DCFlushRange(lowmem, 64);
@ -917,3 +896,69 @@ int GameBooter::BootDevolution(struct discHdr *gameHdr)
_CPU_ISR_Restore( cpu_isr );
return 0;
}
void GameBooter::PatchSram(int language, bool patchVideoMode, bool progressive)
{
syssram *sram = __SYS_LockSram();
// Setup language flag
if(language >= GC_ENGLISH && language <= GC_DUTCH)
{
sram->lang = language;
}
else // console default
{
sram->lang = GC_ENGLISH;
if(CONF_GetLanguage() >= CONF_LANG_ENGLISH && CONF_GetLanguage() <= CONF_LANG_DUTCH)
{
sram->lang = CONF_GetLanguage()-1;
}
}
gprintf("Sram: Language set to 0x%X\n", sram->lang);
// Setup Video mode flags
if(patchVideoMode)
{
if(progressive)
sram->flags |= 0x80; //set progressive flag
else
sram->flags &= 0x7F; //clear progressive flag
if (*Video_Mode == VI_NTSC)
{
sram->flags &= ~1; // Clear bit 0 to set the video mode to NTSC
sram->ntd &= 0xBF; //clear pal60 flag
}
else
{
sram->flags |= 1; // Set bit 0 to set the video mode to PAL
sram->ntd |= 0x40; //set pal60 flag
}
gprintf("Sram: flags set to 0x%X\n", sram->flags);
gprintf("Sram: ntd set to 0x%X\n", sram->ntd);
}
__SYS_UnlockSram(1); // 1 -> write changes
while(!__SYS_SyncSram())
usleep(100);
// Log Sram's first 20 bytes
/* char srambuff[64];
sram = __SYS_LockSram();
memcpy(srambuff, sram, 20);
__SYS_UnlockSram(0);
int i;
gprintf("SRAM Hex View\n\n");
gprintf(" \t\t 0 1 2 3 4 5 6 7 8 9 A B C D E F\n");
for (i=0;i<20;i++)
{
if( (i%16) == 0 )
gprintf("\n0x%d0h\t\t", i/16);
gprintf("%02X ", srambuff[i]);
}
*/
}

View File

@ -33,6 +33,7 @@ class GameBooter
static void ShutDownDevices(int gameUSBPort);
static int BootDIOSMIOS(struct discHdr *gameHdr);
static int BootDevolution(struct discHdr *gameHdr);
static void PatchSram(int language, bool patchVideoMode, bool progressive);
};
#endif

View File

@ -28,29 +28,29 @@ extern u32 AppEntrypoint;
/* Disc pointers */
static u32 *buffer = (u32 *) 0x93000000;
static u8 *diskid = (u8 *) Disc_ID;
static GXRModeObj *rmode = NULL;
static u32 rmode_reg = 0;
GXRModeObj *rmode = NULL;
void Disc_SetLowMem(void)
{
/* Setup low memory */
*Sys_Magic = 0x0D15EA5E; // Standard Boot Code
*Sys_Version = 0x00000001; // Version
*Arena_L = 0x00000000; // Arena Low
*BI2 = 0x817E5480; // BI2
*Bus_Speed = 0x0E7BE2C0; // Console Bus Speed
*CPU_Speed = 0x2B73A840; // Console CPU Speed
*Sys_Magic = 0x0D15EA5E; // Standard Boot Code
*Sys_Version = 0x00000001; // Version
*Arena_L = 0x00000000; // Arena Low
*BI2 = 0x817E5480; // BI2
*Bus_Speed = 0x0E7BE2C0; // Console Bus Speed
*CPU_Speed = 0x2B73A840; // Console CPU Speed
/* Setup low memory */
*Assembler = 0x38A00040; // Assembler
*(u32 *) 0x800000E4 = 0x80431A80;
*Dev_Debugger = 0x81800000; // Dev Debugger Monitor Address
*Simulated_Mem = 0x01800000; // Simulated Memory Size
*(vu32 *) 0xCD00643C = 0x00000000; // 32Mhz on Bus
*Assembler = 0x38A00040; // Assembler
*(u32 *) 0x800000E4 = 0x80431A80; // OS_Thread
*Dev_Debugger = 0x81800000; // Dev Debugger Monitor Address
*Simulated_Mem = 0x01800000; // Simulated Memory Size
*(vu32 *) 0xCD00643C = 0x00000000; // 32Mhz on Bus
int iosVer = IOS_GetVersion();
if(iosVer != 222 && iosVer != 223 && iosVer != 224 && iosVer != 225 && IOS_GetRevision() >= 18)
*GameID_Address = 0x80000000; // Game ID Address
*GameID_Address = 0x80000000; // Game ID Address
/* Copy disc ID */
memcpy((void *) Online_Check, (void *) Disc_ID, 4);
@ -92,7 +92,7 @@ void Disc_SelectVMode(u8 videoselected, bool devolution, u32 *dml_VideoMode)
if(dml_VideoMode)
{
rmode = progressive ? &TVEurgb60Hz480Prog : (PAL60 ? &TVEurgb60Hz480IntDf : &TVPal528IntDf);
*dml_VideoMode |= progressive ? DML_VID_FORCE_PROG : (PAL60 ? DML_VID_FORCE_PAL60 : DML_VID_FORCE_PAL50);
*dml_VideoMode = progressive ? DML_VID_FORCE_PROG : (PAL60 ? DML_VID_FORCE_PAL60 : DML_VID_FORCE_PAL50);
}
break;
@ -102,7 +102,7 @@ void Disc_SelectVMode(u8 videoselected, bool devolution, u32 *dml_VideoMode)
case CONF_VIDEO_NTSC:
rmode_reg = VI_NTSC;
if(dml_VideoMode) *dml_VideoMode |= DML_VID_FORCE_NTSC;
if(dml_VideoMode) *dml_VideoMode = DML_VID_FORCE_NTSC;
break;
}
@ -128,7 +128,7 @@ void Disc_SelectVMode(u8 videoselected, bool devolution, u32 *dml_VideoMode)
{
rmode_reg = PAL60 ? VI_EURGB60 : VI_PAL;
rmode = progressive ? &TVEurgb60Hz480Prog : (PAL60 ? &TVEurgb60Hz480IntDf : &TVPal528IntDf);
*dml_VideoMode |= progressive ? DML_VID_FORCE_PROG : (PAL60 ? DML_VID_FORCE_PAL60 : DML_VID_FORCE_PAL50);
*dml_VideoMode = progressive ? DML_VID_FORCE_PROG : (PAL60 ? DML_VID_FORCE_PAL60 : DML_VID_FORCE_PAL50);
}
break;
// NTSC
@ -143,7 +143,7 @@ void Disc_SelectVMode(u8 videoselected, bool devolution, u32 *dml_VideoMode)
{
rmode_reg = VI_NTSC;
rmode = progressive ? &TVNtsc480Prog : &TVNtsc480IntDf;
*dml_VideoMode |= DML_VID_FORCE_NTSC;
*dml_VideoMode = DML_VID_FORCE_NTSC;
}
break;
default:
@ -154,7 +154,7 @@ void Disc_SelectVMode(u8 videoselected, bool devolution, u32 *dml_VideoMode)
case VIDEO_MODE_PAL50: // PAL50
rmode = &TVPal528IntDf;
rmode_reg = VI_PAL;
if(dml_VideoMode) *dml_VideoMode |= DML_VID_FORCE_PAL50;
if(dml_VideoMode) *dml_VideoMode = DML_VID_FORCE_PAL50;
break;
case VIDEO_MODE_PAL60: // PAL60
rmode = progressive ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf;
@ -162,13 +162,13 @@ void Disc_SelectVMode(u8 videoselected, bool devolution, u32 *dml_VideoMode)
if(dml_VideoMode)
{
rmode = progressive ? &TVEurgb60Hz480Prog : &TVEurgb60Hz480IntDf;
*dml_VideoMode |= progressive ? DML_VID_FORCE_PROG : DML_VID_FORCE_PAL60;
*dml_VideoMode = progressive ? DML_VID_FORCE_PROG : DML_VID_FORCE_PAL60;
}
break;
case VIDEO_MODE_NTSC: // NTSC
rmode = progressive ? &TVNtsc480Prog : &TVNtsc480IntDf;
rmode_reg = VI_NTSC;
if(dml_VideoMode) *dml_VideoMode |= progressive ? DML_VID_FORCE_PROG : DML_VID_FORCE_NTSC;
if(dml_VideoMode) *dml_VideoMode = progressive ? DML_VID_FORCE_PROG : DML_VID_FORCE_NTSC;
break;
case VIDEO_MODE_PAL480P:
rmode = &TVNtsc480Prog;
@ -176,13 +176,13 @@ void Disc_SelectVMode(u8 videoselected, bool devolution, u32 *dml_VideoMode)
if(dml_VideoMode)
{
rmode = &TVEurgb60Hz480Prog;
*dml_VideoMode |= DML_VID_FORCE_PROG | DML_VID_PROG_PATCH;
*dml_VideoMode = DML_VID_FORCE_PROG | DML_VID_PROG_PATCH;
}
break;
case VIDEO_MODE_NTSC480P:
rmode = &TVNtsc480Prog;
rmode_reg = VI_NTSC;
if(dml_VideoMode) *dml_VideoMode |= DML_VID_FORCE_PROG | DML_VID_PROG_PATCH;
if(dml_VideoMode) *dml_VideoMode = DML_VID_FORCE_PROG | DML_VID_PROG_PATCH;
break;
case VIDEO_MODE_SYSDEFAULT: // AUTO PATCH TO SYSTEM
break;
@ -205,6 +205,8 @@ void Disc_SetVMode(void)
VIDEO_WaitVSync();
if (rmode->viTVMode & VI_NON_INTERLACE)
VIDEO_WaitVSync();
else while(VIDEO_GetNextField())
VIDEO_WaitVSync();
}
void __Disc_SetTime(void)

View File

@ -67,6 +67,8 @@ extern "C"
void Disc_SelectVMode(u8 videoselected, bool devolution, u32 *dml_VideoMode);
void Disc_SetVMode(void);
s32 Disc_JumpToEntrypoint(s32 hooktype, u32 dolparameter);
extern GXRModeObj *rmode;
#ifdef __cplusplus
}

View File

@ -11,6 +11,7 @@ void rockout(struct discHdr *header)
HaltGui();
if (!rockoutSet && header &&
header->id[0] != 'W' && header->id[0] != 'G' && // Exclude Wiiware and GameCube games
( strcasestr(GameTitles.GetTitle(header), "guitar")
|| strcasestr(GameTitles.GetTitle(header), "band")
|| strcasestr(GameTitles.GetTitle(header), "rock")))