From 4a2899ac382a6e565a2b705e3cb5c095f4a2753c Mon Sep 17 00:00:00 2001 From: dimok321 <15055714+dimok789@users.noreply.github.com> Date: Sat, 23 Jul 2011 19:49:51 +0000 Subject: [PATCH] *using new app_booter for homebrew booting (see WiiXplorer changelog) *reload back to entry ios when starting homebrew instead of starting it in cIOS *removed limit of .csv and .txt gamelist creation *fixed META.XML format *Added use of the internal Wii System Menu font (removed old one) (thx to giantpune and r-win) *Changed default Font Scale to 0.8 to fit with the new font. If you don't reset configs it's recommended to change it manually in the settings to 0.8. --- HBC/META.XML | 6 +- data/app_booter.bin | Bin 0 -> 872 bytes data/app_booter.dol | Bin 106048 -> 0 bytes data/fonts/font.ttf | Bin 55620 -> 0 bytes gui.pnproj | 2 +- source/FreeTypeGX.cpp | 14 +++- source/FreeTypeGX.h | 2 +- source/GUI/Text.cpp | 2 +- source/GUI/gui_text.cpp | 8 +- source/StartUpProcess.cpp | 1 + source/banner/OpeningBNR.cpp | 38 --------- source/banner/OpeningBNR.hpp | 38 +++++++++ source/homebrewboot/BootHomebrew.cpp | 41 ++++++---- source/homebrewboot/dolloader.c | 64 --------------- source/homebrewboot/dolloader.h | 18 ----- source/prompts/PromptWindows.cpp | 12 +-- source/prompts/gameinfo.cpp | 18 ++--- source/settings/CSettings.cpp | 2 +- source/settings/CSettings.h | 1 + source/themes/CTheme.cpp | 117 ++++++++++++++++++++++++--- source/themes/CTheme.h | 2 + source/themes/filelist.h | 6 +- source/usbloader/frag.c | 4 +- svnrev.sh | 2 +- 24 files changed, 208 insertions(+), 190 deletions(-) create mode 100644 data/app_booter.bin delete mode 100644 data/app_booter.dol delete mode 100644 data/fonts/font.ttf delete mode 100644 source/homebrewboot/dolloader.c delete mode 100644 source/homebrewboot/dolloader.h diff --git a/HBC/META.XML b/HBC/META.XML index 01e29aa6..b77b00eb 100644 --- a/HBC/META.XML +++ b/HBC/META.XML @@ -2,14 +2,14 @@ USB Loader GX USB Loader GX Team - 2.2 r1099 - 201106272106 + 2.2 r1101 + 201106301853 // remove this line to enable arguments + // remove this line to enable arguments --> Loads games from USB-devices USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times. diff --git a/data/app_booter.bin b/data/app_booter.bin new file mode 100644 index 0000000000000000000000000000000000000000..08d1806350e35c2d4e633b9527bf93dd770a0820 GIT binary patch literal 872 zcmZuwL2DC17=7DBNhLy*6>1xriOHeW!d`ONuqke&O0ZQbq~J+c(qa#K5f3X&I}_6$ z3JSsW;Gsz)wE-a%JgPMD;E(Vi5~&`f9u)*>$8WY+L_93K@6CK~zV|+sduSC);Tv9w zfqO=J3dUHD)eJjXkv4!;L%q#;HQ1%lye)xTlkjF}o^Omy7tr^TzW8cV^?0PO)h#2& z7ls~G4Ww-k$Uj6+F5rC*W#K{XXH!av6}b62GL=1i7-wb46N9FZ1=p=3B6bSX`VH~r zmruGgx>tM-@MF>0^+k8rcj#PpQMHyyzkv}cP&ikCa<>te>j1BxF{wAJd8(^~uUTt2 z>L`SrH5hI~y>oh`(LwuAV-d558V$q`G>jjTc-cUkG>%*AIOcpL4RxSFv-KqTd_$h? zBp8o`T301lIYk*kT=Xz?iM%4q0Jnp5GlZBW(dRZ`5}0k|&{L2b~x6O>hqYO{PE zQR@h0y9{?`6rH)0L{%V4yO_wo4zdgLhRzOqlwFjvBW#=^zpOcoF;NGcZ5a7A^;`~P zpa^tkLlSg9qIVr+K{NlI#UC#@?+LUY?PXH!f3hmjv&A$&sniM5h#ug*S9At0hJ5nk zjdIlIKpj?MB6Tb Qi3)Qmr*E3m|C8?f4Pki$ivR!s literal 0 HcmV?d00001 diff --git a/data/app_booter.dol b/data/app_booter.dol deleted file mode 100644 index 62c156fe91698e4e5ec274cceade27c4206e24e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106048 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ΠpMlei!)Rl9Sv;L~ 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 diff --git a/data/fonts/font.ttf b/data/fonts/font.ttf deleted file mode 100644 index 01ce58166c4c97ca7ed556833ac8ecd30a40823c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55620 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

2kn2N! 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 \ No newline at end of file + \ No newline at end of file diff --git a/source/FreeTypeGX.cpp b/source/FreeTypeGX.cpp index 093e639e..c6c703ce 100644 --- a/source/FreeTypeGX.cpp +++ b/source/FreeTypeGX.cpp @@ -63,15 +63,23 @@ wchar_t* charToWideChar(const char* strChar) /** * Default constructor for the FreeTypeGX class for WiiXplorer. */ -FreeTypeGX::FreeTypeGX(const uint8_t* fontBuffer, FT_Long bufferSize) +FreeTypeGX::FreeTypeGX(const uint8_t* fontBuffer, FT_Long bufferSize, bool lastFace) { + int faceIndex = 0; ftPointSize = 0; FT_Init_FreeType(&ftLibrary); - FT_New_Memory_Face(ftLibrary, (FT_Byte *) fontBuffer, bufferSize, 0, &ftFace); + if(lastFace) + { + FT_New_Memory_Face(ftLibrary, (FT_Byte *)fontBuffer, bufferSize, -1, &ftFace); + faceIndex = ftFace->num_faces - 1; // Use the last face + FT_Done_Face(ftFace); + ftFace = NULL; + } + FT_New_Memory_Face(ftLibrary, (FT_Byte *) fontBuffer, bufferSize, faceIndex, &ftFace); setVertexFormat(GX_VTXFMT1); - ftKerningEnabled = false; + ftKerningEnabled = false;//FT_HAS_KERNING(ftFace); } /** diff --git a/source/FreeTypeGX.h b/source/FreeTypeGX.h index 7b50215d..50a70411 100644 --- a/source/FreeTypeGX.h +++ b/source/FreeTypeGX.h @@ -132,7 +132,7 @@ class FreeTypeGX int16_t screenZ, GXColor color); public: - FreeTypeGX(const uint8_t* fontBuffer, FT_Long bufferSize); + FreeTypeGX(const uint8_t* fontBuffer, FT_Long bufferSize, bool lastFace = false); ~FreeTypeGX(); void setVertexFormat(uint8_t vertexIndex); diff --git a/source/GUI/Text.cpp b/source/GUI/Text.cpp index 2462c0ee..ff1449c4 100644 --- a/source/GUI/Text.cpp +++ b/source/GUI/Text.cpp @@ -312,7 +312,7 @@ void Text::Draw() GXColor c = color; c.a = this->GetAlpha(); - int newSize = (int) (size * GetScale() * Settings.FontScaleFactor); + int newSize = (int) (size * GetScale()); if (newSize != currentSize) { diff --git a/source/GUI/gui_text.cpp b/source/GUI/gui_text.cpp index d0f4d3d0..153841ef 100644 --- a/source/GUI/gui_text.cpp +++ b/source/GUI/gui_text.cpp @@ -32,7 +32,7 @@ static GXColor presetColor = (GXColor) {255, 255, 255, 255}; GuiText::GuiText(const char * t, int s, GXColor c) { text = NULL; - size = s; + size = (int) (s * Settings.FontScaleFactor); currentSize = size; color = c; alpha = c.a; @@ -61,7 +61,7 @@ GuiText::GuiText(const char * t, int s, GXColor c) GuiText::GuiText(const wchar_t * t, int s, GXColor c) { text = NULL; - size = s; + size = (int) (s * Settings.FontScaleFactor); currentSize = size; color = c; alpha = c.a; @@ -95,7 +95,7 @@ GuiText::GuiText(const wchar_t * t, int s, GXColor c) GuiText::GuiText(const char * t) { text = NULL; - size = presetSize; + size = (int) (presetSize * Settings.FontScaleFactor); currentSize = size; color = presetColor; alpha = presetColor.a; @@ -531,7 +531,7 @@ void GuiText::Draw() GXColor c = color; c.a = GetAlpha(); - int newSize = (int) (size * GetScale() * Settings.FontScaleFactor); + int newSize = (int) (size * GetScale()); if (newSize != currentSize) { diff --git a/source/StartUpProcess.cpp b/source/StartUpProcess.cpp index 44b10121..7adc5bf2 100644 --- a/source/StartUpProcess.cpp +++ b/source/StartUpProcess.cpp @@ -158,6 +158,7 @@ int StartUpProcess::Run(int argc, char *argv[]) int StartUpProcess::Execute() { + Settings.EntryIOS = IOS_GetVersion(); SetTextf("Start up\n"); if(IosLoader::LoadAppCios() < 0) diff --git a/source/banner/OpeningBNR.cpp b/source/banner/OpeningBNR.cpp index f9eefb62..f2f9434d 100644 --- a/source/banner/OpeningBNR.cpp +++ b/source/banner/OpeningBNR.cpp @@ -5,44 +5,6 @@ #include "utils/uncompress.h" #include "OpeningBNR.hpp" -typedef struct _IMD5Header -{ - u32 fcc; - u32 filesize; - u8 zeroes[8]; - u8 crypto[16]; -} __attribute__((packed)) IMD5Header; - -typedef struct _U8Header -{ - u32 fcc; - u32 rootNodeOffset; - u32 headerSize; - u32 dataOffset; - u8 zeroes[16]; -} __attribute__((packed)) U8Header; - -typedef struct _U8Entry -{ - struct - { - u32 fileType :8; - u32 nameOffset :24; - }; - u32 fileOffset; - union - { - u32 fileLength; - u32 numEntries; - }; -} __attribute__( ( packed ) ) U8Entry; - - -static inline const char * u8Filename(const U8Entry *fst, int i) -{ - return (char *) (fst + fst[0].numEntries) + fst[i].nameOffset; -} - BNRInstance * BNRInstance::instance = NULL; OpeningBNR::OpeningBNR() diff --git a/source/banner/OpeningBNR.hpp b/source/banner/OpeningBNR.hpp index 2ec69a22..4419b78f 100644 --- a/source/banner/OpeningBNR.hpp +++ b/source/banner/OpeningBNR.hpp @@ -17,6 +17,44 @@ typedef struct _IMETHeader u8 crypto[16]; } __attribute__((packed)) IMETHeader; +typedef struct _IMD5Header +{ + u32 fcc; + u32 filesize; + u8 zeroes[8]; + u8 crypto[16]; +} __attribute__((packed)) IMD5Header; + +typedef struct _U8Header +{ + u32 fcc; + u32 rootNodeOffset; + u32 headerSize; + u32 dataOffset; + u8 zeroes[16]; +} __attribute__((packed)) U8Header; + +typedef struct _U8Entry +{ + struct + { + u32 fileType :8; + u32 nameOffset :24; + }; + u32 fileOffset; + union + { + u32 fileLength; + u32 numEntries; + }; +} __attribute__( ( packed ) ) U8Entry; + + +static inline const char * u8Filename(const U8Entry *fst, int i) +{ + return (char *) (fst + fst[0].numEntries) + fst[i].nameOffset; +} + class OpeningBNR { public: diff --git a/source/homebrewboot/BootHomebrew.cpp b/source/homebrewboot/BootHomebrew.cpp index 33ba5c71..81805bb3 100644 --- a/source/homebrewboot/BootHomebrew.cpp +++ b/source/homebrewboot/BootHomebrew.cpp @@ -9,18 +9,25 @@ #include #include #include "Controls/DeviceHandler.hpp" -#include "../lstub.h" -#include "../sys.h" -#include "../gecko.h" +#include "settings/CSettings.h" +#include "lstub.h" +#include "sys.h" +#include "gecko.h" -#include "dolloader.h" +#define EXECUTE_ADDR ((u8 *) 0x92000000) +#define BOOTER_ADDR ((u8 *) 0x93000000) +#define ARGS_ADDR ((u8 *) 0x93200000) -static u8 *homebrewbuffer = (u8 *) 0x92000000; +extern const u8 app_booter_bin[]; +extern const u32 app_booter_bin_size; + +typedef void (*entrypoint) (void); +extern "C" { void __exception_closeall(); } + +static u8 *homebrewbuffer = EXECUTE_ADDR; static u32 homebrewsize = 0; static std::vector Arguments; -extern const u8 app_booter_dol[]; - void AddBootArgument(const char * argv) { std::string arg(argv); @@ -37,7 +44,7 @@ int CopyHomebrewMemory(u8 *temp, u32 pos, u32 len) void FreeHomebrewBuffer() { - homebrewbuffer = (u8 *) 0x92000000; + homebrewbuffer = EXECUTE_ADDR; homebrewsize = 0; Arguments.clear(); @@ -91,18 +98,24 @@ static int RunAppbooter() ExitApp(); + if(Settings.EntryIOS != IOS_GetVersion()) + IOS_ReloadIOS(Settings.EntryIOS); + struct __argv args; SetupARGV(&args); u32 cpu_isr; - entrypoint entry = (entrypoint) load_dol((void*) app_booter_dol, &args); + memcpy(BOOTER_ADDR, app_booter_bin, app_booter_bin_size); + DCFlushRange(BOOTER_ADDR, app_booter_bin_size); - if (!entry) - { - FreeHomebrewBuffer(); - return -1; - } + entrypoint entry = (entrypoint) BOOTER_ADDR; + + if (args.argvMagic == ARGV_MAGIC) + { + memmove(ARGS_ADDR, &args, sizeof(args)); + DCFlushRange(ARGS_ADDR, sizeof(args)); + } u64 currentStub = getStubDest(); loadStub(); diff --git a/source/homebrewboot/dolloader.c b/source/homebrewboot/dolloader.c deleted file mode 100644 index d957f7e8..00000000 --- a/source/homebrewboot/dolloader.c +++ /dev/null @@ -1,64 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include "dolloader.h" - -typedef struct _dolheader { - u32 text_pos[7]; - u32 data_pos[11]; - u32 text_start[7]; - u32 data_start[11]; - u32 text_size[7]; - u32 data_size[11]; - u32 bss_start; - u32 bss_size; - u32 entry_point; -} dolheader; - -u32 load_dol(const void *dolstart, struct __argv *argv) -{ - u32 i; - dolheader *dolfile; - - if (dolstart) - { - dolfile = (dolheader *) dolstart; - for (i = 0; i < 7; i++) - { - if ((!dolfile->text_size[i]) || (dolfile->text_start[i] < 0x100)) - continue; - - memmove((void *) dolfile->text_start[i], dolstart - + dolfile->text_pos[i], dolfile->text_size[i]); - - DCFlushRange ((void *) dolfile->text_start[i], dolfile->text_size[i]); - ICInvalidateRange((void *) dolfile->text_start[i], dolfile->text_size[i]); - } - - for (i = 0; i < 11; i++) - { - if ((!dolfile->data_size[i]) || (dolfile->data_start[i] < 0x100)) - continue; - - memmove((void *) dolfile->data_start[i], dolstart - + dolfile->data_pos[i], dolfile->data_size[i]); - - DCFlushRange((void *) dolfile->data_start[i], - dolfile->data_size[i]); - } - - if (argv && argv->argvMagic == ARGV_MAGIC) - { - void *new_argv = (void *) (dolfile->entry_point + 8); - memmove(new_argv, argv, sizeof(*argv)); - DCFlushRange(new_argv, sizeof(*argv)); - } - return dolfile->entry_point; - } - return 0; -} diff --git a/source/homebrewboot/dolloader.h b/source/homebrewboot/dolloader.h deleted file mode 100644 index af644414..00000000 --- a/source/homebrewboot/dolloader.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _DOLLOADER_H_ -#define _DOLLOADER_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void __exception_closeall(); -typedef void (*entrypoint) (void); - -u32 load_dol(const void *dolstart, struct __argv *argv); - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/prompts/PromptWindows.cpp b/source/prompts/PromptWindows.cpp index 4fe57648..db2be1f2 100644 --- a/source/prompts/PromptWindows.cpp +++ b/source/prompts/PromptWindows.cpp @@ -29,8 +29,7 @@ #include "utils/StringTools.h" #include "mload/mload.h" #include "FileOperations/fileops.h" -#include "menu.h" -#include "menu.h" +#include "menu/menus.h" #include "sys.h" #include "wpad.h" #include "wad/wad.h" @@ -42,11 +41,6 @@ #include "gecko.h" #include "lstub.h" -/*** Extern variables ***/ -s32 gameStart = 0; -extern u8 shutdown; -extern u8 reset; - /**************************************************************************** * OnScreenNumpad * @@ -237,9 +231,9 @@ void WindowCredits() char SvnRev[80]; #ifdef FULLCHANNEL - snprintf(SvnRev, sizeof(SvnRev), "V2.2c IOS%u (Rev %u)", IOS_GetVersion(), IOS_GetRevision()); + snprintf(SvnRev, sizeof(SvnRev), "Rev%sc IOS%u (Rev %u)", GetRev(), IOS_GetVersion(), IOS_GetRevision()); #else - snprintf(SvnRev, sizeof(SvnRev), "V2.2 IOS%u (Rev %u)", IOS_GetVersion(), IOS_GetRevision()); + snprintf(SvnRev, sizeof(SvnRev), "Rev%s IOS%u (Rev %u)", GetRev(), IOS_GetVersion(), IOS_GetRevision()); #endif char IosInfo[80] = ""; diff --git a/source/prompts/gameinfo.cpp b/source/prompts/gameinfo.cpp index 1dc4a8d2..7fc6555a 100644 --- a/source/prompts/gameinfo.cpp +++ b/source/prompts/gameinfo.cpp @@ -1114,13 +1114,10 @@ bool save_gamelist(int txt) // save gamelist { struct discHdr* header = gameList[i]; WBFS_GameSize(header->id, &size); - if (i < 500) - { - fprintf(f, "%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2], header->id[3], header->id[4], - header->id[5]); - fprintf(f, " [%.2f] ", size); - fprintf(f, " %s", GameTitles.GetTitle(header)); - } + fprintf(f, "%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2], header->id[3], header->id[4], + header->id[5]); + fprintf(f, " [%.2f] ", size); + fprintf(f, " %s", GameTitles.GetTitle(header)); fprintf(f, "\n"); } } @@ -1132,11 +1129,8 @@ bool save_gamelist(int txt) // save gamelist { struct discHdr* header = gameList[i]; WBFS_GameSize(header->id, &size); - if (i < 500) - { - fprintf(f, "\"%c%c%c%c%c%c\",\"%.2f\",\"%s\"\n", header->id[0], header->id[1], header->id[2], - header->id[3], header->id[4], header->id[5], size, GameTitles.GetTitle(header)); - } + fprintf(f, "\"%c%c%c%c%c%c\",\"%.2f\",\"%s\"\n", header->id[0], header->id[1], header->id[2], + header->id[3], header->id[4], header->id[5], size, GameTitles.GetTitle(header)); } } fclose(f); diff --git a/source/settings/CSettings.cpp b/source/settings/CSettings.cpp index af832db4..f0dd4e68 100644 --- a/source/settings/CSettings.cpp +++ b/source/settings/CSettings.cpp @@ -119,7 +119,7 @@ void CSettings::SetDefault() USBPort = 0; CacheTitles = ON; WSFactor = 0.8f; //actually should be 0.75 for real widescreen - FontScaleFactor = 1.0f; + FontScaleFactor = 0.8f; //it's a work around to not have to change ALL fonts now EnabledCategories.resize(1); EnabledCategories[0] = 0; Wiinnertag = OFF; diff --git a/source/settings/CSettings.h b/source/settings/CSettings.h index 3f5a9dc4..dbcf6f33 100644 --- a/source/settings/CSettings.h +++ b/source/settings/CSettings.h @@ -125,6 +125,7 @@ class CSettings short GameListOffset; short sneekVideoPatch; std::vector EnabledCategories; + u8 EntryIOS; protected: bool ValidVersion(FILE * file); bool SetSetting(char *name, char *value); diff --git a/source/themes/CTheme.cpp b/source/themes/CTheme.cpp index b3763586..2326bf07 100644 --- a/source/themes/CTheme.cpp +++ b/source/themes/CTheme.cpp @@ -29,13 +29,27 @@ #include "CTheme.h" #include "GUI/gui.h" #include "settings/CSettings.h" +#include "banner/OpeningBNR.hpp" #include "FileOperations/fileops.h" #include "menu/menus.h" +#include "wad/nandtitle.h" #include "FreeTypeGX.h" +typedef struct map_entry +{ + char name[8]; + u8 hash[20]; +} __attribute__((packed)) map_entry_t; + +static const char contentMapPath[] ATTRIBUTE_ALIGN(32) = "/shared1/content.map"; +static const u8 WIIFONT_HASH[] = {0x32, 0xb3, 0x39, 0xcb, 0xbb, 0x50, 0x7d, 0x50, 0x27, 0x79, 0x25, 0x9a, 0x78, 0x66, 0x99, 0x5d, 0x03, 0x0b, 0x1d, 0x88}; +static const u8 WIIFONT_HASH_KOR[] = {0xb7, 0x15, 0x6d, 0xf0, 0xf4, 0xae, 0x07, 0x8f, 0xd1, 0x53, 0x58, 0x3e, 0x93, 0x6e, 0x07, 0xc0, 0x98, 0x77, 0x49, 0x0e}; + FreeTypeGX * fontSystem = NULL; -static FT_Byte * MainFont = NULL; -static u32 MainFontSize = 0; +static FT_Byte * systemFont = NULL; +static u32 systemFontSize = 0; +static FT_Byte * customFont = NULL; +static u32 customFontSize = 0; bool Theme::ShowTooltips = true; @@ -149,13 +163,76 @@ bool Theme::Load(const char * theme_file_path) return result; } +bool Theme::loadSystemFont(bool korean) +{ + u8 *contentMap = NULL; + u32 mapsize = 0; + + NandTitle::LoadFileFromNand(contentMapPath, &contentMap, &mapsize); + if(!contentMap) + return false; + + int fileCount = mapsize / sizeof(map_entry_t); + + map_entry_t *mapEntryList = (map_entry_t *) contentMap; + + for (int i = 0; i < fileCount; i++) + { + if (memcmp(mapEntryList[i].hash, korean ? WIIFONT_HASH_KOR : WIIFONT_HASH, 20) != 0) + continue; + + // Name found, load it and unpack it + char font_filename[32] ATTRIBUTE_ALIGN(32); + snprintf(font_filename, sizeof(font_filename), "/shared1/%.8s.app", mapEntryList[i].name); + + u8 *fontArchive = NULL; + u32 filesize = 0; + + NandTitle::LoadFileFromNand(font_filename, &fontArchive, &filesize); + if(!fontArchive) + continue; + + const U8Header *u8Archive = (U8Header *) fontArchive; + const U8Entry *fst = (const U8Entry *) (((const u8 *) u8Archive) + u8Archive->rootNodeOffset); + + if(fst[0].numEntries < 1) + { + free(fontArchive); + continue; + } + + if(systemFont) + delete [] systemFont; + + systemFontSize = fst[1].fileLength; + systemFont = new (std::nothrow) FT_Byte[systemFontSize]; + if(!systemFont) + { + free(fontArchive); + continue; + } + + memcpy(systemFont, fontArchive + fst[1].fileOffset, systemFontSize); + + free(fontArchive); + free(contentMap); + gprintf("Loaded Wii System Font: %s\n", u8Filename(fst, 1)); + return true; + } + + free(contentMap); + + return false; +} + bool Theme::LoadFont(const char *path) { char FontPath[300]; bool result = false; FILE *pfile = NULL; - ClearFontData(); + delete [] customFont; + customFont = NULL; snprintf(FontPath, sizeof(FontPath), "%s/font.ttf", path); @@ -164,22 +241,32 @@ bool Theme::LoadFont(const char *path) if (pfile) { fseek(pfile, 0, SEEK_END); - MainFontSize = ftell(pfile); + customFontSize = ftell(pfile); rewind(pfile); - MainFont = new (std::nothrow) FT_Byte[MainFontSize]; - if (MainFont) + customFont = new (std::nothrow) FT_Byte[customFontSize]; + if (customFont) { - fread(MainFont, 1, MainFontSize, pfile); + fread(customFont, 1, customFontSize, pfile); result = true; } fclose(pfile); } - FT_Byte * loadedFont = MainFont ? MainFont : (FT_Byte *) Resources::GetFile("font.ttf"); - u32 loadedFontSize = MainFont ? MainFontSize : Resources::GetFileSize("font.ttf"); + FT_Byte *loadedFont = customFont; + u32 loadedFontSize = customFontSize; - fontSystem = new FreeTypeGX(loadedFont, loadedFontSize); + if(!loadedFont) + { + if(!systemFont) + loadSystemFont(CONF_GetLanguage() == CONF_LANG_KOREAN); + + //! Default to system font if no custom is loaded + loadedFont = systemFont; + loadedFontSize = systemFontSize; + } + + fontSystem = new FreeTypeGX(loadedFont, loadedFontSize, loadedFont == systemFont); return result; } @@ -190,7 +277,11 @@ void Theme::ClearFontData() delete fontSystem; fontSystem = NULL; - if (MainFont) - delete [] MainFont; - MainFont = NULL; + if(customFont) + delete [] customFont; + customFont = NULL; + + if (systemFont) + delete [] systemFont; + systemFont = NULL; } diff --git a/source/themes/CTheme.h b/source/themes/CTheme.h index 5a7304ea..ecfe6aac 100644 --- a/source/themes/CTheme.h +++ b/source/themes/CTheme.h @@ -24,6 +24,8 @@ class Theme //!Enable tooltips: special case treaded because it is called every frame static bool ShowTooltips; private: + //!Load the original Wii System Menu font + static bool loadSystemFont(bool korean); //!Clear the font data and free the memory static void ClearFontData(); }; diff --git a/source/themes/filelist.h b/source/themes/filelist.h index d05fe8ac..c8c41261 100644 --- a/source/themes/filelist.h +++ b/source/themes/filelist.h @@ -1,7 +1,7 @@ /**************************************************************************** * USB Loader GX resource files. * This file is generated automatically. - * Includes 189 files. + * Includes 188 files. * * NOTE: * Any manual modification of this file will be overwriten by the generation. @@ -575,9 +575,6 @@ extern const u32 success_ogg_size; extern const u8 clock_ttf[]; extern const u32 clock_ttf_size; -extern const u8 font_ttf[]; -extern const u32 font_ttf_size; - RecourceFile Resources::RecourceFiles[] = { {"abcIcon.png", abcIcon_png, abcIcon_png_size, NULL, 0}, @@ -768,7 +765,6 @@ RecourceFile Resources::RecourceFiles[] = {"menuout.ogg", menuout_ogg, menuout_ogg_size, NULL, 0}, {"success.ogg", success_ogg, success_ogg_size, NULL, 0}, {"clock.ttf", clock_ttf, clock_ttf_size, NULL, 0}, - {"font.ttf", font_ttf, font_ttf_size, NULL, 0}, {NULL, NULL, 0, NULL, 0} }; diff --git a/source/usbloader/frag.c b/source/usbloader/frag.c index 700057f8..e03f1009 100644 --- a/source/usbloader/frag.c +++ b/source/usbloader/frag.c @@ -282,9 +282,9 @@ int set_frag_list(u8 *id) return ret; // verify id matches - char discid[8]; + char discid[32] ATTRIBUTE_ALIGN(32); memset(discid, 0, sizeof(discid)); - ret = WDVD_UnencryptedRead(discid, 8, 0); + ret = WDVD_UnencryptedRead(discid, 32, 0); gprintf("Reading ID after setting fraglist: %s (expected: %s)\n", discid, id); return (strncasecmp((char *) id, discid, 6) != 0) ? -3 : 0; } diff --git a/svnrev.sh b/svnrev.sh index 6dcd149d..ea571a3c 100644 --- a/svnrev.sh +++ b/svnrev.sh @@ -50,7 +50,7 @@ EOF --ios=250 --usbport=0 - --> // remove this line to enable arguments + // remove this line to enable arguments --> Loads games from USB-devices USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times.