mirror of
				https://github.com/halpz/re3.git
				synced 2025-11-04 10:45:04 +00:00 
			
		
		
		
	Merge pull request #654 from erorcun/miami
VC fighting, Peds, many fixes including ghost bikes
This commit is contained in:
		
						commit
						30723cf723
					
				| 
						 | 
				
			
			@ -238,14 +238,14 @@ AnimAssocDesc aMeleeAnimDescs[] = {
 | 
			
		|||
	{ ANIM_MELEE_ATTACK_2ND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 | 
			
		||||
	{ ANIM_MELEE_ATTACK_START, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
 | 
			
		||||
	{ ANIM_MELEE_IDLE_FIGHTMODE, ASSOC_REPEAT },
 | 
			
		||||
	{ ANIM_WEAPON_SPECIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION }, // TODO(Miami): Overload that name for melee/swing
 | 
			
		||||
	{ ANIM_MELEE_ATTACK_FINISH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
 | 
			
		||||
};
 | 
			
		||||
AnimAssocDesc aSwingAnimDescs[] = {
 | 
			
		||||
	{ ANIM_MELEE_ATTACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 | 
			
		||||
	{ ANIM_MELEE_ATTACK_2ND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 | 
			
		||||
	{ ANIM_MELEE_ATTACK_START, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 | 
			
		||||
	{ ANIM_MELEE_IDLE_FIGHTMODE, ASSOC_REPEAT },
 | 
			
		||||
	{ ANIM_WEAPON_SPECIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL }, // TODO(Miami): Overload that name for melee/swing
 | 
			
		||||
	{ ANIM_MELEE_ATTACK_FINISH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 | 
			
		||||
};
 | 
			
		||||
AnimAssocDesc aWeaponAnimDescs[] = {
 | 
			
		||||
	{ ANIM_WEAPON_FIRE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -234,6 +234,7 @@ enum AnimationId
 | 
			
		|||
	ANIM_MELEE_ATTACK_2ND,
 | 
			
		||||
	ANIM_MELEE_ATTACK_START,
 | 
			
		||||
	ANIM_MELEE_IDLE_FIGHTMODE,
 | 
			
		||||
	ANIM_MELEE_ATTACK_FINISH,
 | 
			
		||||
	ANIM_THROWABLE_THROW = ANIM_WEAPON_FIRE,
 | 
			
		||||
	ANIM_THROWABLE_THROWU,
 | 
			
		||||
	ANIM_THROWABLE_START_THROW,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5724,6 +5724,8 @@ cAudioManager::ClearMissionAudio(uint8 slot)
 | 
			
		|||
		m_sMissionAudio.m_bIsPlayed[slot] = false;
 | 
			
		||||
		m_sMissionAudio.m_bPredefinedProperties[slot] = true;
 | 
			
		||||
		m_sMissionAudio.m_nMissionAudioCounter[slot] = 0;
 | 
			
		||||
		m_sMissionAudio.m_bIsMobile[slot] = false;
 | 
			
		||||
		SampleManager.StopStreamedFile(slot + 1);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -714,15 +714,17 @@ cMusicManager::UsesPoliceRadio(CVehicle *veh)
 | 
			
		|||
{
 | 
			
		||||
	switch (veh->GetModelIndex())
 | 
			
		||||
	{
 | 
			
		||||
	case MI_FBICAR:
 | 
			
		||||
	case MI_POLICE:
 | 
			
		||||
	case MI_ENFORCER:
 | 
			
		||||
	case MI_PREDATOR:
 | 
			
		||||
	case MI_VCNMAV:
 | 
			
		||||
	case MI_POLMAV:
 | 
			
		||||
	case MI_COASTG:
 | 
			
		||||
	case MI_RHINO:
 | 
			
		||||
	case MI_BARRACKS:
 | 
			
		||||
		return true;
 | 
			
		||||
	case MI_MRWHOOP:
 | 
			
		||||
	case MI_HUNTER:
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	return false;
 | 
			
		||||
	return veh->UsesSiren();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,7 +80,7 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
 | 
			
		|||
			if (FindSwitchDistanceClose(pVehicle) > (FindPlayerCoors() - pVehicle->GetPosition()).Magnitude2D() ||
 | 
			
		||||
				pVehicle->AutoPilot.m_bIgnorePathfinding) {
 | 
			
		||||
				pVehicle->AutoPilot.m_nCarMission = MISSION_RAMPLAYER_CLOSE;
 | 
			
		||||
				if (pVehicle->UsesSiren(pVehicle->GetModelIndex()))
 | 
			
		||||
				if (pVehicle->UsesSiren())
 | 
			
		||||
					pVehicle->m_bSirenOrAlarm = true;
 | 
			
		||||
			}
 | 
			
		||||
			BackToCruisingIfNoWantedLevel(pVehicle);
 | 
			
		||||
| 
						 | 
				
			
			@ -136,7 +136,7 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
 | 
			
		|||
			if (FindSwitchDistanceClose(pVehicle) > (FindPlayerCoors() - pVehicle->GetPosition()).Magnitude2D() ||
 | 
			
		||||
				pVehicle->AutoPilot.m_bIgnorePathfinding) {
 | 
			
		||||
				pVehicle->AutoPilot.m_nCarMission = MISSION_BLOCKPLAYER_CLOSE;
 | 
			
		||||
				if (pVehicle->UsesSiren(pVehicle->GetModelIndex()))
 | 
			
		||||
				if (pVehicle->UsesSiren())
 | 
			
		||||
					pVehicle->m_bSirenOrAlarm = true;
 | 
			
		||||
			}
 | 
			
		||||
			BackToCruisingIfNoWantedLevel(pVehicle);
 | 
			
		||||
| 
						 | 
				
			
			@ -294,7 +294,7 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
 | 
			
		|||
				if ((pVehicle->AutoPilot.m_pTargetCar->GetPosition() - pVehicle->GetPosition()).Magnitude2D() < FindSwitchDistanceClose(pVehicle) ||
 | 
			
		||||
				  pVehicle->AutoPilot.m_bIgnorePathfinding){
 | 
			
		||||
					pVehicle->AutoPilot.m_nCarMission = MISSION_BLOCKCAR_CLOSE;
 | 
			
		||||
					if (pVehicle->UsesSiren(pVehicle->GetModelIndex()))
 | 
			
		||||
					if (pVehicle->UsesSiren())
 | 
			
		||||
						pVehicle->m_bSirenOrAlarm = true;
 | 
			
		||||
				}
 | 
			
		||||
			}else{
 | 
			
		||||
| 
						 | 
				
			
			@ -540,7 +540,7 @@ void CCarAI::AddPoliceCarOccupants(CVehicle* pVehicle)
 | 
			
		|||
		return;
 | 
			
		||||
	pVehicle->bOccupantsHaveBeenGenerated = true;
 | 
			
		||||
	switch (pVehicle->GetModelIndex()){
 | 
			
		||||
	case MI_FBICAR:
 | 
			
		||||
	case MI_FBIRANCH:
 | 
			
		||||
	case MI_ENFORCER:
 | 
			
		||||
		pVehicle->SetUpDriver();
 | 
			
		||||
		for (int i = 0; i < 3; i++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -366,7 +366,7 @@ CCarCtrl::GenerateOneRandomCar()
 | 
			
		|||
			pVehicle->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_STOP_FOR_CARS;
 | 
			
		||||
			pVehicle->AutoPilot.m_nCarMission = MISSION_CRUISE;
 | 
			
		||||
		}
 | 
			
		||||
		if (carModel == MI_FBICAR){
 | 
			
		||||
		if (carModel == MI_FBIRANCH){
 | 
			
		||||
			pVehicle->m_currentColour1 = 0;
 | 
			
		||||
			pVehicle->m_currentColour2 = 0;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -874,9 +874,9 @@ CCarCtrl::ChoosePoliceCarModel(void)
 | 
			
		|||
		CStreaming::HasModelLoaded(MI_POLICE))
 | 
			
		||||
		return ((CGeneral::GetRandomNumber() & 0xF) == 0) ? MI_ENFORCER : MI_POLICE;
 | 
			
		||||
	if (FindPlayerPed()->m_pWanted->AreFbiRequired() &&
 | 
			
		||||
		CStreaming::HasModelLoaded(MI_FBICAR) &&
 | 
			
		||||
		CStreaming::HasModelLoaded(MI_FBIRANCH) &&
 | 
			
		||||
		CStreaming::HasModelLoaded(MI_FBI))
 | 
			
		||||
		return MI_FBICAR;
 | 
			
		||||
		return MI_FBIRANCH;
 | 
			
		||||
	if (FindPlayerPed()->m_pWanted->AreArmyRequired() &&
 | 
			
		||||
		CStreaming::HasModelLoaded(MI_RHINO) &&
 | 
			
		||||
		CStreaming::HasModelLoaded(MI_BARRACKS) &&
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ CRoadBlocks::GenerateRoadBlockCopsForCar(CVehicle* pVehicle, int32 roadBlockType
 | 
			
		|||
		eCopType copType = COP_STREET;
 | 
			
		||||
		switch (pVehicle->GetModelIndex())
 | 
			
		||||
		{
 | 
			
		||||
		case MI_FBICAR:
 | 
			
		||||
		case MI_FBIRANCH:
 | 
			
		||||
			modelInfoId = MI_FBI;
 | 
			
		||||
			copType = COP_FBI;
 | 
			
		||||
			break;
 | 
			
		||||
| 
						 | 
				
			
			@ -236,7 +236,7 @@ CRoadBlocks::CreateRoadBlockBetween2Points(CVector point1, CVector point2)
 | 
			
		|||
			pVehicle->AutoPilot.m_nNextLane = pVehicle->AutoPilot.m_nCurrentLane = 0;
 | 
			
		||||
			pVehicle->AutoPilot.m_nCruiseSpeed = pVehicle->AutoPilot.m_fMaxTrafficSpeed = 0;
 | 
			
		||||
			pVehicle->bExtendedRange = true;
 | 
			
		||||
			if (pVehicle->UsesSiren(pVehicle->GetModelIndex()) && CGeneral::GetRandomNumber() & 1)
 | 
			
		||||
			if (pVehicle->UsesSiren() && CGeneral::GetRandomNumber() & 1)
 | 
			
		||||
				pVehicle->m_bSirenOrAlarm = true;
 | 
			
		||||
			if (pVehicle->GetUp().z > 0.94f) {
 | 
			
		||||
				CVisibilityPlugins::SetClumpAlpha(pVehicle->GetClump(), 0);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3806,9 +3806,8 @@ int8 CRunningScript::ProcessCommands100To199(int32 command)
 | 
			
		|||
			UpdateCompareFlag(ped->m_pMyVehicle->IsWithinArea(x1, y1, x2, y2));
 | 
			
		||||
		else
 | 
			
		||||
			UpdateCompareFlag(ped->IsWithinArea(x1, y1, x2, y2));
 | 
			
		||||
		if (!ScriptParams[5])
 | 
			
		||||
			return 0;
 | 
			
		||||
		CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, x1, y1, x2, y2, MAP_Z_LOW_LIMIT);
 | 
			
		||||
		if (ScriptParams[5])
 | 
			
		||||
			CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, x1, y1, x2, y2, MAP_Z_LOW_LIMIT);
 | 
			
		||||
		if (CTheScripts::DbgFlag)
 | 
			
		||||
			CTheScripts::DrawDebugSquare(x1, y1, x2, y2);
 | 
			
		||||
		return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -3833,9 +3832,8 @@ int8 CRunningScript::ProcessCommands100To199(int32 command)
 | 
			
		|||
			UpdateCompareFlag(ped->m_pMyVehicle->IsWithinArea(x1, y1, z1, x2, y2, z2));
 | 
			
		||||
		else
 | 
			
		||||
			UpdateCompareFlag(ped->IsWithinArea(x1, y1, z1, x2, y2, z2));
 | 
			
		||||
		if (!ScriptParams[7])
 | 
			
		||||
			return 0;
 | 
			
		||||
		CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, x1, y1, x2, y2, (z1 + z2) / 2);
 | 
			
		||||
		if (ScriptParams[7])
 | 
			
		||||
			CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, x1, y1, x2, y2, (z1 + z2) / 2);
 | 
			
		||||
		if (CTheScripts::DbgFlag)
 | 
			
		||||
			CTheScripts::DrawDebugCube(x1, y1, z1, x2, y2, z2);
 | 
			
		||||
		return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -10722,12 +10720,9 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command)
 | 
			
		|||
		UpdateCompareFlag(CGame::germanGame);
 | 
			
		||||
		return 0;
 | 
			
		||||
	case COMMAND_CLEAR_MISSION_AUDIO:
 | 
			
		||||
	{
 | 
			
		||||
		CollectParameters(&m_nIp, 1);
 | 
			
		||||
		debug("CLEAR_MISSION_AUDIO not implemented\n");
 | 
			
		||||
		//DMAudio.ClearMissionAudio(ScriptParams[0]);
 | 
			
		||||
		DMAudio.ClearMissionAudio(ScriptParams[0] - 1);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	/*
 | 
			
		||||
	case COMMAND_SET_FADE_IN_AFTER_NEXT_ARREST:
 | 
			
		||||
		CollectParameters(&m_nIp, 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -13565,12 +13560,8 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
 | 
			
		|||
		break;
 | 
			
		||||
	case COMMAND_WANTED_STARS_ARE_FLASHING:
 | 
			
		||||
	{
 | 
			
		||||
		static bool bShowed = false;
 | 
			
		||||
		if (!bShowed) {
 | 
			
		||||
			debug("WANTED_STARS_ARE_FLASHING not implemented, default to FALSE\n");
 | 
			
		||||
			bShowed = true;
 | 
			
		||||
		}
 | 
			
		||||
		UpdateCompareFlag(false);
 | 
			
		||||
		CWanted *pWanted = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted;
 | 
			
		||||
		UpdateCompareFlag(pWanted->m_nMinWantedLevel - pWanted->m_nWantedLevel > 0);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	case COMMAND_SET_ALLOW_HURRICANES:
 | 
			
		||||
| 
						 | 
				
			
			@ -13622,7 +13613,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
 | 
			
		|||
	}
 | 
			
		||||
	case COMMAND_DISPLAY_RADAR:
 | 
			
		||||
		CollectParameters(&m_nIp, 1);
 | 
			
		||||
		debug("DISPLAY_RADAR not implemented\n");
 | 
			
		||||
		CHud::m_HideRadar = ScriptParams[0] == 0;
 | 
			
		||||
		return 0;
 | 
			
		||||
	case COMMAND_REGISTER_BEST_POSITION:
 | 
			
		||||
		CollectParameters(&m_nIp, 2);
 | 
			
		||||
| 
						 | 
				
			
			@ -14421,7 +14412,7 @@ void CRunningScript::LocateCharCommand(int32 command, uint32* pIp)
 | 
			
		|||
	CollectParameters(pIp, b3D ? 8 : 6);
 | 
			
		||||
	CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
 | 
			
		||||
	script_assert(pPed);
 | 
			
		||||
	CVector pos = pPed->bInVehicle ? pPed->m_pMyVehicle->GetPosition() : pPed->GetPosition();
 | 
			
		||||
	CVector pos = pPed->InVehicle() ? pPed->m_pMyVehicle->GetPosition() : pPed->GetPosition();
 | 
			
		||||
	switch (command) {
 | 
			
		||||
	case COMMAND_LOCATE_STOPPED_CHAR_ANY_MEANS_2D:
 | 
			
		||||
	case COMMAND_LOCATE_STOPPED_CHAR_ANY_MEANS_3D:
 | 
			
		||||
| 
						 | 
				
			
			@ -15181,7 +15172,7 @@ void CRunningScript::CharInAreaCheckCommand(int32 command, uint32* pIp)
 | 
			
		|||
	CollectParameters(pIp, b3D ? 8 : 6);
 | 
			
		||||
	CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
 | 
			
		||||
	script_assert(pPed);
 | 
			
		||||
	CVector pos = pPed->bInVehicle ? pPed->m_pMyVehicle->GetPosition() : pPed->GetPosition();
 | 
			
		||||
	CVector pos = pPed->InVehicle() ? pPed->m_pMyVehicle->GetPosition() : pPed->GetPosition();
 | 
			
		||||
	switch (command) {
 | 
			
		||||
	case COMMAND_IS_CHAR_STOPPED_IN_AREA_3D:
 | 
			
		||||
	case COMMAND_IS_CHAR_STOPPED_IN_AREA_ON_FOOT_3D:
 | 
			
		||||
| 
						 | 
				
			
			@ -15466,7 +15457,7 @@ void CRunningScript::DoDeatharrestCheck()
 | 
			
		|||
	if (!CTheScripts::IsPlayerOnAMission())
 | 
			
		||||
		return;
 | 
			
		||||
	CPlayerInfo* pPlayer = &CWorld::Players[CWorld::PlayerInFocus];
 | 
			
		||||
	if (!pPlayer->IsRestartingAfterDeath() && !pPlayer->IsRestartingAfterArrest() && !CTheScripts::UpsideDownCars.AreAnyCarsUpsideDown())
 | 
			
		||||
	if (!pPlayer->IsRestartingAfterDeath() && !pPlayer->IsRestartingAfterArrest())
 | 
			
		||||
		return;
 | 
			
		||||
#ifdef MISSION_REPLAY
 | 
			
		||||
	if (AllowMissionReplay != 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -15478,6 +15469,7 @@ void CRunningScript::DoDeatharrestCheck()
 | 
			
		|||
	while (m_nStackPointer > 1)
 | 
			
		||||
		--m_nStackPointer;
 | 
			
		||||
	m_nIp = m_anStack[--m_nStackPointer];
 | 
			
		||||
	CMessages::ClearSmallMessagesOnly();
 | 
			
		||||
	*(int32*)&CTheScripts::ScriptSpace[CTheScripts::OnAMissionFlag] = 0;
 | 
			
		||||
	m_bDeatharrestExecuted = true;
 | 
			
		||||
	m_nWakeTime = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -15914,22 +15906,24 @@ void CTheScripts::HighlightImportantAngledArea(uint32 id, float x1, float y1, fl
 | 
			
		|||
 | 
			
		||||
bool CTheScripts::IsPedStopped(CPed* pPed)
 | 
			
		||||
{
 | 
			
		||||
	if (pPed->bInVehicle)
 | 
			
		||||
	if (pPed->InVehicle())
 | 
			
		||||
		return IsVehicleStopped(pPed->m_pMyVehicle);
 | 
			
		||||
	return pPed->m_nMoveState == eMoveState::PEDMOVE_NONE || pPed->m_nMoveState == eMoveState::PEDMOVE_STILL;
 | 
			
		||||
	return (pPed->m_nMoveState == eMoveState::PEDMOVE_NONE || pPed->m_nMoveState == eMoveState::PEDMOVE_STILL) &&
 | 
			
		||||
		!pPed->bIsInTheAir && !pPed->bIsLanding && pPed->bIsStanding && pPed->m_vecAnimMoveDelta.x == 0.0f && pPed->m_vecAnimMoveDelta.y == 0.0f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CTheScripts::IsPlayerStopped(CPlayerInfo* pPlayer)
 | 
			
		||||
{
 | 
			
		||||
	CPed* pPed = pPlayer->m_pPed;
 | 
			
		||||
	if (pPed->bInVehicle)
 | 
			
		||||
	if (pPed->InVehicle())
 | 
			
		||||
		return IsVehicleStopped(pPed->m_pMyVehicle);
 | 
			
		||||
	if (RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_RUN_STOP) ||
 | 
			
		||||
		RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_RUN_STOP_R) ||
 | 
			
		||||
		RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_JUMP_LAUNCH) ||
 | 
			
		||||
		RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_JUMP_GLIDE))
 | 
			
		||||
		return false;
 | 
			
		||||
	return pPed->m_nMoveState == eMoveState::PEDMOVE_NONE || pPed->m_nMoveState == eMoveState::PEDMOVE_STILL;
 | 
			
		||||
	return (pPed->m_nMoveState == eMoveState::PEDMOVE_NONE || pPed->m_nMoveState == eMoveState::PEDMOVE_STILL) &&
 | 
			
		||||
		!pPed->bIsInTheAir && !pPed->bIsLanding && pPed->bIsStanding && pPed->m_vecAnimMoveDelta.x == 0.0f && pPed->m_vecAnimMoveDelta.y == 0.0f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CTheScripts::IsVehicleStopped(CVehicle* pVehicle)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -766,7 +766,8 @@ void CRadar::DrawMap()
 | 
			
		|||
			m_radarRange = RADAR_MIN_RANGE;
 | 
			
		||||
 | 
			
		||||
		vec2DRadarOrigin = CVector2D(FindPlayerCentreOfWorld_NoSniperShift());
 | 
			
		||||
		DrawRadarMap();
 | 
			
		||||
		if (FrontEndMenuManager.m_PrefsRadarMode != 1)
 | 
			
		||||
			DrawRadarMap();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1380,11 +1380,11 @@ CStreaming::StreamVehiclesAndPeds(void)
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	if(FindPlayerPed()->m_pWanted->AreFbiRequired()){
 | 
			
		||||
		RequestModel(MI_FBICAR, STREAMFLAGS_DONT_REMOVE);
 | 
			
		||||
		RequestModel(MI_FBIRANCH, STREAMFLAGS_DONT_REMOVE);
 | 
			
		||||
		RequestModel(MI_FBI, STREAMFLAGS_DONT_REMOVE);
 | 
			
		||||
	}else{
 | 
			
		||||
		SetModelIsDeletable(MI_FBICAR);
 | 
			
		||||
		if(!HasModelLoaded(MI_FBICAR))
 | 
			
		||||
		SetModelIsDeletable(MI_FBIRANCH);
 | 
			
		||||
		if(!HasModelLoaded(MI_FBIRANCH))
 | 
			
		||||
			SetModelIsDeletable(MI_FBI);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,6 +82,7 @@ CCopPed::CCopPed(eCopType copType, int32 modifier) : CPed(PEDTYPE_COP)
 | 
			
		|||
	m_bZoneDisabled = false;
 | 
			
		||||
	field_628 = -1;
 | 
			
		||||
	m_nRoadblockNode = -1; // TODO(Miami): this will be nil
 | 
			
		||||
	m_bThrowsSpikeTrap = false;
 | 
			
		||||
	field_5FF = 0;
 | 
			
		||||
	m_fAbseilPos = 0.0f;
 | 
			
		||||
	m_bBeatingSuspect = false;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,6 +25,7 @@ public:
 | 
			
		|||
	bool m_bZoneDisabled;
 | 
			
		||||
	float m_fAbseilPos;
 | 
			
		||||
	eCopType m_nCopType;
 | 
			
		||||
	bool m_bThrowsSpikeTrap;
 | 
			
		||||
	int32 field_624;
 | 
			
		||||
	int8 field_628;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1100
									
								
								src/peds/Ped.cpp
									
									
									
									
									
								
							
							
						
						
									
										1100
									
								
								src/peds/Ped.cpp
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
				
			
			@ -98,7 +98,6 @@ enum PedFightMoves
 | 
			
		|||
	FIGHTMOVE_PUNCHHOOK,
 | 
			
		||||
	FIGHTMOVE_PUNCHJAB,
 | 
			
		||||
	FIGHTMOVE_PUNCH,
 | 
			
		||||
	FIGHTMOVE_BODYBLOW = FIGHTMOVE_PUNCH,
 | 
			
		||||
	FIGHTMOVE_LONGKICK,
 | 
			
		||||
	FIGHTMOVE_ROUNDHOUSE,
 | 
			
		||||
	// Directionals
 | 
			
		||||
| 
						 | 
				
			
			@ -457,7 +456,7 @@ public:
 | 
			
		|||
	uint32 bIsDrowning : 1;
 | 
			
		||||
	uint32 bDrownsInWater : 1;
 | 
			
		||||
	//uint32 b156_4
 | 
			
		||||
	uint32 b156_8 : 1;
 | 
			
		||||
	uint32 bHeldHostageInCar : 1;
 | 
			
		||||
	uint32 bIsPlayerFriend : 1;
 | 
			
		||||
	uint32 bHeadStuckInCollision : 1;
 | 
			
		||||
	uint32 bDeadPedInFrontOfCar : 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -467,7 +466,7 @@ public:
 | 
			
		|||
	uint32 bDoomAim : 1;
 | 
			
		||||
	uint32 bCanBeShotInVehicle : 1;
 | 
			
		||||
	//uint32 b157_8
 | 
			
		||||
	uint32 b157_10 : 1;
 | 
			
		||||
	uint32 bMakeFleeScream : 1;
 | 
			
		||||
	uint32 bPushedAlongByCar : 1;
 | 
			
		||||
	uint32 b157_40 : 1;
 | 
			
		||||
	uint32 bIgnoreThreatsBehindObjects : 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -482,7 +481,6 @@ public:
 | 
			
		|||
	//uint32 b158_80
 | 
			
		||||
 | 
			
		||||
	// our own flags
 | 
			
		||||
	uint32 m_ped_flagI40 : 1; // bMakePedsRunToPhonesToReportCrimes makes use of this as runover by car indicator
 | 
			
		||||
	uint32 m_ped_flagI80 : 1; // KANGAROO_CHEAT define makes use of this as cheat toggle 
 | 
			
		||||
 | 
			
		||||
	uint8 m_gangFlags;
 | 
			
		||||
| 
						 | 
				
			
			@ -590,8 +588,8 @@ public:
 | 
			
		|||
	uint8 m_wepAccuracy;
 | 
			
		||||
	CEntity *m_pPointGunAt;
 | 
			
		||||
	CVector m_vecHitLastPos;
 | 
			
		||||
	uint32 m_curFightMove;
 | 
			
		||||
	uint32 m_lastFightMove;
 | 
			
		||||
	uint32 m_lastHitState; // TODO(Miami): What's this?
 | 
			
		||||
	uint8 m_fightButtonPressure;
 | 
			
		||||
	FightState m_fightState;
 | 
			
		||||
	bool m_takeAStepAfterAttack;
 | 
			
		||||
| 
						 | 
				
			
			@ -757,6 +755,8 @@ public:
 | 
			
		|||
	void SetWaitState(eWaitState, void*);
 | 
			
		||||
	bool FightStrike(CVector&, bool);
 | 
			
		||||
	void FightHitPed(CPed*, CVector&, CVector&, int16);
 | 
			
		||||
	int32 ChooseAttackPlayer(uint8, bool);
 | 
			
		||||
	int32 ChooseAttackAI(uint8, bool);
 | 
			
		||||
	int GetLocalDirection(const CVector2D &);
 | 
			
		||||
	void StartFightDefend(uint8, uint8, uint8);
 | 
			
		||||
	void PlayHitSound(CPed*);
 | 
			
		||||
| 
						 | 
				
			
			@ -960,6 +960,7 @@ public:
 | 
			
		|||
	bool Dying(void) { return m_nPedState == PED_DIE; }
 | 
			
		||||
	bool DyingOrDead(void) { return m_nPedState == PED_DIE || m_nPedState == PED_DEAD; }
 | 
			
		||||
	bool OnGround(void) { return m_nPedState == PED_FALL || m_nPedState == PED_DIE || m_nPedState == PED_DEAD; }
 | 
			
		||||
	bool OnGroundOrGettingUp(void) { return OnGround() || m_nPedState == PED_GETUP; }
 | 
			
		||||
	
 | 
			
		||||
	bool Driving(void) { return m_nPedState == PED_DRIVING; }
 | 
			
		||||
	bool InVehicle(void) { return bInVehicle && m_pMyVehicle; } // True when ped is sitting/standing in vehicle, not in enter/exit state.
 | 
			
		||||
| 
						 | 
				
			
			@ -1028,6 +1029,20 @@ public:
 | 
			
		|||
		else
 | 
			
		||||
			return (AnimationId)0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	static AnimationId GetFinishingAttackAnim(CWeaponInfo* weapon) {
 | 
			
		||||
		if (!!weapon->m_bFinish3rd)
 | 
			
		||||
			return ANIM_MELEE_ATTACK_FINISH;
 | 
			
		||||
		else
 | 
			
		||||
			return (AnimationId)0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	static AnimationId GetSecondFireAnim(CWeaponInfo* weapon) {
 | 
			
		||||
		if (!!weapon->m_bUse2nd)
 | 
			
		||||
			return ANIM_WEAPON_FIRE_2ND; // or ANIM_MELEE_ATTACK_2ND
 | 
			
		||||
		else
 | 
			
		||||
			return (AnimationId)0;
 | 
			
		||||
	}
 | 
			
		||||
	// --
 | 
			
		||||
 | 
			
		||||
	// My additions, because there were many, many instances of that.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -784,6 +784,7 @@ CPlayerPed::PlayerControlM16(CPad *padUsed)
 | 
			
		|||
	GetWeapon()->Update(m_audioEntityId, nil);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// --MIAMI: Done
 | 
			
		||||
void
 | 
			
		||||
CPlayerPed::PlayerControlFighter(CPad *padUsed)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -809,6 +810,7 @@ CPlayerPed::PlayerControlFighter(CPad *padUsed)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// --MIAMI: Done
 | 
			
		||||
void
 | 
			
		||||
CPlayerPed::PlayerControl1stPersonRunAround(CPad *padUsed)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -559,16 +559,23 @@ CPopulation::AddToPopulation(float minDist, float maxDist, float minDistOffScree
 | 
			
		|||
	CZoneInfo zoneInfo;
 | 
			
		||||
	CPed *gangLeader = nil;
 | 
			
		||||
	bool addCop = false;
 | 
			
		||||
	bool forceAddingCop = false;
 | 
			
		||||
	CPlayerInfo *playerInfo = &CWorld::Players[CWorld::PlayerInFocus];
 | 
			
		||||
	CVector playerCentreOfWorld = FindPlayerCentreOfWorld(CWorld::PlayerInFocus);
 | 
			
		||||
	CTheZones::GetZoneInfoForTimeOfDay(&playerCentreOfWorld, &zoneInfo);
 | 
			
		||||
	CWanted *wantedInfo = playerInfo->m_pPed->m_pWanted;
 | 
			
		||||
 | 
			
		||||
	if (wantedInfo->m_nWantedLevel > 2) {
 | 
			
		||||
		if (ms_nNumCop < wantedInfo->m_MaxCops && !playerInfo->m_pPed->bInVehicle
 | 
			
		||||
			&& (CCarCtrl::NumLawEnforcerCars >= wantedInfo->m_MaximumLawEnforcerVehicles
 | 
			
		||||
		if (!CGame::IsInInterior() && (CGeneral::GetRandomNumber() % 32 == 0) && FindPlayerVehicle())
 | 
			
		||||
			forceAddingCop = true;
 | 
			
		||||
 | 
			
		||||
		uint32 maxCops = CGame::IsInInterior() ? wantedInfo->m_MaxCops * 1.6f : wantedInfo->m_MaxCops;
 | 
			
		||||
		if ((ms_nNumCop < maxCops || forceAddingCop) &&
 | 
			
		||||
			(!playerInfo->m_pPed->bInVehicle &&
 | 
			
		||||
				(CCarCtrl::NumLawEnforcerCars >= wantedInfo->m_MaximumLawEnforcerVehicles
 | 
			
		||||
				|| CCarCtrl::NumRandomCars >= playerInfo->m_nTrafficMultiplier * CCarCtrl::CarDensityMultiplier
 | 
			
		||||
				|| CCarCtrl::NumFiretrucksOnDuty + CCarCtrl::NumAmbulancesOnDuty + CCarCtrl::NumParkedCars
 | 
			
		||||
				+ CCarCtrl::NumMissionCars + CCarCtrl::NumLawEnforcerCars + CCarCtrl::NumRandomCars >= CCarCtrl::MaxNumberOfCarsInUse)) {
 | 
			
		||||
				+ CCarCtrl::NumMissionCars + CCarCtrl::NumLawEnforcerCars + CCarCtrl::NumRandomCars >= CCarCtrl::MaxNumberOfCarsInUse) || forceAddingCop)) {
 | 
			
		||||
			addCop = true;
 | 
			
		||||
			minDist = PedCreationDistMultiplier() * MIN_CREATION_DIST;
 | 
			
		||||
			maxDist = PedCreationDistMultiplier() * (MIN_CREATION_DIST + CREATION_RANGE);
 | 
			
		||||
| 
						 | 
				
			
			@ -693,6 +700,9 @@ CPopulation::AddToPopulation(float minDist, float maxDist, float minDistOffScree
 | 
			
		|||
			if (!farEnoughToAdd)
 | 
			
		||||
				break;
 | 
			
		||||
			CPed *newPed = AddPed((ePedType)pedTypeToAdd, modelToAdd, generatedCoors);
 | 
			
		||||
			if (forceAddingCop && newPed->m_nPedType == PEDTYPE_COP)
 | 
			
		||||
				((CCopPed*)newPed)->m_bThrowsSpikeTrap = true;
 | 
			
		||||
 | 
			
		||||
			newPed->SetWanderPath(CGeneral::GetRandomNumberInRange(0, 8));
 | 
			
		||||
 | 
			
		||||
			if (i != 0) {
 | 
			
		||||
| 
						 | 
				
			
			@ -721,10 +731,11 @@ CPopulation::AddToPopulation(float minDist, float maxDist, float minDistOffScree
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TODO(Miami)
 | 
			
		||||
CPed*
 | 
			
		||||
CPopulation::AddPedInCar(CVehicle* car, bool isDriver)
 | 
			
		||||
{
 | 
			
		||||
	int defaultModel = MI_MALE01;
 | 
			
		||||
	const int defaultModel = MI_MALE01;
 | 
			
		||||
	int miamiViceIndex = 0;
 | 
			
		||||
	bool imSureThatModelIsLoaded = true;
 | 
			
		||||
	CVector coors = FindPlayerCoors();
 | 
			
		||||
| 
						 | 
				
			
			@ -744,10 +755,6 @@ CPopulation::AddPedInCar(CVehicle* car, bool isDriver)
 | 
			
		|||
			preferredModel = 0;
 | 
			
		||||
			pedType = PEDTYPE_EMERGENCY;
 | 
			
		||||
			break;
 | 
			
		||||
		case MI_FBICAR:
 | 
			
		||||
			preferredModel = COP_FBI;
 | 
			
		||||
			pedType = PEDTYPE_COP;
 | 
			
		||||
			break;
 | 
			
		||||
		case MI_POLICE:
 | 
			
		||||
		case MI_PREDATOR:
 | 
			
		||||
			preferredModel = COP_STREET;
 | 
			
		||||
| 
						 | 
				
			
			@ -762,24 +769,24 @@ CPopulation::AddPedInCar(CVehicle* car, bool isDriver)
 | 
			
		|||
			preferredModel = COP_ARMY;
 | 
			
		||||
			pedType = PEDTYPE_COP;
 | 
			
		||||
			break;
 | 
			
		||||
		case MI_VICECHEE: // TODO(MIAMI): figure out new structure of the function
 | 
			
		||||
			preferredModel = COP_MIAMIVICE;
 | 
			
		||||
		case MI_FBIRANCH:
 | 
			
		||||
			preferredModel = COP_FBI;
 | 
			
		||||
			pedType = PEDTYPE_COP;
 | 
			
		||||
			miamiViceIndex = (isDriver ? 2 * CCarCtrl::MiamiViceCycle : 2 * CCarCtrl::MiamiViceCycle + 1);
 | 
			
		||||
			break;
 | 
			
		||||
		case MI_TAXI:
 | 
			
		||||
		case MI_CABBIE:
 | 
			
		||||
		case MI_ZEBRA:
 | 
			
		||||
		case MI_KAUFMAN:
 | 
			
		||||
			if (CGeneral::GetRandomTrueFalse()) {
 | 
			
		||||
				pedType = PEDTYPE_CIVMALE;
 | 
			
		||||
				preferredModel = MI_TAXI_D;
 | 
			
		||||
		default:
 | 
			
		||||
			if (car->GetModelIndex() == MI_TAXI || car->GetModelIndex() == MI_CABBIE || car->GetModelIndex() == MI_ZEBRA || car->GetModelIndex() == MI_KAUFMAN) {
 | 
			
		||||
				if (isDriver) {
 | 
			
		||||
					pedType = PEDTYPE_CIVMALE;
 | 
			
		||||
					preferredModel = MI_TAXI_D;
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			} else if (car->GetModelIndex() == MI_VICECHEE && car->bIsLawEnforcer) {
 | 
			
		||||
				preferredModel = COP_MIAMIVICE;
 | 
			
		||||
				pedType = PEDTYPE_COP;
 | 
			
		||||
				miamiViceIndex = (isDriver ? 2 * CCarCtrl::MiamiViceCycle : 2 * CCarCtrl::MiamiViceCycle + 1);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			defaultModel = MI_TAXI_D;
 | 
			
		||||
 | 
			
		||||
			// fall through
 | 
			
		||||
		default:
 | 
			
		||||
			int gangOfPed = 0;
 | 
			
		||||
			imSureThatModelIsLoaded = false;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -798,8 +805,12 @@ CPopulation::AddPedInCar(CVehicle* car, bool isDriver)
 | 
			
		|||
					if (preferredModel == -1)
 | 
			
		||||
						preferredModel = defaultModel;
 | 
			
		||||
 | 
			
		||||
					if (((CPedModelInfo*)CModelInfo::GetModelInfo(preferredModel))->m_carsCanDrive & (1 << carModelInfo->m_vehicleClass))
 | 
			
		||||
						break;
 | 
			
		||||
					if (((CPedModelInfo*)CModelInfo::GetModelInfo(preferredModel))->GetRwObject()) {
 | 
			
		||||
						if (!car->IsPassenger(preferredModel) && !car->IsDriver(preferredModel)) {
 | 
			
		||||
							if (((CPedModelInfo*)CModelInfo::GetModelInfo(preferredModel))->m_carsCanDrive & (1 << carModelInfo->m_vehicleClass))
 | 
			
		||||
								break;
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				if (i == -1)
 | 
			
		||||
					preferredModel = defaultModel;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -70,6 +70,7 @@ bool CHud::m_Wants_To_Draw_Hud;
 | 
			
		|||
bool CHud::m_Wants_To_Draw_3dMarkers;
 | 
			
		||||
wchar CHud::m_BigMessage[6][128];
 | 
			
		||||
int16 CHud::m_ItemToFlash;
 | 
			
		||||
bool CHud::m_HideRadar;
 | 
			
		||||
 | 
			
		||||
// These aren't really in CHud
 | 
			
		||||
float CHud::BigMessageInUse[6];
 | 
			
		||||
| 
						 | 
				
			
			@ -902,20 +903,25 @@ void CHud::Draw()
 | 
			
		|||
		/*
 | 
			
		||||
			DrawRadar
 | 
			
		||||
		*/
 | 
			
		||||
		if (m_ItemToFlash == ITEM_RADAR && CTimer::GetFrameCounter() & 8 || m_ItemToFlash != ITEM_RADAR) {
 | 
			
		||||
		if (FrontEndMenuManager.m_PrefsRadarMode != 2 &&
 | 
			
		||||
			!m_HideRadar && (m_ItemToFlash == ITEM_RADAR && CTimer::GetFrameCounter() & 8 || m_ItemToFlash != ITEM_RADAR)) {
 | 
			
		||||
 | 
			
		||||
			RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERNEAREST);
 | 
			
		||||
			CRadar::DrawMap();
 | 
			
		||||
			CRect rect(0.0f, 0.0f, SCREEN_SCALE_X(RADAR_WIDTH), SCREEN_SCALE_Y(RADAR_HEIGHT));
 | 
			
		||||
			if (FrontEndMenuManager.m_PrefsRadarMode != 1) {
 | 
			
		||||
				CRect rect(0.0f, 0.0f, SCREEN_SCALE_X(RADAR_WIDTH), SCREEN_SCALE_Y(RADAR_HEIGHT));
 | 
			
		||||
#ifdef FIX_BUGS
 | 
			
		||||
			rect.Translate(SCREEN_SCALE_X(RADAR_LEFT), SCREEN_SCALE_FROM_BOTTOM(RADAR_BOTTOM + RADAR_HEIGHT));
 | 
			
		||||
				rect.Translate(SCREEN_SCALE_X(RADAR_LEFT), SCREEN_SCALE_FROM_BOTTOM(RADAR_BOTTOM + RADAR_HEIGHT));
 | 
			
		||||
#else
 | 
			
		||||
			rect.Translate(RADAR_LEFT, SCREEN_SCALE_FROM_BOTTOM(RADAR_BOTTOM + RADAR_HEIGHT));
 | 
			
		||||
				rect.Translate(RADAR_LEFT, SCREEN_SCALE_FROM_BOTTOM(RADAR_BOTTOM + RADAR_HEIGHT));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
			rect.Grow(6.0f);
 | 
			
		||||
			rect.Translate(0.0f, 2.0f);
 | 
			
		||||
			Sprites[HUD_RADARDISC].Draw(rect, CRGBA(0, 0, 0, 255));
 | 
			
		||||
			rect.Translate(0.0f, -2.0f);
 | 
			
		||||
			Sprites[HUD_RADARDISC].Draw(rect, RADARDISC_COLOR);
 | 
			
		||||
				rect.Grow(6.0f);
 | 
			
		||||
				rect.Translate(0.0f, 2.0f);
 | 
			
		||||
				Sprites[HUD_RADARDISC].Draw(rect, CRGBA(0, 0, 0, 255));
 | 
			
		||||
				rect.Translate(0.0f, -2.0f);
 | 
			
		||||
				Sprites[HUD_RADARDISC].Draw(rect, RADARDISC_COLOR);
 | 
			
		||||
			}
 | 
			
		||||
			CRadar::DrawBlips();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1570,6 +1576,7 @@ void CHud::Initialise()
 | 
			
		|||
	m_WeaponFadeTimer = 0;
 | 
			
		||||
	m_WeaponTimer = 0;
 | 
			
		||||
 | 
			
		||||
	m_HideRadar = false;
 | 
			
		||||
	m_LastDisplayScore = CWorld::Players[CWorld::PlayerInFocus].m_nVisibleMoney;
 | 
			
		||||
	m_LastWanted = 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1617,6 +1624,7 @@ void CHud::ReInitialise() {
 | 
			
		|||
	m_WeaponFadeTimer = 0;
 | 
			
		||||
	m_WeaponTimer = 0;
 | 
			
		||||
 | 
			
		||||
	m_HideRadar = false;
 | 
			
		||||
	m_LastDisplayScore = CWorld::Players[CWorld::PlayerInFocus].m_nVisibleMoney;
 | 
			
		||||
	m_LastWanted = 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,6 +85,7 @@ public:
 | 
			
		|||
	static bool m_Wants_To_Draw_3dMarkers;
 | 
			
		||||
	static wchar m_BigMessage[6][128];
 | 
			
		||||
	static int16 m_ItemToFlash;
 | 
			
		||||
	static bool m_HideRadar;
 | 
			
		||||
 | 
			
		||||
	// These aren't really in CHud
 | 
			
		||||
	static float BigMessageInUse[6];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1349,7 +1349,7 @@ CAutomobile::ProcessControl(void)
 | 
			
		|||
			if(!IsAlarmOn())
 | 
			
		||||
				ReduceHornCounter();
 | 
			
		||||
		}else{
 | 
			
		||||
			if(UsesSiren(GetModelIndex())){
 | 
			
		||||
			if(UsesSiren()){
 | 
			
		||||
				if(Pads[0].bHornHistory[Pads[0].iCurrHornHistory]){
 | 
			
		||||
					if(Pads[0].bHornHistory[(Pads[0].iCurrHornHistory+4) % 5] &&
 | 
			
		||||
					   Pads[0].bHornHistory[(Pads[0].iCurrHornHistory+3) % 5])
 | 
			
		||||
| 
						 | 
				
			
			@ -1559,7 +1559,7 @@ CAutomobile::ProcessControl(void)
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
	if(m_bSirenOrAlarm && (CTimer::GetFrameCounter()&7) == 5 &&
 | 
			
		||||
	   UsesSiren(GetModelIndex()) && GetModelIndex() != MI_MRWHOOP)
 | 
			
		||||
	   UsesSiren() && GetModelIndex() != MI_MRWHOOP)
 | 
			
		||||
		CCarAI::MakeWayForCarWithSiren(this);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -460,7 +460,7 @@ bool CCrane::DoesCranePickUpThisCarType(uint32 mi)
 | 
			
		|||
		return mi == MI_FIRETRUCK ||
 | 
			
		||||
			mi == MI_AMBULAN ||
 | 
			
		||||
			mi == MI_ENFORCER ||
 | 
			
		||||
			mi == MI_FBICAR ||
 | 
			
		||||
			mi == MI_FBIRANCH ||
 | 
			
		||||
			mi == MI_RHINO ||
 | 
			
		||||
			mi == MI_BARRACKS ||
 | 
			
		||||
			mi == MI_POLICE;
 | 
			
		||||
| 
						 | 
				
			
			@ -474,7 +474,7 @@ bool CCranes::DoesMilitaryCraneHaveThisOneAlready(uint32 mi)
 | 
			
		|||
	case MI_FIRETRUCK: return (CarsCollectedMilitaryCrane & 1);
 | 
			
		||||
	case MI_AMBULAN: return (CarsCollectedMilitaryCrane & 2);
 | 
			
		||||
	case MI_ENFORCER: return (CarsCollectedMilitaryCrane & 4);
 | 
			
		||||
	case MI_FBICAR: return (CarsCollectedMilitaryCrane & 8);
 | 
			
		||||
	case MI_FBIRANCH: return (CarsCollectedMilitaryCrane & 8);
 | 
			
		||||
	case MI_RHINO: return (CarsCollectedMilitaryCrane & 0x10);
 | 
			
		||||
	case MI_BARRACKS: return (CarsCollectedMilitaryCrane & 0x20);
 | 
			
		||||
	case MI_POLICE: return (CarsCollectedMilitaryCrane & 0x40);
 | 
			
		||||
| 
						 | 
				
			
			@ -489,7 +489,7 @@ void CCranes::RegisterCarForMilitaryCrane(uint32 mi)
 | 
			
		|||
	case MI_FIRETRUCK: CarsCollectedMilitaryCrane |= 1; break;
 | 
			
		||||
	case MI_AMBULAN: CarsCollectedMilitaryCrane |= 2; break;
 | 
			
		||||
	case MI_ENFORCER: CarsCollectedMilitaryCrane |= 4; break;
 | 
			
		||||
	case MI_FBICAR: CarsCollectedMilitaryCrane |= 8; break;
 | 
			
		||||
	case MI_FBIRANCH: CarsCollectedMilitaryCrane |= 8; break;
 | 
			
		||||
	case MI_RHINO: CarsCollectedMilitaryCrane |= 0x10; break;
 | 
			
		||||
	case MI_BARRACKS: CarsCollectedMilitaryCrane |= 0x20; break;
 | 
			
		||||
	case MI_POLICE: CarsCollectedMilitaryCrane |= 0x40; break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1512,7 +1512,7 @@ CVehicle::MakeNonDraggedPedsLeaveVehicle(CPed *ped1, CPed *ped2, CPlayerPed *&pl
 | 
			
		|||
		for(i = 0; i < numPeds2; i++)
 | 
			
		||||
			if(peds2[i]->IsFemale() || CGeneral::GetRandomTrueFalse()){
 | 
			
		||||
				peds2[i]->m_leaveCarTimer = CTimer::GetTimeInMilliseconds() + 10000;
 | 
			
		||||
				peds2[i]->b156_8 = true;
 | 
			
		||||
				peds2[i]->bHeldHostageInCar = true;
 | 
			
		||||
				peds2[i]->bFleeAfterExitingCar = true;
 | 
			
		||||
			}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1557,9 +1557,9 @@ CVehicle::IsLawEnforcementVehicle(void)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
bool
 | 
			
		||||
CVehicle::UsesSiren(uint32 id)
 | 
			
		||||
CVehicle::UsesSiren(void)
 | 
			
		||||
{
 | 
			
		||||
	switch(id){
 | 
			
		||||
	switch(GetModelIndex()){
 | 
			
		||||
	case MI_FIRETRUCK:
 | 
			
		||||
	case MI_AMBULAN:
 | 
			
		||||
	case MI_FBICAR:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -345,7 +345,7 @@ public:
 | 
			
		|||
	int FindTyreNearestPoint(float x, float y);
 | 
			
		||||
	bool IsLawEnforcementVehicle(void);
 | 
			
		||||
	void ChangeLawEnforcerState(uint8 enable);
 | 
			
		||||
	bool UsesSiren(uint32 id);
 | 
			
		||||
	bool UsesSiren(void);
 | 
			
		||||
	bool IsVehicleNormal(void);
 | 
			
		||||
	bool CarHasRoof(void);
 | 
			
		||||
	bool IsUpsideDown(void);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue