From 940fa4b441d37621cc7fffb8a7b70db41a7c14d6 Mon Sep 17 00:00:00 2001 From: dimok321 <15055714+dimok789@users.noreply.github.com> Date: Fri, 12 Jun 2009 20:11:59 +0000 Subject: [PATCH] *Reverted cyrex changes to the settings *Added Japanese UnicodeFix made by Rudolph (thanks) (you still need to compile with a japanese font.ttf to have it work) *Added missing languagevariables issue 517, issue 515, issue 519 --- Makefile | 2 +- gui.pnproj | 2 +- gui.pnps | 2 +- source/FreeTypeGX.cpp | 27 +++++++------ source/PromptWindows.cpp | 2 +- source/Settings.cpp | 52 +++----------------------- source/SettingsPrompts.cpp | 2 +- source/cfg.c | 2 +- source/filelist.h | 6 --- source/gameinfo.cpp | 2 +- source/images/settings_background.png | Bin 5488 -> 12107 bytes source/images/settings_bottom.png | Bin 4542 -> 0 bytes source/images/settings_top.png | Bin 7825 -> 0 bytes source/{ => language}/CH2Unicode.c | 0 source/{ => language}/CH2Unicode.h | 0 source/{ => language}/GB2Unicode.c | 0 source/{ => language}/GB2Unicode.h | 0 source/{ => language}/language.c | 14 +++++++ source/{ => language}/language.h | 2 + source/language/sjis2unicode.h | 49 ++++++++++++++++++++++++ source/language/sjis2unicode.tbl | Bin 0 -> 131072 bytes source/language/sjis2unicode_tbl.s | 11 ++++++ source/main.cpp | 2 +- source/menu.cpp | 2 +- 24 files changed, 106 insertions(+), 73 deletions(-) delete mode 100644 source/images/settings_bottom.png delete mode 100644 source/images/settings_top.png rename source/{ => language}/CH2Unicode.c (100%) rename source/{ => language}/CH2Unicode.h (100%) rename source/{ => language}/GB2Unicode.c (100%) rename source/{ => language}/GB2Unicode.h (100%) rename source/{ => language}/language.c (96%) rename source/{ => language}/language.h (95%) create mode 100644 source/language/sjis2unicode.h create mode 100644 source/language/sjis2unicode.tbl create mode 100644 source/language/sjis2unicode_tbl.s diff --git a/Makefile b/Makefile index ae836047..4859eb3e 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ include $(DEVKITPPC)/wii_rules #--------------------------------------------------------------------------------- TARGET := boot BUILD := build -SOURCES := source source/libwiigui source/images source/fonts source/sounds source/libwbfs source/unzip +SOURCES := source source/libwiigui source/images source/fonts source/sounds source/libwbfs source/unzip source/language INCLUDES := source SVNDEV := -D'SVN_REV="$(shell svnversion -n ..)"' diff --git a/gui.pnproj b/gui.pnproj index 88d9a4a2..bef6d051 100644 --- a/gui.pnproj +++ b/gui.pnproj @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/gui.pnps b/gui.pnps index cab6d274..0538f749 100644 --- a/gui.pnps +++ b/gui.pnps @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/source/FreeTypeGX.cpp b/source/FreeTypeGX.cpp index a85d25e2..6381aa58 100644 --- a/source/FreeTypeGX.cpp +++ b/source/FreeTypeGX.cpp @@ -21,8 +21,9 @@ */ #include "FreeTypeGX.h" -#include "CH2Unicode.h" -#include "GB2Unicode.h" +#include "language/CH2Unicode.h" +#include "language/GB2Unicode.h" +#include "language/sjis2unicode.h" #include "main.h" #include "cfg.h" @@ -95,6 +96,8 @@ wchar_t* FreeTypeGX::charToWideChar(char* strChar) { CH2Unicode(strChar, strWChar); } else if(Settings.unicodefix == 2) { ConverGB2Unicode(strChar, strWChar); + } else if(Settings.unicodefix == 3) { + _sjis2unicode(strChar, strWChar); } else { char *tempSrc = strChar; wchar_t *tempDest = strWChar; @@ -443,11 +446,11 @@ int16_t FreeTypeGX::getStyleOffsetWidth(uint16_t width, uint16_t format) { { case FTGX_JUSTIFY_LEFT: return 0; - + default: case FTGX_JUSTIFY_CENTER: return -(width >> 1); - + case FTGX_JUSTIFY_RIGHT: return -width; } @@ -469,23 +472,23 @@ int16_t FreeTypeGX::getStyleOffsetHeight(ftgxDataOffset *offset, uint16_t format { case FTGX_ALIGN_TOP: return offset->ascender; - + default: case FTGX_ALIGN_MIDDLE: return (offset->ascender + offset->descender + 1) >> 1; - + case FTGX_ALIGN_BOTTOM: return offset->descender; - + case FTGX_ALIGN_BASELINE: return 0; - + case FTGX_ALIGN_GLYPH_TOP: return offset->max; - + case FTGX_ALIGN_GLYPH_MIDDLE: return (offset->max + offset->min + 1) >> 1; - + case FTGX_ALIGN_GLYPH_BOTTOM: return offset->min; } @@ -679,8 +682,8 @@ uint16_t FreeTypeGX::getHeight(wchar_t const *text) { * pixel height below the font origin line and returns the values in an addressible structure. * * @param text NULL terminated string to calculate. - * @param offset returns the max and min values above and below the font origin line - * + * @param offset returns the max and min values above and below the font origin line + * */ ftgxDataOffset* FreeTypeGX::getOffset(wchar_t *text, ftgxDataOffset* offset) { uint16_t strLength = wcslen(text); diff --git a/source/PromptWindows.cpp b/source/PromptWindows.cpp index 31032e19..41ca7d41 100644 --- a/source/PromptWindows.cpp +++ b/source/PromptWindows.cpp @@ -11,7 +11,7 @@ #include "wpad.h" #include "wbfs.h" #include "wdvd.h" -#include "language.h" +#include "language/language.h" #include "libwiigui/gui.h" #include "libwiigui/gui_diskcover.h" #include "fatmounter.h" diff --git a/source/Settings.cpp b/source/Settings.cpp index 89e9a2a7..e951d68a 100644 --- a/source/Settings.cpp +++ b/source/Settings.cpp @@ -5,7 +5,7 @@ #include "filelist.h" #include "sys.h" #include "wbfs.h" -#include "language.h" +#include "language/language.h" #include "libwiigui/gui.h" #include "libwiigui/gui_customoptionbrowser.h" #include "fatmounter.h" @@ -51,13 +51,6 @@ int MenuSettings() GuiSound btnClick1(button_click_pcm, button_click_pcm_size, SOUND_PCM, Settings.sfxvolume); char imgPath[100]; - - snprintf(imgPath, sizeof(imgPath), "%ssettings_top.png", CFG.theme_path); - GuiImageData settingsTop(imgPath, settings_top_png); - - snprintf(imgPath, sizeof(imgPath), "%ssettings_bottom.png", CFG.theme_path); - GuiImageData settingsBottom(imgPath, settings_bottom_png); - snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); GuiImageData btnOutline(imgPath, button_dialogue_box_png); @@ -87,14 +80,6 @@ int MenuSettings() GuiImage creditsImg(&creditsImgData); GuiImage creditsImgOver(&creditsOver); - - GuiImage settingsTopImg(&settingsTop); - settingsTopImg.SetAlignment(ALIGN_LEFT, ALIGN_TOP); - settingsTopImg.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 35); - - GuiImage settingsBottomImg(&settingsBottom); - settingsBottomImg.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - settingsBottomImg.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_IN, 35); GuiTrigger trigA; trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); @@ -114,7 +99,6 @@ int MenuSettings() GuiText titleTxt(LANGUAGE.settings, 28, (GXColor){0, 0, 0, 255}); titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); titleTxt.SetPosition(0,40); - titleTxt.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 35); GuiImage settingsbackground(&settingsbg); @@ -128,7 +112,6 @@ int MenuSettings() GuiButton backBtn(&backBtnImg,&backBtnImg, 2, 3, -180, 400, &trigA, &btnSoundOver, &btnClick,1); backBtn.SetLabel(&backBtnTxt); backBtn.SetTrigger(&trigB); - backBtn.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_IN, 35); GuiButton homo(1,1); homo.SetTrigger(&trigHome); @@ -296,8 +279,6 @@ int MenuSettings() mainWindow->Append(&w); w.RemoveAll(); w.Append(&settingsbackground); - w.Append(&settingsTopImg); - w.Append(&settingsBottomImg); w.Append(&PageIndicatorBtn1); w.Append(&PageIndicatorBtn2); w.Append(&titleTxt); @@ -397,8 +378,6 @@ int MenuSettings() mainWindow->Append(&w); w.RemoveAll(); w.Append(&settingsbackground); - w.Append(&settingsTopImg); - w.Append(&settingsBottomImg); w.Append(&PageIndicatorBtn1); w.Append(&PageIndicatorBtn2); w.Append(&titleTxt); @@ -532,7 +511,7 @@ int MenuSettings() Settings.wiilight = 0; if(Settings.rumble >= settings_rumble_max) Settings.rumble = 0; //RUMBLE - if ( Settings.unicodefix > 2 ) + if ( Settings.unicodefix > 3 ) Settings.unicodefix = 0; if(Settings.titlesOverride >= 2) Settings.titlesOverride = 0; @@ -577,6 +556,7 @@ int MenuSettings() if (Settings.unicodefix == 0) options2.SetValue(9,"%s",LANGUAGE.OFF); else if (Settings.unicodefix == 1) options2.SetValue(9,"%s",LANGUAGE.TChinese); else if (Settings.unicodefix == 2) options2.SetValue(9,"%s",LANGUAGE.SChinese); + else if (Settings.unicodefix == 3) options2.SetValue(9,"%s",LANGUAGE.Japanese); if (Settings.titlesOverride == 0) options2.SetValue(10,"%s",LANGUAGE.OFF); else if (Settings.titlesOverride == 1) options2.SetValue(10,"%s",LANGUAGE.ON); @@ -887,8 +867,8 @@ int MenuSettings() titleTxt.SetText(LANGUAGE.Parentalcontrol); exit = false; for(int i = 0; i <= MAXOPTIONS; i++) options2.SetName(i, NULL); - options2.SetName(0, "Console"); - options2.SetName(1, "%s", LANGUAGE.Password); + options2.SetName(0, "%s",LANGUAGE.Console); + options2.SetName(1, "%s",LANGUAGE.Password); options2.SetName(2, "%s",LANGUAGE.Controllevel); for(int i = 0; i <= MAXOPTIONS; i++) options2.SetValue(i, NULL); w.Append(&optionBrowser2); @@ -1683,19 +1663,13 @@ int GameSettings(struct discHdr * header) options3.SetName(3, "Ocarina"); options3.SetName(4, "IOS"); options3.SetName(5,"%s", LANGUAGE.Parentalcontrol); - options3.SetName(6,"%s", "Error 002 fix"); + options3.SetName(6,"%s", LANGUAGE.Error002fix); options3.SetName(7,"%s", LANGUAGE.Defaultgamesettings); GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, Settings.sfxvolume); GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, Settings.sfxvolume); char imgPath[100]; - - snprintf(imgPath, sizeof(imgPath), "%ssettings_top.png", CFG.theme_path); - GuiImageData settingsTop(imgPath, settings_top_png); - - snprintf(imgPath, sizeof(imgPath), "%ssettings_bottom.png", CFG.theme_path); - GuiImageData settingsBottom(imgPath, settings_bottom_png); snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); GuiImageData btnOutline(imgPath, button_dialogue_box_png); @@ -1713,21 +1687,12 @@ int GameSettings(struct discHdr * header) titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); titleTxt.SetPosition(12,40); titleTxt.SetMaxWidth(356, GuiText::SCROLL); - titleTxt.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 35); GuiImage settingsbackground(&settingsbg); GuiButton settingsbackgroundbtn(settingsbackground.GetWidth(), settingsbackground.GetHeight()); settingsbackgroundbtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP); settingsbackgroundbtn.SetPosition(0, 0); settingsbackgroundbtn.SetImage(&settingsbackground); - - GuiImage settingsTopImg(&settingsTop); - settingsTopImg.SetAlignment(ALIGN_LEFT, ALIGN_TOP); - settingsTopImg.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 35); - - GuiImage settingsBottomImg(&settingsBottom); - settingsBottomImg.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - settingsBottomImg.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_IN, 35); GuiText saveBtnTxt(LANGUAGE.Save, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); saveBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); @@ -1738,7 +1703,6 @@ int GameSettings(struct discHdr * header) GuiButton saveBtn(&saveBtnImg,&saveBtnImg, 2, 3, -180, 400, &trigA, &btnSoundOver, &btnClick,1); saveBtn.SetScale(0.9); saveBtn.SetLabel(&saveBtnTxt); - saveBtn.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_IN, 35); GuiText cancelBtnTxt(LANGUAGE.Back, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); cancelBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); @@ -1750,7 +1714,6 @@ int GameSettings(struct discHdr * header) cancelBtn.SetScale(0.9); cancelBtn.SetLabel(&cancelBtnTxt); cancelBtn.SetTrigger(&trigB); - cancelBtn.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_IN, 35); GuiText deleteBtnTxt(LANGUAGE.Uninstall, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); deleteBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); @@ -1761,7 +1724,6 @@ int GameSettings(struct discHdr * header) GuiButton deleteBtn(&deleteBtnImg,&deleteBtnImg, 2, 3, 0, 400, &trigA, &btnSoundOver, &btnClick,1); deleteBtn.SetScale(0.9); deleteBtn.SetLabel(&deleteBtnTxt); - deleteBtn.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_IN, 35); GuiCustomOptionBrowser optionBrowser3(396, 280, &options3, CFG.theme_path, "bg_options_gamesettings.png", bg_options_settings_png, 0, 200); optionBrowser3.SetPosition(0, 90); @@ -1770,8 +1732,6 @@ int GameSettings(struct discHdr * header) HaltGui(); GuiWindow w(screenwidth, screenheight); w.Append(&settingsbackgroundbtn); - w.Append(&settingsTopImg); - w.Append(&settingsBottomImg); w.Append(&titleTxt); w.Append(&deleteBtn); w.Append(&saveBtn); diff --git a/source/SettingsPrompts.cpp b/source/SettingsPrompts.cpp index 0637f21d..5d6f2c63 100644 --- a/source/SettingsPrompts.cpp +++ b/source/SettingsPrompts.cpp @@ -4,7 +4,7 @@ #include "filelist.h" #include "sys.h" -#include "language.h" +#include "language/language.h" #include "libwiigui/gui.h" #include "libwiigui/gui_customoptionbrowser.h" #include "listfiles.h" diff --git a/source/cfg.c b/source/cfg.c index 4dec0568..97988b32 100644 --- a/source/cfg.c +++ b/source/cfg.c @@ -7,7 +7,7 @@ #include #include #include "cfg.h" -#include "language.h" +#include "language/language.h" #include "xml.h" /* XML - Lustar*/ diff --git a/source/filelist.h b/source/filelist.h index 9a64b92d..4b057c8e 100644 --- a/source/filelist.h +++ b/source/filelist.h @@ -11,12 +11,6 @@ #include -extern const u8 settings_top_png[]; -extern const u32 settings_top_png_size; - -extern const u8 settings_bottom_png[]; -extern const u32 settings_bottom_png_size; - extern const u8 font_ttf[]; extern const u32 font_ttf_size; diff --git a/source/gameinfo.cpp b/source/gameinfo.cpp index 51075be3..6ebb77c7 100644 --- a/source/gameinfo.cpp +++ b/source/gameinfo.cpp @@ -13,7 +13,7 @@ #include "sys.h" #include "wpad.h" #include "wbfs.h" -#include "language.h" +#include "language/language.h" #include "libwiigui/gui.h" #include "fatmounter.h" #include "listfiles.h" diff --git a/source/images/settings_background.png b/source/images/settings_background.png index b59eaf92de51eb9cb51aaf4b0435356505a1339a..02ed90db1fbde0dc827667386ca8e08b531de713 100644 GIT binary patch delta 9441 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 NIB$Ng{EX|b{{eDeU8ev5 delta 2768 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 S(cA)OEilwI)xl~xJo-P&5=d?U diff --git a/source/images/settings_top.png b/source/images/settings_top.png deleted file mode 100644 index b71b2ff49c1b605353abdfb827f58ffc72006909..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7825 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 UNICODE +// 2009/05/02 by Rudolph +//////////////////////////////////////////// + +extern const u8 sjis2unicode_tbl[]; + +static bool _isKanji1(wchar_t ch) +{ + if((ch >= (wchar_t)0x81) && (ch <= (wchar_t)0x9F)) + return true; + if((ch >= (wchar_t)0xE0) && (ch <= (wchar_t)0xEF)) + return true; + if((ch >= (wchar_t)0xFA) && (ch <= (wchar_t)0xFB)) // JIS X 0218他 IBM拡張文字 (0xFA40-0xFC4B) + return true; + return false; +} + +static void _sjis2unicode(char *src, wchar_t *dest) +{ + wchar_t lc = 0; + int bt; + + + bt = mbstowcs(dest, src, strlen(src)); // UTF-8 to UTF-16 + if(bt > 0) { + dest[bt] = (wchar_t)'\0'; + return; + } + + while(*src) { + lc = (wchar_t)*src; + src++; + + if(_isKanji1(lc) && *src) { + lc = (lc << 8) + ((wchar_t)*src); + src++; + } + + if(lc < ((wchar_t)(sjis2unicode_tbl[3]) << 8) + (wchar_t)(sjis2unicode_tbl[2])) { + *dest = (((wchar_t)(sjis2unicode_tbl[lc*2+5]) << 8)) + (wchar_t)(sjis2unicode_tbl[lc*2+4]); + if(*dest == (wchar_t)'\0') + *dest = (wchar_t)'?'; + } else *dest = (wchar_t)'?'; + dest++; + } + *dest = (wchar_t)'\0'; + return; +} diff --git a/source/language/sjis2unicode.tbl b/source/language/sjis2unicode.tbl new file mode 100644 index 0000000000000000000000000000000000000000..434eb7b449fea17f3366e7a2e6ea5dcba54732d7 GIT binary patch literal 131072 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 UNICODE 変換テーブル指定 by Rudolph + + .rodata + + .globl sjis2unicode_tbl + + .balign 32 + +sjis2unicode_tbl: + .incbin "../source/language/sjis2unicode.tbl" + diff --git a/source/main.cpp b/source/main.cpp index 8fe4ea7d..f4704d73 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -32,7 +32,7 @@ #include "video2.h" #include "wpad.h" #include "cfg.h" -#include "language.h" +#include "language/language.h" #include "fat.h" #include "mload.h" diff --git a/source/menu.cpp b/source/menu.cpp index b5cfc650..0fa48f68 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -25,7 +25,7 @@ #include "sys.h" #include "patchcode.h" #include "wpad.h" -#include "language.h" +#include "language/language.h" #include "listfiles.h" #include "fatmounter.h" #include "getentries.h"