Just some quick fixes:

- Fixed creation of the playlog
- Fixed and changed the way Wiiflow checks for neek2o (uneek2o r92 beta 12+ req)
- Fixed IOS reloading for Wii games in neek2o mode
- Added a small delay in booting a Wii game in neek2o mode
This commit is contained in:
overjoy.psm 2012-10-14 22:47:23 +00:00
parent 8cc82998ac
commit a38e80ee28
3 changed files with 31 additions and 25 deletions

View File

@ -42,8 +42,9 @@ bool neek2o(void)
{ {
if(!checked) if(!checked)
{ {
u32 num = 0; s32 ESHandle = IOS_Open("/dev/es", 0);
neek = !(ISFS_ReadDir("/sneek", NULL, &num)); neek = IOS_Ioctlv(ESHandle, 0xA2, 0, 0, NULL) == 0x666c6f77;
IOS_Close(ESHandle);
gprintf("WiiFlow is in %s mode\n", neek ? "neek2o" : "real nand"); gprintf("WiiFlow is in %s mode\n", neek ? "neek2o" : "real nand");
checked = true; checked = true;
} }

View File

@ -18,24 +18,26 @@
#define SECONDS_TO_2000 946684800LL #define SECONDS_TO_2000 946684800LL
#define TICKS_PER_SECOND 60750000LL #define TICKS_PER_SECOND 60750000LL
typedef struct typedef union
{ {
u32 checksum; struct
union
{ {
u32 data[31]; u32 checksum;
struct u16 name[0x28];
{ u32 padding1;
u8 name[84]; u64 ticks_boot;
u64 ticks_boot; u64 ticks_last;
u64 ticks_last; char title_id[6];
char title_id[6]; u16 padding2[9];
char unknown[18];
} ATTRIBUTE_PACKED;
}; };
} playrec_struct; struct
{
u32 _checksum;
u32 data[0x1f];
};
} __attribute__((packed)) playtime_t;
playrec_struct playrec_buf; playtime_t playrec_buf;
// Thanks to Dr. Clipper // Thanks to Dr. Clipper
u64 getWiiTime(void) u64 getWiiTime(void)
@ -46,6 +48,7 @@ u64 getWiiTime(void)
int Playlog_Update(const char ID[6], const u8 title[84]) int Playlog_Update(const char ID[6], const u8 title[84])
{ {
gprintf("Update Play log\n");
u32 sum = 0; u32 sum = 0;
u8 i; u8 i;
@ -73,9 +76,9 @@ int Playlog_Update(const char ID[6], const u8 title[84])
//Update channel name and ID //Update channel name and ID
memcpy(playrec_buf.name, title, 84); memcpy(playrec_buf.name, title, 84);
memcpy(playrec_buf.title_id, ID, 6); strcpy(playrec_buf.title_id, ID);
memset(playrec_buf.unknown, 0, 18); memset(playrec_buf.padding2, 0, 18);
//Calculate and update checksum //Calculate and update checksum
for(i=0; i<31; i++) for(i=0; i<31; i++)

View File

@ -625,11 +625,11 @@ void CMenu::_game(bool launch)
} }
banner = NULL; banner = NULL;
if(Playlog_Update(m_cf.getId().c_str(), banner_title) < 0) if(Playlog_Update((char *)hdr->id, banner_title) < 0)
Playlog_Delete(); Playlog_Delete();
} }
gprintf("Launching game %s\n", m_cf.getId().c_str()); gprintf("Launching game %s\n", (char *)hdr->id);
_launch(hdr); _launch(hdr);
if(m_exit) if(m_exit)
@ -1156,9 +1156,11 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
if(neek2o()) if(neek2o())
{ {
int discID = id.c_str()[0] << 24 | id.c_str()[1] << 16 | id.c_str()[2] << 8 | id.c_str()[3]; int discID = id.c_str()[0] << 24 | id.c_str()[1] << 16 | id.c_str()[2] << 8 | id.c_str()[3];
WDVD_NEEK_LoadDisc((discID&0xFFFFFFFF), 0x5D1C9EA3); if(WDVD_NEEK_LoadDisc((discID&0xFFFFFFFF), 0x5D1C9EA3) > 0)
dvd = true; {
sleep(1); dvd = true;
sleep(3);
}
} }
if(dvd) if(dvd)
@ -1329,8 +1331,8 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
if(rtrn != NULL && strlen(rtrn) == 4) if(rtrn != NULL && strlen(rtrn) == 4)
returnTo = rtrn[0] << 24 | rtrn[1] << 16 | rtrn[2] << 8 | rtrn[3]; returnTo = rtrn[0] << 24 | rtrn[1] << 16 | rtrn[2] << 8 | rtrn[3];
int userIOS = m_gcfg2.getInt(id, "ios", 0); int userIOS = m_gcfg2.getInt(id, "ios", 0);
int gameIOS = dvd ? userIOS : GetRequestedGameIOS(hdr); int gameIOS = dvd && !neek2o() ? userIOS : GetRequestedGameIOS(hdr);
m_gcfg1.save(true); m_gcfg1.save(true);
m_gcfg2.save(true); m_gcfg2.save(true);