Merge branch 'miami' into Font

# Conflicts:
#	src/render/Font.cpp
#	src/render/Font.h
This commit is contained in:
Sergeanur 2020-06-07 04:16:10 +03:00
commit 24bf4c2cba
36 changed files with 1386 additions and 228 deletions

View File

@ -75,7 +75,7 @@ CDarkel::DrawMessages()
CFont::SetScale(SCREEN_SCALE_X(1.3f), SCREEN_SCALE_Y(1.3f)); CFont::SetScale(SCREEN_SCALE_X(1.3f), SCREEN_SCALE_Y(1.3f));
CFont::SetJustifyOff(); CFont::SetJustifyOff();
CFont::SetColor(CRGBA(255, 255, 128, CalcFade(timePassedSinceStart, 3000, 11000))); CFont::SetColor(CRGBA(255, 255, 128, CalcFade(timePassedSinceStart, 3000, 11000)));
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
if (pStartMessage) { if (pStartMessage) {
CFont::PrintString(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, pStartMessage); CFont::PrintString(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, pStartMessage);
} }
@ -85,7 +85,7 @@ CDarkel::DrawMessages()
CFont::SetScale(SCREEN_SCALE_X(1.3f), SCREEN_SCALE_Y(1.3f)); CFont::SetScale(SCREEN_SCALE_X(1.3f), SCREEN_SCALE_Y(1.3f));
CFont::SetJustifyOff(); CFont::SetJustifyOff();
CFont::SetColor(CRGBA(255, 255, 128, CalcFade(timePassedSinceStart, 0, 8000))); CFont::SetColor(CRGBA(255, 255, 128, CalcFade(timePassedSinceStart, 0, 8000)));
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
if (pStartMessage) { if (pStartMessage) {
CFont::PrintString(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, pStartMessage); CFont::PrintString(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, pStartMessage);
} }
@ -125,7 +125,7 @@ CDarkel::DrawMessages()
CFont::SetScale(SCREEN_SCALE_X(1.5f), SCREEN_SCALE_Y(1.5f)); CFont::SetScale(SCREEN_SCALE_X(1.5f), SCREEN_SCALE_Y(1.5f));
CFont::SetJustifyOff(); CFont::SetJustifyOff();
CFont::SetColor(CRGBA(128, 255, 128, CalcFade(timePassedSinceStart, 0, 5000))); CFont::SetColor(CRGBA(128, 255, 128, CalcFade(timePassedSinceStart, 0, 5000)));
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
int y = SCREEN_HEIGHT / 2 + SCREEN_SCALE_Y(25.0f - timePassedSinceStart * 0.01f); int y = SCREEN_HEIGHT / 2 + SCREEN_SCALE_Y(25.0f - timePassedSinceStart * 0.01f);
CFont::PrintString(SCREEN_WIDTH / 2, y, TheText.Get("KF_3")); CFont::PrintString(SCREEN_WIDTH / 2, y, TheText.Get("KF_3"));
} }

View File

@ -1337,7 +1337,7 @@ void CGarages::PrintMessages()
CFont::SetBackgroundOff(); CFont::SetBackgroundOff();
CFont::SetCentreSize(SCREEN_SCALE_FROM_RIGHT(50.0f)); CFont::SetCentreSize(SCREEN_SCALE_FROM_RIGHT(50.0f));
CFont::SetCentreOn(); CFont::SetCentreOn();
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); // TODO(MIAMI): redo it CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
CFont::SetColor(CRGBA(0, 0, 0, 255)); CFont::SetColor(CRGBA(0, 0, 0, 255));
#if defined(PS2) || defined (FIX_BUGS) #if defined(PS2) || defined (FIX_BUGS)

View File

@ -992,7 +992,7 @@ CPickups::RenderPickUpText()
CFont::SetColor(CRGBA(aMessages[i].m_color.red, aMessages[i].m_color.green, aMessages[i].m_color.blue, aMessages[i].m_color.alpha)); CFont::SetColor(CRGBA(aMessages[i].m_color.red, aMessages[i].m_color.green, aMessages[i].m_color.blue, aMessages[i].m_color.alpha));
CFont::SetBackGroundOnlyTextOff(); CFont::SetBackGroundOnlyTextOff();
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
CFont::PrintString(aMessages[i].m_pos.x, aMessages[i].m_pos.y, strToPrint); CFont::PrintString(aMessages[i].m_pos.x, aMessages[i].m_pos.y, strToPrint);
} }
NumMessages = 0; NumMessages = 0;

View File

@ -1605,7 +1605,7 @@ void CReplay::Display()
CFont::SetScale(SCREEN_SCALE_X(1.5f), SCREEN_SCALE_Y(1.5f)); CFont::SetScale(SCREEN_SCALE_X(1.5f), SCREEN_SCALE_Y(1.5f));
CFont::SetAlignment(ALIGN_LEFT); CFont::SetAlignment(ALIGN_LEFT);
CFont::SetColor(CRGBA(255, 255, 200, 200)); CFont::SetColor(CRGBA(255, 255, 200, 200));
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
if (Mode == MODE_PLAYBACK) if (Mode == MODE_PLAYBACK)
CFont::PrintString(SCREEN_SCALE_X(63.5f), SCREEN_SCALE_Y(30.0f), TheText.Get("REPLAY")); CFont::PrintString(SCREEN_SCALE_X(63.5f), SCREEN_SCALE_Y(30.0f), TheText.Get("REPLAY"));
} }

View File

@ -269,7 +269,7 @@ void CSceneEdit::Draw(void)
CFont::SetRightJustifyWrap(0.0f); CFont::SetRightJustifyWrap(0.0f);
CFont::SetBackGroundOnlyTextOff(); CFont::SetBackGroundOnlyTextOff();
#ifdef FIX_BUGS #ifdef FIX_BUGS
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
CFont::SetPropOn(); CFont::SetPropOn();
CFont::SetDropColor(CRGBA(0, 0, 0, 255)); CFont::SetDropColor(CRGBA(0, 0, 0, 255));
CFont::SetDropShadowPosition(1); CFont::SetDropShadowPosition(1);
@ -292,7 +292,7 @@ void CSceneEdit::Draw(void)
CFont::SetCentreOff(); CFont::SetCentreOff();
CFont::SetScale(SCREEN_SCALE_X(0.7f), SCREEN_SCALE_Y(0.7f)); CFont::SetScale(SCREEN_SCALE_X(0.7f), SCREEN_SCALE_Y(0.7f));
#ifdef FIX_BUGS #ifdef FIX_BUGS
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
#else #else
CFont::SetFontStyle(FONT_HEADING); CFont::SetFontStyle(FONT_HEADING);
#endif #endif

View File

@ -14288,7 +14288,11 @@ void CTheScripts::UpdateObjectIndices()
if (!pModel) if (!pModel)
continue; continue;
strcpy(name, pModel->GetName()); strcpy(name, pModel->GetName());
#ifdef FIX_BUGS
for (int k = 0; k < USED_OBJECT_NAME_LENGTH && name[k]; k++)
#else
for (int k = 0; k < USED_OBJECT_NAME_LENGTH; k++) for (int k = 0; k < USED_OBJECT_NAME_LENGTH; k++)
#endif
name[k] = toupper(name[k]); name[k] = toupper(name[k]);
if (strcmp(name, UsedObjectArray[i].name) == 0) { if (strcmp(name, UsedObjectArray[i].name) == 0) {
found = true; found = true;

View File

@ -437,9 +437,9 @@ void CControllerConfigManager::InitialiseControllerActionNameArray()
SETACTIONNAME(PED_CYCLE_TARGET_LEFT); SETACTIONNAME(PED_CYCLE_TARGET_LEFT);
SETACTIONNAME(PED_CYCLE_TARGET_RIGHT); SETACTIONNAME(PED_CYCLE_TARGET_RIGHT);
SETACTIONNAME(PED_CENTER_CAMERA_BEHIND_PLAYER); SETACTIONNAME(PED_CENTER_CAMERA_BEHIND_PLAYER);
SETACTIONNAME(VEHICLE_LOOKBEHIND);
SETACTIONNAME(PED_DUCK); SETACTIONNAME(PED_DUCK);
SETACTIONNAME(PED_ANSWER_PHONE); SETACTIONNAME(PED_ANSWER_PHONE);
SETACTIONNAME(VEHICLE_LOOKBEHIND);
SETACTIONNAME(VEHICLE_LOOKLEFT); SETACTIONNAME(VEHICLE_LOOKLEFT);
SETACTIONNAME(VEHICLE_LOOKRIGHT); SETACTIONNAME(VEHICLE_LOOKRIGHT);
SETACTIONNAME(VEHICLE_HORN); SETACTIONNAME(VEHICLE_HORN);
@ -462,6 +462,10 @@ void CControllerConfigManager::InitialiseControllerActionNameArray()
SETACTIONNAME(GO_RIGHT); SETACTIONNAME(GO_RIGHT);
SETACTIONNAME(GO_FORWARD); SETACTIONNAME(GO_FORWARD);
SETACTIONNAME(GO_BACK); SETACTIONNAME(GO_BACK);
SETACTIONNAME(VEHICLE_TURRETLEFT);
SETACTIONNAME(VEHICLE_TURRETRIGHT);
SETACTIONNAME(VEHICLE_TURRETUP);
SETACTIONNAME(VEHICLE_TURRETDOWN);
SETACTIONNAME(NETWORK_TALK); SETACTIONNAME(NETWORK_TALK);
SETACTIONNAME(TOGGLE_DPAD); SETACTIONNAME(TOGGLE_DPAD);
SETACTIONNAME(SWITCH_DEBUG_CAM_ON); SETACTIONNAME(SWITCH_DEBUG_CAM_ON);

View File

@ -55,7 +55,7 @@ CDebug::DebugDisplayTextBuffer()
CFont::SetJustifyOn(); CFont::SetJustifyOn();
CFont::SetRightJustifyWrap(0.0f); CFont::SetRightJustifyWrap(0.0f);
CFont::SetBackGroundOnlyTextOff(); CFont::SetBackGroundOnlyTextOff();
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
#else #else
// this is not even readable // this is not even readable
CFont::SetPropOff(); CFont::SetPropOff();
@ -65,7 +65,7 @@ CDebug::DebugDisplayTextBuffer()
CFont::SetRightJustifyOn(); CFont::SetRightJustifyOn();
CFont::SetRightJustifyWrap(0.0f); CFont::SetRightJustifyWrap(0.0f);
CFont::SetBackGroundOnlyTextOff(); CFont::SetBackGroundOnlyTextOff();
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
CFont::SetPropOff(); CFont::SetPropOff();
#endif #endif
do { do {
@ -113,7 +113,7 @@ CDebug::DisplayScreenStrings()
CFont::SetRightJustifyWrap(0.0f); CFont::SetRightJustifyWrap(0.0f);
CFont::SetWrapx(9999.0f); CFont::SetWrapx(9999.0f);
CFont::SetBackGroundOnlyTextOff(); CFont::SetBackGroundOnlyTextOff();
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
for(i = 0; i < ms_nScreenStrs; i++){ for(i = 0; i < ms_nScreenStrs; i++){
/* /*

View File

@ -826,7 +826,7 @@ CMenuManager::DrawStandardMenus(bool drawCurrScreen)
if (aScreens[m_nCurrScreen].m_aEntries[0].m_Action == MENUACTION_LABEL) { if (aScreens[m_nCurrScreen].m_aEntries[0].m_Action == MENUACTION_LABEL) {
CFont::SetWrapx(MENU_X_RIGHT_ALIGNED(MENULABEL_X_MARGIN)); CFont::SetWrapx(MENU_X_RIGHT_ALIGNED(MENULABEL_X_MARGIN));
CFont::SetRightJustifyWrap(SCREEN_SCALE_X(MENULABEL_WIDTH)); CFont::SetRightJustifyWrap(SCREEN_SCALE_X(MENULABEL_WIDTH));
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
CFont::SetScale(MENU_X(BIGTEXT2_X_SCALE), MENU_Y(BIGTEXT2_Y_SCALE)); CFont::SetScale(MENU_X(BIGTEXT2_X_SCALE), MENU_Y(BIGTEXT2_Y_SCALE));
CFont::SetRightJustifyOff(); CFont::SetRightJustifyOff();
@ -911,7 +911,7 @@ CMenuManager::DrawStandardMenus(bool drawCurrScreen)
wchar* leftText; wchar* leftText;
if (aScreens[m_nCurrScreen].m_aEntries[i].m_SaveSlot >= SAVESLOT_1 && aScreens[m_nCurrScreen].m_aEntries[i].m_SaveSlot <= SAVESLOT_8) { if (aScreens[m_nCurrScreen].m_aEntries[i].m_SaveSlot >= SAVESLOT_1 && aScreens[m_nCurrScreen].m_aEntries[i].m_SaveSlot <= SAVESLOT_8) {
CFont::SetColor(CRGBA(0, 0, 0, FadeIn(255))); CFont::SetColor(CRGBA(0, 0, 0, FadeIn(255)));
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
CFont::SetScale(MENU_X(MEDIUMTEXT_X_SCALE), MENU_Y(MEDIUMTEXT_Y_SCALE)); CFont::SetScale(MENU_X(MEDIUMTEXT_X_SCALE), MENU_Y(MEDIUMTEXT_Y_SCALE));
CFont::SetDropShadowPosition(0); CFont::SetDropShadowPosition(0);
} else { } else {
@ -1255,7 +1255,7 @@ CMenuManager::DrawStandardMenus(bool drawCurrScreen)
CFont::SetCentreOff(); CFont::SetCentreOff();
CFont::SetRightJustifyOn(); CFont::SetRightJustifyOn();
if (aScreens[m_nCurrScreen].m_aEntries[i].m_SaveSlot >= SAVESLOT_1 && aScreens[m_nCurrScreen].m_aEntries[i].m_SaveSlot <= SAVESLOT_8) { if (aScreens[m_nCurrScreen].m_aEntries[i].m_SaveSlot >= SAVESLOT_1 && aScreens[m_nCurrScreen].m_aEntries[i].m_SaveSlot <= SAVESLOT_8) {
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
CFont::SetScale(MENU_X(MEDIUMTEXT_X_SCALE), MENU_Y(MEDIUMTEXT_Y_SCALE)); CFont::SetScale(MENU_X(MEDIUMTEXT_X_SCALE), MENU_Y(MEDIUMTEXT_Y_SCALE));
} else { } else {
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING)); CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
@ -1720,7 +1720,7 @@ CMenuManager::DrawControllerBound(int32 yStart, int32 xStart, int32 unused, int8
CFont::SetRightJustifyOff(); CFont::SetRightJustifyOff();
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE)); CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE));
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
if (!m_bKeyIsOK) if (!m_bKeyIsOK)
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0); DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
@ -1733,7 +1733,7 @@ CMenuManager::DrawControllerBound(int32 yStart, int32 xStart, int32 unused, int8
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::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::SetRightJustifyOff();
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE)); CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE));
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
m_bKeyIsOK = false; m_bKeyIsOK = false;
m_bKeyChangeNotProcessed = false; m_bKeyChangeNotProcessed = false;
} }
@ -1745,7 +1745,7 @@ CMenuManager::DrawControllerBound(int32 yStart, int32 xStart, int32 unused, int8
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::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::SetRightJustifyOff();
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE)); CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE));
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
} }
} }
} }
@ -1918,7 +1918,7 @@ CMenuManager::DrawControllerSetupScreen()
CFont::PrintString(MENU_X_LEFT_ALIGNED(CONTSETUP_COLUMN_3_X), MENU_Y(CONTSETUP_LIST_TOP), TheText.Get("FET_CCR")); CFont::PrintString(MENU_X_LEFT_ALIGNED(CONTSETUP_COLUMN_3_X), MENU_Y(CONTSETUP_LIST_TOP), TheText.Get("FET_CCR"));
CFont::SetRightJustifyOff(); CFont::SetRightJustifyOff();
CFont::SetScale(MENU_X_LEFT_ALIGNED(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE)); CFont::SetScale(MENU_X_LEFT_ALIGNED(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE));
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
int yStart; int yStart;
if (m_ControlMethod == CONTROL_CLASSIC) if (m_ControlMethod == CONTROL_CLASSIC)
yStart = CONTSETUP_LIST_HEADER_HEIGHT + 29; yStart = CONTSETUP_LIST_HEADER_HEIGHT + 29;
@ -2221,7 +2221,7 @@ CMenuManager::DrawBackground()
if (CheckHover(xStart, xStart + optionWidth, optionTop, optionBottom)) if (CheckHover(xStart, xStart + optionWidth, optionTop, optionBottom))
hoveredBottomBarOption = i; hoveredBottomBarOption = i;
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
CFont::SetScale(MENU_X(0.35f), MENU_Y(0.7f)); CFont::SetScale(MENU_X(0.35f), MENU_Y(0.7f));
CFont::SetRightJustifyOff(); CFont::SetRightJustifyOff();
if (hoveredBottomBarOption == i && hoveredBottomBarOption != curBottomBarOption) if (hoveredBottomBarOption == i && hoveredBottomBarOption != curBottomBarOption)
@ -2626,7 +2626,7 @@ CMenuManager::DrawPlayerSetupScreen()
// Skin list // Skin list
CFont::SetRightJustifyOff(); CFont::SetRightJustifyOff();
CFont::SetScale(MENU_X(PLAYERSETUP_ROW_TEXT_X_SCALE), MENU_Y(PLAYERSETUP_ROW_TEXT_Y_SCALE)); CFont::SetScale(MENU_X(PLAYERSETUP_ROW_TEXT_X_SCALE), MENU_Y(PLAYERSETUP_ROW_TEXT_Y_SCALE));
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
if (m_nSkinsTotal > 0) { if (m_nSkinsTotal > 0) {
for (m_pSelectedSkin = m_pSkinListHead.nextSkin; m_pSelectedSkin->skinId != m_nFirstVisibleRowOnList; for (m_pSelectedSkin = m_pSkinListHead.nextSkin; m_pSelectedSkin->skinId != m_nFirstVisibleRowOnList;
m_pSelectedSkin = m_pSelectedSkin->nextSkin); m_pSelectedSkin = m_pSelectedSkin->nextSkin);
@ -3281,7 +3281,7 @@ CMenuManager::SmallMessageScreen(const char* text)
CFont::SetJustifyOn(); CFont::SetJustifyOn();
CFont::SetBackGroundOnlyTextOn(); CFont::SetBackGroundOnlyTextOn();
CSprite2d::DrawRect(CRect(SCREEN_SCALE_X(95.0f), SCREEN_SCALE_FROM_BOTTOM(165.0f), SCREEN_SCALE_FROM_RIGHT(95.0f), SCREEN_SCALE_Y(115.0f)), CRGBA(50, 50, 50, FadeIn(210))); CSprite2d::DrawRect(CRect(SCREEN_SCALE_X(95.0f), SCREEN_SCALE_FROM_BOTTOM(165.0f), SCREEN_SCALE_FROM_RIGHT(95.0f), SCREEN_SCALE_Y(115.0f)), CRGBA(50, 50, 50, FadeIn(210)));
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
CFont::SetCentreSize(SCREEN_SCALE_X(430.0f)); CFont::SetCentreSize(SCREEN_SCALE_X(430.0f));
CFont::SetCentreOn(); CFont::SetCentreOn();
CFont::SetColor(CRGBA(255, 217, 106, FadeIn(255))); CFont::SetColor(CRGBA(255, 217, 106, FadeIn(255)));
@ -3293,7 +3293,7 @@ void
CMenuManager::PrintBriefs() CMenuManager::PrintBriefs()
{ {
CFont::SetColor(CRGBA(235, 170, 50, FadeIn(255))); CFont::SetColor(CRGBA(235, 170, 50, FadeIn(255)));
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
CFont::SetRightJustifyOff(); 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 CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X * 0.7), MENU_Y(MENU_TEXT_SIZE_Y * 0.9)); // second mulipliers are double, idk why
@ -3345,7 +3345,7 @@ CMenuManager::PrintStats()
{ {
int rowNum = ConstructStatLine(99999); int rowNum = ConstructStatLine(99999);
#ifdef GTA3_1_1_PATCH #ifdef GTA3_1_1_PATCH
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
#endif #endif
CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X * 0.7), MENU_Y(MENU_TEXT_SIZE_Y * 0.9)); // second mulipliers are double, idk why CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X * 0.7), MENU_Y(MENU_TEXT_SIZE_Y * 0.9)); // second mulipliers are double, idk why
float nextYChange, y, alphaMult; float nextYChange, y, alphaMult;
@ -4545,11 +4545,6 @@ CMenuManager::ProcessButtonPresses(void)
} }
break; break;
} }
//case MENUACTION_KEYBOARDCTRLS:
// SwitchToNewScreen(MENUPAGE_KEYBOARD_CONTROLS);
// m_nSelectedListRow = 0;
// m_nCurrExLayer = HOVEROPTION_LIST;
// break;
} }
} }
ProcessOnOffMenuOptions(); ProcessOnOffMenuOptions();
@ -4767,6 +4762,7 @@ void
CMenuManager::ProcessOnOffMenuOptions() CMenuManager::ProcessOnOffMenuOptions()
{ {
switch (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action) { switch (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action) {
#ifdef LEGACY_MENU_OPTIONS
case MENUACTION_CTRLVIBRATION: case MENUACTION_CTRLVIBRATION:
m_PrefsUseVibration = !m_PrefsUseVibration; m_PrefsUseVibration = !m_PrefsUseVibration;
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0); DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
@ -4777,6 +4773,7 @@ CMenuManager::ProcessOnOffMenuOptions()
CPad::GetPad(0)->Mode = 0; CPad::GetPad(0)->Mode = 0;
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0); DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
break; break;
#endif
case MENUACTION_FRAMESYNC: case MENUACTION_FRAMESYNC:
m_PrefsVsyncDisp = !m_PrefsVsyncDisp; m_PrefsVsyncDisp = !m_PrefsVsyncDisp;
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0); DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
@ -5341,7 +5338,7 @@ CMenuManager::PrintMap(void)
CRGBA(MAPINFOBOX_COLOR.r, MAPINFOBOX_COLOR.g, MAPINFOBOX_COLOR.b, MAPINFOBOX_COLOR.a)); CRGBA(MAPINFOBOX_COLOR.r, MAPINFOBOX_COLOR.g, MAPINFOBOX_COLOR.b, MAPINFOBOX_COLOR.a));
CFont::SetScale(MENU_X(0.4f), MENU_Y(0.7f)); CFont::SetScale(MENU_X(0.4f), MENU_Y(0.7f));
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
CFont::SetColor(CRGBA(0, 0, 0, FadeIn(255))); CFont::SetColor(CRGBA(0, 0, 0, FadeIn(255)));
float nextX = MENU_X(30.0f), nextY = 95.0f; float nextX = MENU_X(30.0f), nextY = 95.0f;

View File

@ -218,8 +218,8 @@ enum eMenuAction
MENUACTION_YES, MENUACTION_YES,
MENUACTION_NO, MENUACTION_NO,
MENUACTION_CHANGEMENU, MENUACTION_CHANGEMENU,
MENUACTION_CTRLVIBRATION, MENUACTION_UNK5,
MENUACTION_CTRLCONFIG, MENUACTION_INVERTPADY,
MENUACTION_FRAMESYNC, MENUACTION_FRAMESYNC,
MENUACTION_FRAMELIMIT, MENUACTION_FRAMELIMIT,
MENUACTION_TRAILS, MENUACTION_TRAILS,
@ -255,7 +255,6 @@ enum eMenuAction
MENUACTION_PARSEHEAP, MENUACTION_PARSEHEAP,
// MENUACTION_MEMCARDSAVECONFIRM is that on VC enum?? // MENUACTION_MEMCARDSAVECONFIRM is that on VC enum??
MENUACTION_DEBUGSTREAM, MENUACTION_DEBUGSTREAM,
//MENUACTION_KEYBOARDCTRLS,
MENUACTION_GETKEY, MENUACTION_GETKEY,
MENUACTION_SHOWHEADBOB, MENUACTION_SHOWHEADBOB,
MENUACTION_UNK80, MENUACTION_UNK80,
@ -273,13 +272,6 @@ enum eMenuAction
MENUACTION_CTRLMETHOD, MENUACTION_CTRLMETHOD,
MENUACTION_DYNAMICACOUSTIC, MENUACTION_DYNAMICACOUSTIC,
MENUACTION_MOUSESTEER, MENUACTION_MOUSESTEER,
MENUACTION_UNK103,
MENUACTION_UNK104,
MENUACTION_UNK105,
MENUACTION_UNK106,
MENUACTION_UNK107,
MENUACTION_UNK108,
MENUACTION_UNK109,
MENUACTION_UNK110, MENUACTION_UNK110,
#ifdef MORE_LANGUAGES #ifdef MORE_LANGUAGES
MENUACTION_LANG_PL, MENUACTION_LANG_PL,
@ -290,7 +282,11 @@ enum eMenuAction
MENUACTION_SCREENMODE, MENUACTION_SCREENMODE,
#endif #endif
#ifdef FREE_CAM #ifdef FREE_CAM
MENUACTION_FREECAM MENUACTION_FREECAM,
#endif
#ifdef LEGACY_MENU_OPTIONS
MENUACTION_CTRLVIBRATION,
MENUACTION_CTRLCONFIG,
#endif #endif
}; };

View File

@ -2517,7 +2517,7 @@ void CPad::PrintErrorMessage(void)
CFont::SetCentreOn(); CFont::SetCentreOn();
CFont::SetPropOn(); CFont::SetPropOn();
CFont::SetColor(CRGBA(255, 255, 200, 200)); CFont::SetColor(CRGBA(255, 255, 200, 200));
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
CFont::PrintString CFont::PrintString
( (
SCREEN_WIDTH / 2, SCREEN_WIDTH / 2,
@ -2534,7 +2534,7 @@ void CPad::PrintErrorMessage(void)
CFont::SetCentreOn(); CFont::SetCentreOn();
CFont::SetPropOn(); CFont::SetPropOn();
CFont::SetColor(CRGBA(255, 255, 200, 200)); CFont::SetColor(CRGBA(255, 255, 200, 200));
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
CFont::PrintString CFont::PrintString
( (
SCREEN_WIDTH / 2, SCREEN_WIDTH / 2,

View File

@ -405,7 +405,7 @@ inline T *WriteSaveBuf(uint8 *&buf, const T &value)
WriteSaveBuf(buf, b);\ WriteSaveBuf(buf, b);\
WriteSaveBuf(buf, c);\ WriteSaveBuf(buf, c);\
WriteSaveBuf(buf, d);\ WriteSaveBuf(buf, d);\
WriteSaveBuf(buf, size); WriteSaveBuf<uint32>(buf, size);
#define CheckSaveHeader(buf,a,b,c,d,size)\ #define CheckSaveHeader(buf,a,b,c,d,size)\
assert(ReadSaveBuf<char>(buf) == a);\ assert(ReadSaveBuf<char>(buf) == a);\

View File

@ -514,7 +514,7 @@ LoadingScreen(const char *str1, const char *str2, const char *splashscreen)
CFont::SetScale(SCREEN_SCALE_X(0.75f), yscale); CFont::SetScale(SCREEN_SCALE_X(0.75f), yscale);
CFont::SetPropOn(); CFont::SetPropOn();
CFont::SetRightJustifyOff(); CFont::SetRightJustifyOff();
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
CFont::SetColor(CRGBA(255, 255, 255, 255)); CFont::SetColor(CRGBA(255, 255, 255, 255));
AsciiToUnicode(str1, tmpstr); AsciiToUnicode(str1, tmpstr);
CFont::PrintString(hpos, top, tmpstr); CFont::PrintString(hpos, top, tmpstr);
@ -711,7 +711,7 @@ DisplayGameDebugText()
CFont::SetPropOn(); CFont::SetPropOn();
CFont::SetBackgroundOff(); CFont::SetBackgroundOff();
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
CFont::SetScale(SCREEN_SCALE_X(0.5f), SCREEN_SCALE_Y(0.5f)); CFont::SetScale(SCREEN_SCALE_X(0.5f), SCREEN_SCALE_Y(0.5f));
CFont::SetCentreOff(); CFont::SetCentreOff();
CFont::SetRightJustifyOff(); CFont::SetRightJustifyOff();

View File

@ -92,7 +92,7 @@ void tbDisplay()
CFont::SetWrapx(640.0f); CFont::SetWrapx(640.0f);
CFont::SetRightJustifyOff(); CFont::SetRightJustifyOff();
CFont::SetPropOn(); CFont::SetPropOn();
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
sprintf(temp, "FPS: %.2f", Diag_GetFPS()); sprintf(temp, "FPS: %.2f", Diag_GetFPS());
AsciiToUnicode(temp, wtemp); AsciiToUnicode(temp, wtemp);
CFont::SetColor(CRGBA(255, 255, 255, 255)); CFont::SetColor(CRGBA(255, 255, 255, 255));

View File

@ -27,6 +27,10 @@ CPhysical::CPhysical(void)
{ {
int i; int i;
#ifdef FIX_BUGS
m_nLastTimeCollided = 0;
#endif
m_fForceMultiplier = 1.0f; m_fForceMultiplier = 1.0f;
m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f); m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f); m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f);
@ -68,6 +72,9 @@ CPhysical::CPhysical(void)
m_phy_flagA20 = false; m_phy_flagA20 = false;
#ifdef FIX_BUGS
m_nSurfaceTouched = SURFACE_DEFAULT;
#endif
m_nZoneLevel = LEVEL_NONE; m_nZoneLevel = LEVEL_NONE;
bIsFrozen = false; bIsFrozen = false;

View File

@ -30,7 +30,11 @@ public:
RwMatrixDestroy(m_attachment); RwMatrixDestroy(m_attachment);
} }
void Attach(RwMatrix *matrix, bool owner = false){ void Attach(RwMatrix *matrix, bool owner = false){
#ifdef FIX_BUGS
if(m_attachment && m_hasRwMatrix)
#else
if(m_hasRwMatrix && m_attachment) if(m_hasRwMatrix && m_attachment)
#endif
RwMatrixDestroy(m_attachment); RwMatrixDestroy(m_attachment);
m_attachment = matrix; m_attachment = matrix;
m_hasRwMatrix = owner; m_hasRwMatrix = owner;

View File

@ -159,6 +159,12 @@ enum
MI_TAXI_D = 28, // HMOCA MI_TAXI_D = 28, // HMOCA
MI_BMYBB = 47,
MI_WMOST = 52,
MI_WMYBE = 58,
MI_WFOBE,
MI_WMOBE,
MI_WFOGO = 63, MI_WFOGO = 63,
MI_WMOGO = 64, MI_WMOGO = 64,

View File

@ -185,6 +185,9 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
m_queuedSound = SOUND_NO_SOUND; m_queuedSound = SOUND_NO_SOUND;
m_objective = OBJECTIVE_NONE; m_objective = OBJECTIVE_NONE;
m_prevObjective = OBJECTIVE_NONE; m_prevObjective = OBJECTIVE_NONE;
#ifdef FIX_BUGS
m_objectiveTimer = 0;
#endif
CharCreatedBy = RANDOM_CHAR; CharCreatedBy = RANDOM_CHAR;
m_leader = nil; m_leader = nil;
m_pedInObjective = nil; m_pedInObjective = nil;
@ -244,6 +247,9 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
m_nPedState = PED_IDLE; m_nPedState = PED_IDLE;
m_nLastPedState = PED_NONE; m_nLastPedState = PED_NONE;
m_nMoveState = PEDMOVE_STILL; m_nMoveState = PEDMOVE_STILL;
#ifdef FIX_BUGS
m_nPrevMoveState = PEDMOVE_NONE;
#endif
m_nStoredMoveState = PEDMOVE_NONE; m_nStoredMoveState = PEDMOVE_NONE;
m_pFire = nil; m_pFire = nil;
m_pPointGunAt = nil; m_pPointGunAt = nil;
@ -4341,30 +4347,29 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
if (bInVehicle) { if (bInVehicle) {
if (method != WEAPONTYPE_DROWNING) { if (method != WEAPONTYPE_DROWNING) {
#ifdef VC_PED_PORTS
if (m_pMyVehicle) { if (m_pMyVehicle) {
bool bDone = false; bool bDone = false;
if (m_pMyVehicle->IsBike()) { if (m_pMyVehicle->IsBike()) {
m_fHealth = 0.0f; m_fHealth = 0.0f;
//CBike::KnockOffRider -- TODO(MIAMI) ((CBike*)m_pMyVehicle)->KnockOffRider(method, direction, this, false);
bDone = true; bDone = true;
} } else {
else { if (m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_CAR) {
if (m_pMyVehicle->IsCar() && m_pMyVehicle->pDriver == this) { if (m_pMyVehicle->pDriver == this) {
if (m_pMyVehicle->GetStatus() == STATUS_SIMPLE) { if (m_pMyVehicle->GetStatus() == STATUS_SIMPLE) {
m_pMyVehicle->SetStatus(STATUS_PHYSICS); m_pMyVehicle->SetStatus(STATUS_PHYSICS);
CCarCtrl::SwitchVehicleToRealPhysics(m_pMyVehicle); CCarCtrl::SwitchVehicleToRealPhysics(m_pMyVehicle);
}
m_pMyVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
m_pMyVehicle->AutoPilot.m_nCruiseSpeed = 0;
m_pMyVehicle->AutoPilot.m_nTempAction = TEMPACT_HANDBRAKESTRAIGHT;
m_pMyVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + 2000;
} }
m_pMyVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
m_pMyVehicle->AutoPilot.m_nCruiseSpeed = 0;
m_pMyVehicle->AutoPilot.m_nTempAction = TEMPACT_HANDBRAKESTRAIGHT;
m_pMyVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + 2000;
} }
// TODO(MIAMI): argument // TODO(MIAMI): argument
if (m_pMyVehicle->CanPedExitCar(false)) { if (m_pMyVehicle->CanPedExitCar(false)) {
SetObjective(OBJECTIVE_LEAVE_CAR_AND_DIE, m_pMyVehicle); SetObjective(OBJECTIVE_LEAVE_CAR_AND_DIE, m_pMyVehicle);
} } else {
else {
m_fHealth = 0.0f; m_fHealth = 0.0f;
if (m_pMyVehicle && m_pMyVehicle->pDriver == this) { if (m_pMyVehicle && m_pMyVehicle->pDriver == this) {
SetRadioStation(); SetRadioStation();
@ -4397,7 +4402,6 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
if (bDone) if (bDone)
return true; return true;
} }
#endif
m_fHealth = 1.0f; m_fHealth = 1.0f;
return false; return false;
} }
@ -4421,6 +4425,7 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
} }
if (method == WEAPONTYPE_DROWNING) if (method == WEAPONTYPE_DROWNING)
bIsInTheAir = false; bIsInTheAir = false;
// TODO(Miami): timesDrowned
return true; return true;
} }
@ -5684,6 +5689,7 @@ CPed::SetFlee(CVector2D const &from, int time)
} }
} }
// --MIAMI: Only some part is done
void void
CPed::SetWaitState(eWaitState state, void *time) CPed::SetWaitState(eWaitState state, void *time)
{ {
@ -5858,13 +5864,20 @@ CPed::SetWaitState(eWaitState state, void *time)
else else
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + 100000; m_nWaitTimer = CTimer::GetTimeInMilliseconds() + 100000;
break; break;
case WAITSTATE_FAST_FALL:
SetFall(-1, ANIM_KO_SKID_FRONT, true);
break;
case WAITSTATE_BOMBER:
CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_BOMBER, 4.0f);
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + *(int*)time;
break;
case WAITSTATE_LANCESITTING:
CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_LANCE, ANIM_SUNBATHE, 4.0f);
break;
case WAITSTATE_SUN_BATHE_PRE: case WAITSTATE_SUN_BATHE_PRE:
case WAITSTATE_SUN_BATHE_DOWN: case WAITSTATE_SUN_BATHE_DOWN:
case WAITSTATE_SUN_BATHE_IDLE: case WAITSTATE_SUN_BATHE_IDLE:
case WAITSTATE_FAST_FALL:
case WAITSTATE_BOMBER:
case WAITSTATE_GROUND_ATTACK: case WAITSTATE_GROUND_ATTACK:
case WAITSTATE_LANCESITTING:
case WAITSTATE_PLAYANIM_HANDSUP_SIMPLE: case WAITSTATE_PLAYANIM_HANDSUP_SIMPLE:
default: default:
ClearWaitState(); ClearWaitState();
@ -6790,7 +6803,7 @@ CPed::EnterCar(void)
LineUpPedWithCar(LINE_UP_TO_CAR_START); LineUpPedWithCar(LINE_UP_TO_CAR_START);
if (veh->IsBike()) { if (veh->IsBike()) {
CBike *bike = (CBike*)veh; CBike *bike = (CBike*)veh;
if (bike->GetStatus() != STATUS_ABANDONED || bike->m_bike_flag08 || !m_pVehicleAnim) { if (bike->GetStatus() != STATUS_ABANDONED || bike->bIsBeingPickedUp || !m_pVehicleAnim) {
if (m_nPedState == PED_CARJACK && m_pVehicleAnim) { if (m_nPedState == PED_CARJACK && m_pVehicleAnim) {
if (m_pVehicleAnim->currentTime > 0.4f && m_pVehicleAnim->currentTime - m_pVehicleAnim->timeStep <= 0.4f) { if (m_pVehicleAnim->currentTime > 0.4f && m_pVehicleAnim->currentTime - m_pVehicleAnim->timeStep <= 0.4f) {
int anim = m_pVehicleAnim->animId; int anim = m_pVehicleAnim->animId;
@ -6806,9 +6819,9 @@ CPed::EnterCar(void)
// One is pickup and other one is pullup, not same :p // One is pickup and other one is pullup, not same :p
if ((anim == ANIM_BIKE_PICKUP_R || anim == ANIM_BIKE_PICKUP_L) && m_pVehicleAnim->currentTime > 0.4667f) if ((anim == ANIM_BIKE_PICKUP_R || anim == ANIM_BIKE_PICKUP_L) && m_pVehicleAnim->currentTime > 0.4667f)
bike->m_bike_flag08 = true; bike->bIsBeingPickedUp = true;
else if ((anim == ANIM_BIKE_PULLUP_R || anim == ANIM_BIKE_PULLUP_L) && m_pVehicleAnim->currentTime > 0.4667f) else if ((anim == ANIM_BIKE_PULLUP_R || anim == ANIM_BIKE_PULLUP_L) && m_pVehicleAnim->currentTime > 0.4667f)
bike->m_bike_flag08 = true; bike->bIsBeingPickedUp = true;
} }
} }
} else { } else {
@ -6946,40 +6959,72 @@ CPed::ExitTrain(void)
} }
#endif #endif
// --MIAMI: Done
void void
CPed::ExitCar(void) CPed::ExitCar(void)
{ {
if (!m_pVehicleAnim) if (!m_pVehicleAnim) {
if (InVehicle()) {
if (m_pMyVehicle->IsBike()) {
// TODO(Miami): What are those?
if (m_vehEnterType == 18 || m_vehEnterType == 8) {
((CBike*)m_pMyVehicle)->KnockOffRider(WEAPONTYPE_UNARMED, 0, this, false);
}
} else if (m_pMyVehicle->IsCar()) {
if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_ROLLOUT_LHS)) {
((CAutomobile*)m_pMyVehicle)->KnockPedOutCar(WEAPONTYPE_UNIDENTIFIED, CAR_DOOR_LF, this);
} else if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_ROLLOUT_RHS)) {
((CAutomobile*)m_pMyVehicle)->KnockPedOutCar(WEAPONTYPE_UNIDENTIFIED, CAR_DOOR_RF, this);
}
}
}
return; return;
}
AnimationId exitAnim = (AnimationId) m_pVehicleAnim->animId; AnimationId exitAnim = (AnimationId) m_pVehicleAnim->animId;
float animTime = m_pVehicleAnim->currentTime; float animTime = m_pVehicleAnim->currentTime;
m_pMyVehicle->ProcessOpenDoor(m_vehEnterType, exitAnim, animTime); if (exitAnim == ANIM_BIKE_GETOFF_BACK) {
if (animTime > 0.35f && m_pMyVehicle && m_pMyVehicle->IsBike())
((CBike*)m_pMyVehicle)->KnockOffRider(WEAPONTYPE_UNARMED, 0, this, false);
else
LineUpPedWithCar(LINE_UP_TO_CAR_FALL);
if (m_pSeekTarget) { } else if (exitAnim != ANIM_CAR_ROLLOUT_LHS && exitAnim != ANIM_CAR_ROLLOUT_RHS) {
// Car is upside down m_pMyVehicle->ProcessOpenDoor(m_vehEnterType, exitAnim, animTime);
if (m_pMyVehicle->GetUp().z > -0.8f) {
if (exitAnim != ANIM_CAR_CLOSE_RHS && exitAnim != ANIM_CAR_CLOSE_LHS && animTime <= 0.3f) if (m_pSeekTarget) {
LineUpPedWithCar((m_pMyVehicle->GetModelIndex() == MI_DODO ? LINE_UP_TO_CAR_END : LINE_UP_TO_CAR_START)); // Car is upside down
else if (m_pMyVehicle->GetUp().z > -0.8f) {
if (exitAnim != ANIM_CAR_CLOSE_RHS && exitAnim != ANIM_CAR_CLOSE_LHS && animTime <= 0.3f)
LineUpPedWithCar((m_pMyVehicle->GetModelIndex() == MI_DODO ? LINE_UP_TO_CAR_END : LINE_UP_TO_CAR_START));
else
LineUpPedWithCar(LINE_UP_TO_CAR_END);
}
else {
LineUpPedWithCar(LINE_UP_TO_CAR_END); LineUpPedWithCar(LINE_UP_TO_CAR_END);
} else {
LineUpPedWithCar(LINE_UP_TO_CAR_END);
}
}
// If there is someone in front of the door, make him fall while we exit.
if (m_nPedState == PED_EXIT_CAR) {
CPed *foundPed = nil;
for (int i = 0; i < m_numNearPeds; i++) {
if ((m_nearPeds[i]->GetPosition() - GetPosition()).MagnitudeSqr2D() < 0.04f) {
foundPed = m_nearPeds[i];
break;
} }
} }
if (foundPed && animTime > 0.4f && foundPed->IsPedInControl())
foundPed->SetFall(1000, ANIM_KO_SKID_FRONT, 1); // If there is someone in front of the door, make him fall while we exit.
if (m_nPedState == PED_EXIT_CAR) {
CPed* foundPed = nil;
for (int i = 0; i < m_numNearPeds; i++) {
if ((m_nearPeds[i]->GetPosition() - GetPosition()).MagnitudeSqr2D() < 0.04f) {
foundPed = m_nearPeds[i];
break;
}
}
if(foundPed && (!foundPed->IsPlayer() || m_nPedType == PEDTYPE_COP || m_objective == OBJECTIVE_KILL_CHAR_ON_FOOT || m_objective == OBJECTIVE_KILL_CHAR_ANY_MEANS))
if (animTime > 0.4f && foundPed->IsPedInControl())
foundPed->SetFall(1000, ANIM_KO_SKID_FRONT, 1);
}
} else if (animTime <= 0.07f || !m_pMyVehicle || !m_pMyVehicle->IsCar()) {
LineUpPedWithCar(LINE_UP_TO_CAR_FALL);
} else if (exitAnim == ANIM_CAR_ROLLOUT_LHS) {
((CAutomobile*)m_pMyVehicle)->KnockPedOutCar(WEAPONTYPE_UNIDENTIFIED, CAR_DOOR_LF, this);
} else {
((CAutomobile*)m_pMyVehicle)->KnockPedOutCar(WEAPONTYPE_UNIDENTIFIED, CAR_DOOR_RF, this);
} }
} }
@ -7619,6 +7664,7 @@ CPed::FinishLaunchCB(CAnimBlendAssociation *animAssoc, void *arg)
} }
} }
// --MIAMI: Done
void void
CPed::FinishedWaitCB(CAnimBlendAssociation *animAssoc, void *arg) CPed::FinishedWaitCB(CAnimBlendAssociation *animAssoc, void *arg)
{ {
@ -7629,6 +7675,7 @@ CPed::FinishedWaitCB(CAnimBlendAssociation *animAssoc, void *arg)
ped->Wait(); ped->Wait();
} }
// --MIAMI: Some part is done
void void
CPed::Wait(void) CPed::Wait(void)
{ {
@ -7957,15 +8004,38 @@ CPed::Wait(void)
ClearWaitState(); ClearWaitState();
} }
break; break;
case WAITSTATE_RIOT:
if (m_nPedState == PED_FLEE_ENTITY || m_nPedState == PED_ATTACK) {
ClearWaitState();
break;
}
PlayRandomAnimationsFromAnimBlock(this, ASSOCGRP_RIOT, ANIM_RIOT_ANGRY, ANIM_RIOT_FUKU - ANIM_RIOT_ANGRY + 1);
if (IsPedInControl() && CGeneral::GetRandomNumberInRange(0.f,1.f) < 0.25f
&& CPopulation::CanJeerAtStripper(m_modelIndex)) {
for (int i = 0; i < m_numNearPeds; ++i) {
CPed *nearPed = m_nearPeds[i];
if (nearPed) {
if ((GetPosition() - nearPed->GetPosition()).MagnitudeSqr() < sq(10.f)) {
for (int anim = ANIM_STRIP_A; anim <= ANIM_STRIP_G; anim++) {
if (RpAnimBlendClumpGetAssociation(nearPed->GetClump(), anim))
Say(SOUND_PED_149);
}
}
}
}
}
break;
case WAITSTATE_BOMBER:
if (CTimer::GetTimeInMilliseconds() > m_nWaitTimer)
ClearWaitState();
break;
case WAITSTATE_STRIPPER:
PlayRandomAnimationsFromAnimBlock(this, ASSOCGRP_STRIP, ANIM_STRIP_A, ANIM_STRIP_G - ANIM_STRIP_A + 1);
break;
case WAITSTATE_SUN_BATHE_PRE: case WAITSTATE_SUN_BATHE_PRE:
case WAITSTATE_SUN_BATHE_DOWN: case WAITSTATE_SUN_BATHE_DOWN:
case WAITSTATE_SUN_BATHE_IDLE: case WAITSTATE_SUN_BATHE_IDLE:
case WAITSTATE_RIOT:
case WAITSTATE_FAST_FALL:
case WAITSTATE_BOMBER:
case WAITSTATE_STRIPPER:
case WAITSTATE_GROUND_ATTACK:
case WAITSTATE_LANCESITTING:
case WAITSTATE_PLAYANIM_HANDSUP_SIMPLE: case WAITSTATE_PLAYANIM_HANDSUP_SIMPLE:
assert(0); assert(0);
default: default:
@ -12525,12 +12595,10 @@ CPed::PedSetOutCarCB(CAnimBlendAssociation *animAssoc, void *arg)
if (ped->m_objective == OBJECTIVE_LEAVE_VEHICLE) if (ped->m_objective == OBJECTIVE_LEAVE_VEHICLE)
ped->RestorePreviousObjective(); ped->RestorePreviousObjective();
#ifdef VC_PED_PORTS
else if (ped->m_objective == OBJECTIVE_LEAVE_CAR_AND_DIE) { else if (ped->m_objective == OBJECTIVE_LEAVE_CAR_AND_DIE) {
ped->m_fHealth = 0.0f; ped->m_fHealth = 0.0f;
ped->SetDie(ANIM_FLOOR_HIT, 4.0f, 0.5f); ped->SetDie(ANIM_FLOOR_HIT, 4.0f, 0.5f);
} }
#endif
ped->bInVehicle = false; ped->bInVehicle = false;
if (veh && veh->IsCar() && !veh->IsRoomForPedToLeaveCar(ped->m_vehEnterType, nil)) { if (veh && veh->IsCar() && !veh->IsRoomForPedToLeaveCar(ped->m_vehEnterType, nil)) {
@ -12590,7 +12658,7 @@ CPed::PedSetOutCarCB(CAnimBlendAssociation *animAssoc, void *arg)
} }
} }
#ifdef VC_PED_PORTS #ifdef VC_PED_PORTS
else { else if (ped->m_nPedState == PED_DRIVING) {
ped->m_nPedState = PED_IDLE; ped->m_nPedState = PED_IDLE;
} }
#endif #endif
@ -18296,41 +18364,106 @@ CPed::SetNewAttraction(CPedAttractor* pAttractor, const CVector& pos, float head
m_positionInQueue = qid; m_positionInQueue = qid;
} }
// --MIAMI: Done
void void
CPed::ClearWaitState(void) CPed::ClearWaitState(void)
{ {
CAnimBlendAssociation *assoc;
switch (m_nWaitState) { switch (m_nWaitState) {
case WAITSTATE_PLAYANIM_CHAT: case WAITSTATE_PLAYANIM_CHAT:
case WAITSTATE_SIT_DOWN: case WAITSTATE_SIT_DOWN:
case WAITSTATE_SIT_DOWN_RVRS: case WAITSTATE_SIT_DOWN_RVRS:
case WAITSTATE_SIT_UP: case WAITSTATE_SIT_UP:
case WAITSTATE_SIT_IDLE: case WAITSTATE_SIT_IDLE:
case WAITSTATE_USE_ATM: case WAITSTATE_USE_ATM:
if (CTimer::GetTimeInMilliseconds() <= m_nWaitTimer) { if (CTimer::GetTimeInMilliseconds() <= m_nWaitTimer) {
AnimationId id; if (m_nWaitState == WAITSTATE_USE_ATM) {
switch (m_nWaitState) { // TODO(MIAMI): actual! assoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_ATM);
case WAITSTATE_PLAYANIM_CHAT: id = ANIM_IDLE_CHAT; break; if (assoc)
case WAITSTATE_SIT_DOWN: id = ANIM_SEAT_DOWN; break; assoc->blendDelta = -8.0f;
case WAITSTATE_SIT_DOWN_RVRS: id = ANIM_SEAT_DOWN2; break; if (m_attractor)
case WAITSTATE_SIT_UP: id = ANIM_SEAT_UP; break; GetPedAttractorManager()->DeRegisterPed(this, m_attractor);
case WAITSTATE_SIT_IDLE: id = ANIM_SEAT_IDLE; break;
case WAITSTATE_USE_ATM: id = ANIM_ATM; break; } else if (m_nWaitState == WAITSTATE_PLAYANIM_CHAT) {
assoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_CHAT);
if (assoc)
assoc->blendDelta = -8.0f;
if (m_attractor)
GetPedAttractorManager()->DeRegisterPed(this, m_attractor);
} else if (m_nWaitState == WAITSTATE_SIT_DOWN || m_nWaitState == WAITSTATE_SIT_DOWN_RVRS || m_nWaitState == WAITSTATE_SIT_IDLE || m_nWaitState == WAITSTATE_SIT_UP) {
switch (m_nWaitState) {
case WAITSTATE_SIT_DOWN:
assoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_SEAT_DOWN);
if (assoc)
assoc->blendDelta = -8.0f;
break;
case WAITSTATE_SIT_IDLE:
assoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_SEAT_IDLE);
if (assoc)
assoc->blendDelta = -8.0f;
break;
case WAITSTATE_SIT_UP:
assoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_SEAT_UP);
if (assoc)
assoc->blendDelta = -8.0f;
break;
default:
break;
}
if (m_attractor)
GetPedAttractorManager()->DeRegisterPed(this, m_attractor);
}
} }
CAnimBlendAssociation* pAssoc = RpAnimBlendClumpGetAssociation(GetClump(), id); break;
if (pAssoc) case WAITSTATE_RIOT:
pAssoc->blendDelta = -8.0f; {
if (m_attractor) CAnimBlock* riotAnimBlock = CAnimManager::GetAnimationBlock("riot");
GetPedAttractorManager()->DeRegisterPed(this, m_attractor);
for (assoc = RpAnimBlendClumpGetFirstAssociation(GetClump()); assoc; assoc = RpAnimBlendGetNextAssociation(assoc)) {
int first = riotAnimBlock->firstIndex;
int index = assoc->hierarchy - CAnimManager::GetAnimation(0);
if (index >= first && index < first + riotAnimBlock->numAnims) {
assoc->blendDelta = -1000.0f;
}
}
break;
} }
break; case WAITSTATE_FAST_FALL:
case WAITSTATE_RIOT: if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_KO_SKID_FRONT))
case WAITSTATE_FAST_FALL: SetGetUp();
case WAITSTATE_BOMBER:
case WAITSTATE_STRIPPER: break;
case WAITSTATE_GROUND_ATTACK: case WAITSTATE_BOMBER:
case WAITSTATE_LANCESITTING: assoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_BOMBER);
case WAITSTATE_PLAYANIM_HANDSUP_SIMPLE: if (assoc)
assert(0); assoc->blendDelta = -8.0f;
break;
case WAITSTATE_STRIPPER:
{
CAnimBlock* stripAnimBlock = CAnimManager::GetAnimationBlock("strip");
for (assoc = RpAnimBlendClumpGetFirstAssociation(GetClump()); assoc; assoc = RpAnimBlendGetNextAssociation(assoc)) {
int first = stripAnimBlock->firstIndex;
int index = assoc->hierarchy - CAnimManager::GetAnimation(0);
if (index >= first && index < first + stripAnimBlock->numAnims) {
assoc->blendDelta = -1000.0f;
}
}
break;
}
case WAITSTATE_LANCESITTING:
assoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_SUNBATHE);
if (assoc)
assoc->blendDelta = -8.0f;
break;
case WAITSTATE_PLAYANIM_HANDSUP_SIMPLE:
assoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_HANDSUP);
if (assoc)
assoc->blendDelta = -8.0f;
break;
default:
break;
} }
m_nWaitState = WAITSTATE_FALSE; m_nWaitState = WAITSTATE_FALSE;
} }
@ -18735,12 +18868,9 @@ CPed::DriveVehicle(void)
float velocityFwdDotProd = DotProduct(bike->m_vecMoveSpeed, bike->GetForward()); float velocityFwdDotProd = DotProduct(bike->m_vecMoveSpeed, bike->GetForward());
if (m_vecTurnSpeed.MagnitudeSqr() > 0.09f) { if (m_vecTurnSpeed.MagnitudeSqr() > 0.09f) {
// TODO(Miami) bike->KnockOffRider(WEAPONTYPE_FALL, 2, this, false);
/*
bike->KnockOffRider(walkbackAssoc, 44, 2, this, 0);
if (bike->pPassengers[0]) if (bike->pPassengers[0])
bike->KnockOffRider(walkbackAssoc, 44, 2, bike->pPassengers[0], 0); bike->KnockOffRider(WEAPONTYPE_FALL, 2, bike->pPassengers[0], false);
*/
return; return;
} }
if (!drivebyAssoc && Abs(velocityFwdDotProd) < 0.02f) { if (!drivebyAssoc && Abs(velocityFwdDotProd) < 0.02f) {
@ -18756,12 +18886,9 @@ CPed::DriveVehicle(void)
} else { } else {
float maxReverseSpeed = bike->pHandling->Transmission.fMaxReverseVelocity; float maxReverseSpeed = bike->pHandling->Transmission.fMaxReverseVelocity;
if (3.5f * maxReverseSpeed > velocityFwdDotProd && (bike->m_nWheelsOnGround || bike->GetUp().z < -0.5f)) { if (3.5f * maxReverseSpeed > velocityFwdDotProd && (bike->m_nWheelsOnGround || bike->GetUp().z < -0.5f)) {
// TODO(Miami) bike->KnockOffRider(WEAPONTYPE_FALL, 2, this, false);
/*
bike->KnockOffRider(walkbackAssoc, 44, 2, this, 0);
if (bike->pPassengers[0]) if (bike->pPassengers[0])
bike->KnockOffRider(walkbackAssoc, 44, 2, bike->pPassengers[0], 0); bike->KnockOffRider(WEAPONTYPE_FALL, 2, bike->pPassengers[0], false);
*/
return; return;
} }
if (bike->m_fGasPedal >= 0.0 || velocityFwdDotProd <= maxReverseSpeed * 1.5) { if (bike->m_fGasPedal >= 0.0 || velocityFwdDotProd <= maxReverseSpeed * 1.5) {
@ -19024,6 +19151,42 @@ CPed::DriveVehicle(void)
} }
} }
void
PlayRandomAnimationsFromAnimBlock(CPed* ped, AssocGroupId animGroup, uint32 first, uint32 amount)
{
if (!ped->IsPedInControl())
return;
const char *groupName = CAnimManager::GetAnimGroupName(animGroup);
CAnimBlock *animBlock = CAnimManager::GetAnimationBlock(groupName);
CAnimBlendAssociation *assoc;
for (assoc = RpAnimBlendClumpGetFirstAssociation(ped->GetClump()); assoc; assoc = RpAnimBlendGetNextAssociation(assoc)) {
int first = animBlock->firstIndex;
int index = assoc->hierarchy - CAnimManager::GetAnimation(0);
if (index >= first && index < first + animBlock->numAnims) {
break;
}
}
if (CTimer::GetTimeInMilliseconds() > ped->m_nWaitTimer && assoc)
assoc->flags &= ~ASSOC_REPEAT;
if (!assoc || assoc->blendDelta < 0.0f) {
int selectedAnimOffset;
do
selectedAnimOffset = CGeneral::GetRandomNumberInRange(0, amount);
while (assoc && first + selectedAnimOffset == assoc->animId);
assoc = CAnimManager::BlendAnimation(ped->GetClump(), animGroup, (AnimationId)(first + selectedAnimOffset), 3.0f);
assoc->SetFinishCallback(CPed::FinishedWaitCB, ped);
if (assoc->flags & ASSOC_REPEAT)
ped->m_nWaitTimer = CTimer::GetTimeInMilliseconds() + CGeneral::GetRandomNumberInRange(3000, 8000);
else
ped->m_nWaitTimer = CTimer::GetTimeInMilliseconds() + 8000;
}
}
bool bool
IsPedPointerValid_NotInWorld(CPed* pPed) IsPedPointerValid_NotInWorld(CPed* pPed)
{ {

View File

@ -1092,6 +1092,7 @@ public:
void FinishTalkingOnMobileCB(CAnimBlendAssociation* assoc, void* arg); void FinishTalkingOnMobileCB(CAnimBlendAssociation* assoc, void* arg);
void StartTalkingOnMobileCB(CAnimBlendAssociation* assoc, void* arg); void StartTalkingOnMobileCB(CAnimBlendAssociation* assoc, void* arg);
void FinishFuckUCB(CAnimBlendAssociation *assoc, void *arg); void FinishFuckUCB(CAnimBlendAssociation *assoc, void *arg);
void PlayRandomAnimationsFromAnimBlock(CPed* ped, AssocGroupId animGroup, uint32 first, uint32 amount);
// TODO(Miami): Change those when Ped struct is done // TODO(Miami): Change those when Ped struct is done
#ifndef PED_SKIN #ifndef PED_SKIN

View File

@ -40,6 +40,9 @@ CPlayerPed::CPlayerPed(void) : CPed(PEDTYPE_PLAYER1)
{ {
m_fMoveSpeed = 0.0f; m_fMoveSpeed = 0.0f;
SetModelIndex(MI_PLAYER); SetModelIndex(MI_PLAYER);
#ifdef FIX_BUGS
m_fCurrentStamina = m_fMaxStamina = 150.0f;
#endif
SetInitialState(); SetInitialState();
m_pWanted = new CWanted(); m_pWanted = new CWanted();
@ -56,8 +59,9 @@ CPlayerPed::CPlayerPed(void) : CPed(PEDTYPE_PLAYER1)
m_pPointGunAt = nil; m_pPointGunAt = nil;
SetPedState(PED_IDLE); SetPedState(PED_IDLE);
m_fMaxStamina = 150.0f; #ifndef FIX_BUGS
m_fCurrentStamina = m_fMaxStamina; m_fCurrentStamina = m_fMaxStamina = 150.0f;
#endif
m_fStaminaProgress = 0.0f; m_fStaminaProgress = 0.0f;
m_nEvadeAmount = 0; m_nEvadeAmount = 0;
m_pEvadingFrom = nil; m_pEvadingFrom = nil;

View File

@ -1113,4 +1113,10 @@ CPopulation::IsSkateable(CVector const& pos)
return false; return false;
return foundCol.surfaceB == SURFACE_TARMAC || foundCol.surfaceB == SURFACE_PAVEMENT; return foundCol.surfaceB == SURFACE_TARMAC || foundCol.surfaceB == SURFACE_PAVEMENT;
}
bool
CPopulation::CanJeerAtStripper(int32 model)
{
return model == MI_WMOBE || model == MI_WMYBE || model == MI_WMOST || model == MI_BMYBB;
} }

View File

@ -90,6 +90,7 @@ public:
static bool TestRoomForDummyObject(CObject*); static bool TestRoomForDummyObject(CObject*);
static bool TestSafeForRealObject(CDummyObject*); static bool TestSafeForRealObject(CDummyObject*);
static bool IsSkateable(CVector const&); static bool IsSkateable(CVector const&);
static bool CanJeerAtStripper(int32 model);
static CPed* AddDeadPedInFrontOfCar(const CVector& pos, CVehicle* pCulprit); static CPed* AddDeadPedInFrontOfCar(const CVector& pos, CVehicle* pCulprit);
}; };

View File

@ -63,7 +63,7 @@ CConsole::Display()
CFont::SetJustifyOn(); CFont::SetJustifyOn();
CFont::SetRightJustifyWrap(0.0f); CFont::SetRightJustifyWrap(0.0f);
CFont::SetBackGroundOnlyTextOff(); CFont::SetBackGroundOnlyTextOff();
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
#ifndef FIX_BUGS #ifndef FIX_BUGS
CFont::SetPropOff(); // not sure why this is here anyway CFont::SetPropOff(); // not sure why this is here anyway
#endif #endif

View File

@ -392,7 +392,7 @@ void CHud::Draw()
CFont::SetCentreSize(SCREEN_SCALE_X(640.0f)); CFont::SetCentreSize(SCREEN_SCALE_X(640.0f));
CFont::SetPropOn(); CFont::SetPropOn();
CFont::SetDropShadowPosition(0); CFont::SetDropShadowPosition(0);
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
if (Min(9999, TotalAmmo - AmmoInClip) != 9999 && !CDarkel::FrenzyOnGoing() && weaponInfo->m_nWeaponSlot > 1 && weapon->m_eWeaponType != WEAPONTYPE_DETONATOR) { if (Min(9999, TotalAmmo - AmmoInClip) != 9999 && !CDarkel::FrenzyOnGoing() && weaponInfo->m_nWeaponSlot > 1 && weapon->m_eWeaponType != WEAPONTYPE_DETONATOR) {
CFont::SetDropShadowPosition(2); CFont::SetDropShadowPosition(2);
@ -609,7 +609,7 @@ void CHud::Draw()
CFont::SetRightJustifyOn(); CFont::SetRightJustifyOn();
CFont::SetRightJustifyWrap(0.0f); CFont::SetRightJustifyWrap(0.0f);
CFont::SetBackGroundOnlyTextOff(); CFont::SetBackGroundOnlyTextOff();
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
CFont::SetColor(CRGBA(0, 0, 0, fZoneAlpha)); CFont::SetColor(CRGBA(0, 0, 0, fZoneAlpha));
CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(32.0f) + SCREEN_SCALE_X(1.0f), SCREEN_SCALE_FROM_BOTTOM(128.0f) + SCREEN_SCALE_Y(1.0f), m_ZoneToPrint); CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(32.0f) + SCREEN_SCALE_X(1.0f), SCREEN_SCALE_FROM_BOTTOM(128.0f) + SCREEN_SCALE_Y(1.0f), m_ZoneToPrint);
@ -708,7 +708,7 @@ void CHud::Draw()
CFont::SetRightJustifyOn(); CFont::SetRightJustifyOn();
CFont::SetRightJustifyWrap(0.0f); CFont::SetRightJustifyWrap(0.0f);
CFont::SetBackGroundOnlyTextOff(); CFont::SetBackGroundOnlyTextOff();
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
CFont::SetColor(CRGBA(0, 0, 0, fVehicleAlpha)); CFont::SetColor(CRGBA(0, 0, 0, fVehicleAlpha));
CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(32.0f) + SCREEN_SCALE_X(1.0f), SCREEN_SCALE_FROM_BOTTOM(105.f) + SCREEN_SCALE_Y(1.0f), m_pVehicleNameToPrint); CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(32.0f) + SCREEN_SCALE_X(1.0f), SCREEN_SCALE_FROM_BOTTOM(105.f) + SCREEN_SCALE_Y(1.0f), m_pVehicleNameToPrint);
@ -1020,7 +1020,7 @@ void CHud::Draw()
CFont::SetScale(SCREEN_SCALE_X(0.48f), SCREEN_SCALE_Y(1.120f)); CFont::SetScale(SCREEN_SCALE_X(0.48f), SCREEN_SCALE_Y(1.120f));
CFont::SetCentreOn(); CFont::SetCentreOn();
CFont::SetPropOn(); CFont::SetPropOn();
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
float offsetX = SCREEN_SCALE_X(40.0f) + SCREEN_SCALE_X(8.0f); 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; float center = SCREEN_SCALE_FROM_RIGHT(50.0f) - SCREEN_SCALE_X(8.0f) - offsetX;
@ -1223,7 +1223,7 @@ void CHud::DrawAfterFade()
else else
#endif #endif
CFont::SetWrapx(SCREEN_SCALE_X(200.0f + 26.0f - 4.0f)); CFont::SetWrapx(SCREEN_SCALE_X(200.0f + 26.0f - 4.0f));
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
CFont::SetBackgroundOn(); CFont::SetBackgroundOn();
CFont::SetBackGroundOnlyTextOff(); CFont::SetBackGroundOnlyTextOff();
CFont::SetBackgroundColor(CRGBA(0, 0, 0, fAlpha * 0.9f)); CFont::SetBackgroundColor(CRGBA(0, 0, 0, fAlpha * 0.9f));
@ -1301,7 +1301,7 @@ void CHud::DrawAfterFade()
CFont::SetCentreOn(); CFont::SetCentreOn();
CFont::SetPropOn(); CFont::SetPropOn();
CFont::SetCentreSize(SCREEN_SCALE_X(600.0f)); CFont::SetCentreSize(SCREEN_SCALE_X(600.0f));
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
CFont::SetColor(CRGBA(0, 0, 0, 255)); 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]); 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]);
@ -1318,7 +1318,7 @@ void CHud::DrawAfterFade()
CFont::SetPropOn(); CFont::SetPropOn();
CFont::SetCentreSize(SCREEN_SCALE_X(620.0f)); CFont::SetCentreSize(SCREEN_SCALE_X(620.0f));
CFont::SetColor(CRGBA(0, 0, 0, 255)); CFont::SetColor(CRGBA(0, 0, 0, 255));
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
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]); 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]);
@ -1375,7 +1375,7 @@ void CHud::DrawAfterFade()
CFont::SetPropOn(); CFont::SetPropOn();
CFont::SetCentreSize(SCREEN_SCALE_FROM_RIGHT(20.0f)); CFont::SetCentreSize(SCREEN_SCALE_FROM_RIGHT(20.0f));
CFont::SetColor(CRGBA(0, 0, 0, 255)); CFont::SetColor(CRGBA(0, 0, 0, 255));
CFont::SetFontStyle(FONT_LOCALE(FONT_BANK)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
#ifdef BETA_SLIDING_TEXT #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]); 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]);

View File

@ -1050,7 +1050,7 @@ CMoneyMessage::Render()
CFont::SetJustifyOff(); CFont::SetJustifyOff();
CFont::SetColor(CRGBA(m_Colour.r, m_Colour.g, m_Colour.b, (255.0f - 255.0f * fLifeTime) * m_fOpacity)); CFont::SetColor(CRGBA(m_Colour.r, m_Colour.g, m_Colour.b, (255.0f - 255.0f * fLifeTime) * m_fOpacity));
CFont::SetBackGroundOnlyTextOff(); CFont::SetBackGroundOnlyTextOff();
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
CFont::PrintString(vecOut.x, vecOut.y, m_aText); CFont::PrintString(vecOut.x, vecOut.y, m_aText);
} }
} }

View File

@ -233,7 +233,7 @@ ConvertingTexturesScreen(uint32 num, uint32 count, const char *text)
CFont::SetJustifyOff(); CFont::SetJustifyOff();
CFont::SetColor(CRGBA(255, 217, 106, 255)); CFont::SetColor(CRGBA(255, 217, 106, 255));
CFont::SetBackGroundOnlyTextOff(); CFont::SetBackGroundOnlyTextOff();
CFont::SetFontStyle(FONT_BANK); CFont::SetFontStyle(FONT_STANDARD);
CFont::PrintString(SCREEN_SCALE_X(170.0f), SCREEN_SCALE_Y(160.0f), TheText.Get(text)); CFont::PrintString(SCREEN_SCALE_X(170.0f), SCREEN_SCALE_Y(160.0f), TheText.Get(text));
CFont::DrawFonts(); CFont::DrawFonts();
DoRWStuffEndOfFrame(); DoRWStuffEndOfFrame();

View File

@ -421,7 +421,7 @@ CAutomobile::ProcessControl(void)
m_aSuspensionSpringRatio[3] < 1.0f && CSurfaceTable::GetAdhesionGroup(m_aWheelColPoints[3].surfaceB) == ADHESIVE_SAND){ m_aSuspensionSpringRatio[3] < 1.0f && CSurfaceTable::GetAdhesionGroup(m_aWheelColPoints[3].surfaceB) == ADHESIVE_SAND){
if(GetModelIndex() != MI_RCBANDIT && GetModelIndex() != MI_RHINO){ if(GetModelIndex() != MI_RCBANDIT && GetModelIndex() != MI_RHINO){
float slowdown; float slowdown;
CVector parallelSpeed = m_vecMoveSpeed - DotProduct(m_vecMoveSpeed, GetUp())*m_vecMoveSpeed; CVector parallelSpeed = m_vecMoveSpeed - DotProduct(m_vecMoveSpeed, GetUp())*GetUp();
float fSpeed = parallelSpeed.MagnitudeSqr(); float fSpeed = parallelSpeed.MagnitudeSqr();
if(fSpeed > SQR(0.3f)){ if(fSpeed > SQR(0.3f)){
fSpeed = Sqrt(fSpeed); fSpeed = Sqrt(fSpeed);
@ -752,7 +752,7 @@ CAutomobile::ProcessControl(void)
fwdSpeed *= 0.7f; fwdSpeed *= 0.7f;
float f = 1.0f - fwdSpeed/0.3f - 0.7f*CWeather::WetRoads; float f = 1.0f - fwdSpeed/0.3f - 0.7f*CWeather::WetRoads;
f = Max(f, 0.4f); f = Max(f, 0.4f);
m_aSuspensionSpringRatio[i] += f*(m_aSuspensionLineLength[i]-m_aSuspensionSpringLength[i])/m_aSuspensionSpringLength[i]; m_aSuspensionSpringRatio[i] += 0.35f*f*(m_aSuspensionLineLength[i]-m_aSuspensionSpringLength[i])/m_aSuspensionSpringLength[i];
if(m_aSuspensionSpringRatio[i] > 1.0f) if(m_aSuspensionSpringRatio[i] > 1.0f)
m_aSuspensionSpringRatio[i] = 1.0f; m_aSuspensionSpringRatio[i] = 1.0f;
} }
@ -1860,7 +1860,7 @@ CAutomobile::PreRender(void)
if(Damage.GetWheelStatus(i) == WHEEL_STATUS_BURST && m_aSuspensionSpringRatioPrev[i] < 1.0f){ if(Damage.GetWheelStatus(i) == WHEEL_STATUS_BURST && m_aSuspensionSpringRatioPrev[i] < 1.0f){
static float speedSq; static float speedSq;
speedSq = m_vecMoveSpeed.MagnitudeSqr(); speedSq = m_vecMoveSpeed.MagnitudeSqr();
if(speedSq > 0.01f && if(speedSq > SQR(0.1f) &&
m_aWheelColPoints[i].surfaceB != SURFACE_GRASS && m_aWheelColPoints[i].surfaceB != SURFACE_GRASS &&
m_aWheelColPoints[i].surfaceB != SURFACE_MUD_DRY && m_aWheelColPoints[i].surfaceB != SURFACE_MUD_DRY &&
m_aWheelColPoints[i].surfaceB != SURFACE_SAND && m_aWheelColPoints[i].surfaceB != SURFACE_SAND &&
@ -3847,7 +3847,7 @@ CAutomobile::DoDriveByShootings(void)
if (!anim || !anim->IsRunning()) { if (!anim || !anim->IsRunning()) {
if (CPad::GetPad(0)->GetCarGunFired() && CTimer::GetTimeInMilliseconds() > weapon->m_nTimer) { if (CPad::GetPad(0)->GetCarGunFired() && CTimer::GetTimeInMilliseconds() > weapon->m_nTimer) {
weapon->FireFromCar(this, lookingLeft); weapon->FireFromCar(this, lookingLeft, true);
weapon->m_nTimer = CTimer::GetTimeInMilliseconds() + 70; weapon->m_nTimer = CTimer::GetTimeInMilliseconds() + 70;
} }
} }
@ -4450,25 +4450,16 @@ CAutomobile::AddWheelDirtAndWater(CColPoint *colpoint, uint32 belowEffectSpeed)
} }
return 0; return 0;
default: default:
if ( CWeather::WetRoads > 0.01f if(CWeather::WetRoads > 0.01f){
#ifdef PC_PARTICLE if(CTimer::GetFrameCounter() & 1)
&& CTimer::GetFrameCounter() & 1 CParticle::AddParticle(
#endif PARTICLE_WATERSPRAY,
) colpoint->point + CVector(0.0f, 0.0f, 0.25f+0.25f),
{ CVector(0.0f, 0.0f, CGeneral::GetRandomNumberInRange(0.005f, 0.04f)),
CParticle::AddParticle( nil,
#ifdef FIX_BUGS CGeneral::GetRandomNumberInRange(0.1f, 0.5f), waterCol);
PARTICLE_WHEEL_WATER,
#else
PARTICLE_WATERSPRAY,
#endif
colpoint->point + CVector(0.0f, 0.0f, 0.25f+0.25f),
CVector(0.0f, 0.0f, CGeneral::GetRandomNumberInRange(0.005f, 0.04f)),
nil,
CGeneral::GetRandomNumberInRange(0.1f, 0.5f), waterCol);
return 0; return 0;
} }
return 1; return 1;
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -69,11 +69,11 @@ public:
uint8 m_bike_flag01 : 1; uint8 m_bike_flag01 : 1;
uint8 m_bike_flag02 : 1; uint8 m_bike_flag02 : 1;
uint8 bWaterTight : 1; uint8 bWaterTight : 1;
uint8 m_bike_flag08 : 1; uint8 bIsBeingPickedUp : 1;
uint8 bIsStanding : 1; uint8 bIsStanding : 1;
uint8 bExtraSpeed : 1; // leaning forward uint8 bExtraSpeed : 1; // leaning forward
uint8 bIsOnFire : 1; uint8 bIsOnFire : 1;
uint8 m_bike_flag80 : 1; // doing wheelie? uint8 m_bike_flag80 : 1;
int16 m_doingBurnout; int16 m_doingBurnout;
float m_fTireTemperature; float m_fTireTemperature;
float m_fBrakeDestabilization; float m_fBrakeDestabilization;
@ -117,9 +117,12 @@ public:
float GetHeightAboveRoad(void); float GetHeightAboveRoad(void);
void PlayCarHorn(void); void PlayCarHorn(void);
void KnockOffRider(eWeaponType weapon, uint8 direction, CPed *ped, bool bGetBackOn);
void VehicleDamage(void); void VehicleDamage(void);
void ProcessBuoyancy(void); void ProcessBuoyancy(void);
void DoDriveByShootings(void); void DoDriveByShootings(void);
void AddDamagedVehicleParticles(void);
int32 AddWheelDirtAndWater(CColPoint *colpoint, uint32 belowEffectSpeed);
void PlayHornIfNecessary(void); void PlayHornIfNecessary(void);
void ResetSuspension(void); void ResetSuspension(void);
void SetupSuspensionLines(void); void SetupSuspensionLines(void);

View File

@ -975,7 +975,7 @@ CBoat::DoDriveByShootings(void)
if (!anim || !anim->IsRunning()) { if (!anim || !anim->IsRunning()) {
if (CPad::GetPad(0)->GetCarGunFired() && CTimer::GetTimeInMilliseconds() > weapon->m_nTimer) { if (CPad::GetPad(0)->GetCarGunFired() && CTimer::GetTimeInMilliseconds() > weapon->m_nTimer) {
weapon->FireFromCar(this, lookingLeft); weapon->FireFromCar(this, lookingLeft, true);
weapon->m_nTimer = CTimer::GetTimeInMilliseconds() + 70; weapon->m_nTimer = CTimer::GetTimeInMilliseconds() + 70;
} }
} }

View File

@ -264,7 +264,7 @@ INITSAVEBUF
WriteSaveBuf(buffer, ProcessCounter); WriteSaveBuf(buffer, ProcessCounter);
WriteSaveBuf(buffer, GenerateEvenIfPlayerIsCloseCounter); WriteSaveBuf(buffer, GenerateEvenIfPlayerIsCloseCounter);
WriteSaveBuf(buffer, (int16)0); // alignment WriteSaveBuf(buffer, (int16)0); // alignment
WriteSaveBuf(buffer, sizeof(CarGeneratorArray)); WriteSaveBuf(buffer, (uint32)sizeof(CarGeneratorArray));
for (int i = 0; i < NUM_CARGENS; i++) for (int i = 0; i < NUM_CARGENS; i++)
WriteSaveBuf(buffer, CarGeneratorArray[i]); WriteSaveBuf(buffer, CarGeneratorArray[i]);
VALIDATESAVEBUF(*size) VALIDATESAVEBUF(*size)

View File

@ -84,6 +84,10 @@ CPlane::CPlane(int32 id, uint8 CreatedBy)
SetStatus(STATUS_PLANE); SetStatus(STATUS_PLANE);
bIsBIGBuilding = true; bIsBIGBuilding = true;
m_level = LEVEL_NONE; m_level = LEVEL_NONE;
#ifdef FIX_BUGS
m_isFarAway = true;
#endif
} }
CPlane::~CPlane() CPlane::~CPlane()

View File

@ -64,6 +64,10 @@ CTrain::CTrain(int32 id, uint8 CreatedBy)
bUsesCollision = true; bUsesCollision = true;
SetStatus(STATUS_TRAIN_MOVING); SetStatus(STATUS_TRAIN_MOVING);
#ifdef FIX_BUGS
m_isFarAway = true;
#endif
#else #else
assert(0 && "No trains in this game"); assert(0 && "No trains in this game");
#endif #endif

View File

@ -80,6 +80,9 @@ CVehicle::CVehicle(uint8 CreatedBy)
bIsLawEnforcer = false; bIsLawEnforcer = false;
bIsAmbulanceOnDuty = false; bIsAmbulanceOnDuty = false;
bIsFireTruckOnDuty = false; bIsFireTruckOnDuty = false;
#ifdef FIX_BUGS
bIsHandbrakeOn = false;
#endif
CCarCtrl::UpdateCarCount(this, false); CCarCtrl::UpdateCarCount(this, false);
m_fHealth = 1000.0f; m_fHealth = 1000.0f;
bEngineOn = true; bEngineOn = true;
@ -117,7 +120,7 @@ CVehicle::CVehicle(uint8 CreatedBy)
m_numPedsUseItAsCover = 0; m_numPedsUseItAsCover = 0;
bIsCarParkVehicle = false; bIsCarParkVehicle = false;
bHasAlreadyBeenRecorded = false; bHasAlreadyBeenRecorded = false;
m_bSirenOrAlarm = 0; m_bSirenOrAlarm = false;
m_nCarHornTimer = 0; m_nCarHornTimer = 0;
m_nCarHornPattern = 0; m_nCarHornPattern = 0;
m_nCarHornDelay = 0; m_nCarHornDelay = 0;
@ -748,7 +751,7 @@ CVehicle::ProcessWheel(CVector &wheelFwd, CVector &wheelRight, CVector &wheelCon
static bool bBraking; static bool bBraking;
static bool bDriving; static bool bDriving;
#ifdef FIX_BUGS #ifdef FIX_SIGNIFICANT_BUGS
bAlreadySkidding = false; bAlreadySkidding = false;
#endif #endif
@ -903,7 +906,7 @@ CVehicle::ProcessBikeWheel(CVector &wheelFwd, CVector &wheelRight, CVector &whee
static bool bDriving; static bool bDriving;
static bool bReversing; static bool bReversing;
#ifdef FIX_BUGS #ifdef FIX_SIGNIFICANT_BUGS
bAlreadySkidding = false; bAlreadySkidding = false;
#endif #endif
@ -1032,7 +1035,6 @@ CVehicle::ProcessBikeWheel(CVector &wheelFwd, CVector &wheelRight, CVector &whee
float impulse = speed*m_fMass; float impulse = speed*m_fMass;
float turnImpulse = speed*GetMass(wheelContactPoint, direction); float turnImpulse = speed*GetMass(wheelContactPoint, direction);
CVector vTurnImpulse = turnImpulse * direction; CVector vTurnImpulse = turnImpulse * direction;
ApplyMoveForce(impulse * direction); ApplyMoveForce(impulse * direction);
float turnRight = DotProduct(vTurnImpulse, GetRight()); float turnRight = DotProduct(vTurnImpulse, GetRight());

View File

@ -31,6 +31,7 @@
#include "WeaponInfo.h" #include "WeaponInfo.h"
#include "World.h" #include "World.h"
#include "SurfaceTable.h" #include "SurfaceTable.h"
#include "Bike.h"
// TODO(Miami) // TODO(Miami)
#define AUDIO_NOT_READY #define AUDIO_NOT_READY
@ -386,7 +387,7 @@ CWeapon::Fire(CEntity *shooter, CVector *fireSource)
} }
bool bool
CWeapon::FireFromCar(CVehicle *shooter, bool left) CWeapon::FireFromCar(CVehicle *shooter, bool left, bool right)
{ {
ASSERT(shooter!=nil); ASSERT(shooter!=nil);
@ -396,7 +397,7 @@ CWeapon::FireFromCar(CVehicle *shooter, bool left)
if ( m_nAmmoInClip <= 0 ) if ( m_nAmmoInClip <= 0 )
return false; return false;
if ( FireInstantHitFromCar(shooter, left) ) if ( FireInstantHitFromCar(shooter, left, right) )
{ {
DMAudio.PlayOneShot(shooter->m_audioEntityId, SOUND_WEAPON_SHOT_FIRED, 0.0f); DMAudio.PlayOneShot(shooter->m_audioEntityId, SOUND_WEAPON_SHOT_FIRED, 0.0f);
@ -524,7 +525,22 @@ CWeapon::FireMelee(CEntity *shooter, CVector &fireSource)
} }
damageEntityRegistered = 3; damageEntityRegistered = 3;
// TODO(Miami): Bike if (victimPed->bInVehicle) {
CVehicle *victimVeh = victimPed->m_pMyVehicle;
if (victimVeh) {
if (victimVeh->IsBike()) {
CBike *victimBike = (CBike*)victimVeh;
victimBike->KnockOffRider(m_eWeaponType, localDir, victimPed, false);
if (victimBike->pDriver) {
victimBike->pDriver->ReactToAttack(shooterPed);
} else {
if (victimVeh->pPassengers[0])
victimVeh->pPassengers[0]->ReactToAttack(shooterPed);
}
continue;
}
}
}
if ( !victimPed->DyingOrDead() ) if ( !victimPed->DyingOrDead() )
victimPed->ReactToAttack(shooterPed); victimPed->ReactToAttack(shooterPed);
@ -2005,8 +2021,9 @@ CWeapon::FireM16_1stPerson(CEntity *shooter)
} }
bool bool
CWeapon::FireInstantHitFromCar(CVehicle *shooter, bool left) CWeapon::FireInstantHitFromCar(CVehicle *shooter, bool left, bool right)
{ {
// TODO(MIAMI): bikes
CWeaponInfo *info = GetInfo(); CWeaponInfo *info = GetInfo();
CVehicleModelInfo *modelInfo = shooter->GetModelInfo(); CVehicleModelInfo *modelInfo = shooter->GetModelInfo();

View File

@ -37,7 +37,7 @@ public:
void Shutdown(); void Shutdown();
bool Fire (CEntity *shooter, CVector *fireSource); bool Fire (CEntity *shooter, CVector *fireSource);
bool FireFromCar (CVehicle *shooter, bool left); bool FireFromCar (CVehicle *shooter, bool left, bool right);
bool FireMelee (CEntity *shooter, CVector &fireSource); bool FireMelee (CEntity *shooter, CVector &fireSource);
bool FireInstantHit(CEntity *shooter, CVector *fireSource); bool FireInstantHit(CEntity *shooter, CVector *fireSource);
@ -52,7 +52,7 @@ public:
bool FireAreaEffect (CEntity *shooter, CVector *fireSource); bool FireAreaEffect (CEntity *shooter, CVector *fireSource);
bool FireSniper (CEntity *shooter); bool FireSniper (CEntity *shooter);
bool FireM16_1stPerson (CEntity *shooter); bool FireM16_1stPerson (CEntity *shooter);
bool FireInstantHitFromCar(CVehicle *shooter, bool left); bool FireInstantHitFromCar(CVehicle *shooter, bool left, bool right);
static void DoDoomAiming (CEntity *shooter, CVector *source, CVector *target); static void DoDoomAiming (CEntity *shooter, CVector *source, CVector *target);
static void DoTankDoomAiming (CEntity *shooter, CEntity *driver, CVector *source, CVector *target); static void DoTankDoomAiming (CEntity *shooter, CEntity *driver, CVector *source, CVector *target);