mirror of
https://github.com/GTAmodding/re3.git
synced 2024-12-24 17:45:40 +00:00
Fixes
This commit is contained in:
parent
f0890b1112
commit
fe353a7cc9
10 changed files with 2353 additions and 2682 deletions
|
@ -1390,7 +1390,7 @@ void CGarages::PrintMessages()
|
|||
CFont::SetBackgroundOff();
|
||||
CFont::SetCentreSize(SCREEN_SCALE_FROM_RIGHT(50.0f));
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
CFont::SetColor(CRGBA(0, 0, 0, 255));
|
||||
|
||||
#if defined(PS2) || defined (FIX_BUGS)
|
||||
|
|
|
@ -110,7 +110,7 @@ int8 CMenuManager::m_bFrontEnd_ReloadObrTxtGxt;
|
|||
int32 CMenuManager::m_PrefsMusicVolume = 102;
|
||||
int32 CMenuManager::m_PrefsSfxVolume = 102;
|
||||
|
||||
char CMenuManager::m_PrefsSkinFile[256] = "$$\"\"";
|
||||
char CMenuManager::m_PrefsSkinFile[256] = DEFAULT_SKIN_NAME;
|
||||
|
||||
int32 CMenuManager::m_KeyPressedCode = -1;
|
||||
|
||||
|
@ -286,7 +286,7 @@ ScaleAndCenterX(float x)
|
|||
CFont::SetColor(CRGBA(0, 0, 0, FadeIn(255))); \
|
||||
CFont::SetRightJustifyOn(); \
|
||||
CFont::SetScale(MENU_X(MENUHEADER_WIDTH), MENU_Y(MENUHEADER_HEIGHT)); \
|
||||
CFont::SetFontStyle(FONT_HEADING);
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
|
||||
#define ProcessSlider(value, increaseAction, decreaseAction, hoverStartX, hoverEndX) \
|
||||
do { \
|
||||
|
@ -596,7 +596,7 @@ CMenuManager::DisplayHelperText()
|
|||
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetScale(SCREEN_SCALE_X(SMALLESTTEXT_X_SCALE), SCREEN_SCALE_Y(SMALLESTTEXT_Y_SCALE));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
|
||||
// TODO: name this cases?
|
||||
switch (m_nHelperTextMsgId) {
|
||||
|
@ -732,7 +732,7 @@ CMenuManager::Draw()
|
|||
nextYToUse += 24.0f + 10.0f;
|
||||
}
|
||||
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
CFont::SetScale(MENU_X(MENUACTION_SCALE_MULT * MENU_TEXT_SIZE_X), MENU_Y(MENUACTION_SCALE_MULT * MENU_TEXT_SIZE_Y));
|
||||
CFont::SetRightJustifyOff();
|
||||
CFont::SetColor(CRGBA(235, 170, 50, FadeIn(255)));
|
||||
|
@ -788,7 +788,7 @@ CMenuManager::Draw()
|
|||
columnWidth = 320;
|
||||
headerHeight = 240;
|
||||
lineHeight = 24;
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X = BIGTEXT_X_SCALE), MENU_Y(MENU_TEXT_SIZE_Y = BIGTEXT_Y_SCALE));
|
||||
CFont::SetCentreOn();
|
||||
break;
|
||||
|
@ -805,7 +805,7 @@ CMenuManager::Draw()
|
|||
columnWidth = 50;
|
||||
headerHeight = 0;
|
||||
lineHeight = 20;
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X = MEDIUMTEXT_X_SCALE), MENU_Y(MENU_TEXT_SIZE_Y = MEDIUMTEXT_Y_SCALE));
|
||||
CFont::SetRightJustifyOff();
|
||||
break;
|
||||
|
@ -815,7 +815,7 @@ CMenuManager::Draw()
|
|||
columnWidth = 120;
|
||||
headerHeight = 38;
|
||||
lineHeight = 20;
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X = SMALLTEXT_X_SCALE), MENU_Y(MENU_TEXT_SIZE_Y = SMALLTEXT_Y_SCALE));
|
||||
CFont::SetRightJustifyOff();
|
||||
break;
|
||||
|
@ -827,7 +827,7 @@ CMenuManager::Draw()
|
|||
columnWidth = 320;
|
||||
headerHeight = 60;
|
||||
lineHeight = 24;
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X = BIGTEXT_X_SCALE), MENU_Y(MENU_TEXT_SIZE_Y = BIGTEXT_Y_SCALE));
|
||||
CFont::SetCentreOn();
|
||||
break;
|
||||
|
@ -835,7 +835,7 @@ CMenuManager::Draw()
|
|||
columnWidth = 320;
|
||||
headerHeight = 140;
|
||||
lineHeight = 24;
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X = BIGTEXT_X_SCALE), MENU_Y(MENU_TEXT_SIZE_Y = BIGTEXT_Y_SCALE));
|
||||
CFont::SetCentreOn();
|
||||
break;
|
||||
|
@ -843,7 +843,7 @@ CMenuManager::Draw()
|
|||
columnWidth = 320;
|
||||
headerHeight = 117;
|
||||
lineHeight = 24;
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X = BIGTEXT_X_SCALE), MENU_Y(MENU_TEXT_SIZE_Y = BIGTEXT_Y_SCALE));
|
||||
CFont::SetCentreOn();
|
||||
break;
|
||||
|
@ -852,7 +852,7 @@ CMenuManager::Draw()
|
|||
columnWidth = 180;
|
||||
headerHeight = 60;
|
||||
lineHeight = 24;
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X = BIGTEXT_X_SCALE), MENU_Y(MENU_TEXT_SIZE_Y = BIGTEXT_Y_SCALE));
|
||||
break;
|
||||
#endif
|
||||
|
@ -860,14 +860,14 @@ CMenuManager::Draw()
|
|||
columnWidth = 320;
|
||||
headerHeight = 40;
|
||||
lineHeight = 24;
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X = BIGTEXT_X_SCALE), MENU_Y(MENU_TEXT_SIZE_Y = BIGTEXT_Y_SCALE));
|
||||
CFont::SetCentreOn();
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef PS2_LIKE_MENU
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
#endif
|
||||
|
||||
switch (m_nCurrScreen) {
|
||||
|
@ -1580,7 +1580,12 @@ CMenuManager::DrawControllerBound(int32 yStart, int32 xStart, int32 unused, int8
|
|||
nextX += CFont::GetStringWidth(seperator, true) + bindingMargin;
|
||||
}
|
||||
CFont::PrintString(nextX, nextY, settingText);
|
||||
nextX += CFont::GetStringWidth(settingText, true) + bindingMargin;
|
||||
#ifdef MORE_LANGUAGES
|
||||
if (CFont::IsJapanese())
|
||||
nextX += CFont::GetStringWidth_Jap(settingText) + bindingMargin;
|
||||
else
|
||||
#endif
|
||||
nextX += CFont::GetStringWidth(settingText, true) + bindingMargin;
|
||||
}
|
||||
}
|
||||
if (controllerAction == -1) {
|
||||
|
@ -1629,7 +1634,7 @@ CMenuManager::DrawControllerBound(int32 yStart, int32 xStart, int32 unused, int8
|
|||
}
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetColor(CRGBA(255, 255, 255, FadeIn(255)));
|
||||
if (m_bKeyChangeNotProcessed) {
|
||||
CFont::PrintString(MENU_X_LEFT_ALIGNED(275.0f), SCREEN_SCALE_FROM_BOTTOM(114.0f), TheText.Get("FET_CIG")); // BACKSPACE TO CLEAR - LMB,RETURN TO CHANGE
|
||||
|
@ -1639,7 +1644,7 @@ CMenuManager::DrawControllerBound(int32 yStart, int32 xStart, int32 unused, int8
|
|||
|
||||
CFont::SetRightJustifyOff();
|
||||
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
if (!m_bKeyIsOK)
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SUCCESS, 0);
|
||||
|
||||
|
@ -1647,24 +1652,24 @@ CMenuManager::DrawControllerBound(int32 yStart, int32 xStart, int32 unused, int8
|
|||
} else {
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetColor(CRGBA(255, 255, 255, FadeIn(255)));
|
||||
CFont::PrintString(MENU_X_LEFT_ALIGNED(275.0f), SCREEN_SCALE_FROM_BOTTOM(114.0f), TheText.Get("FET_CIG")); // BACKSPACE TO CLEAR - LMB,RETURN TO CHANGE
|
||||
CFont::SetRightJustifyOff();
|
||||
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
m_bKeyIsOK = false;
|
||||
m_bKeyChangeNotProcessed = false;
|
||||
}
|
||||
} else if (optionIdx == m_nSelectedListRow) {
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetColor(CRGBA(55, 55, 55, FadeIn(255)));
|
||||
CFont::PrintString(MENU_X_LEFT_ALIGNED(275.0f), SCREEN_SCALE_FROM_BOTTOM(114.0f), TheText.Get("FET_EIG")); // CANNOT SET A CONTROL FOR THIS ACTION
|
||||
CFont::SetRightJustifyOff();
|
||||
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1819,7 +1824,7 @@ CMenuManager::DrawControllerSetupScreen()
|
|||
CFont::SetColor(CRGBA(235, 170, 50, FadeIn(255)));
|
||||
|
||||
// List header
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetScale(MENU_X(MENUACTION_SCALE_MULT), MENU_Y(MENUACTION_SCALE_MULT));
|
||||
CFont::SetRightJustifyOff();
|
||||
CFont::PrintString(MENU_X_LEFT_ALIGNED(CONTSETUP_COLUMN_1_X), MENU_Y(CONTSETUP_LIST_TOP), TheText.Get("FET_CAC"));
|
||||
|
@ -1827,7 +1832,7 @@ CMenuManager::DrawControllerSetupScreen()
|
|||
CFont::PrintString(MENU_X_LEFT_ALIGNED(CONTSETUP_COLUMN_3_X), MENU_Y(CONTSETUP_LIST_TOP), TheText.Get("FET_CCR"));
|
||||
CFont::SetRightJustifyOff();
|
||||
CFont::SetScale(MENU_X_LEFT_ALIGNED(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
int yStart;
|
||||
if (m_ControlMethod == CONTROL_CLASSIC)
|
||||
yStart = CONTSETUP_LIST_HEADER_HEIGHT + 29;
|
||||
|
@ -1916,7 +1921,7 @@ CMenuManager::DrawControllerSetupScreen()
|
|||
}
|
||||
|
||||
// Back button and it's shadow
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X), MENU_Y(MENU_TEXT_SIZE_Y));
|
||||
CFont::SetRightJustifyOn();
|
||||
CFont::SetColor(CRGBA(0, 0, 0, FadeIn(90)));
|
||||
|
@ -2174,7 +2179,7 @@ CMenuManager::DrawFrontEndNormal()
|
|||
if (CheckHover(xStart, xStart + optionWidth, optionTop, optionBottom))
|
||||
hoveredBottomBarOption = i;
|
||||
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
CFont::SetScale(MENU_X(0.35f), MENU_Y(0.7f));
|
||||
CFont::SetRightJustifyOff();
|
||||
if (hoveredBottomBarOption == i && hoveredBottomBarOption != curBottomBarOption)
|
||||
|
@ -2442,7 +2447,7 @@ CMenuManager::DrawPlayerSetupScreen()
|
|||
m_pSelectedSkin->nextSkin = new tSkinInfo;
|
||||
m_pSelectedSkin = m_pSelectedSkin->nextSkin;
|
||||
m_pSelectedSkin->skinId = 0;
|
||||
strcpy(m_pSelectedSkin->skinNameOriginal, "$$\"\"");
|
||||
strcpy(m_pSelectedSkin->skinNameOriginal, DEFAULT_SKIN_NAME);
|
||||
strcpy(m_pSelectedSkin->skinNameDisplayed, UnicodeToAscii(TheText.Get("FET_DSN")));
|
||||
int nextSkinId = 1;
|
||||
m_pSelectedSkin->nextSkin = nil;
|
||||
|
@ -2451,7 +2456,7 @@ CMenuManager::DrawPlayerSetupScreen()
|
|||
SYSTEMTIME SystemTime;
|
||||
HANDLE handle = FindFirstFile("skins\\*.bmp", &FindFileData);
|
||||
for (int i = 1; handle != INVALID_HANDLE_VALUE && i; i = FindNextFile(handle, &FindFileData)) {
|
||||
if (strncmp(FindFileData.cFileName, "$$\"\"", 5) != 0) {
|
||||
if (strncmp(FindFileData.cFileName, DEFAULT_SKIN_NAME, 5) != 0) {
|
||||
m_pSelectedSkin->nextSkin = new tSkinInfo;
|
||||
m_pSelectedSkin = m_pSelectedSkin->nextSkin;
|
||||
m_pSelectedSkin->skinId = nextSkinId;
|
||||
|
@ -2525,7 +2530,7 @@ CMenuManager::DrawPlayerSetupScreen()
|
|||
} else {
|
||||
CFont::SetColor(CRGBA(235, 170, 50, FadeIn(255)));
|
||||
}
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetScale(MENU_X(MENUACTION_SCALE_MULT), MENU_Y(MENUACTION_SCALE_MULT));
|
||||
CFont::SetRightJustifyOn();
|
||||
CFont::PrintString(MENU_X_RIGHT_ALIGNED(PLAYERSETUP_DATE_COLUMN_RIGHT), MENU_Y(PLAYERSETUP_LIST_TOP), TheText.Get("FES_DAT"));
|
||||
|
@ -2544,7 +2549,7 @@ CMenuManager::DrawPlayerSetupScreen()
|
|||
// Skin list
|
||||
CFont::SetRightJustifyOff();
|
||||
CFont::SetScale(MENU_X(PLAYERSETUP_ROW_TEXT_X_SCALE), MENU_Y(PLAYERSETUP_ROW_TEXT_Y_SCALE));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
if (m_nSkinsTotal > 0) {
|
||||
for (m_pSelectedSkin = m_pSkinListHead.nextSkin; m_pSelectedSkin->skinId != m_nFirstVisibleRowOnList;
|
||||
m_pSelectedSkin = m_pSelectedSkin->nextSkin);
|
||||
|
@ -2698,7 +2703,7 @@ CMenuManager::DrawPlayerSetupScreen()
|
|||
|
||||
// Big apply button
|
||||
if (strcmp(m_aSkinName, m_PrefsSkinFile) != 0) {
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
switch (m_PrefsLanguage) {
|
||||
case LANGUAGE_FRENCH:
|
||||
CFont::SetScale(MENU_X(1.1f), MENU_Y(1.9f));
|
||||
|
@ -2718,7 +2723,7 @@ CMenuManager::DrawPlayerSetupScreen()
|
|||
CFont::SetRightJustifyOff();
|
||||
CFont::PrintString(MENU_X_LEFT_ALIGNED(20.0f), MENU_Y(220.0f), TheText.Get("FET_APL"));
|
||||
}
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
|
||||
CFont::SetScale(MENU_X(SMALLTEXT_X_SCALE), MENU_Y(SMALLTEXT_Y_SCALE));
|
||||
|
||||
|
@ -2796,7 +2801,7 @@ CMenuManager::DrawPlayerSetupScreen()
|
|||
m_nHoverOption = HOVEROPTION_NOT_HOVERING;
|
||||
}
|
||||
}
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetScale(MENU_X(SMALLTEXT_X_SCALE), MENU_Y(SMALLTEXT_Y_SCALE));
|
||||
CFont::SetRightJustifyOn();
|
||||
CFont::SetColor(CRGBA(0, 0, 0, FadeIn(90)));
|
||||
|
@ -2898,6 +2903,8 @@ CMenuManager::InitialiseChangedLanguageSettings()
|
|||
CGame::frenchGame = false;
|
||||
CGame::germanGame = false;
|
||||
#ifdef MORE_LANGUAGES
|
||||
CGame::russianGame = false;
|
||||
CGame::japaneseGame = false;
|
||||
switch (m_PrefsLanguage) {
|
||||
case LANGUAGE_POLISH:
|
||||
CFont::ReloadFonts(FONT_LANGSET_POLISH);
|
||||
|
@ -2922,16 +2929,17 @@ CMenuManager::InitialiseChangedLanguageSettings()
|
|||
CGame::germanGame = true;
|
||||
break;
|
||||
#ifdef MORE_LANGUAGES
|
||||
case LANGUAGE_POLISH:
|
||||
CGame::polishGame = true;
|
||||
break;
|
||||
case LANGUAGE_RUSSIAN:
|
||||
CGame::russianGame = true;
|
||||
break;
|
||||
case LANGUAGE_JAPANESE:
|
||||
CGame::japaneseGame = true;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
PcSaveHelper.PopulateSlotInfo();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3087,8 +3095,8 @@ CMenuManager::LoadSettings()
|
|||
|
||||
if (!SkinFound) {
|
||||
OutputDebugString("Default skin set as no other skins are available OR saved skin not found!");
|
||||
strcpy(m_PrefsSkinFile, "$$\"\"");
|
||||
strcpy(m_aSkinName, "$$\"\"");
|
||||
strcpy(m_PrefsSkinFile, DEFAULT_SKIN_NAME);
|
||||
strcpy(m_aSkinName, DEFAULT_SKIN_NAME);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3162,7 +3170,7 @@ CMenuManager::MessageScreen(const char *text)
|
|||
CFont::SetWrapx(SCREEN_SCALE_FROM_RIGHT(170.0f));
|
||||
CFont::SetRightJustifyWrap(SCREEN_SCALE_FROM_RIGHT(170.0f));
|
||||
CSprite2d::DrawRect(CRect(SCREEN_SCALE_X(120.0f), SCREEN_SCALE_Y(150.0f), SCREEN_SCALE_FROM_RIGHT(120.0f), SCREEN_SCALE_FROM_BOTTOM(220.0f)), CRGBA(50, 50, 50, 210));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
CFont::SetCentreSize(SCREEN_SCALE_X(380.0f));
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetColor(CRGBA(255, 217, 106, 255));
|
||||
|
@ -3192,7 +3200,7 @@ void
|
|||
CMenuManager::PrintBriefs()
|
||||
{
|
||||
CFont::SetColor(CRGBA(235, 170, 50, FadeIn(255)));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
CFont::SetRightJustifyOff();
|
||||
CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X * 0.7), MENU_Y(MENU_TEXT_SIZE_Y * 0.9)); // second mulipliers are double, idk why
|
||||
|
||||
|
@ -3247,7 +3255,7 @@ CMenuManager::PrintErrorMessage()
|
|||
return;
|
||||
|
||||
CSprite2d::DrawRect(CRect(SCREEN_SCALE_X(20.0f), SCREEN_SCALE_Y(140.0f), SCREEN_SCALE_FROM_RIGHT(20.0f), SCREEN_SCALE_FROM_BOTTOM(120.0f)), CRGBA(64, 16, 16, 224));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
CFont::SetBackgroundOff();
|
||||
CFont::SetPropOn();
|
||||
CFont::SetCentreOff();
|
||||
|
@ -5063,7 +5071,7 @@ CMenuManager::PrintController(void)
|
|||
m_aFrontEndSprites[FE_ARROWS4].Draw(MENU_X_LEFT_ALIGNED(160.0f), MENU_Y(160.0f), MENU_X(235.2f), MENU_Y(175.2f), CRGBA(255, 255, 255, 255));
|
||||
}
|
||||
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK)); // X
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); // X
|
||||
|
||||
// CFont::SetScale(0.4f, 0.4f);
|
||||
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE)); // X
|
||||
|
@ -5440,7 +5448,7 @@ CMenuManager::PrintMap(void)
|
|||
CRGBA(235, 170, 50, 255));
|
||||
|
||||
CFont::SetScale(MENU_X(0.4f), MENU_Y(0.7f));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
CFont::SetColor(CRGBA(0, 0, 0, FadeIn(255)));
|
||||
|
||||
float nextX = MENU_X(30.0f), nextY = 95.0f;
|
||||
|
|
|
@ -97,8 +97,8 @@ bool CGame::noProstitutes;
|
|||
bool CGame::playingIntro;
|
||||
char CGame::aDatFile[32];
|
||||
#ifdef MORE_LANGUAGES
|
||||
bool CGame::polishGame = false;
|
||||
bool CGame::russianGame = false;
|
||||
bool CGame::japaneseGame = false;
|
||||
#endif
|
||||
|
||||
int gameTxdSlot;
|
||||
|
|
|
@ -17,8 +17,8 @@ public:
|
|||
static bool frenchGame;
|
||||
static bool germanGame;
|
||||
#ifdef MORE_LANGUAGES
|
||||
static bool polishGame;
|
||||
static bool russianGame;
|
||||
static bool japaneseGame;
|
||||
#endif
|
||||
static bool noProstitutes;
|
||||
static bool playingIntro;
|
||||
|
|
2599
src/render/Font.cpp
2599
src/render/Font.cpp
File diff suppressed because it is too large
Load diff
|
@ -49,25 +49,23 @@ enum
|
|||
FONT_LANGSET_EFIGS,
|
||||
FONT_LANGSET_RUSSIAN,
|
||||
FONT_LANGSET_POLISH,
|
||||
FONT_LANGSET_JAPANESE
|
||||
FONT_LANGSET_JAPANESE,
|
||||
LANGSET_MAX
|
||||
};
|
||||
#endif
|
||||
|
||||
#define FONTJAP(style) (CFont::LanguageSet == FONT_LANGSET_JAPANESE ? FONT_JAPANESE : style)
|
||||
#define FONT_LOCALE(style) (CFont::IsJapanese() ? FONT_JAPANESE : style)
|
||||
#else
|
||||
#define FONT_LOCALE(style) (style)
|
||||
#endif
|
||||
|
||||
class CFont
|
||||
{
|
||||
#ifdef MORE_LANGUAGES
|
||||
static int16 Size[LANGSET_MAX][MAX_FONTS][193];
|
||||
public:
|
||||
static uint8 LanguageSet;
|
||||
private:
|
||||
static int32 Slot;
|
||||
static CSprite2d Sprite[4];
|
||||
#else
|
||||
static int16 Size[MAX_FONTS][193];
|
||||
static CSprite2d* Sprite; //[3]
|
||||
#endif
|
||||
static int16 NewLine;
|
||||
static CSprite2d Sprite[MAX_FONTS];
|
||||
|
@ -89,6 +87,9 @@ public:
|
|||
static float GetCharacterWidth(wchar c);
|
||||
static float GetCharacterSize(wchar c);
|
||||
static float GetStringWidth(wchar *s, bool spaces = false);
|
||||
#ifdef MORE_LANGUAGES
|
||||
static float GetStringWidth_Jap(wchar* s);
|
||||
#endif
|
||||
static uint16 *GetNextSpace(wchar *s);
|
||||
#ifdef MORE_LANGUAGES
|
||||
static uint16 *ParseToken(wchar *s, wchar*, bool japShit = false);
|
||||
|
@ -158,16 +159,16 @@ public:
|
|||
static void SetRightJustifyWrap(float wrap) { Details.rightJustifyWrap = wrap; }
|
||||
static void SetAlphaFade(float fade) { Details.alphaFade = fade; }
|
||||
static void SetDropShadowPosition(int16 pos) { Details.dropShadowPosition = pos; }
|
||||
static void SetBackgroundColor(const CRGBA &col);
|
||||
static void SetColor(const CRGBA &col);
|
||||
static void SetDropColor(const CRGBA &col);
|
||||
static void SetBackgroundColor(CRGBA col);
|
||||
static void SetColor(CRGBA col);
|
||||
static void SetDropColor(CRGBA col);
|
||||
|
||||
#ifdef MORE_LANGUAGES
|
||||
static void ReloadFonts(uint8 set);
|
||||
|
||||
// japanese stuff
|
||||
static bool IsAnsiCharacter(wchar* s);
|
||||
static bool IsJapanesePunctuation(wchar* a1);
|
||||
static bool IsJapanesePunctuation(wchar* str);
|
||||
static bool IsJapanese() { return LanguageSet == FONT_LANGSET_JAPANESE; }
|
||||
static bool IsJapaneseFont() { return IsJapanese() && (Details.style == FONT_JAPANESE || Details.style == FONT_PAGER); }
|
||||
#endif
|
||||
|
|
|
@ -660,7 +660,7 @@ void CHud::Draw()
|
|||
CFont::SetScale(SCREEN_SCALE_X(0.8f), SCREEN_SCALE_Y(1.35f));
|
||||
CFont::SetRightJustifyOn();
|
||||
CFont::SetRightJustifyWrap(0.0f);
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetPropOff();
|
||||
CFont::SetBackGroundOnlyTextOn();
|
||||
CFont::SetColor(CRGBA(0, 0, 0, 255));
|
||||
|
@ -701,7 +701,7 @@ void CHud::Draw()
|
|||
CFont::SetCentreOff();
|
||||
CFont::SetRightJustifyOn();
|
||||
CFont::SetRightJustifyWrap(0.0f);
|
||||
CFont::SetFontStyle(FONTJAP(FONT_HEADING));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetColor(CRGBA(244, 20, 20, 255));
|
||||
CFont::SetWrapx(SCREEN_SCALE_X(640.0f));
|
||||
CFont::SetPropOff();
|
||||
|
@ -852,7 +852,7 @@ void CHud::Draw()
|
|||
else
|
||||
CFont::SetPropOff();
|
||||
|
||||
CFont::SetFontStyle(FONTJAP(CTheScripts::IntroTextLines[i].m_nFont));
|
||||
CFont::SetFontStyle(FONT_LOCALE(CTheScripts::IntroTextLines[i].m_nFont));
|
||||
CFont::PrintString(SCREEN_SCALE_X(DEFAULT_SCREEN_WIDTH - CTheScripts::IntroTextLines[i].m_fAtX), SCREEN_SCALE_Y(DEFAULT_SCREEN_HEIGHT - CTheScripts::IntroTextLines[i].m_fAtY), CTheScripts::IntroTextLines[i].m_Text);
|
||||
}
|
||||
}
|
||||
|
@ -892,7 +892,7 @@ void CHud::Draw()
|
|||
CFont::SetScale(SCREEN_SCALE_X(0.48f), SCREEN_SCALE_Y(1.120f));
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetPropOn();
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
|
||||
float offsetX = SCREEN_SCALE_X(40.0f) + SCREEN_SCALE_X(8.0f);
|
||||
float center = SCREEN_SCALE_FROM_RIGHT(50.0f) - SCREEN_SCALE_X(8.0f) - offsetX;
|
||||
|
@ -1080,18 +1080,22 @@ void CHud::DrawAfterFade()
|
|||
|
||||
if (CGame::germanGame)
|
||||
CFont::SetScale(SCREEN_SCALE_X(0.52f * 0.85f), SCREEN_SCALE_Y(1.1f * 0.85f));
|
||||
else if (CFont::LanguageSet == FONT_LANGSET_JAPANESE)
|
||||
#ifdef MORE_LANGUAGES
|
||||
else if (CFont::IsJapanese())
|
||||
CFont::SetScale(SCREEN_SCALE_X(0.52f) * 1.35f, SCREEN_SCALE_Y(1.1f) * 1.25f);
|
||||
#endif
|
||||
else
|
||||
CFont::SetScale(SCREEN_SCALE_X(0.52f), SCREEN_SCALE_Y(1.1f));
|
||||
|
||||
CFont::SetColor(CRGBA(175, 175, 175, 255));
|
||||
CFont::SetJustifyOff();
|
||||
if (CFont::LanguageSet == FONT_LANGSET_JAPANESE)
|
||||
#ifdef MORE_LANGUAGES
|
||||
if (CFont::IsJapanese())
|
||||
CFont::SetWrapx(SCREEN_SCALE_X(229.0f + 26.0f - 4.0f));
|
||||
else
|
||||
#endif
|
||||
CFont::SetWrapx(SCREEN_SCALE_X(200.0f + 26.0f - 4.0f));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
CFont::SetBackgroundOn();
|
||||
CFont::SetBackGroundOnlyTextOff();
|
||||
CFont::SetBackgroundColor(CRGBA(0, 0, 0, fAlpha * 0.9f));
|
||||
|
@ -1169,7 +1173,7 @@ void CHud::DrawAfterFade()
|
|||
CFont::SetCentreOn();
|
||||
CFont::SetPropOn();
|
||||
CFont::SetCentreSize(SCREEN_SCALE_X(600.0f));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
|
||||
CFont::SetColor(CRGBA(0, 0, 0, 255));
|
||||
CFont::PrintString((SCREEN_WIDTH / 2) + SCREEN_SCALE_X(2.0f), (SCREEN_HEIGHT / 2) - SCREEN_SCALE_Y(84.0f) + SCREEN_SCALE_Y(2.0f), m_BigMessage[3]);
|
||||
|
@ -1186,7 +1190,7 @@ void CHud::DrawAfterFade()
|
|||
CFont::SetPropOn();
|
||||
CFont::SetCentreSize(SCREEN_SCALE_X(620.0f));
|
||||
CFont::SetColor(CRGBA(0, 0, 0, 255));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
|
||||
CFont::PrintString((SCREEN_WIDTH / 2) - SCREEN_SCALE_X(2.0f), (SCREEN_HEIGHT / 2) - SCREEN_SCALE_Y(84.0f) - SCREEN_SCALE_Y(2.0f), m_BigMessage[4]);
|
||||
|
||||
|
@ -1243,7 +1247,7 @@ void CHud::DrawAfterFade()
|
|||
CFont::SetPropOn();
|
||||
CFont::SetCentreSize(SCREEN_SCALE_FROM_RIGHT(20.0f));
|
||||
CFont::SetColor(CRGBA(0, 0, 0, 255));
|
||||
CFont::SetFontStyle(FONTJAP(FONT_BANK));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
|
||||
|
||||
#ifdef BETA_SLIDING_TEXT
|
||||
CFont::PrintString(SCREEN_WIDTH / 2 + SCREEN_SCALE_X(2.0f) - SCREEN_SCALE_X(OddJob2XOffset), SCREEN_HEIGHT / 2 - SCREEN_SCALE_Y(20.0f) + SCREEN_SCALE_Y(2.0f), m_BigMessage[5]);
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
#include "crossplatform.h"
|
||||
|
||||
#include "FileMgr.h"
|
||||
#ifdef MORE_LANGUAGES
|
||||
#include "Game.h"
|
||||
#endif
|
||||
#include "GenericGameStorage.h"
|
||||
#include "Messages.h"
|
||||
#include "PCSave.h"
|
||||
|
@ -131,7 +134,12 @@ C_PcSave::PopulateSlotInfo()
|
|||
default: assert(0);
|
||||
}
|
||||
char date[70];
|
||||
sprintf(date, "%02d %s %04d %02d:%02d:%02d", st.wDay, UnicodeToAsciiForSaveLoad(TheText.Get(month)), st.wYear, st.wHour, st.wMinute, st.wSecond);
|
||||
#ifdef MORE_LANGUAGES
|
||||
if (CGame::japaneseGame)
|
||||
sprintf(date, "%02d %02d %04d %02d:%02d:%02d", st.wDay, st.wMonth, st.wYear, st.wHour, st.wMinute, st.wSecond);
|
||||
else
|
||||
#endif // MORE_LANGUAGES
|
||||
sprintf(date, "%02d %s %04d %02d:%02d:%02d", st.wDay, UnicodeToAsciiForSaveLoad(TheText.Get(month)), st.wYear, st.wHour, st.wMinute, st.wSecond);
|
||||
AsciiToUnicode(date, SlotSaveDate[i]);
|
||||
|
||||
} else {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,317 +1,319 @@
|
|||
#include "common.h"
|
||||
|
||||
#include "FileMgr.h"
|
||||
#include "Frontend.h"
|
||||
#include "Messages.h"
|
||||
#include "Text.h"
|
||||
|
||||
static wchar WideErrorString[25];
|
||||
|
||||
CText TheText;
|
||||
|
||||
CText::CText(void)
|
||||
{
|
||||
encoding = 'e';
|
||||
memset(WideErrorString, 0, sizeof(WideErrorString));
|
||||
}
|
||||
|
||||
void
|
||||
CText::Load(void)
|
||||
{
|
||||
uint8 *filedata;
|
||||
char filename[32], type[4];
|
||||
int length;
|
||||
int offset, sectlen;
|
||||
|
||||
Unload();
|
||||
filedata = new uint8[0x40000];
|
||||
|
||||
CFileMgr::SetDir("TEXT");
|
||||
switch(CMenuManager::m_PrefsLanguage){
|
||||
case LANGUAGE_AMERICAN:
|
||||
sprintf(filename, "AMERICAN.GXT");
|
||||
break;
|
||||
case LANGUAGE_FRENCH:
|
||||
sprintf(filename, "FRENCH.GXT");
|
||||
break;
|
||||
case LANGUAGE_GERMAN:
|
||||
sprintf(filename, "GERMAN.GXT");
|
||||
break;
|
||||
case LANGUAGE_ITALIAN:
|
||||
sprintf(filename, "ITALIAN.GXT");
|
||||
break;
|
||||
case LANGUAGE_SPANISH:
|
||||
sprintf(filename, "SPANISH.GXT");
|
||||
break;
|
||||
#ifdef MORE_LANGUAGES
|
||||
case LANGUAGE_POLISH:
|
||||
sprintf(filename, "POLISH.GXT");
|
||||
break;
|
||||
case LANGUAGE_RUSSIAN:
|
||||
sprintf(filename, "RUSSIAN.GXT");
|
||||
break;
|
||||
case LANGUAGE_JAPANESE:
|
||||
sprintf(filename, "JAPANESE.GXT");
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
length = CFileMgr::LoadFile(filename, filedata, 0x40000, "rb");
|
||||
CFileMgr::SetDir("");
|
||||
|
||||
offset = 0;
|
||||
while(offset < length){
|
||||
type[0] = filedata[offset++];
|
||||
type[1] = filedata[offset++];
|
||||
type[2] = filedata[offset++];
|
||||
type[3] = filedata[offset++];
|
||||
sectlen = (int)filedata[offset+3]<<24 | (int)filedata[offset+2]<<16 |
|
||||
(int)filedata[offset+1]<<8 | (int)filedata[offset+0];
|
||||
offset += 4;
|
||||
if(sectlen != 0){
|
||||
if(strncmp(type, "TKEY", 4) == 0)
|
||||
keyArray.Load(sectlen, filedata, &offset);
|
||||
else if(strncmp(type, "TDAT", 4) == 0)
|
||||
data.Load(sectlen, filedata, &offset);
|
||||
else
|
||||
offset += sectlen;
|
||||
}
|
||||
}
|
||||
|
||||
keyArray.Update(data.chars);
|
||||
|
||||
delete[] filedata;
|
||||
}
|
||||
|
||||
void
|
||||
CText::Unload(void)
|
||||
{
|
||||
CMessages::ClearAllMessagesDisplayedByGame();
|
||||
data.Unload();
|
||||
keyArray.Unload();
|
||||
}
|
||||
|
||||
wchar*
|
||||
CText::Get(const char *key)
|
||||
{
|
||||
return keyArray.Search(key);
|
||||
}
|
||||
|
||||
wchar UpperCaseTable[128] = {
|
||||
128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
|
||||
139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
|
||||
150, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
|
||||
138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
|
||||
149, 173, 173, 175, 176, 177, 178, 179, 180, 181, 182,
|
||||
183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
|
||||
194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
|
||||
205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
|
||||
216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
|
||||
227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
|
||||
238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
|
||||
249, 250, 251, 252, 253, 254, 255
|
||||
};
|
||||
|
||||
wchar FrenchUpperCaseTable[128] = {
|
||||
128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
|
||||
139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
|
||||
150, 65, 65, 65, 65, 132, 133, 69, 69, 69, 69, 73, 73,
|
||||
73, 73, 79, 79, 79, 79, 85, 85, 85, 85, 173, 173, 175,
|
||||
176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
|
||||
187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
|
||||
198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
|
||||
209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
|
||||
220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
|
||||
231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
|
||||
242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
|
||||
253, 254, 255
|
||||
};
|
||||
|
||||
wchar
|
||||
CText::GetUpperCase(wchar c)
|
||||
{
|
||||
switch (encoding)
|
||||
{
|
||||
case 'e':
|
||||
if (c >= 'a' && c <= 'z')
|
||||
return c - 32;
|
||||
break;
|
||||
case 'f':
|
||||
if (c >= 'a' && c <= 'z')
|
||||
return c - 32;
|
||||
|
||||
if (c >= 128 && c <= 255)
|
||||
return FrenchUpperCaseTable[c-128];
|
||||
break;
|
||||
case 'g':
|
||||
case 'i':
|
||||
case 's':
|
||||
if (c >= 'a' && c <= 'z')
|
||||
return c - 32;
|
||||
|
||||
if (c >= 128 && c <= 255)
|
||||
return UpperCaseTable[c-128];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
void
|
||||
CText::UpperCase(wchar *s)
|
||||
{
|
||||
while(*s){
|
||||
*s = GetUpperCase(*s);
|
||||
s++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
CKeyArray::Load(uint32 length, uint8 *data, int *offset)
|
||||
{
|
||||
uint32 i;
|
||||
uint8 *rawbytes;
|
||||
|
||||
numEntries = length / sizeof(CKeyEntry);
|
||||
entries = new CKeyEntry[numEntries];
|
||||
rawbytes = (uint8*)entries;
|
||||
|
||||
for(i = 0; i < length; i++)
|
||||
rawbytes[i] = data[(*offset)++];
|
||||
}
|
||||
|
||||
void
|
||||
CKeyArray::Unload(void)
|
||||
{
|
||||
delete[] entries;
|
||||
entries = nil;
|
||||
numEntries = 0;
|
||||
}
|
||||
|
||||
void
|
||||
CKeyArray::Update(wchar *chars)
|
||||
{
|
||||
int i;
|
||||
for(i = 0; i < numEntries; i++)
|
||||
entries[i].value = (wchar*)((uint8*)chars + (uintptr)entries[i].value);
|
||||
}
|
||||
|
||||
CKeyEntry*
|
||||
CKeyArray::BinarySearch(const char *key, CKeyEntry *entries, int16 low, int16 high)
|
||||
{
|
||||
int mid;
|
||||
int diff;
|
||||
|
||||
if(low > high)
|
||||
return nil;
|
||||
|
||||
mid = (low + high)/2;
|
||||
diff = strcmp(key, entries[mid].key);
|
||||
if(diff == 0)
|
||||
return &entries[mid];
|
||||
if(diff < 0)
|
||||
return BinarySearch(key, entries, low, mid-1);
|
||||
if(diff > 0)
|
||||
return BinarySearch(key, entries, mid+1, high);
|
||||
return nil;
|
||||
}
|
||||
|
||||
wchar*
|
||||
CKeyArray::Search(const char *key)
|
||||
{
|
||||
CKeyEntry *found;
|
||||
char errstr[25];
|
||||
int i;
|
||||
|
||||
found = BinarySearch(key, entries, 0, numEntries-1);
|
||||
if(found)
|
||||
return found->value;
|
||||
sprintf(errstr, "%s missing", key);
|
||||
for(i = 0; i < 25; i++)
|
||||
WideErrorString[i] = errstr[i];
|
||||
return WideErrorString;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
CData::Load(uint32 length, uint8 *data, int *offset)
|
||||
{
|
||||
uint32 i;
|
||||
uint8 *rawbytes;
|
||||
|
||||
numChars = length / sizeof(wchar);
|
||||
chars = new wchar[numChars];
|
||||
rawbytes = (uint8*)chars;
|
||||
|
||||
for(i = 0; i < length; i++)
|
||||
rawbytes[i] = data[(*offset)++];
|
||||
}
|
||||
|
||||
void
|
||||
CData::Unload(void)
|
||||
{
|
||||
delete[] chars;
|
||||
chars = nil;
|
||||
numChars = 0;
|
||||
}
|
||||
|
||||
void
|
||||
AsciiToUnicode(const char *src, wchar *dst)
|
||||
{
|
||||
while((*dst++ = *src++) != '\0');
|
||||
}
|
||||
|
||||
#include "Game.h"
|
||||
|
||||
char*
|
||||
UnicodeToAscii(wchar *src)
|
||||
{
|
||||
static char aStr[256];
|
||||
int len;
|
||||
for(len = 0; *src != '\0' && len < 256-1; len++, src++)
|
||||
if(*src < 128 || (CGame::russianGame && *src < 256))
|
||||
aStr[len] = *src;
|
||||
else
|
||||
aStr[len] = '#';
|
||||
aStr[len] = '\0';
|
||||
return aStr;
|
||||
}
|
||||
|
||||
char*
|
||||
UnicodeToAsciiForSaveLoad(wchar *src)
|
||||
{
|
||||
static char aStr[256];
|
||||
int len;
|
||||
for(len = 0; *src != '\0' && len < 256-1; len++, src++)
|
||||
if(*src < 256)
|
||||
aStr[len] = *src;
|
||||
else
|
||||
aStr[len] = '#';
|
||||
aStr[len] = '\0';
|
||||
return aStr;
|
||||
}
|
||||
|
||||
void
|
||||
UnicodeStrcpy(wchar *dst, const wchar *src)
|
||||
{
|
||||
while((*dst++ = *src++) != '\0');
|
||||
}
|
||||
|
||||
int
|
||||
UnicodeStrlen(const wchar *str)
|
||||
{
|
||||
int len;
|
||||
for(len = 0; *str != '\0'; len++, str++);
|
||||
return len;
|
||||
}
|
||||
|
||||
void
|
||||
TextCopy(wchar *dst, const wchar *src)
|
||||
{
|
||||
while((*dst++ = *src++) != '\0');
|
||||
}
|
||||
|
||||
|
||||
InjectHook(0x52C2F0, &UnicodeToAscii, PATCH_JUMP);
|
||||
#include "common.h"
|
||||
|
||||
#include "FileMgr.h"
|
||||
#ifdef MORE_LANGUAGES
|
||||
#include "Game.h"
|
||||
#endif
|
||||
#include "Frontend.h"
|
||||
#include "Messages.h"
|
||||
#include "Text.h"
|
||||
|
||||
static wchar WideErrorString[25];
|
||||
|
||||
CText TheText;
|
||||
|
||||
CText::CText(void)
|
||||
{
|
||||
encoding = 'e';
|
||||
memset(WideErrorString, 0, sizeof(WideErrorString));
|
||||
}
|
||||
|
||||
void
|
||||
CText::Load(void)
|
||||
{
|
||||
uint8 *filedata;
|
||||
char filename[32], type[4];
|
||||
int length;
|
||||
int offset, sectlen;
|
||||
|
||||
Unload();
|
||||
filedata = new uint8[0x40000];
|
||||
|
||||
CFileMgr::SetDir("TEXT");
|
||||
switch(CMenuManager::m_PrefsLanguage){
|
||||
case LANGUAGE_AMERICAN:
|
||||
sprintf(filename, "AMERICAN.GXT");
|
||||
break;
|
||||
case LANGUAGE_FRENCH:
|
||||
sprintf(filename, "FRENCH.GXT");
|
||||
break;
|
||||
case LANGUAGE_GERMAN:
|
||||
sprintf(filename, "GERMAN.GXT");
|
||||
break;
|
||||
case LANGUAGE_ITALIAN:
|
||||
sprintf(filename, "ITALIAN.GXT");
|
||||
break;
|
||||
case LANGUAGE_SPANISH:
|
||||
sprintf(filename, "SPANISH.GXT");
|
||||
break;
|
||||
#ifdef MORE_LANGUAGES
|
||||
case LANGUAGE_POLISH:
|
||||
sprintf(filename, "POLISH.GXT");
|
||||
break;
|
||||
case LANGUAGE_RUSSIAN:
|
||||
sprintf(filename, "RUSSIAN.GXT");
|
||||
break;
|
||||
case LANGUAGE_JAPANESE:
|
||||
sprintf(filename, "JAPANESE.GXT");
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
length = CFileMgr::LoadFile(filename, filedata, 0x40000, "rb");
|
||||
CFileMgr::SetDir("");
|
||||
|
||||
offset = 0;
|
||||
while(offset < length){
|
||||
type[0] = filedata[offset++];
|
||||
type[1] = filedata[offset++];
|
||||
type[2] = filedata[offset++];
|
||||
type[3] = filedata[offset++];
|
||||
sectlen = (int)filedata[offset+3]<<24 | (int)filedata[offset+2]<<16 |
|
||||
(int)filedata[offset+1]<<8 | (int)filedata[offset+0];
|
||||
offset += 4;
|
||||
if(sectlen != 0){
|
||||
if(strncmp(type, "TKEY", 4) == 0)
|
||||
keyArray.Load(sectlen, filedata, &offset);
|
||||
else if(strncmp(type, "TDAT", 4) == 0)
|
||||
data.Load(sectlen, filedata, &offset);
|
||||
else
|
||||
offset += sectlen;
|
||||
}
|
||||
}
|
||||
|
||||
keyArray.Update(data.chars);
|
||||
|
||||
delete[] filedata;
|
||||
}
|
||||
|
||||
void
|
||||
CText::Unload(void)
|
||||
{
|
||||
CMessages::ClearAllMessagesDisplayedByGame();
|
||||
data.Unload();
|
||||
keyArray.Unload();
|
||||
}
|
||||
|
||||
wchar*
|
||||
CText::Get(const char *key)
|
||||
{
|
||||
return keyArray.Search(key);
|
||||
}
|
||||
|
||||
wchar UpperCaseTable[128] = {
|
||||
128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
|
||||
139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
|
||||
150, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
|
||||
138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
|
||||
149, 173, 173, 175, 176, 177, 178, 179, 180, 181, 182,
|
||||
183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
|
||||
194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
|
||||
205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
|
||||
216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
|
||||
227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
|
||||
238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
|
||||
249, 250, 251, 252, 253, 254, 255
|
||||
};
|
||||
|
||||
wchar FrenchUpperCaseTable[128] = {
|
||||
128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
|
||||
139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
|
||||
150, 65, 65, 65, 65, 132, 133, 69, 69, 69, 69, 73, 73,
|
||||
73, 73, 79, 79, 79, 79, 85, 85, 85, 85, 173, 173, 175,
|
||||
176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
|
||||
187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
|
||||
198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
|
||||
209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
|
||||
220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
|
||||
231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
|
||||
242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
|
||||
253, 254, 255
|
||||
};
|
||||
|
||||
wchar
|
||||
CText::GetUpperCase(wchar c)
|
||||
{
|
||||
switch (encoding)
|
||||
{
|
||||
case 'e':
|
||||
if (c >= 'a' && c <= 'z')
|
||||
return c - 32;
|
||||
break;
|
||||
case 'f':
|
||||
if (c >= 'a' && c <= 'z')
|
||||
return c - 32;
|
||||
|
||||
if (c >= 128 && c <= 255)
|
||||
return FrenchUpperCaseTable[c-128];
|
||||
break;
|
||||
case 'g':
|
||||
case 'i':
|
||||
case 's':
|
||||
if (c >= 'a' && c <= 'z')
|
||||
return c - 32;
|
||||
|
||||
if (c >= 128 && c <= 255)
|
||||
return UpperCaseTable[c-128];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
void
|
||||
CText::UpperCase(wchar *s)
|
||||
{
|
||||
while(*s){
|
||||
*s = GetUpperCase(*s);
|
||||
s++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
CKeyArray::Load(uint32 length, uint8 *data, int *offset)
|
||||
{
|
||||
uint32 i;
|
||||
uint8 *rawbytes;
|
||||
|
||||
numEntries = length / sizeof(CKeyEntry);
|
||||
entries = new CKeyEntry[numEntries];
|
||||
rawbytes = (uint8*)entries;
|
||||
|
||||
for(i = 0; i < length; i++)
|
||||
rawbytes[i] = data[(*offset)++];
|
||||
}
|
||||
|
||||
void
|
||||
CKeyArray::Unload(void)
|
||||
{
|
||||
delete[] entries;
|
||||
entries = nil;
|
||||
numEntries = 0;
|
||||
}
|
||||
|
||||
void
|
||||
CKeyArray::Update(wchar *chars)
|
||||
{
|
||||
int i;
|
||||
for(i = 0; i < numEntries; i++)
|
||||
entries[i].value = (wchar*)((uint8*)chars + (uintptr)entries[i].value);
|
||||
}
|
||||
|
||||
CKeyEntry*
|
||||
CKeyArray::BinarySearch(const char *key, CKeyEntry *entries, int16 low, int16 high)
|
||||
{
|
||||
int mid;
|
||||
int diff;
|
||||
|
||||
if(low > high)
|
||||
return nil;
|
||||
|
||||
mid = (low + high)/2;
|
||||
diff = strcmp(key, entries[mid].key);
|
||||
if(diff == 0)
|
||||
return &entries[mid];
|
||||
if(diff < 0)
|
||||
return BinarySearch(key, entries, low, mid-1);
|
||||
if(diff > 0)
|
||||
return BinarySearch(key, entries, mid+1, high);
|
||||
return nil;
|
||||
}
|
||||
|
||||
wchar*
|
||||
CKeyArray::Search(const char *key)
|
||||
{
|
||||
CKeyEntry *found;
|
||||
char errstr[25];
|
||||
int i;
|
||||
|
||||
found = BinarySearch(key, entries, 0, numEntries-1);
|
||||
if(found)
|
||||
return found->value;
|
||||
sprintf(errstr, "%s missing", key);
|
||||
for(i = 0; i < 25; i++)
|
||||
WideErrorString[i] = errstr[i];
|
||||
return WideErrorString;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
CData::Load(uint32 length, uint8 *data, int *offset)
|
||||
{
|
||||
uint32 i;
|
||||
uint8 *rawbytes;
|
||||
|
||||
numChars = length / sizeof(wchar);
|
||||
chars = new wchar[numChars];
|
||||
rawbytes = (uint8*)chars;
|
||||
|
||||
for(i = 0; i < length; i++)
|
||||
rawbytes[i] = data[(*offset)++];
|
||||
}
|
||||
|
||||
void
|
||||
CData::Unload(void)
|
||||
{
|
||||
delete[] chars;
|
||||
chars = nil;
|
||||
numChars = 0;
|
||||
}
|
||||
|
||||
void
|
||||
AsciiToUnicode(const char *src, wchar *dst)
|
||||
{
|
||||
while((*dst++ = (unsigned char)*src++) != '\0');
|
||||
}
|
||||
|
||||
char*
|
||||
UnicodeToAscii(wchar *src)
|
||||
{
|
||||
static char aStr[256];
|
||||
int len;
|
||||
for(len = 0; *src != '\0' && len < 256-1; len++, src++)
|
||||
#ifdef MORE_LANGUAGES
|
||||
if(*src < 128 || ((CGame::russianGame || CGame::japaneseGame) && *src < 256))
|
||||
#else
|
||||
if(*src < 128)
|
||||
#endif
|
||||
aStr[len] = *src;
|
||||
else
|
||||
aStr[len] = '#';
|
||||
aStr[len] = '\0';
|
||||
return aStr;
|
||||
}
|
||||
|
||||
char*
|
||||
UnicodeToAsciiForSaveLoad(wchar *src)
|
||||
{
|
||||
static char aStr[256];
|
||||
int len;
|
||||
for(len = 0; *src != '\0' && len < 256-1; len++, src++)
|
||||
if(*src < 256)
|
||||
aStr[len] = *src;
|
||||
else
|
||||
aStr[len] = '#';
|
||||
aStr[len] = '\0';
|
||||
return aStr;
|
||||
}
|
||||
|
||||
void
|
||||
UnicodeStrcpy(wchar *dst, const wchar *src)
|
||||
{
|
||||
while((*dst++ = *src++) != '\0');
|
||||
}
|
||||
|
||||
int
|
||||
UnicodeStrlen(const wchar *str)
|
||||
{
|
||||
int len;
|
||||
for(len = 0; *str != '\0'; len++, str++);
|
||||
return len;
|
||||
}
|
||||
|
||||
void
|
||||
TextCopy(wchar *dst, const wchar *src)
|
||||
{
|
||||
while((*dst++ = *src++) != '\0');
|
||||
}
|
Loading…
Reference in a new issue