aboutsummaryrefslogtreecommitdiffstats
path: root/src/renderer/Hud.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer/Hud.cpp')
-rw-r--r--src/renderer/Hud.cpp635
1 files changed, 435 insertions, 200 deletions
diff --git a/src/renderer/Hud.cpp b/src/renderer/Hud.cpp
index d7d8050f..8b021645 100644
--- a/src/renderer/Hud.cpp
+++ b/src/renderer/Hud.cpp
@@ -45,14 +45,14 @@
// Game has colors inlined in code.
// For easier modification we collect them here:
CRGBA MONEY_COLOR(0, 207, 133, 255);
-CRGBA AMMO_COLOR(255, 150, 225, 255);
+CRGBA AMMO_COLOR(255, 255, 255, 255);
CRGBA HEALTH_COLOR(255, 150, 225, 255);
CRGBA ARMOUR_COLOR(185, 185, 185, 255);
CRGBA NOTWANTED_COLOR(27, 89, 130, 255);
CRGBA WANTED_COLOR_FLASH(62, 141, 181, 255);
CRGBA WANTED_COLOR(97, 194, 247, 255);
-CRGBA ZONE_COLOR(45, 155, 90, 255);
-CRGBA VEHICLE_COLOR(97, 194, 247, 255);
+CRGBA ZONE_COLOR(255, 255, 255, 255);
+CRGBA VEHICLE_COLOR(255, 255, 255, 255);
CRGBA CLOCK_COLOR(97, 194, 247, 255);
CRGBA TIMER_COLOR(97, 194, 247, 255);
CRGBA COUNTER_COLOR(97, 194, 247, 255);
@@ -89,13 +89,13 @@ wchar CHud::m_Message[256];
wchar CHud::m_PagerMessage[256];
bool CHud::m_Wants_To_Draw_Hud;
bool CHud::m_Wants_To_Draw_3dMarkers;
-wchar CHud::m_BigMessage[6][128];
+wchar CHud::m_BigMessage[8][128];
int16 CHud::m_ItemToFlash;
bool CHud::m_HideRadar;
int32 CHud::m_ClockState;
// These aren't really in CHud
-float CHud::BigMessageInUse[6];
+float BigMessageInUse[6];
float CHud::BigMessageAlpha[6];
float CHud::BigMessageX[6];
float CHud::OddJob2OffTimer;
@@ -134,6 +134,10 @@ uint32 CHud::m_LastTimeEnergyLost;
CSprite2d CHud::Sprites[NUM_HUD_SPRITES];
+wchar* CHud::gLastPrintForeverString;
+
+uint8 CHud::m_HudAlpha = 209;
+
struct
{
const char *name;
@@ -190,24 +194,25 @@ struct
{ "", "" },
{ "", "" },
{ "radardisc", "radardisc" },
+ { "radardiscback", "" },
{ "", "" },
{ "", "" },
{ "", "" },
{ "", "" },
{ "", "" },
- { "", "" },
- { "", "" },
- { "", "" },
- { "", "" },
- { "", "" },
- { "", "" },
- { "", "" },
+ { "bar_inside1dark", "" },
+ { "bar_inside2dark", "" },
+ { "hudnumbers", "" },
+ { "bar_inside1", "" },
+ { "bar_inside2", "" },
+ { "bar_outline", "" },
{ "sitesniper", "sitesniperm" },
{ "siteM16", "siteM16m" },
{ "sitelaser", "sitelaserm" },
{ "laserdot", "laserdotm" },
{ "viewfinder_128", "viewfinder_128m" },
- { "bleeder", "" }
+ { "bleeder", "" },
+ { "gren_rem", "noMaskNeeded" }
};
RwTexture *gpSniperSightTex;
@@ -216,6 +221,7 @@ RwTexture *gpLaserSightTex;
RwTexture *gpLaserDotTex;
RwTexture *gpViewFinderTex;
+// TODO(LCS): some things were reversed from LCS but not all
void CHud::Draw()
{
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERNEAREST);
@@ -408,6 +414,8 @@ void CHud::Draw()
DrawMoneyCounter
*/
+ RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERLINEAR); // TODO(LCS): temp filtering fix for money counter, remove later
+
wchar sPrint[16];
wchar sPrintIcon[16];
char sTemp[16];
@@ -420,25 +428,8 @@ void CHud::Draw()
m_LastDisplayScore = CWorld::Players[CWorld::PlayerInFocus].m_nVisibleMoney;
}
if (m_DisplayScoreState != FADED_OUT) {
- sprintf(sTemp, "$%08d", CWorld::Players[CWorld::PlayerInFocus].m_nVisibleMoney);
- AsciiToUnicode(sTemp, sPrint);
-
- CFont::SetPropOff();
- CFont::SetBackgroundOff();
- CFont::SetScale(SCREEN_SCALE_X(HUD_TEXT_SCALE_X), SCREEN_SCALE_Y(HUD_TEXT_SCALE_Y));
- CFont::SetCentreOff();
- CFont::SetRightJustifyOn();
- CFont::SetRightJustifyWrap(0.0f);
- CFont::SetBackGroundOnlyTextOff();
- CFont::SetFontStyle(FONT_HEADING);
- CFont::SetPropOff();
- CFont::SetDropShadowPosition(2);
- CFont::SetDropColor(CRGBA(0, 0, 0, alpha));
- MONEY_COLOR.a = alpha;
- CFont::SetColor(MONEY_COLOR);
-
if (FrontEndMenuManager.m_PrefsShowHud) {
- CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(110.0f), SCREEN_SCALE_Y(43.0f), sPrint);
+ DrawCash();
}
}
@@ -451,46 +442,23 @@ void CHud::Draw()
alpha = CHud::DrawFadeState(HUD_WEAPON_FADING, 1);
m_LastWeapon = playerPed->GetWeapon()->m_eWeaponType;
}
+ alpha = Min(alpha, m_HudAlpha);
if (m_WeaponState != FADED_OUT) {
CWeapon *weapon = playerPed->GetWeapon();
- int32 AmmoAmount = CWeaponInfo::GetWeaponInfo((eWeaponType)WeaponType)->m_nAmountofAmmunition;
- int32 AmmoInClip = weapon->m_nAmmoInClip;
- int32 TotalAmmo = weapon->m_nAmmoTotal;
- int32 Ammo, Clip;
-
- if (AmmoAmount <= 1 || AmmoAmount >= 1000)
- sprintf(sTemp, "%d", TotalAmmo);
- else {
- if (WeaponType == WEAPONTYPE_FLAMETHROWER) {
- Clip = AmmoInClip / 10;
-
- Ammo = Min((TotalAmmo - AmmoInClip) / 10, 9999);
- } else {
- Clip = AmmoInClip;
-
- Ammo = Min(TotalAmmo - AmmoInClip, 9999);
- }
-
- sprintf(sTemp, "%d-%d", Ammo, Clip);
- }
-
- AsciiToUnicode(sTemp, sPrint);
CWeaponInfo *weaponInfo = CWeaponInfo::GetWeaponInfo((eWeaponType)WeaponType);
/*
DrawWeaponIcon
*/
if (FrontEndMenuManager.m_PrefsShowHud) {
+ float right = FrontEndMenuManager.m_PrefsUseWideScreen ? 468.6f : 470.0f;
+ float left = right - (FrontEndMenuManager.m_PrefsUseWideScreen ? 48.6f : 54.0f);
if (weaponInfo->m_nModelId <= 0) {
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERLINEAR);
if (FrontEndMenuManager.m_PrefsShowHud)
Sprites[WeaponType].Draw(
- CRect(SCREEN_SCALE_FROM_RIGHT(99.0f), SCREEN_SCALE_Y(27.0f), SCREEN_SCALE_FROM_RIGHT(35.0f), SCREEN_SCALE_Y(91.0f)),
- CRGBA(255, 255, 255, alpha),
- 0.015f, 0.015f,
- 1.0f, 0.0f,
- 0.015f, 1.0f,
- 1.0f, 1.0f);
+ CRect(PSP_SCREEN_SCALE_X(left), PSP_SCREEN_SCALE_Y(16.0f), PSP_SCREEN_SCALE_X(right), PSP_SCREEN_SCALE_Y(60.0f)),
+ CRGBA(255, 255, 255, alpha));
} else {
CBaseModelInfo *weaponModel = CModelInfo::GetModelInfo(weaponInfo->m_nModelId);
RwTexDictionary *weaponTxd = CTxdStore::GetSlot(weaponModel->GetTxdSlot())->texDict;
@@ -510,12 +478,8 @@ void CHud::Draw()
static CSprite2d sprite;
sprite.m_pTexture = weaponIcon;
sprite.Draw(
- CRect(SCREEN_SCALE_FROM_RIGHT(99.0f), SCREEN_SCALE_Y(27.0f), SCREEN_SCALE_FROM_RIGHT(35.0f), SCREEN_SCALE_Y(91.0f)),
- CRGBA(255, 255, 255, alpha),
- 0.015f, 0.015f,
- 1.0f, 0.0f,
- 0.015f, 1.0f,
- 1.0f, 1.0f);
+ CRect(PSP_SCREEN_SCALE_X(left), PSP_SCREEN_SCALE_Y(16.0f), PSP_SCREEN_SCALE_X(right), PSP_SCREEN_SCALE_Y(60.0f)),
+ CRGBA(255, 255, 255, alpha));
sprite.m_pTexture = nil;
#endif
}
@@ -523,7 +487,7 @@ void CHud::Draw()
}
CFont::SetBackgroundOff();
- CFont::SetScale(SCREEN_SCALE_X(0.5f), SCREEN_SCALE_Y(0.8f));
+ CFont::SetScale(PSP_SCREEN_SCALE_X(FrontEndMenuManager.m_PrefsUseWideScreen ? 0.18f : 0.2f), PSP_SCREEN_SCALE_Y(0.44f));
CFont::SetJustifyOff();
CFont::SetCentreOn();
CFont::SetCentreSize(SCREEN_STRETCH_X(DEFAULT_SCREEN_WIDTH));
@@ -531,13 +495,65 @@ void CHud::Draw()
CFont::SetDropShadowPosition(0);
CFont::SetFontStyle(FONT_STANDARD);
+ int32 AmmoAmount = CWeaponInfo::GetWeaponInfo((eWeaponType)WeaponType)->m_nAmountofAmmunition;
+ int32 AmmoInClip = weapon->m_nAmmoInClip;
+ int32 TotalAmmo = weapon->m_nAmmoTotal;
+ int32 Ammo, Clip;
+
if (Min(9999, TotalAmmo - AmmoInClip) != 9999 && !CDarkel::FrenzyOnGoing() && weaponInfo->m_nWeaponSlot > 1 && weapon->m_eWeaponType != WEAPONTYPE_DETONATOR) {
CFont::SetDropShadowPosition(2);
CFont::SetDropColor(CRGBA(0, 0, 0, alpha));
AMMO_COLOR.a = alpha;
CFont::SetColor(AMMO_COLOR);
- if (FrontEndMenuManager.m_PrefsShowHud)
- CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(66.0f), SCREEN_SCALE_Y(90.0f), sPrint);
+ if (FrontEndMenuManager.m_PrefsShowHud) {
+
+
+ if (AmmoAmount <= 1 || AmmoAmount >= 1000)
+ {
+ sprintf(sTemp, "%d", TotalAmmo);
+ AsciiToUnicode(sTemp, sPrint);
+ float pos = 435.0f;
+#ifdef FIX_BUGS
+ if (FrontEndMenuManager.m_PrefsUseWideScreen)
+ pos = 438.0f;
+#endif
+ CFont::PrintString(PSP_SCREEN_SCALE_FROM_RIGHT(PSP_DEFAULT_SCREEN_WIDTH - pos), PSP_SCREEN_SCALE_Y(42.0f), sPrint);
+ }
+ else {
+
+ if (WeaponType == WEAPONTYPE_FLAMETHROWER) {
+ Clip = AmmoInClip / 10;
+
+ Ammo = Min((TotalAmmo - AmmoInClip) / 10, 9999);
+ }
+ else {
+ Clip = AmmoInClip;
+
+ Ammo = Min(TotalAmmo - AmmoInClip, 9999);
+ }
+
+ char sMinus[10];
+ char sAmmo[20];
+ char sClip[20];
+
+ sprintf(sMinus, "-");
+ sprintf(sAmmo, "%d", Ammo);
+ sprintf(sClip, "%d", Clip);
+
+ CFont::SetCentreOff();
+ CFont::SetRightJustifyOn();
+ AsciiToUnicode(sAmmo, sPrint);
+ CFont::PrintString(PSP_SCREEN_SCALE_FROM_RIGHT(PSP_DEFAULT_SCREEN_WIDTH - (FrontEndMenuManager.m_PrefsUseWideScreen ? 438.0f : 435.0f)), PSP_SCREEN_SCALE_Y(42.0f), sPrint);
+
+ CFont::SetRightJustifyOff();
+ AsciiToUnicode(sMinus, sPrint);
+ CFont::PrintString(PSP_SCREEN_SCALE_FROM_RIGHT(PSP_DEFAULT_SCREEN_WIDTH - (FrontEndMenuManager.m_PrefsUseWideScreen ? 439.0f : 436.0f)), PSP_SCREEN_SCALE_Y(42.0f), sPrint);
+
+ AsciiToUnicode(sClip, sPrint);
+ CFont::PrintString(PSP_SCREEN_SCALE_FROM_RIGHT(PSP_DEFAULT_SCREEN_WIDTH - (FrontEndMenuManager.m_PrefsUseWideScreen ? 441.0f : 439.0f)), PSP_SCREEN_SCALE_Y(42.0f), sPrint);
+
+ }
+ }
CFont::SetDropShadowPosition(0);
}
}
@@ -571,23 +587,8 @@ void CHud::Draw()
&& FRAMECOUNTER & 8) {
if (playerPed->m_fHealth >= 10
|| playerPed->m_fHealth < 10 && FRAMECOUNTER & 8) {
-
- AsciiToUnicode("{", sPrintIcon);
-#ifdef FIX_BUGS
- sprintf(sTemp, "%03d", int32(playerPed->m_fHealth + 0.5f));
-#else
- sprintf(sTemp, "%03d", (int32)playerPed->m_fHealth);
-#endif
- AsciiToUnicode(sTemp, sPrint);
-
- CFont::SetColor(HEALTH_COLOR);
if (FrontEndMenuManager.m_PrefsShowHud) {
- CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(110.0f), SCREEN_SCALE_Y(65.0f), sPrint);
-
- if (!CWorld::Players[CWorld::PlayerInFocus].m_nTimeLastHealthLoss || CTimer::GetTimeInMilliseconds() > CWorld::Players[CWorld::PlayerInFocus].m_nTimeLastHealthLoss + 2000 || FRAMECOUNTER & 4) {
- // CFont::SetColor(HEALTH_COLOR);
- CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(110.0f + 54.0f), SCREEN_SCALE_Y(65.0f), sPrintIcon);
- }
+ DrawHealthBar(playerPed->m_fHealth);
}
}
}
@@ -608,13 +609,7 @@ void CHud::Draw()
CFont::SetColor(ARMOUR_COLOR);
if (FrontEndMenuManager.m_PrefsShowHud) {
-
- CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(182.0f), SCREEN_SCALE_Y(65.0f), sPrint);
-
- if (!CWorld::Players[CWorld::PlayerInFocus].m_nTimeLastArmourLoss || CTimer::GetTimeInMilliseconds() > CWorld::Players[CWorld::PlayerInFocus].m_nTimeLastArmourLoss + 2000 || FRAMECOUNTER & 4) {
- // CFont::SetColor(ARMOUR_COLOR);
- CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(182.0f + 52.0f), SCREEN_SCALE_Y(65.0f), sPrintIcon);
- }
+ DrawArmourBar(playerPed->m_fArmour);
}
}
}
@@ -631,36 +626,23 @@ void CHud::Draw()
}
if (m_WantedState != FADED_OUT) {
- CFont::SetBackgroundOff();
- CFont::SetScale(SCREEN_SCALE_X(HUD_TEXT_SCALE_X), SCREEN_SCALE_Y(HUD_TEXT_SCALE_Y));
- CFont::SetJustifyOff();
- CFont::SetCentreOff();
- CFont::SetRightJustifyOn();
- CFont::SetPropOn();
- CFont::SetFontStyle(FONT_STANDARD);
-
- AsciiToUnicode(">", sPrintIcon);
-
+ char wantedStar[] = "\x16";
+ float starX = 441.0f;
for (int i = 0; i < 6; i++) {
if (FrontEndMenuManager.m_PrefsShowHud) {
if (playerPed->m_pWanted->GetWantedLevel() > i
&& (CTimer::GetTimeInMilliseconds() > playerPed->m_pWanted->m_nLastWantedLevelChange
+ 2000 || FRAMECOUNTER & 4)) {
- WANTED_COLOR.a = alpha;
- CFont::SetColor(WANTED_COLOR);
- CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(110.0f + 23.0f * i), SCREEN_SCALE_Y(87.0f), sPrintIcon);
+ DrawTimeAndCashNumbers(wantedStar, starX, 63.0f, false);
} else if (playerPed->m_pWanted->m_nMinWantedLevel > i && FRAMECOUNTER & 4) {
- WANTED_COLOR_FLASH.a = alpha;
- CFont::SetColor(WANTED_COLOR_FLASH);
- CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(110.0f + 23.0f * i), SCREEN_SCALE_Y(87.0f), sPrintIcon);
-
- } else if (playerPed->m_pWanted->GetWantedLevel() <= i) {
- NOTWANTED_COLOR.a = alpha;
- CFont::SetColor(NOTWANTED_COLOR);
- CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(110.0f + 23.0f * i), SCREEN_SCALE_Y(87.0f), sPrintIcon);
+ DrawTimeAndCashNumbers(wantedStar, starX, 63.0f, true);
}
+ if (FrontEndMenuManager.m_PrefsUseWideScreen)
+ starX -= 11.0f;
+ else
+ starX -= 13.5f;
}
}
}
@@ -788,14 +770,14 @@ void CHud::Draw()
CFont::SetPropOn();
CFont::SetBackgroundOff();
- if (FrontEndMenuManager.m_PrefsLanguage == CMenuManager::LANGUAGE_SPANISH)
- CFont::SetScale(SCREEN_SCALE_X(1.7f * 0.8f), SCREEN_SCALE_Y(1.8f));
+ if (FrontEndMenuManager.m_PrefsUseWideScreen)
+ CFont::SetScale(PSP_SCREEN_SCALE_X(0.42768f), PSP_SCREEN_SCALE_Y(0.88f));
else
- CFont::SetScale(SCREEN_SCALE_X(1.7f), SCREEN_SCALE_Y(1.8f));
-
- CFont::SetSlantRefPoint(SCREEN_SCALE_FROM_RIGHT(32.0f), SCREEN_SCALE_FROM_BOTTOM(128.0f));
- CFont::SetSlant(0.15f);
+ CFont::SetScale(PSP_SCREEN_SCALE_X(0.4752f), PSP_SCREEN_SCALE_Y(0.88f));
+ //CFont::SetSlantRefPoint(SCREEN_SCALE_FROM_RIGHT(32.0f), SCREEN_SCALE_FROM_BOTTOM(128.0f));
+ //CFont::SetSlant(0.15f);
+ CFont::SetWrapx(SCREEN_WIDTH);
CFont::SetRightJustifyOn();
CFont::SetRightJustifyWrap(0.0f);
CFont::SetBackGroundOnlyTextOff();
@@ -805,9 +787,9 @@ void CHud::Draw()
CFont::SetColor(CRGBA(ZONE_COLOR.r, ZONE_COLOR.g, ZONE_COLOR.b, fZoneAlpha));
if (!CTheScripts::bPlayerIsInTheStatium)
- CFont::PrintStringFromBottom(SCREEN_SCALE_FROM_RIGHT(32.0f), SCREEN_SCALE_FROM_BOTTOM(128.0f), m_ZoneToPrint);
+ CFont::PrintStringFromBottom(PSP_SCREEN_SCALE_FROM_RIGHT(24.0f), PSP_SCREEN_SCALE_FROM_BOTTOM(16.0f), m_ZoneToPrint);
- CFont::SetSlant(0.f);
+ //CFont::SetSlant(0.f);
} else {
m_ZoneState = 3;
}
@@ -888,13 +870,14 @@ void CHud::Draw()
CFont::SetPropOn();
CFont::SetBackgroundOff();
- if (FrontEndMenuManager.m_PrefsLanguage != CMenuManager::LANGUAGE_ITALIAN && FrontEndMenuManager.m_PrefsLanguage != CMenuManager::LANGUAGE_SPANISH)
- CFont::SetScale(SCREEN_SCALE_X(1.7f), SCREEN_SCALE_Y(1.8f));
+ if (FrontEndMenuManager.m_PrefsUseWideScreen)
+ CFont::SetScale(PSP_SCREEN_SCALE_X(0.42768f), PSP_SCREEN_SCALE_Y(0.88f));
else
- CFont::SetScale(SCREEN_SCALE_X(1.7f * 0.85f), SCREEN_SCALE_Y(1.8f));
+ CFont::SetScale(PSP_SCREEN_SCALE_X(0.4752f), PSP_SCREEN_SCALE_Y(0.88f));
- CFont::SetSlantRefPoint(SCREEN_SCALE_FROM_RIGHT(32.0f), SCREEN_SCALE_FROM_BOTTOM(105.0f));
- CFont::SetSlant(0.15f);
+ CFont::SetWrapx(SCREEN_WIDTH);
+ CFont::SetSlantRefPoint(PSP_SCREEN_SCALE_FROM_RIGHT(24.0f), PSP_SCREEN_SCALE_FROM_BOTTOM(35.6f));
+ CFont::SetSlant(0.f);
CFont::SetRightJustifyOn();
CFont::SetRightJustifyWrap(0.0f);
@@ -904,7 +887,7 @@ void CHud::Draw()
CFont::SetColor(CRGBA(VEHICLE_COLOR.r, VEHICLE_COLOR.g, VEHICLE_COLOR.b, fVehicleAlpha));
CFont::SetDropColor(CRGBA(0, 0, 0, fVehicleAlpha));
- CFont::PrintStringFromBottom(SCREEN_SCALE_FROM_RIGHT(32.0f), SCREEN_SCALE_FROM_BOTTOM(105.0f), m_pVehicleNameToPrint);
+ CFont::PrintStringFromBottom(PSP_SCREEN_SCALE_FROM_RIGHT(24.0f), PSP_SCREEN_SCALE_FROM_BOTTOM(35.6f), m_pVehicleNameToPrint);
CFont::SetSlant(0.f);
}
@@ -921,24 +904,8 @@ void CHud::Draw()
DrawClock
*/
if (m_ClockState) {
- CFont::SetJustifyOff();
- CFont::SetCentreOff();
- CFont::SetBackgroundOff();
- CFont::SetScale(SCREEN_SCALE_X(HUD_TEXT_SCALE_X), SCREEN_SCALE_Y(HUD_TEXT_SCALE_Y));
- CFont::SetBackGroundOnlyTextOff();
- CFont::SetPropOff();
- CFont::SetFontStyle(FONT_HEADING);
- CFont::SetRightJustifyOn();
- CFont::SetRightJustifyWrap(0.0f);
- CFont::SetDropShadowPosition(2);
- CFont::SetDropColor(CRGBA(0, 0, 0, 255));
-
- sprintf(sTemp, "%02d:%02d", CClock::GetHours(), CClock::GetMinutes());
- AsciiToUnicode(sTemp, sPrint);
-
- CFont::SetColor(CLOCK_COLOR);
if (FrontEndMenuManager.m_PrefsShowHud)
- CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(111.0f), SCREEN_SCALE_Y(22.0f), sPrint);
+ DrawTime();
}
/*
@@ -946,8 +913,35 @@ void CHud::Draw()
*/
wchar sTimer[16];
+ uint16 nNumBigOnscrnLines = 0;
+ for (uint32 i = 0; i < NUMONSCREENCOUNTERS; i++) {
+ if (CUserDisplay::OnscnTimer.m_sCounters[i].m_bCounterProcessed) {
+ if (!CounterOnLastFrame[i])
+ CounterFlashTimer[i] = 1;
- if (!CUserDisplay::OnscnTimer.m_sClocks[0].m_bClockProcessed)
+ CounterOnLastFrame[i] = true;
+
+ if (CounterFlashTimer[i] != 0) {
+ if (++CounterFlashTimer[i] > 50)
+ CounterFlashTimer[i] = 0;
+ }
+
+ if (FRAMECOUNTER & 4 || CounterFlashTimer[i] == 0) {
+ if (CUserDisplay::OnscnTimer.m_sCounters[i].m_aCounterText2[0] != '\0') {
+ wchar* pCounterText = TheText.Get(CUserDisplay::OnscnTimer.m_sCounters[i].m_aCounterText2);
+ UseTimerCounterFontSettings();
+ CFont::SetPropOn();
+ CFont::SetColor(CRGBA(255, 255, 255, m_HudAlpha));
+ CFont::SetScale(PSP_SCREEN_SCALE_X(0.7f), PSP_SCREEN_SCALE_Y(1.5217391f));
+ CFont::PrintString(PSP_SCREEN_SCALE_FROM_RIGHT(12.0f), PSP_SCREEN_SCALE_Y(31.0f * nNumBigOnscrnLines) + PSP_SCREEN_SCALE_Y(100.0f), pCounterText);
+ }
+ }
+ if (CUserDisplay::OnscnTimer.m_sCounters[i].m_aCounterText2[0] != '\0')
+ nNumBigOnscrnLines++;
+ }
+ }
+
+ if (!CUserDisplay::OnscnTimer.m_sClocks[0].m_bClockProcessed || CUserDisplay::OnscnTimer.m_sClocks[0].m_bClockTickThisFrame)
TimerOnLastFrame = false;
for(uint32 i = 0; i < NUMONSCREENCOUNTERS; i++) {
@@ -956,43 +950,45 @@ void CHud::Draw()
}
if (CUserDisplay::OnscnTimer.m_bProcessed) {
- if (CUserDisplay::OnscnTimer.m_sClocks[0].m_bClockProcessed) {
+ if (CUserDisplay::OnscnTimer.m_sClocks[0].m_bClockProcessed && !CUserDisplay::OnscnTimer.m_sClocks[0].m_bClockTickThisFrame) {
if (!TimerOnLastFrame)
TimerFlashTimer = 1;
TimerOnLastFrame = true;
- if (TimerFlashTimer != 0) {
- if (++TimerFlashTimer > 50)
- TimerFlashTimer = 0;
- }
-
if (FRAMECOUNTER & 4 || TimerFlashTimer == 0) {
AsciiToUnicode(CUserDisplay::OnscnTimer.m_sClocks[0].m_aClockBuffer, sTimer);
- CFont::SetPropOn();
- CFont::SetBackgroundOff();
- CFont::SetScale(SCREEN_SCALE_X(HUD_TEXT_SCALE_X), SCREEN_SCALE_Y(HUD_TEXT_SCALE_Y));
- CFont::SetRightJustifyOn();
- CFont::SetRightJustifyWrap(0.0f);
- CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
+ UseTimerCounterFontSettings();
CFont::SetPropOff();
- CFont::SetBackGroundOnlyTextOn();
- CFont::SetDropShadowPosition(2);
- CFont::SetDropColor(CRGBA(0, 0, 0, 255));
- CFont::SetScale(SCREEN_SCALE_X(HUD_TEXT_SCALE_X), SCREEN_SCALE_Y(HUD_TEXT_SCALE_Y));
- CFont::SetColor(TIMER_COLOR);
- CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(37.0f), SCREEN_SCALE_Y(110.0f), sTimer);
- CFont::SetPropOn();
+ CFont::SetColor(CRGBA(
+ CUserDisplay::OnscnTimer.m_sClocks[0].m_aClockColour.r,
+ CUserDisplay::OnscnTimer.m_sClocks[0].m_aClockColour.g,
+ CUserDisplay::OnscnTimer.m_sClocks[0].m_aClockColour.b,
+ m_HudAlpha));
+ CFont::PrintString(PSP_SCREEN_SCALE_FROM_RIGHT(12.0f), PSP_SCREEN_SCALE_Y(31.0f * nNumBigOnscrnLines) + PSP_SCREEN_SCALE_Y(100.0f), sTimer);
if (CUserDisplay::OnscnTimer.m_sClocks[0].m_aClockText[0]) {
- CFont::SetDropShadowPosition(2);
- CFont::SetDropColor(CRGBA(0, 0, 0, 255));
- CFont::SetColor(TIMER_COLOR);
- CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(37.0f) - SCREEN_SCALE_X(80.0f), SCREEN_SCALE_Y(110.0f), TheText.Get(CUserDisplay::OnscnTimer.m_sClocks[0].m_aClockText));
+ float width = CFont::GetStringWidth(sTimer) + PSP_SCREEN_SCALE_Y(4.0f);
+ CFont::SetPropOn();
+ CFont::SetColor(CRGBA(
+ CUserDisplay::OnscnTimer.m_sClocks[0].m_aClockColour.r,
+ CUserDisplay::OnscnTimer.m_sClocks[0].m_aClockColour.g,
+ CUserDisplay::OnscnTimer.m_sClocks[0].m_aClockColour.b,
+ m_HudAlpha));
+ CFont::PrintString(PSP_SCREEN_SCALE_FROM_RIGHT(12.0f) - width, PSP_SCREEN_SCALE_Y(31.0f * nNumBigOnscrnLines) + PSP_SCREEN_SCALE_Y(100.0f), TheText.Get(CUserDisplay::OnscnTimer.m_sClocks[0].m_aClockText));
}
}
+
+ if (TimerFlashTimer != 0) {
+ if (++TimerFlashTimer > 50)
+ TimerFlashTimer = 0;
+ }
}
+ int nNumOnscrnLines = 0;
+ if (CUserDisplay::OnscnTimer.m_sClocks[0].m_bClockProcessed)
+ nNumOnscrnLines = 1;
+
for(uint32 i = 0; i < NUMONSCREENCOUNTERS; i++) {
if (CUserDisplay::OnscnTimer.m_sCounters[i].m_bCounterProcessed) {
if (!CounterOnLastFrame[i])
@@ -1005,52 +1001,62 @@ void CHud::Draw()
CounterFlashTimer[i] = 0;
}
- if (FRAMECOUNTER & 4 || CounterFlashTimer[i] == 0) {
+ if (FRAMECOUNTER & 4 || CounterFlashTimer[i] == 0 || CUserDisplay::OnscnTimer.m_sCounters[i].m_aCounterText2[0] != '\0') {
+ float sizeOfCounter;
if (CUserDisplay::OnscnTimer.m_sCounters[i].m_nType == COUNTER_DISPLAY_NUMBER) {
AsciiToUnicode(CUserDisplay::OnscnTimer.m_sCounters[i].m_aCounterBuffer, sTimer);
- CFont::SetPropOn();
- CFont::SetBackgroundOff();
- CFont::SetScale(SCREEN_SCALE_X(HUD_TEXT_SCALE_X), SCREEN_SCALE_Y(HUD_TEXT_SCALE_Y));
- CFont::SetCentreOff();
- CFont::SetRightJustifyOn();
- CFont::SetRightJustifyWrap(0.0f);
- CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
- CFont::SetWrapx(SCREEN_STRETCH_X(DEFAULT_SCREEN_WIDTH));
- CFont::SetPropOn();
- CFont::SetBackGroundOnlyTextOn();
- CFont::SetDropShadowPosition(2);
- CFont::SetDropColor(CRGBA(0, 0, 0, 255));
- CFont::SetColor(COUNTER_COLOR);
- CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(37.0f), SCREEN_SCALE_Y(HUD_TEXT_SCALE_Y * 20.f * i) + SCREEN_SCALE_Y(132.0f), sTimer);
+ UseTimerCounterFontSettings();
+ CFont::SetPropOff();
+ CFont::SetColor(CRGBA(
+ CUserDisplay::OnscnTimer.m_sCounters[i].m_colour1.r,
+ CUserDisplay::OnscnTimer.m_sCounters[i].m_colour1.g,
+ CUserDisplay::OnscnTimer.m_sCounters[i].m_colour1.b,
+ m_HudAlpha));
+ sizeOfCounter = CFont::GetStringWidth(sTimer) + PSP_SCREEN_SCALE_X(4.0f);
+ CFont::PrintString(PSP_SCREEN_SCALE_FROM_RIGHT(12.0f), PSP_SCREEN_SCALE_Y(100.0f) + PSP_SCREEN_SCALE_Y(20.0f * nNumOnscrnLines) + PSP_SCREEN_SCALE_Y(31.0f * nNumBigOnscrnLines), sTimer);
} else {
int counter = atoi(CUserDisplay::OnscnTimer.m_sCounters[i].m_aCounterBuffer);
- const float barWidth = SCREEN_SCALE_X(100.f / 2.f);
- const float right = SCREEN_SCALE_FROM_RIGHT(37.0f);
+ const float barWidth = PSP_SCREEN_SCALE_X(92.f / 2.f);
+ const float right = PSP_SCREEN_SCALE_FROM_RIGHT(12.0f);
const float left = right - barWidth;
- const float barHeight = SCREEN_SCALE_Y(11.0f);
- const float top = SCREEN_SCALE_Y(132.0f) + SCREEN_SCALE_Y(8.0f) + SCREEN_SCALE_Y(HUD_TEXT_SCALE_Y * 20.f * i);
+ const float barHeight = PSP_SCREEN_SCALE_Y(11.0f);
+ const float top = PSP_SCREEN_SCALE_Y(100.0f) + PSP_SCREEN_SCALE_Y(20.0f * nNumOnscrnLines) + PSP_SCREEN_SCALE_Y(31.0f * nNumBigOnscrnLines) + PSP_SCREEN_SCALE_Y(3.0f);
const float bottom = top + barHeight;
+ sizeOfCounter = barWidth + PSP_SCREEN_SCALE_X(4.0f);
+
// shadow
- CSprite2d::DrawRect(CRect(left + SCREEN_SCALE_X(6.0f), top + SCREEN_SCALE_Y(2.0f), right + SCREEN_SCALE_X(6.0f), bottom + SCREEN_SCALE_Y(2.0f)), CRGBA(0, 0, 0, 255));
+ CSprite2d::DrawRect(CRect(left - PSP_SCREEN_SCALE_X(1.0f), top - PSP_SCREEN_SCALE_Y(1.0f), right + PSP_SCREEN_SCALE_X(1.0f), bottom + PSP_SCREEN_SCALE_Y(1.0f)), CRGBA(0, 0, 0, m_HudAlpha));
- CSprite2d::DrawRect(CRect(left + SCREEN_SCALE_X(4.0f), top, right + SCREEN_SCALE_X(4.0f), bottom), CRGBA(27, 89, 130, 255));
- CSprite2d::DrawRect(CRect(left + SCREEN_SCALE_X(4.0f), top, left + SCREEN_SCALE_X(counter) / 2.0f + SCREEN_SCALE_X(4.0f), bottom), CRGBA(97, 194, 247, 255));
+ CSprite2d::DrawRect(
+ CRect(left, top, right, bottom),
+ CRGBA(
+ CUserDisplay::OnscnTimer.m_sCounters[i].m_colour2.r,
+ CUserDisplay::OnscnTimer.m_sCounters[i].m_colour2.g,
+ CUserDisplay::OnscnTimer.m_sCounters[i].m_colour2.b,
+ m_HudAlpha));
+ CSprite2d::DrawRect(
+ CRect(left, top, left + counter / 100.0f * barWidth, bottom),
+ CRGBA(
+ CUserDisplay::OnscnTimer.m_sCounters[i].m_colour1.r,
+ CUserDisplay::OnscnTimer.m_sCounters[i].m_colour1.g,
+ CUserDisplay::OnscnTimer.m_sCounters[i].m_colour1.b,
+ m_HudAlpha));
}
- if (CUserDisplay::OnscnTimer.m_sCounters[i].m_aCounterText[0]) {
+ if (CUserDisplay::OnscnTimer.m_sCounters[i].m_aCounterText1[0]) {
+ UseTimerCounterFontSettings();
CFont::SetPropOn();
- CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
- CFont::SetScale(SCREEN_SCALE_X(HUD_TEXT_SCALE_X), SCREEN_SCALE_Y(HUD_TEXT_SCALE_Y));
- CFont::SetDropShadowPosition(2);
- CFont::SetDropColor(CRGBA(0, 0, 0, 255));
- CFont::SetColor(COUNTER_COLOR);
- CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(37.0f) - SCREEN_SCALE_X(61.0f), SCREEN_SCALE_Y(HUD_TEXT_SCALE_Y * 20.f * i) + SCREEN_SCALE_Y(132.0f), TheText.Get(CUserDisplay::OnscnTimer.m_sCounters[i].m_aCounterText));
+ CFont::SetColor(CRGBA(
+ CUserDisplay::OnscnTimer.m_sCounters[i].m_colour1.r,
+ CUserDisplay::OnscnTimer.m_sCounters[i].m_colour1.g,
+ CUserDisplay::OnscnTimer.m_sCounters[i].m_colour1.b,
+ m_HudAlpha));
+ CFont::PrintString(PSP_SCREEN_SCALE_FROM_RIGHT(12.0f) - sizeOfCounter, PSP_SCREEN_SCALE_Y(100.0f) + PSP_SCREEN_SCALE_Y(20.f * nNumOnscrnLines) + PSP_SCREEN_SCALE_Y(31.0f * nNumBigOnscrnLines), TheText.Get(CUserDisplay::OnscnTimer.m_sCounters[i].m_aCounterText1));
}
- // unused/leftover color. I wonder what was it for
- CFont::SetColor(CRGBA(244, 225, 91, 255));
+ nNumOnscrnLines++;
}
}
}
@@ -1205,7 +1211,7 @@ void CHud::Draw()
onceItWasWidescreen = false;
CFont::DrawFonts();
- CFont::SetDropShadowPosition(2);
+ CFont::SetDropShadowPosition(0);
CFont::SetDropColor(CRGBA(0, 0, 0, 255));
CFont::SetScale(SCREEN_SCALE_X(0.58f), SCREEN_SCALE_Y(1.22f));
@@ -1431,6 +1437,221 @@ void CHud::Draw()
}
}
+int HealthFlashTimer = 50;
+
+void
+CHud::DrawHealthBar(int16 value)
+{
+ if (m_ItemToFlash == ITEM_HEALTH) {
+ if (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_fHealth > 10.0f) {
+ if (HealthFlashTimer-- == 0) {
+ m_ItemToFlash = -1;
+ HealthFlashTimer = 50;
+ }
+ }
+ }
+ float fHealth = value;
+ float fMaxHealth = CWorld::Players[CWorld::PlayerInFocus].m_nMaxHealth;
+ fHealth = Clamp(fHealth, 0.0f, fMaxHealth);
+ float fWidth = (fHealth / fMaxHealth) * 40.0f + 16.0f + 4.0f;
+ float u = fWidth / 64.0f;
+ if (value == 0) {
+ fWidth = 0.0f;
+ u = 0.0f;
+ } else if (value == fMaxHealth) {
+ fWidth = 64.0f;
+ u = 1.0f;
+ }
+
+ if (FrontEndMenuManager.m_PrefsUseWideScreen)
+ fWidth *= 0.68f;
+ else
+ fWidth *= 0.85f;
+
+ float fX1 = FrontEndMenuManager.m_PrefsUseWideScreen ? 375.0f : 360.0f;
+ float fX2 = fWidth + (FrontEndMenuManager.m_PrefsUseWideScreen ? 375.0f : 360.0f);
+ CRect rect1(PSP_SCREEN_SCALE_X(fX1), PSP_SCREEN_SCALE_Y(40.0f), PSP_SCREEN_SCALE_X(fX2), PSP_SCREEN_SCALE_Y(50.0f));
+ CRGBA color1(255, 255, 255, m_HudAlpha);
+ Sprites[HUD_BAR_INSIDE2].Draw(rect1, color1, 0.0f, 0.0f, u, 0.0f, 0.0f, 1.0f, u, 1.0f);
+
+ fX1 = fWidth + (FrontEndMenuManager.m_PrefsUseWideScreen ? 375.0f : 360.0f);
+ fX2 = (FrontEndMenuManager.m_PrefsUseWideScreen ? 43.52f : 54.4f) + (FrontEndMenuManager.m_PrefsUseWideScreen ? 375.0f : 360.0f);
+ CRect rect2(PSP_SCREEN_SCALE_X(fX1), PSP_SCREEN_SCALE_Y(40.0f), PSP_SCREEN_SCALE_X(fX2), PSP_SCREEN_SCALE_Y(50.0f));
+ CRGBA color2(255, 255, 255, m_HudAlpha);
+ Sprites[HUD_BAR_INSIDE2DARK].Draw(rect2, color2, u, 0.0f, 1.0f, 0.0f, u, 1.0f, 1.0f, 1.0f);
+
+ fX1 = FrontEndMenuManager.m_PrefsUseWideScreen ? 375.0f : 360.0f;
+ fX2 = (FrontEndMenuManager.m_PrefsUseWideScreen ? 43.52f : 54.4f) + (FrontEndMenuManager.m_PrefsUseWideScreen ? 375.0f : 360.0f);
+ CRect rect3(PSP_SCREEN_SCALE_X(fX1), PSP_SCREEN_SCALE_Y(40.0f), PSP_SCREEN_SCALE_X(fX2), PSP_SCREEN_SCALE_Y(50.0f));
+ CRGBA color3(255, 255, 255, m_HudAlpha);
+ Sprites[HUD_BAR_OUTLINE].Draw(rect3, color3, 0.01f, 0.0f, 1.0f, 0.0f, 0.01f, 1.0f, 1.0f, 1.0f);
+
+ if (fMaxHealth > 100.0f)
+ {
+ CFont::SetFontStyle(FONT_STANDARD);
+ CFont::SetDropShadowPosition(0);
+ CFont::SetDropColor(CRGBA(0, 0, 0, m_HudAlpha));
+ CFont::SetColor(CRGBA(255, 255, 255, m_HudAlpha));
+ CFont::SetCentreOn();
+ if (fMaxHealth > 125.0f)
+ CFont::SetScale(FrontEndMenuManager.StretchX(PSP_SCALE_TO_PS2_X(FrontEndMenuManager.m_PrefsUseWideScreen ? 0.3375f : 0.45f)), FrontEndMenuManager.StretchY(PSP_SCALE_TO_PS2_Y(0.75f)));
+ else
+ CFont::SetScale(FrontEndMenuManager.StretchX(PSP_SCALE_TO_PS2_X(FrontEndMenuManager.m_PrefsUseWideScreen ? 0.2625f : 0.35f)), FrontEndMenuManager.StretchY(PSP_SCALE_TO_PS2_Y(0.6f)));
+
+ if (FrontEndMenuManager.m_PrefsUseWideScreen)
+ fX1 = 375.0f + 12.0f;
+ else
+ fX1 = 360.0f + 15.0f;
+ CFont::PrintString(PSP_SCREEN_SCALE_X(fX1), PSP_SCREEN_SCALE_Y(36.0f), (wchar*)L"+");
+ }
+
+}
+
+int ArmourFlashTimer = 50;
+
+void
+CHud::DrawArmourBar(int16 value)
+{
+ if (m_ItemToFlash == ITEM_ARMOUR) {
+ if (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_fArmour > 10.0f) {
+ if (ArmourFlashTimer-- == 0) {
+ m_ItemToFlash = -1;
+ ArmourFlashTimer = 50;
+ }
+ }
+ }
+ float fArmour = value;
+ float fMaxArmour = CWorld::Players[CWorld::PlayerInFocus].m_nMaxArmour;
+ fArmour = Clamp(fArmour, 0.0f, fMaxArmour);
+ float fWidth = (fArmour / fMaxArmour) * 40.0f + 16.0f + 4.0f;
+ float u = fWidth / 64.0f;
+ if (value == 0) {
+ fWidth = 0.0f;
+ u = 0.0f;
+ } else if (value == fMaxArmour) {
+ fWidth = 64.0f;
+ u = 1.0f;
+ }
+
+ if (FrontEndMenuManager.m_PrefsUseWideScreen)
+ fWidth *= 0.68f;
+ else
+ fWidth *= 0.85f;
+
+ float fX1 = FrontEndMenuManager.m_PrefsUseWideScreen ? 375.0f : 360.0f;
+ float fX2 = fWidth + (FrontEndMenuManager.m_PrefsUseWideScreen ? 375.0f : 360.0f);
+ CRect rect1(PSP_SCREEN_SCALE_X(fX1), PSP_SCREEN_SCALE_Y(28.0f), PSP_SCREEN_SCALE_X(fX2), PSP_SCREEN_SCALE_Y(38.0f));
+ CRGBA color1(255, 255, 255, m_HudAlpha);
+ Sprites[HUD_BAR_INSIDE1].Draw(rect1, color1, 0.0f, 0.0f, u, 0.0f, 0.0f, 1.0f, u, 1.0f);
+
+ fX1 = fWidth + (FrontEndMenuManager.m_PrefsUseWideScreen ? 375.0f : 360.0f);
+ fX2 = (FrontEndMenuManager.m_PrefsUseWideScreen ? 43.52f : 54.4f) + (FrontEndMenuManager.m_PrefsUseWideScreen ? 375.0f : 360.0f);
+ CRect rect2(PSP_SCREEN_SCALE_X(fX1), PSP_SCREEN_SCALE_Y(28.0f), PSP_SCREEN_SCALE_X(fX2), PSP_SCREEN_SCALE_Y(38.0f));
+ CRGBA color2(255, 255, 255, m_HudAlpha);
+ Sprites[HUD_BAR_INSIDE1DARK].Draw(rect2, color2, u, 0.0f, 1.0f, 0.0f, u, 1.0f, 1.0f, 1.0f);
+
+ fX1 = FrontEndMenuManager.m_PrefsUseWideScreen ? 375.0f : 360.0f;
+ fX2 = (FrontEndMenuManager.m_PrefsUseWideScreen ? 43.52f : 54.4f) + (FrontEndMenuManager.m_PrefsUseWideScreen ? 375.0f : 360.0f);
+ CRect rect3(PSP_SCREEN_SCALE_X(fX1), PSP_SCREEN_SCALE_Y(28.0f), PSP_SCREEN_SCALE_X(fX2), PSP_SCREEN_SCALE_Y(38.0f));
+ CRGBA color3(255, 255, 255, m_HudAlpha);
+ Sprites[HUD_BAR_OUTLINE].Draw(rect3, color3, 0.01f, 0.0f, 1.0f, 0.0f, 0.01f, 1.0f, 1.0f, 1.0f);
+
+ if (fMaxArmour > 100.0f) {
+ CFont::SetFontStyle(FONT_STANDARD);
+ CFont::SetDropShadowPosition(0);
+ CFont::SetDropColor(CRGBA(0, 0, 0, m_HudAlpha));
+ CFont::SetColor(CRGBA(255, 255, 255, m_HudAlpha));
+ CFont::SetCentreOn();
+ if (fMaxArmour > 125.0f)
+ CFont::SetScale(FrontEndMenuManager.StretchX(PSP_SCALE_TO_PS2_X(FrontEndMenuManager.m_PrefsUseWideScreen ? 0.3375f : 0.45f)), FrontEndMenuManager.StretchY(PSP_SCALE_TO_PS2_Y(0.75f)));
+ else
+ CFont::SetScale(FrontEndMenuManager.StretchX(PSP_SCALE_TO_PS2_X(FrontEndMenuManager.m_PrefsUseWideScreen ? 0.2625f : 0.35f)), FrontEndMenuManager.StretchY(PSP_SCALE_TO_PS2_Y(0.6f)));
+
+ if (FrontEndMenuManager.m_PrefsUseWideScreen)
+ fX1 = 375.0f + 12.0f;
+ else
+ fX1 = 360.0f + 15.0f;
+ CFont::PrintString(PSP_SCREEN_SCALE_X(fX1), PSP_SCREEN_SCALE_Y(24.0f), (wchar*)L"+");
+ }
+
+}
+
+void
+CHud::DrawTimeAndCashNumbers(char *str, float x, float y, bool secondSet)
+{
+ CRGBA color(255, 255, 255, m_HudAlpha);
+
+ float width = 11.0f;
+ if (FrontEndMenuManager.m_PrefsUseWideScreen)
+ width = 9.0f;
+
+ float height = 10.0f;
+ while (*str) {
+ uint8 c = *str;
+ if (c >= '0' && c <= ':')
+ {
+ if (secondSet) c -= '%';
+ else c -= '0';
+ } else {
+ if (c == 22) {
+ if (secondSet)
+ color = CRGBA(62, 141, 188, m_HudAlpha);
+ else
+ color = CRGBA(192, 155, 54, m_HudAlpha);
+ } else if (!secondSet)
+ c = 10;
+ else
+ c = 21;
+ }
+
+ int row = c / 8;
+ int col = c - row * 8;
+ float width2 = width;
+ if (c == 22)
+ width2 += 3.0f;
+ CRect rect(PSP_SCREEN_SCALE_X(x), PSP_SCREEN_SCALE_Y(y), PSP_SCREEN_SCALE_X(x+ width2), PSP_SCREEN_SCALE_Y(y) + PSP_SCREEN_SCALE_Y(height));
+
+ float u = col * 0.125f;
+ // TODO(LCS): some odd calculation with u going on in here if it's < 0, it might be fabs, but maybe not
+
+ float v = row * 0.265625f;
+ // TODO(LCS): same odd calculation with v as above
+
+ str++;
+ Sprites[HUD_HUDNUMBERS].Draw(rect, color, u, v, u + 0.125f, v, u, v + 0.265625f, u + 0.125f, v + 0.265625f);
+
+ x += (width - 2.0f);
+ if (c == 10)
+ x -= 4.0f;
+
+#ifdef GTA_PSP
+ x = Ceil(PSP_SCREEN_SCALE_X(x)) * ((float)PSP_DEFAULT_SCREEN_WIDTH / (float)SCREEN_WIDTH);
+#else
+ // BUG: actually above wasn't PSP only but on higher resolutions things don't look like they were meant to, so we stick with PS2 version here
+ x = Ceil(PSP_SCALE_TO_PS2_X(x)) * ((float)PSP_DEFAULT_SCREEN_WIDTH / (float)DEFAULT_SCREEN_WIDTH);
+#endif
+ }
+}
+
+void
+CHud::DrawCash()
+{
+ char str[200];
+ sprintf(str, "$%08d", CWorld::Players[CWorld::PlayerInFocus].m_nMoney);
+ DrawTimeAndCashNumbers(str, FrontEndMenuManager.m_PrefsUseWideScreen ? 386.0f : 373.0f, 53.0f, true);
+}
+
+void
+CHud::DrawTime()
+{
+ // TODO(LCS): a lot more code should be here
+
+ char str[24];
+ sprintf(str, "%02d:%02d", CClock::ms_nGameClockHours, CClock::ms_nGameClockMinutes);
+ DrawTimeAndCashNumbers(str, FrontEndMenuManager.m_PrefsUseWideScreen ? 386.0f : 373.0f, 17.0f, false);
+}
+
+
void CHud::DrawAfterFade()
{
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERNEAREST);
@@ -1840,7 +2061,7 @@ void CHud::ReInitialise() {
m_LastWeapon = 0;
}
-wchar LastBigMessage[6][128];
+wchar LastBigMessage[8][128];
void CHud::SetBigMessage(wchar *message, uint16 style)
{
@@ -2087,3 +2308,17 @@ CHud::ResetWastedText(void)
m_BigMessage[2][0] = 0;
m_BigMessage[0][0] = 0;
}
+
+void
+CHud::UseTimerCounterFontSettings()
+{
+ CFont::SetScale(PSP_SCREEN_SCALE_X(0.4048f), PSP_SCREEN_SCALE_Y(0.88f));
+ CFont::SetFontStyle(FONT_STANDARD);
+ CFont::SetCentreOff();
+ CFont::SetRightJustifyOn();
+ CFont::SetRightJustifyWrap(0.0f);
+ CFont::SetDropShadowPosition(0);
+ CFont::SetDropColor(CRGBA(0, 0, 0, 0));
+ CFont::SetBackgroundOff();
+ CFont::SetBackGroundOnlyTextOff();
+} \ No newline at end of file