Compare commits

..

13 Commits

Author SHA1 Message Date
Fledge68
d24a16e5c3 - make sure auto cios chooses a base of 56 or higher.
- change second i to j to fix a possible boot arg issue.
2024-08-14 16:03:11 -05:00
Fledge68
80e4ed0170
Update README.md one more time 2024-07-29 17:42:47 -05:00
Fledge68
3335cf53bd - readme wiki links updated. 2024-07-29 17:35:14 -05:00
Fledge68
88c6fdb6bd
Merge pull request #391 from upintheairsheep/patch-1
Changed Google Sites Link to Wayback Machine Link.
2024-07-29 17:26:38 -05:00
Fledge68
26146cf895 - fixed wad shared content installation by w3irdv. 2024-07-29 17:07:30 -05:00
Fledge68
6c1e85279e -fix for last commit. now wii games should work via wiigsc. 2024-07-29 09:29:08 -05:00
Fledge68
a1f72297e3 - fixed to launch wii, gamecube, and wiiware/vc games via wiigsc. note you should have wiiflow, these games, and their settings all set via wfl first. wiigsc is just a short cut to lauch wfl with args set to launch a specific game ID. 2024-07-15 15:22:41 -05:00
upintheairsheep
3927544c93
Changed Google Sites Link to Wayback Machine Link.
The original site got deleted due to the Classic Google Sites shutdown.
2024-05-26 21:50:25 -07:00
Fledge68
48fdaf50e2
Merge pull request #356 from eku/enhancement/log_skipped_files
Better logging for skipped files.
2024-04-09 13:14:26 -05:00
Fledge68
c7e49fa617
Merge pull request #367 from Brawl345/patch11
Update German translation
2024-04-09 13:10:04 -05:00
Fledge68
a0ef54af49 - fix for 'auto' game IOS option. in v5.5.4 'auto' causes the game to use a d2x cios base 38 if you have it installed, which prevents game from booting. this fix prevents this from happening. 2024-04-09 12:54:04 -05:00
c5c769675a
Update German translation 2023-09-21 14:54:46 +02:00
Erik Kunze
c49df74c65 Simplify troubleshooting of games that are
supposedly not found by logging the files
that are skipped according to the RegEx.
2023-06-11 16:57:38 +02:00
10 changed files with 155 additions and 78 deletions

View File

@ -22,6 +22,10 @@ Other wiiflow lite themes can be found on the wiki linked below. but they need t
## Useful Links
[WiiFlow Lite GBATemp thread](https://gbatemp.net/threads/wiiflow-lite.422685/)
[WiiFlow Wiki](https://sites.google.com/site/wiiflowiki4/)
[WiiFlow Wiki](https://web.archive.org/web/20220414124727/https://sites.google.com/site/wiiflowiki4/)
[Newer Wiki WIP](https://sites.google.com/view/wiiflow-wiki/welcome)
[Github Wiki](https://github.com/Fledge68/WiiFlow_Lite/wiki)
[Old Sourceforge Project Repository](https://sourceforge.net/projects/wiiflow-lite/)

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 MiB

After

Width:  |  Height:  |  Size: 4.4 MiB

View File

@ -59,6 +59,11 @@ typedef struct _uid
u16 uid;
} ATTRIBUTE_PACKED uid;
typedef struct _contentMapEntry {
char sharedID[8];
u8 sha1hash[20];
} ATTRIBUTE_PACKED contentMapEntry;
using std::string;
using std::min;

View File

@ -1,6 +1,6 @@
#define APP_NAME "WiiFlow WFL"
#define APP_VERSION "5.5.4"
#define APP_VERSION "5.5.4-1"
#define APP_DATA_DIR "wiiflow"
#define APPS_DIR "apps/wiiflow"

View File

@ -46,6 +46,7 @@ void ListGenerator::Init(const char *settingsDir, const char *Language,
if(Language != NULL) gameTDB_Language = Language;
if(plgnsDataDir != NULL) pluginsDataDir = fmt("%s", plgnsDataDir);
gprintf("ListGenerator: fileNameSkipPattern=%s\n", fileNameSkipPattern.c_str());
fileNameSkipRegex = std::regex(fileNameSkipPattern,
std::regex_constants::extended |
std::regex_constants::icase);
@ -276,7 +277,7 @@ static void Add_Plugin_Game(char *FullPath)
if (std::regex_search(std::string(FullPath), fileNameSkipRegex))
{
//gprintf("Add_Plugin_Game: skipping '%s'\n", FullPath);
gprintf("Add_Plugin_Game: skipping '%s'\n", FullPath);
return;
}

View File

@ -40,7 +40,8 @@ int main(int argc, char **argv)
gprintf(" \nWelcome to %s %s!\nThis is the debug output.\n", APP_NAME, APP_VERSION);
#endif
char *gameid = NULL;
char gameid[6];
memset(&gameid, 0, sizeof(gameid));
bool wait_loop = false;
char wait_dir[256];
memset(&wait_dir, 0, sizeof(wait_dir));
@ -61,15 +62,18 @@ int main(int argc, char **argv)
}
else if(strcasestr(argv[i], "Waitloop") != NULL)
wait_loop = true;
else if(strlen(argv[i]) == 6)
else if(strlen(argv[i]) == 6 || strlen(argv[i]) == 4)
{
gameid = argv[i];
for(u8 i = 0; i < 5; i++)
strcpy(gameid, argv[i]);
for(u8 j = 0; j < strlen(gameid) - 1; j++)
{
if(!isalnum(gameid[i]))
gameid = NULL;
if(!isalnum(gameid[j]))
{
gameid[0] = 0;
break;
}
}
}
}
}
/* Init video */
@ -142,7 +146,7 @@ int main(int argc, char **argv)
bool usb_mounted = DeviceHandle.MountAllUSB();// only mounts any USB if !sdOnly
/* init wait images and show wait animation */
if(gameid == NULL)// dont show if autobooting a wii game.
if(strlen(gameid) == 0)// dont show if autobooting a wii game.
{
m_vid.setCustomWaitImgs(wait_dir, wait_loop);
m_vid.waitMessage(0.15f);
@ -161,7 +165,7 @@ int main(int argc, char **argv)
startup_successful = true;
if(!isWiiVC)
writeStub();// copy return stub to memory
if(!isWiiVC && gameid != NULL && strlen(gameid) == 6)// if argv game ID then launch it
if(!isWiiVC && strlen(gameid) != 0)// if argv game ID then launch it
mainMenu.directlaunch(gameid);
else
mainMenu.main();// start wiiflow with main menu displayed

View File

@ -76,23 +76,21 @@ static u8 GetRequestedGameIOS(dir_discHdr *hdr)
void CMenu::directlaunch(const char *GameID)// from boot arg for wii game only
{
m_directLaunch = true;
currentPartition = m_cfg.getInt(WII_DOMAIN, "partition");
if(DeviceHandle.IsInserted(currentPartition))
u8 chantypes = m_cfg.getUInt(CHANNEL_DOMAIN, "channels_type", CHANNELS_REAL);
m_cfg.setUInt(CHANNEL_DOMAIN, "channels_type", CHANNELS_EMU);
m_current_view = COVERFLOW_WII | COVERFLOW_GAMECUBE | COVERFLOW_CHANNEL;
_loadList();
m_cfg.setUInt(CHANNEL_DOMAIN, "channels_type", chantypes);
for(u32 i = 0; i < m_gameList.size(); i++)
{
DeviceHandle.OpenWBFS(currentPartition);
string gameDir(fmt(wii_games_dir, DeviceName[currentPartition]));
string cacheDir(fmt("%s/%s_wii.db", m_listCacheDir.c_str(), DeviceName[currentPartition]));
m_cacheList.CreateList(COVERFLOW_WII, gameDir, stringToVector(".wbfs|.iso", '|'), cacheDir, false);
WBFS_Close();
for(u32 i = 0; i < m_cacheList.size(); i++)
if(strncasecmp(GameID, m_gameList[i].id, 6) == 0)
{
if(strncasecmp(GameID, m_cacheList[i].id, 6) == 0)
{
_launchWii(&m_cacheList[i], false); // Launch will exit wiiflow
break;
}
_launch(&m_gameList[i]); // Launch will exit wiiflow
break;
}
}
_error(wfmt(_fmt("errgame1", L"Cannot find the game with ID: %s"), GameID));
}
@ -777,7 +775,7 @@ int CMenu::_loadGameIOS(u8 gameIOS, int userIOS, const char *id, bool RealNAND_C
{
for(CIOSItr itr = _cios_base.begin(); itr != _cios_base.end(); itr++)
{
if(itr->first > gameIOS)//compare bases
if(itr->first > gameIOS && itr->first >= 56)//compare bases
{
slot = itr->second;// set to cios slot
break;

View File

@ -159,11 +159,35 @@ int installWad(const char *path)
fsop_MakeFolder(fmt("%s/title/%08x/%08x/content", EmuNAND, (u32)(tid>>32), (u32)tid&0xFFFFFFFF));
fsop_MakeFolder(fmt("%s/title/%08x/%08x/data", EmuNAND, (u32)(tid>>32), (u32)tid&0xFFFFFFFF));
}
// read /shared1/content.map to check later if a shared content is already installed
contentMapEntry *contentMap_file = NULL;
u32 contentMap_size = 0;
u8 *contentMap_buf = NULL;
u32 contentMapEntries = 0;
if(mios == false)
{
contentMap_buf = fsop_ReadFile(fmt("%s/shared1/content.map", EmuNAND), &contentMap_size);
if(contentMap_buf == NULL)
{
gprintf("No content.map found!\n");
return -7;
}
else if(contentMap_size % sizeof(contentMapEntry) != 0)
{
gprintf("content.map size is invalid!\n");
MEM2_free(contentMap_buf);
return -8;
}
contentMap_file = (contentMapEntry*)contentMap_buf;
}
int hash_errors = 0;
u8 *AES_WAD_Buf = (u8*)MEM2_alloc(WAD_BUF);
/* decrypt and write app files */
for(u16 cnt = 0; cnt < tmd_ptr->num_contents; cnt++)
{
gprintf("Installing content %d\n",cnt);
u8 aes_iv[16];
memset(aes_iv, 0, 16);
const tmd_content *content = &tmd_ptr->contents[cnt];
@ -174,8 +198,38 @@ int installWad(const char *path)
s32 fd = -1;
if(mios == false)
{
const char *app_name = fmt("%s/title/%08x/%08x/content/%08x.app", EmuNAND,
const char *app_name;
if(content->type == 0x8001)
{
// shared content
contentMapEntries = contentMap_size / sizeof(contentMapEntry);
bool sharedContent_exists = false;
for(u32 i = 0; i < contentMapEntries; ++i)
{
u8 *currentHash = contentMap_file[i].sha1hash;
if(memcmp(currentHash,content->hash,20) == 0)
{
sharedContent_exists = true;
gprintf ("Shared content %08x already installed\n", content->cid);
break;
}
}
if (sharedContent_exists == true)
{
// shared content already installed. skip installation.
u32 size_enc_full = ALIGN(16, content->size);
fseek(wad_file, size_enc_full, SEEK_CUR);
skip_align(wad_file, size_enc_full);
continue;
}
else // should be installed in /shared1 with a new name
app_name = fmt("%s/shared1/%08x.app", EmuNAND,(unsigned int)contentMapEntries);
}
else
{
app_name = fmt("%s/title/%08x/%08x/content/%08x.app", EmuNAND,
(u32)(tid>>32), (u32)tid&0xFFFFFFFF, content->cid);
}
app_file = fopen(app_name, "wb");
gprintf("Writing Emu NAND File %s\n", app_name);
}
@ -232,7 +286,32 @@ int installWad(const char *path)
ISFS_Close(fd);
if(memcmp(app_sha1, content->hash, sizeof(sha1)) == 0)
{
gprintf("sha1 matches on %08x.app, success!\n", content->cid);
// shared content succesfully installed. It's time to update content.map
if(mios == false && content->type == 0x8001)
{
u32 new_contentMap_size = (contentMapEntries+1) * sizeof(contentMapEntry);
u8 *new_contentMap_buf = (u8*)MEM2_alloc(new_contentMap_size);
// make room for new entry & copy old ones
memset(new_contentMap_buf, 0, new_contentMap_size);
memcpy(new_contentMap_buf, contentMap_buf, contentMap_size);
MEM2_free(contentMap_buf);
contentMap_size = new_contentMap_size;
contentMap_buf = new_contentMap_buf;
contentMap_file = (contentMapEntry*)contentMap_buf;
const char *newSharedID = fmt("%08x", (unsigned int)contentMapEntries);
memcpy(contentMap_file[contentMapEntries].sharedID,newSharedID,8);
memcpy(contentMap_file[contentMapEntries].sha1hash, content->hash, 20);
gprintf("Updating content.map: %08x.app as shared1/%s.app\n",content->cid,newSharedID);
fsop_WriteFile(fmt("%s/shared1/content.map", EmuNAND), contentMap_file, contentMap_size);
}
}
else
{
gprintf("sha1 mismatch on %08x.app!\n", content->cid);

View File

@ -22,6 +22,7 @@ bylastplayed=Nach 'Zuletzt gespielt' sortiert
byplaycount=Nach 'Wie oft gespielt' sortiert
byplayers=Nach 'Spielern' sortiert
bywifiplayers=Nach 'Online-Spielern' sortiert
byyear=Nach 'Jahr' sortiert
bybtnnumbers=Nach 'Button-Anzahl' sortiert
cat1=Wähle Kategorien
cat2=Leeren
@ -94,13 +95,11 @@ cfgbnr3=Custom Banner herunterladen
cfgbnr4=Banner löschen
cfgbnr5=Herunterladen
cfgbnr6=Löschen
cfgbnr7=Downloade Banner...
cfgbt1=Starteinstellungen
cfgbt2=Erzwinge Laden eines cIOS
cfgbt3=Erzwinge cIOS
cfgbt4=USB-Anschluss
cfgbt5=Zeige SourceFlow beim Start
cfgbt6=Mehrere Quellen zulassen
cfgbt7=Starte FTP-Server beim Start
cfgc1=Zurück zu...
cfgc2=TV-Breite anpassen
cfgc3=TV-Höhe anpassen
@ -112,7 +111,6 @@ cfgc8=Starteinstellungen
cfgc9=WiiFlow-Sprache
cfgd4=Verzeichnisse Verwalten
cfgd5=Favoritenmodus merken
cfgd7=Kategorien beim Start anzeigen
cfgg1=Einstellungen
cfgg10=IOS
cfgg11=
@ -168,17 +166,16 @@ cfgg58=Nur für Erwachsene
cfgg59=BBA-Emulation
cfgg60=BBA-Netzprofil
cfgg61=Entflimmer-Filter
cfgg65=Video Width
cfgg62=Gecachte Cover neu laden
cfgg63=Konvertiere Cover, bitte warten...
cfgg64=Einstellungen zurücksetzen
cfgg65=Videobreite
cfgg4=Länder-Strings patchen
cfgg5=Ocarina
cfgg6=
cfgg7=Video patchen
cfgg8=Zurück
cfgg9=
cfglng1=Sprachen
cfglng2=Sprachen herunterladen
cfglng3=Wähle Sprachdatei
cfglng4=Gewählte Datei herunterladen
cfgne1=NAND-Emulation
cfgne2=Entpacke Speicherstände
cfgne3=Alle
@ -223,14 +220,17 @@ cfgne98=WAD installieren
cfgne99=Starten
cfgp1=Spiele-Partition
cfgp2=2D-Cover
cfgp3=Netzwerk beim Start initialisieren
cfgp3=
cfgp4=Banner-Cache
cfgp5=Wii-Spiele
cfgp6=GameCube-Spiele
cfgp7=Musik
cfgp8=3D-Cover
cfgp9=Custom-Banner
cfgp10=WiiTDB Zip
cfgpl1=Plugins auswählen
cfgpl2=Alle setzen
cfgpl3=Alle löschen
cfgs1=Lautstärke Hintergrundmusik
cfgs2=Lautstärke Tasten
cfgs3=Lautstärke Coverflow
@ -238,7 +238,6 @@ cfgs4=Lautstärke Spiel-Melodie
cfgsm1=SourceFlow-Einstellungen
cfgsm3=SourceFlow aktivieren
cfgsm4=SourceFlow Smallbox
cfgsm5=SourceFlow-Cache leeren
cfgsmerr=Keinen SourceFlow gefunden!
cfghb1=Homebrew-Einstellungen
cfghb2=Coverflow Smallbox
@ -251,7 +250,6 @@ ChanBoth=Beide
cheat1=Zurück
cheat2=Übernehmen
cheat3=Cheatdatei für dieses Spiel nicht gefunden.
cheat4=Download nicht gefunden.
commodore=Commodore 64
custom=Benutzerdefiniert
def=Standard
@ -294,25 +292,25 @@ dl8=Cover
dlmsg1=Netzwerk wird initialisiert...
dlmsg10=%s.wfc wird erstellt...
dlmsg11=Herunterladen...
dlmsg12=Herunterladen fehlgeschlagen
dlmsg12=Herunterladen fehlgeschlagen!
dlmsg13=Speichern...
dlmsg14=Fertig.
dlmsg15=Speichern fehlgeschlagen!
dlmsg16=Datei konnte nicht gelesen werden.
dlmsg17=Kein Update gefunden.
dlmsg18=Es wurde keine boot.dol im Standardpfad gefunden.
dlmsg19=Neue Version verfügbar!
dlmsg2=Netzwerkinitialisierung fehlgeschlagen.
dlmsg20=Keine Informationen über diese Version gefunden.
dlmsg21=WiiFlow beendet sich nun, damit das Update durchgeführt werden kann.
dlmsg22=Aktualisiere Anwendungsverzeichnis...
dlmsg23=Aktualisiere Datenverzeichnis...
dlmsg15=
dlmsg16=
dlmsg17=
dlmsg18=
dlmsg19=
dlmsg2=Netzwerkinitialisierung fehlgeschlagen!
dlmsg20=
dlmsg21=
dlmsg22=
dlmsg23=
dlmsg24=Entpacke %s...
dlmsg25=Entpacken fehlgeschlagen! Benenne Backup zurück nach boot.dol
dlmsg26=Update Cache...
dlmsg25=
dlmsg26=
dlmsg27=Nicht genügend Arbeitsspeicher!
dlmsg28=FTP-Server gestartet, IP: %s:%u
dlmsg29=FTP-Server ist zurzeit gestoppt.
dlmsg28=
dlmsg29=
dlmsg3=Lade %i/%i von %s herunter
dlmsg30=Keine Cover fehlen.
dlmsg31=Konvertiere Cover %i von %i
@ -334,35 +332,35 @@ DMLntsc=NTSC 480i
DMLpal60=PAL 480i
DMLprog=NTSC 480p
DMLprogP=PAL 480p
errboot1=Kein cIOS gefunden!\ncIOS d2x 249 Base 56 und 250 Base 57 genügen für die meisten Spiele.
errboot2=Kein Gerät zum Speichern der Konfiguration gefunden!
errboot3=Konnte DIP-Modul nicht initialisieren!
errboot1=
errboot2=
errboot3=
errboot4=Kein /apps/wiiflow Verzeichnis gefunden!
errboot5=data_on_usb=yes aber keine verwendbare USB-Partition!\nSD wird verwendet.
errboot6=Keine verwendbare USB-Partition für Daten gefunden und keine SD-Karte eingesteckt!\Beende.
errboot7=Zugriff verweigert im Wii VC Modus.
errboot8=Drücke 'A', um WiiFlow neu zu laden
errgame1=Konnte Spiel mit dieser ID nicht finden: %s
errgame2=Kein cIOS gefunden!
errgame2=
errgame3=
errgame4=Konnte IOS %i nicht laden
errgame5=Emulator konnte nicht aktiviert werden!
errgame6=Emulator konnte nach IOS Reload nicht aktiviert werden!
errgame7=WDVDGetCoverStatus fehlgeschlagen!
errgame8=Bitte lege eine Spiele-Disc ein.
errgame9=Dies ist keine Wii- oder GameCube-Disc
errgame10=
errgame11=GameCube-Loader nicht gefunden! Kann Spiel nicht starten.
errgame12=Nintendont nicht gefunden! Kann GC-Disc nicht laden.
errgame13=EmuNAND für Speicherstand nicht gefunden! Benutze echten NAND.
errgame14=app_booter.bin nicht gefunden!
errgame15=WiiFlow gesperrt! Entsperre WiiFlow, um dieses Feature zu nutzen.
errgame16=Nicht verfügbar für Plugin-Spiele!
errgame16=ext_loader.bin oder ext_booter.bin fehlt!
errgame17=Kann echte NAND-Kanäle nicht löschen!
errgame18=Keine Spiele-Info!
errgame19=Kann nicht im Wii Virtual Console Modus starten!
errneek1=Konnte neek2o nicht starten, bitte neek2o Setup überprüfen.
exit_to=Zurück zu
ftp1=Starten
ftp2=Stoppen
gameinfo1=Entwickler: %s
gameinfo2=Herausgeber: %s
gameinfo3=Region: %s
@ -415,7 +413,7 @@ lngsch=Chinesisch (vereinfacht)
lngspa=Spanisch
lngsys=System
lngtch=Chinesisch (traditionell)
main1=Installieren
main1=Spieleliste leer!
main2=Keine Spiele gefunden in
main3=Keine Titel gefunden in
main4=Keine Homebrews gefunden in
@ -438,9 +436,6 @@ NinMCDef=Standard
NinMCOff=Deaktiviert
NinMCon=Aktiviert
NinMCMulti=Multi-Saves
NoDVDDef=Standard
NoDVDOff=Deaktiviert
NoDVDon=Aktiviert
no=Nein
off=Aus
on=An
@ -452,7 +447,7 @@ part5=Partitions-Einstellungen
players=Spieler
prii=Priiloader
ps_nossl=Ohne SSL
ps_wiimmfi
ps_wiimmfi=Wiimmfi
real=Echter NAND
SaveDef=Standard
SaveFull=Vollständig
@ -461,8 +456,6 @@ SaveOff=Aus
SaveOffG=Aus
SavePart=Teilweise
SavePartG=Teilweise
SaveReg=Regionswitch
SaveRegG=Regionswitch
savedtheme=Theme-Konfiguration gespeichert!
select=Auswählen
shutdown1=Wie herunterfahren?
@ -480,12 +473,6 @@ smedit9=SourceFlow-Setup
smediterr=Nicht erlaubt!
snes=Super Nintendo
stup1=Wähle Source
stup2=** DEAKTIVIERT **
sys1=Update WiiFlow
sys2=WiiFlow-Version:
sys3=Abbrechen
sys4=Upgrade
sys7=Installierte Version.
translation_author=FIX94, ZEN.13, PizzaPino, Domi78, iCON
turbografx16=TurboGrafx-16
turbografxcd=TurboGrafx-CD
@ -502,7 +489,7 @@ vmpmore=Mehr
vmpnone=Keinen
vmpnormal=Normal
vw_auto=Auto
vw_def=Default
vw_def=Standard
vw_frmbuf=Framebuffer
wad1=WAD Installieren
wad2=Start
@ -544,10 +531,9 @@ wbfsoperr2=Disc_Open fehlgeschlagen
wbfsoperr3=Das ist keine Wii-Disc.
wbfsoperr4=Dieses Spiel ist bereits installiert.
wbfsoperr5=Es ist nicht erlaubt diesen Kanal zu löschen!
wbfsoperr6=Spiel installieren ist defekt, \nbitte nutze CleanRip.
wbfsprogress=%i%%
wbfsoperr6=Spiel installieren ist defekt,\nbitte nutze CleanRip.
wbfsprogress=%i%%
wbfsremdlg=Um das Spiel %s dauerhaft zu löschen, klicke auf Start.
wbfsremdlg=Um das Spiel '%s' dauerhaft zu löschen, klicke auf Start.
wifiplayers=Online-Spieler
wii=Wii
wiichannels=Offizielle Wii Kanäle