|  |  |  | @ -67,6 +67,9 @@ uint16 gnNumTempPedList; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | CColPoint aTempPedColPts[MAX_COLLISION_POINTS]; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | // TODO(Miami)
 | 
		
	
		
			
				|  |  |  |  | #define AUDIO_NOT_READY | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | // Corresponds to ped sounds (from SOUND_PED_DEATH to SOUND_PED_TAXI_CALL)
 | 
		
	
		
			
				|  |  |  |  | PedAudioData CommentWaitTime[39] = { | 
		
	
		
			
				|  |  |  |  | 	{500, 800, 500, 2}, | 
		
	
	
		
			
				
					|  |  |  | @ -645,6 +648,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this) | 
		
	
		
			
				|  |  |  |  | 	m_maxWeaponTypeAllowed = WEAPONTYPE_UNARMED; | 
		
	
		
			
				|  |  |  |  | 	m_currentWeapon = WEAPONTYPE_UNARMED; | 
		
	
		
			
				|  |  |  |  | 	m_storedWeapon = WEAPONTYPE_UNIDENTIFIED; | 
		
	
		
			
				|  |  |  |  | 	m_delayedWeapon = WEAPONTYPE_UNIDENTIFIED; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	for(int i = 0; i < TOTAL_WEAPON_SLOTS; i++) { | 
		
	
		
			
				|  |  |  |  | 		CWeapon &weapon = GetWeapon(i); | 
		
	
	
		
			
				
					|  |  |  | @ -656,7 +660,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this) | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	m_lastFightMove = FIGHTMOVE_NULL; | 
		
	
		
			
				|  |  |  |  | 	GiveWeapon(WEAPONTYPE_UNARMED, 0); | 
		
	
		
			
				|  |  |  |  | 	GiveWeapon(WEAPONTYPE_UNARMED, 0, true); | 
		
	
		
			
				|  |  |  |  | 	m_wepAccuracy = 60; | 
		
	
		
			
				|  |  |  |  | 	m_lastWepDam = -1; | 
		
	
		
			
				|  |  |  |  | 	m_collPoly.valid = false; | 
		
	
	
		
			
				
					|  |  |  | @ -1179,7 +1183,7 @@ CPed::FinishedReloadCB(CAnimBlendAssociation *reloadAssoc, void *arg) | 
		
	
		
			
				|  |  |  |  | 			crouchFireAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), ANIM_WEAPON_CROUCHFIRE); | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 		if (!!weapon->m_bReload && reloadAssoc) { | 
		
	
		
			
				|  |  |  |  | 			if (reloadAssoc->animId == ANIM_WEAPON_CROUCHRELOAD && !crouchFireAssoc) { | 
		
	
		
			
				|  |  |  |  | 			if (reloadAssoc->animId == GetCrouchReloadAnim(weapon) && !crouchFireAssoc) { | 
		
	
		
			
				|  |  |  |  | 				CAnimBlendAssociation *crouchAssoc = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_WEAPON_CROUCH, 8.0f); | 
		
	
		
			
				|  |  |  |  | 				crouchAssoc->SetCurrentTime(crouchAssoc->hierarchy->totalLength); | 
		
	
		
			
				|  |  |  |  | 				crouchAssoc->flags &= ~ASSOC_RUNNING; | 
		
	
	
		
			
				
					|  |  |  | @ -1212,7 +1216,7 @@ CPed::FinishedAttackCB(CAnimBlendAssociation *attackAssoc, void *arg) | 
		
	
		
			
				|  |  |  |  | 	if (ped->m_nPedState != PED_ATTACK) { | 
		
	
		
			
				|  |  |  |  | 		if (ped->bIsDucking && ped->IsPedInControl()) { | 
		
	
		
			
				|  |  |  |  | 			if (currentWeapon->m_bReload) { | 
		
	
		
			
				|  |  |  |  | 				reloadAnimAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), ANIM_WEAPON_CROUCHRELOAD); | 
		
	
		
			
				|  |  |  |  | 				reloadAnimAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), GetCrouchReloadAnim(currentWeapon)); | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 			if (currentWeapon->m_bCrouchFire && attackAssoc) { | 
		
	
		
			
				|  |  |  |  | 				if (attackAssoc->animId == ANIM_WEAPON_CROUCHFIRE && !reloadAnimAssoc) { | 
		
	
	
		
			
				
					|  |  |  | @ -1238,7 +1242,7 @@ CPed::FinishedAttackCB(CAnimBlendAssociation *attackAssoc, void *arg) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	if (ped->bIsDucking && ped->bCrouchWhenShooting) { | 
		
	
		
			
				|  |  |  |  | 		if (currentWeapon->m_bReload) { | 
		
	
		
			
				|  |  |  |  | 			reloadAnimAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), ANIM_WEAPON_CROUCHRELOAD); | 
		
	
		
			
				|  |  |  |  | 			reloadAnimAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), GetCrouchReloadAnim(currentWeapon)); | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 		if (currentWeapon->m_bCrouchFire && attackAssoc) { | 
		
	
		
			
				|  |  |  |  | 			if (attackAssoc->animId == ANIM_WEAPON_CROUCHFIRE && !reloadAnimAssoc) { | 
		
	
	
		
			
				
					|  |  |  | @ -1302,7 +1306,7 @@ CPed::FinishedAttackCB(CAnimBlendAssociation *attackAssoc, void *arg) | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | // --MIAMI: Done
 | 
		
	
		
			
				|  |  |  |  | // --MIAMI: Done except melee weapons
 | 
		
	
		
			
				|  |  |  |  | void | 
		
	
		
			
				|  |  |  |  | CPed::Attack(void) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
	
		
			
				
					|  |  |  | @ -1354,11 +1358,11 @@ CPed::Attack(void) | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	if (ourWeapon->m_bReload) { | 
		
	
		
			
				|  |  |  |  | 		reloadAnimAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WEAPON_RELOAD); | 
		
	
		
			
				|  |  |  |  | 		reloadAnimAssoc = RpAnimBlendClumpGetAssociation(GetClump(), GetReloadAnim(ourWeapon)); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	if (!!ourWeapon->m_bReload && !reloadAnimAssoc)  { | 
		
	
		
			
				|  |  |  |  | 		reloadAnimAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WEAPON_CROUCHRELOAD); | 
		
	
		
			
				|  |  |  |  | 		reloadAnimAssoc = RpAnimBlendClumpGetAssociation(GetClump(), GetCrouchReloadAnim(ourWeapon)); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	if ( reloadAnimAssoc && reloadAnimAssoc->IsRunning() ) { | 
		
	
	
		
			
				
					|  |  |  | @ -1518,14 +1522,22 @@ CPed::Attack(void) | 
		
	
		
			
				|  |  |  |  | 				case ASSOCGRP_UNARMED: | 
		
	
		
			
				|  |  |  |  | 					if (weaponAnimAssoc->animId == ANIM_FIGHT_PPUNCH || //  TODO(Miami): Remove after fighting done
 | 
		
	
		
			
				|  |  |  |  | 						weaponAnimAssoc->animId == ANIM_MELEE_ATTACK || weaponAnimAssoc->animId == ANIM_MELEE_ATTACK_START) { | 
		
	
		
			
				|  |  |  |  | #ifdef AUDIO_NOT_READY | 
		
	
		
			
				|  |  |  |  | 						DMAudio.PlayOneShot(m_audioEntityId, SOUND_FIGHT_PUNCH_39, 0.0f); | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  | 						DMAudio.PlayOneShot(m_audioEntityId, SOUND_FIGHT_PUNCH_39, (damagerType | (ourWeaponType << 8))); | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 					} | 
		
	
		
			
				|  |  |  |  | 					break; | 
		
	
		
			
				|  |  |  |  | 				case ASSOCGRP_KNIFE: | 
		
	
		
			
				|  |  |  |  | 				case ASSOCGRP_BASEBALLBAT: | 
		
	
		
			
				|  |  |  |  | 				case ASSOCGRP_GOLFCLUB: | 
		
	
		
			
				|  |  |  |  | 				case ASSOCGRP_CHAINSAW: | 
		
	
		
			
				|  |  |  |  | #ifdef AUDIO_NOT_READY | 
		
	
		
			
				|  |  |  |  | 					DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_BAT_ATTACK, 1.0f); | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  | 					DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_BAT_ATTACK, (damagerType | (ourWeaponType << 8))); | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 					break; | 
		
	
		
			
				|  |  |  |  | 				default: | 
		
	
		
			
				|  |  |  |  | 					break; | 
		
	
	
		
			
				
					|  |  |  | @ -1587,12 +1599,12 @@ CPed::Attack(void) | 
		
	
		
			
				|  |  |  |  | 					if (bIsDucking) { | 
		
	
		
			
				|  |  |  |  | 						newReloadAssoc = CAnimManager::BlendAnimation( | 
		
	
		
			
				|  |  |  |  | 							GetClump(), ourWeapon->m_AnimToPlay, | 
		
	
		
			
				|  |  |  |  | 							ANIM_WEAPON_CROUCHRELOAD, | 
		
	
		
			
				|  |  |  |  | 							GetCrouchReloadAnim(ourWeapon), | 
		
	
		
			
				|  |  |  |  | 							8.0f); | 
		
	
		
			
				|  |  |  |  | 					} else { | 
		
	
		
			
				|  |  |  |  | 						newReloadAssoc = CAnimManager::BlendAnimation( | 
		
	
		
			
				|  |  |  |  | 							GetClump(), ourWeapon->m_AnimToPlay, | 
		
	
		
			
				|  |  |  |  | 							ANIM_WEAPON_RELOAD, | 
		
	
		
			
				|  |  |  |  | 							GetReloadAnim(ourWeapon), | 
		
	
		
			
				|  |  |  |  | 							8.0f); | 
		
	
		
			
				|  |  |  |  | 					} | 
		
	
		
			
				|  |  |  |  | 					newReloadAssoc->SetFinishCallback(FinishedReloadCB, this); | 
		
	
	
		
			
				
					|  |  |  | @ -1602,7 +1614,26 @@ CPed::Attack(void) | 
		
	
		
			
				|  |  |  |  | 				bIsAttacking = false; | 
		
	
		
			
				|  |  |  |  | 				bIsPointingGunAt = false; | 
		
	
		
			
				|  |  |  |  | 				m_shootTimer = CTimer::GetTimeInMilliseconds(); | 
		
	
		
			
				|  |  |  |  | #ifdef AUDIO_NOT_READY | 
		
	
		
			
				|  |  |  |  | 				switch (ourWeaponType) { | 
		
	
		
			
				|  |  |  |  | 					case WEAPONTYPE_UZI: | 
		
	
		
			
				|  |  |  |  | 					case WEAPONTYPE_TEC9: | 
		
	
		
			
				|  |  |  |  | 					case WEAPONTYPE_SILENCED_INGRAM: | 
		
	
		
			
				|  |  |  |  | 					case WEAPONTYPE_MP5: | 
		
	
		
			
				|  |  |  |  | 						DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_UZI_BULLET_ECHO, 0.0f); | 
		
	
		
			
				|  |  |  |  | 						break; | 
		
	
		
			
				|  |  |  |  | 					case WEAPONTYPE_AK47: | 
		
	
		
			
				|  |  |  |  | 						DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_AK47_BULLET_ECHO, 0.0f); | 
		
	
		
			
				|  |  |  |  | 						break; | 
		
	
		
			
				|  |  |  |  | 					case WEAPONTYPE_M16: | 
		
	
		
			
				|  |  |  |  | 						DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_M16_BULLET_ECHO, 0.0f); | 
		
	
		
			
				|  |  |  |  | 						break; | 
		
	
		
			
				|  |  |  |  | 					default: | 
		
	
		
			
				|  |  |  |  | 						break; | 
		
	
		
			
				|  |  |  |  | 				} | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  | 				DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_AK47_BULLET_ECHO, GetWeapon()->m_eWeaponType); | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 				return; | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
	
		
			
				
					|  |  |  | @ -1647,10 +1678,28 @@ CPed::Attack(void) | 
		
	
		
			
				|  |  |  |  | 		ClearAimFlag(); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		// Echoes of bullets, at the end of the attack. (Bug: doesn't play while reloading)
 | 
		
	
		
			
				|  |  |  |  | 		if (weaponAnimAssoc->currentTime - weaponAnimAssoc->timeStep < ourWeapon->m_fAnimLoopEnd) { | 
		
	
		
			
				|  |  |  |  | 		if (weaponAnimAssoc->currentTime - weaponAnimAssoc->timeStep < animLoopEnd) { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			// What?! Weapon id as volume??
 | 
		
	
		
			
				|  |  |  |  | #ifdef AUDIO_NOT_READY | 
		
	
		
			
				|  |  |  |  | 			switch (ourWeaponType) { | 
		
	
		
			
				|  |  |  |  | 				case WEAPONTYPE_UZI: | 
		
	
		
			
				|  |  |  |  | 				case WEAPONTYPE_TEC9: | 
		
	
		
			
				|  |  |  |  | 				case WEAPONTYPE_SILENCED_INGRAM: | 
		
	
		
			
				|  |  |  |  | 				case WEAPONTYPE_MP5: | 
		
	
		
			
				|  |  |  |  | 					DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_UZI_BULLET_ECHO, 0.0f); | 
		
	
		
			
				|  |  |  |  | 					break; | 
		
	
		
			
				|  |  |  |  | 				case WEAPONTYPE_AK47: | 
		
	
		
			
				|  |  |  |  | 					DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_AK47_BULLET_ECHO, 0.0f); | 
		
	
		
			
				|  |  |  |  | 					break; | 
		
	
		
			
				|  |  |  |  | 				case WEAPONTYPE_M16: | 
		
	
		
			
				|  |  |  |  | 					DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_M16_BULLET_ECHO, 0.0f); | 
		
	
		
			
				|  |  |  |  | 					break; | 
		
	
		
			
				|  |  |  |  | 				default: | 
		
	
		
			
				|  |  |  |  | 					break; | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  | 			DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_AK47_BULLET_ECHO, GetWeapon()->m_eWeaponType); | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		// Fun fact: removing this part leds to reloading flamethrower
 | 
		
	
	
		
			
				
					|  |  |  | @ -2133,7 +2182,7 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase) | 
		
	
		
			
				|  |  |  |  | 			case ANIM_VAN_GETIN: | 
		
	
		
			
				|  |  |  |  | #ifdef VC_PED_PORTS | 
		
	
		
			
				|  |  |  |  | 				multExtractedFromAnim = true; | 
		
	
		
			
				|  |  |  |  | 				zBlend = Max(m_pVehicleAnim->currentTime / m_pVehicleAnim->hierarchy->totalLength - 0.3f, 0.0f) / (1.0f - 0.3f); | 
		
	
		
			
				|  |  |  |  | 				zBlend = Max(m_pVehicleAnim->GetProgress() - 0.3f, 0.0f) / (1.0f - 0.3f); | 
		
	
		
			
				|  |  |  |  | 				// fall through
 | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 			case ANIM_CAR_QJACKED: | 
		
	
	
		
			
				
					|  |  |  | @ -2144,7 +2193,7 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase) | 
		
	
		
			
				|  |  |  |  | #ifdef VC_PED_PORTS | 
		
	
		
			
				|  |  |  |  | 				if (!multExtractedFromAnim) { | 
		
	
		
			
				|  |  |  |  | 					multExtractedFromAnim = true; | 
		
	
		
			
				|  |  |  |  | 					zBlend = Max(m_pVehicleAnim->currentTime / m_pVehicleAnim->hierarchy->totalLength - 0.5f, 0.0f) / (1.0f - 0.5f); | 
		
	
		
			
				|  |  |  |  | 					zBlend = Max(m_pVehicleAnim->GetProgress() - 0.5f, 0.0f) / (1.0f - 0.5f); | 
		
	
		
			
				|  |  |  |  | 				} | 
		
	
		
			
				|  |  |  |  | 				// fall through
 | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
	
		
			
				
					|  |  |  | @ -2152,14 +2201,14 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase) | 
		
	
		
			
				|  |  |  |  | 			case ANIM_CAR_CRAWLOUT_RHS2: | 
		
	
		
			
				|  |  |  |  | 			case ANIM_VAN_GETOUT_L: | 
		
	
		
			
				|  |  |  |  | 			case ANIM_VAN_GETOUT: | 
		
	
		
			
				|  |  |  |  | 				seatPosMult = m_pVehicleAnim->currentTime / m_pVehicleAnim->hierarchy->totalLength; | 
		
	
		
			
				|  |  |  |  | 				seatPosMult = m_pVehicleAnim->GetProgress(); | 
		
	
		
			
				|  |  |  |  | 				break; | 
		
	
		
			
				|  |  |  |  | 			case ANIM_CAR_GETIN_RHS: | 
		
	
		
			
				|  |  |  |  | 			case ANIM_CAR_GETIN_LHS: | 
		
	
		
			
				|  |  |  |  | #ifdef VC_PED_PORTS | 
		
	
		
			
				|  |  |  |  | 				if (veh && veh->IsCar() && veh->bIsBus) { | 
		
	
		
			
				|  |  |  |  | 					multExtractedFromAnimBus = true; | 
		
	
		
			
				|  |  |  |  | 					zBlend = Min(m_pVehicleAnim->currentTime / m_pVehicleAnim->hierarchy->totalLength, 0.5f) / 0.5f; | 
		
	
		
			
				|  |  |  |  | 					zBlend = Min(m_pVehicleAnim->GetProgress(), 0.5f) / 0.5f; | 
		
	
		
			
				|  |  |  |  | 				} | 
		
	
		
			
				|  |  |  |  | 				// fall through
 | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
	
		
			
				
					|  |  |  | @ -4520,6 +4569,9 @@ CPed::SetGetUp(void) | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 		if (m_nPedState != PED_GETUP) { | 
		
	
		
			
				|  |  |  |  | 			SetStoredState(); | 
		
	
		
			
				|  |  |  |  | 			if (m_nPedState == PED_FOLLOW_PATH) | 
		
	
		
			
				|  |  |  |  | 				ClearFollowPath(); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			m_nPedState = PED_GETUP; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -5119,7 +5171,7 @@ CPed::SetAttack(CEntity *victim) | 
		
	
		
			
				|  |  |  |  | 		return; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	if (curWeapon->m_bReload && | 
		
	
		
			
				|  |  |  |  | 		(RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WEAPON_RELOAD) || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WEAPON_CROUCHRELOAD))) { | 
		
	
		
			
				|  |  |  |  | 		(RpAnimBlendClumpGetAssociation(GetClump(), GetReloadAnim(curWeapon)) || RpAnimBlendClumpGetAssociation(GetClump(), GetCrouchReloadAnim(curWeapon)))) { | 
		
	
		
			
				|  |  |  |  | 		if (!IsPlayer() || m_nPedState != PED_ATTACK || ((CPlayerPed*)this)->m_bHaveTargetSelected) | 
		
	
		
			
				|  |  |  |  | 			bIsAttacking = false; | 
		
	
		
			
				|  |  |  |  | 		else | 
		
	
	
		
			
				
					|  |  |  | @ -5511,13 +5563,13 @@ CPed::FightStrike(CVector &touchedNodePos) | 
		
	
		
			
				|  |  |  |  | 				for (int j = 0; j < hisCol->numSpheres; j++) { | 
		
	
		
			
				|  |  |  |  | 					attackDistance = hisCol->spheres[j].center; | 
		
	
		
			
				|  |  |  |  | 					attackDistance -= touchedNodePos; | 
		
	
		
			
				|  |  |  |  | 					CColSphere *ourPieces = hisCol->spheres; | 
		
	
		
			
				|  |  |  |  | 					float maxDistanceToBeat = ourPieces[j].radius + tFightMoves[m_lastFightMove].strikeRadius; | 
		
	
		
			
				|  |  |  |  | 					CColSphere *hisPieces = hisCol->spheres; | 
		
	
		
			
				|  |  |  |  | 					float maxDistanceToBeat = hisPieces[j].radius + tFightMoves[m_lastFightMove].strikeRadius; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 					// We can beat him too
 | 
		
	
		
			
				|  |  |  |  | 					if (sq(maxDistanceToBeat) > attackDistance.MagnitudeSqr()) { | 
		
	
		
			
				|  |  |  |  | 						pedFound = true; | 
		
	
		
			
				|  |  |  |  | 						closestPedPiece = (ePedPieceTypes) ourPieces[j].piece; | 
		
	
		
			
				|  |  |  |  | 						closestPedPiece = (ePedPieceTypes) hisPieces[j].piece; | 
		
	
		
			
				|  |  |  |  | 						break; | 
		
	
		
			
				|  |  |  |  | 					} | 
		
	
		
			
				|  |  |  |  | 				} | 
		
	
	
		
			
				
					|  |  |  | @ -6324,28 +6376,22 @@ CPed::CreateDeadPedMoney(void) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | void | 
		
	
		
			
				|  |  |  |  | CPed::CreateDeadPedWeaponPickups(void) | 
		
	
		
			
				|  |  |  |  | CPed::CreateDeadPedPickupCoors(float *x, float *y, float *z) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	bool found = false; | 
		
	
		
			
				|  |  |  |  | 	float angleToPed; | 
		
	
		
			
				|  |  |  |  | 	CVector pickupPos; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	if (bInVehicle) | 
		
	
		
			
				|  |  |  |  | 		return; | 
		
	
		
			
				|  |  |  |  | #define NUMBER_OF_ATTEMPTS 32 | 
		
	
		
			
				|  |  |  |  | 	for (int i = 0; i < NUMBER_OF_ATTEMPTS; i++) { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	for(int i = 0; i < TOTAL_WEAPON_SLOTS; i++) { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		eWeaponType weapon = GetWeapon(i).m_eWeaponType; | 
		
	
		
			
				|  |  |  |  | 		int weaponAmmo = GetWeapon(i).m_nAmmoTotal; | 
		
	
		
			
				|  |  |  |  | 		if (weapon == WEAPONTYPE_UNARMED || weapon == WEAPONTYPE_DETONATOR || (weaponAmmo == 0 && !GetWeapon(i).IsTypeMelee())) | 
		
	
		
			
				|  |  |  |  | 			continue; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		angleToPed = i * 1.75f; | 
		
	
		
			
				|  |  |  |  | 		pickupPos = GetPosition(); | 
		
	
		
			
				|  |  |  |  | 		pickupPos.x += 1.5f * Sin(angleToPed); | 
		
	
		
			
				|  |  |  |  | 		pickupPos.y += 1.5f * Cos(angleToPed); | 
		
	
		
			
				|  |  |  |  | 		pickupPos.x = 1.5f * Sin((CGeneral::GetRandomNumber() % 256) * PI / 128) + GetPosition().x; | 
		
	
		
			
				|  |  |  |  | 		pickupPos.y = 1.5f * Cos((CGeneral::GetRandomNumber() % 256) * PI / 128) + GetPosition().y; | 
		
	
		
			
				|  |  |  |  | 		pickupPos.z = CWorld::FindGroundZFor3DCoord(pickupPos.x, pickupPos.y, pickupPos.z, &found) + 0.5f; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		if (!found) | 
		
	
		
			
				|  |  |  |  | 			continue; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		CVector pedPos = GetPosition(); | 
		
	
		
			
				|  |  |  |  | 		pedPos.z += 0.3f; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -6353,21 +6399,53 @@ CPed::CreateDeadPedWeaponPickups(void) | 
		
	
		
			
				|  |  |  |  | 		float distance = pedToPickup.Magnitude(); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		// outer edge of pickup
 | 
		
	
		
			
				|  |  |  |  | 		distance = (distance + 0.3f) / distance; | 
		
	
		
			
				|  |  |  |  | 		distance = (distance + 0.4f) / distance; | 
		
	
		
			
				|  |  |  |  | 		CVector pickupPos2 = pedPos; | 
		
	
		
			
				|  |  |  |  | 		pickupPos2 += distance * pedToPickup; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		// pickup must be on ground and line to its edge must be clear
 | 
		
	
		
			
				|  |  |  |  | 		if (!found || CWorld::GetIsLineOfSightClear(pickupPos2, pedPos, true, false, false, false, false, false, false)) { | 
		
	
		
			
				|  |  |  |  | 			// otherwise try another position (but disregard second check apparently)
 | 
		
	
		
			
				|  |  |  |  | 			angleToPed += 3.14f; | 
		
	
		
			
				|  |  |  |  | 			pickupPos = GetPosition(); | 
		
	
		
			
				|  |  |  |  | 			pickupPos.x += 1.5f * Sin(angleToPed); | 
		
	
		
			
				|  |  |  |  | 			pickupPos.y += 1.5f * Cos(angleToPed); | 
		
	
		
			
				|  |  |  |  | 			pickupPos.z = CWorld::FindGroundZFor3DCoord(pickupPos.x, pickupPos.y, pickupPos.z, &found) + 0.5f; | 
		
	
		
			
				|  |  |  |  | 		if ((pickupPos - FindPlayerCoors()).Magnitude2D() > 2.0f || i > NUMBER_OF_ATTEMPTS / 2) { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			if (i > NUMBER_OF_ATTEMPTS / 2 || !CPickups::TestForPickupsInBubble(pickupPos, 1.3f)) { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 				if (CWorld::GetIsLineOfSightClear(pickupPos2, pedPos, | 
		
	
		
			
				|  |  |  |  | 					true, i < NUMBER_OF_ATTEMPTS / 2, false, i < NUMBER_OF_ATTEMPTS / 2, false, false, false)) { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 					if (i > NUMBER_OF_ATTEMPTS / 2 || !CWorld::TestSphereAgainstWorld(pickupPos, 1.2f, nil, false, true, false, false, false, false)) { | 
		
	
		
			
				|  |  |  |  | 						*x = pickupPos.x; | 
		
	
		
			
				|  |  |  |  | 						*y = pickupPos.y; | 
		
	
		
			
				|  |  |  |  | 						*z = pickupPos.z; | 
		
	
		
			
				|  |  |  |  | 						return; | 
		
	
		
			
				|  |  |  |  | 					} | 
		
	
		
			
				|  |  |  |  | 				} | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 	*x = GetPosition().x; | 
		
	
		
			
				|  |  |  |  | 	*y = GetPosition().y; | 
		
	
		
			
				|  |  |  |  | 	*z = GetPosition().z + 0.4f; | 
		
	
		
			
				|  |  |  |  | #undef NUMBER_OF_ATTEMPTS | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | void | 
		
	
		
			
				|  |  |  |  | CPed::CreateDeadPedWeaponPickups(void) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	CVector pickupPos; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	if (bInVehicle) | 
		
	
		
			
				|  |  |  |  | 		return; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	for(int i = 0; i < TOTAL_WEAPON_SLOTS; i++) { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		eWeaponType weapon = GetWeapon(i).m_eWeaponType; | 
		
	
		
			
				|  |  |  |  | 		int weaponAmmo = GetWeapon(i).m_nAmmoTotal; | 
		
	
		
			
				|  |  |  |  | 		if (weapon == WEAPONTYPE_UNARMED || weapon == WEAPONTYPE_DETONATOR || (weaponAmmo == 0 && !GetWeapon(i).IsTypeMelee())) | 
		
	
		
			
				|  |  |  |  | 			continue; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		int quantity = Min(weaponAmmo, AmmoForWeapon_OnStreet[weapon] / 2); | 
		
	
		
			
				|  |  |  |  | 		CreateDeadPedPickupCoors(&pickupPos.x, &pickupPos.y, &pickupPos.z); | 
		
	
		
			
				|  |  |  |  | 		if (!CPickups::TryToMerge_WeaponType(pickupPos, weapon, PICKUP_ONCE_TIMEOUT, quantity, false)) { | 
		
	
		
			
				|  |  |  |  | 			CPickups::GenerateNewOne_WeaponType(pickupPos, weapon, PICKUP_ONCE_TIMEOUT, Min(weaponAmmo, quantity)); | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 		if (found) | 
		
	
		
			
				|  |  |  |  | 			CPickups::GenerateNewOne_WeaponType(pickupPos, weapon, PICKUP_ONCE_TIMEOUT, Min(weaponAmmo, AmmoForWeapon_OnStreet[weapon])); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 	ClearWeapons(); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
	
		
			
				
					|  |  |  | @ -8945,7 +9023,11 @@ CPed::InvestigateEvent(void) | 
		
	
		
			
				|  |  |  |  | bool | 
		
	
		
			
				|  |  |  |  | CPed::IsPedDoingDriveByShooting(void) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | #ifdef FIX_BUGS | 
		
	
		
			
				|  |  |  |  | 	if (FindPlayerPed() == this && CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType)->m_nWeaponSlot == 5) { | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  | 	if (FindPlayerPed() == this && GetWeapon()->m_eWeaponType == WEAPONTYPE_UZI) { | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 		if (TheCamera.Cams[TheCamera.ActiveCam].LookingLeft || TheCamera.Cams[TheCamera.ActiveCam].LookingRight) | 
		
	
		
			
				|  |  |  |  | 			return true; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
	
		
			
				
					|  |  |  | @ -9982,11 +10064,8 @@ CPed::ProcessControl(void) | 
		
	
		
			
				|  |  |  |  | 					if (m_nPedState == PED_FOLLOW_PATH) { | 
		
	
		
			
				|  |  |  |  | 						if (DotProduct(m_vecDamageNormal, GetForward()) < -0.866f && CanPedJumpThis(collidingEnt, &m_vecDamageNormal)) { | 
		
	
		
			
				|  |  |  |  | 							SetJump(); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 							// Moved break into here, for compatibility with III
 | 
		
	
		
			
				|  |  |  |  | 							break; | 
		
	
		
			
				|  |  |  |  | 						} | 
		
	
		
			
				|  |  |  |  | 						// break;
 | 
		
	
		
			
				|  |  |  |  | 						break; | 
		
	
		
			
				|  |  |  |  | 					} | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 					if (m_pedInObjective && | 
		
	
	
		
			
				
					|  |  |  | @ -10957,15 +11036,13 @@ CPed::ProcessControl(void) | 
		
	
		
			
				|  |  |  |  | 						return; | 
		
	
		
			
				|  |  |  |  | 					} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 					if (m_pMyVehicle->pDriver != this || m_pMyVehicle->IsBoat()) { | 
		
	
		
			
				|  |  |  |  | 					if (m_pMyVehicle->pDriver != this) { | 
		
	
		
			
				|  |  |  |  | 						LookForSexyPeds(); | 
		
	
		
			
				|  |  |  |  | 						LookForSexyCars(); | 
		
	
		
			
				|  |  |  |  | 						break; | 
		
	
		
			
				|  |  |  |  | 					} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 					if (m_pMyVehicle->m_vehType == VEHICLE_TYPE_BIKE || !m_pMyVehicle->pDriver->IsPlayer()) { | 
		
	
		
			
				|  |  |  |  | 						break; | 
		
	
		
			
				|  |  |  |  | 					} | 
		
	
		
			
				|  |  |  |  | 					// TODO(Miami): Start KILL_CHAR_ON_BOAT objective
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 					CPad* pad = CPad::GetPad(0); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -10995,12 +11072,24 @@ CPed::ProcessControl(void) | 
		
	
		
			
				|  |  |  |  | 						} | 
		
	
		
			
				|  |  |  |  | 					} | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 					// TODO(Miami): This part moved to DriveVehicle in VC
 | 
		
	
		
			
				|  |  |  |  | 					float steerAngle = m_pMyVehicle->m_fSteerAngle; | 
		
	
		
			
				|  |  |  |  | 					CAnimBlendAssociation *lDriveAssoc; | 
		
	
		
			
				|  |  |  |  | 					CAnimBlendAssociation *rDriveAssoc; | 
		
	
		
			
				|  |  |  |  | 					CAnimBlendAssociation *lbAssoc; | 
		
	
		
			
				|  |  |  |  | 					CAnimBlendAssociation *sitAssoc; | 
		
	
		
			
				|  |  |  |  | 					if (m_pMyVehicle->bLowVehicle) { | 
		
	
		
			
				|  |  |  |  | 					if (m_pMyVehicle->IsBoat() && !(m_pMyVehicle->pHandling->Flags & HANDLING_SIT_IN_BOAT)) { | 
		
	
		
			
				|  |  |  |  | 						sitAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_BOAT); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 						if (!sitAssoc || sitAssoc->blendAmount < 1.0f) { | 
		
	
		
			
				|  |  |  |  | 							break; | 
		
	
		
			
				|  |  |  |  | 						} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 						lDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_BOAT_L); | 
		
	
		
			
				|  |  |  |  | 						rDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_BOAT_R); | 
		
	
		
			
				|  |  |  |  | 						lbAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_BOAT_LB); | 
		
	
		
			
				|  |  |  |  | 					} else if (m_pMyVehicle->bLowVehicle) { | 
		
	
		
			
				|  |  |  |  | 						sitAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_LSIT); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 						if (!sitAssoc || sitAssoc->blendAmount < 1.0f) { | 
		
	
	
		
			
				
					|  |  |  | @ -11020,18 +11109,21 @@ CPed::ProcessControl(void) | 
		
	
		
			
				|  |  |  |  | 						lDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_L); | 
		
	
		
			
				|  |  |  |  | 						rDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_R); | 
		
	
		
			
				|  |  |  |  | 						lbAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_LB); | 
		
	
		
			
				|  |  |  |  | 					} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 					if (lbAssoc && | 
		
	
		
			
				|  |  |  |  | 						TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_1STPERSON | 
		
	
		
			
				|  |  |  |  | 						&& TheCamera.Cams[TheCamera.ActiveCam].DirectionWasLooking == LOOKING_LEFT) { | 
		
	
		
			
				|  |  |  |  | 						lbAssoc->blendDelta = -1000.0f; | 
		
	
		
			
				|  |  |  |  | 					} | 
		
	
		
			
				|  |  |  |  | 					} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 					CAnimBlendAssociation *driveByAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVEBY_L); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 					if (!driveByAssoc) | 
		
	
		
			
				|  |  |  |  | 						driveByAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVEBY_R); | 
		
	
		
			
				|  |  |  |  | 					if (!driveByAssoc) | 
		
	
		
			
				|  |  |  |  | 						driveByAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVEBY_LOW_L); | 
		
	
		
			
				|  |  |  |  | 					if (!driveByAssoc) | 
		
	
		
			
				|  |  |  |  | 						driveByAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVEBY_LOW_R); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 					if (m_pMyVehicle->bLowVehicle || m_pMyVehicle->m_fGasPedal >= 0.0f || driveByAssoc) { | 
		
	
		
			
				|  |  |  |  | 						if (steerAngle == 0.0f || driveByAssoc) { | 
		
	
	
		
			
				
					|  |  |  | @ -11046,6 +11138,8 @@ CPed::ProcessControl(void) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 							if (rDriveAssoc) | 
		
	
		
			
				|  |  |  |  | 								rDriveAssoc->blendAmount = clamp(steerAngle * -100.0f / 61.0f, 0.0f, 1.0f); | 
		
	
		
			
				|  |  |  |  | 							else if (m_pMyVehicle->IsBoat() && !(m_pMyVehicle->pHandling->Flags & HANDLING_SIT_IN_BOAT)) | 
		
	
		
			
				|  |  |  |  | 								CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_BOAT_R); | 
		
	
		
			
				|  |  |  |  | 							else if (m_pMyVehicle->bLowVehicle) | 
		
	
		
			
				|  |  |  |  | 								CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_LOW_R); | 
		
	
		
			
				|  |  |  |  | 							else | 
		
	
	
		
			
				
					|  |  |  | @ -11057,6 +11151,8 @@ CPed::ProcessControl(void) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 							if (lDriveAssoc) | 
		
	
		
			
				|  |  |  |  | 								lDriveAssoc->blendAmount = clamp(steerAngle * 100.0f / 61.0f, 0.0f, 1.0f); | 
		
	
		
			
				|  |  |  |  | 							else if (m_pMyVehicle->IsBoat() && !(m_pMyVehicle->pHandling->Flags & HANDLING_SIT_IN_BOAT)) | 
		
	
		
			
				|  |  |  |  | 								CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_BOAT_L); | 
		
	
		
			
				|  |  |  |  | 							else if (m_pMyVehicle->bLowVehicle) | 
		
	
		
			
				|  |  |  |  | 								CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_LOW_L); | 
		
	
		
			
				|  |  |  |  | 							else | 
		
	
	
		
			
				
					|  |  |  | @ -11069,10 +11165,18 @@ CPed::ProcessControl(void) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 						if ((TheCamera.Cams[TheCamera.ActiveCam].Mode != CCam::MODE_1STPERSON | 
		
	
		
			
				|  |  |  |  | 							|| TheCamera.Cams[TheCamera.ActiveCam].DirectionWasLooking != LOOKING_LEFT) | 
		
	
		
			
				|  |  |  |  | 							&& (!lbAssoc || lbAssoc->blendAmount < 1.0f)) { | 
		
	
		
			
				|  |  |  |  | 							&& (!lbAssoc || lbAssoc->blendAmount < 1.0f && lbAssoc->blendDelta <= 0.0f)) { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 							if(m_pMyVehicle->IsBoat() && !(m_pMyVehicle->pHandling->Flags & HANDLING_SIT_IN_BOAT)) | 
		
	
		
			
				|  |  |  |  | 								CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_BOAT_LB, 4.0f); | 
		
	
		
			
				|  |  |  |  | 							else | 
		
	
		
			
				|  |  |  |  | 								CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_LB, 4.0f); | 
		
	
		
			
				|  |  |  |  | 						} | 
		
	
		
			
				|  |  |  |  | 					} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 					// TODO(Miami): This part belongs to DriveVehicle
 | 
		
	
		
			
				|  |  |  |  | 					if (!m_pMyVehicle) | 
		
	
		
			
				|  |  |  |  | 						return; | 
		
	
		
			
				|  |  |  |  | 					break; | 
		
	
		
			
				|  |  |  |  | 				} | 
		
	
		
			
				|  |  |  |  | 				case PED_DIE: | 
		
	
	
		
			
				
					|  |  |  | @ -11124,7 +11228,8 @@ CPed::ProcessControl(void) | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 			m_pCurrentPhysSurface = nil; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 	} else | 
		
	
		
			
				|  |  |  |  | 		ServiceTalking(); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | void | 
		
	
	
		
			
				
					|  |  |  | @ -11145,11 +11250,27 @@ CPed::SetInTheAir(void) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | // --MIAMI: Done
 | 
		
	
		
			
				|  |  |  |  | void | 
		
	
		
			
				|  |  |  |  | CPed::RestoreHeadPosition(void) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	bool canUseMyBody = false; | 
		
	
		
			
				|  |  |  |  | 	if (m_nPedState != PED_DRIVING && m_nPedState != PED_DRAG_FROM_CAR && !bIsDucking) { | 
		
	
		
			
				|  |  |  |  | 		if (m_animGroup != ASSOCGRP_SEXYWOMAN && m_animGroup != ASSOCGRP_WOMAN) | 
		
	
		
			
				|  |  |  |  | 			canUseMyBody = true; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 	if (!canUseMyBody) | 
		
	
		
			
				|  |  |  |  | 		m_pedIK.m_flags |= CPedIK::LOOKAROUND_HEAD_ONLY; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	if (m_pedIK.RestoreLookAt()) { | 
		
	
		
			
				|  |  |  |  | 		bIsRestoringLook = false; | 
		
	
		
			
				|  |  |  |  | 		canUseMyBody = false; | 
		
	
		
			
				|  |  |  |  | 		if (m_nPedState != PED_DRIVING && m_nPedState != PED_DRAG_FROM_CAR && !bIsDucking) { | 
		
	
		
			
				|  |  |  |  | 			if (m_animGroup != ASSOCGRP_SEXYWOMAN && m_animGroup != ASSOCGRP_WOMAN) | 
		
	
		
			
				|  |  |  |  | 				canUseMyBody = true; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 		if(canUseMyBody) | 
		
	
		
			
				|  |  |  |  | 			m_pedIK.m_flags &= ~CPedIK::LOOKAROUND_HEAD_ONLY; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -12234,19 +12355,7 @@ CPed::PedSetInCarCB(CAnimBlendAssociation *animAssoc, void *arg) | 
		
	
		
			
				|  |  |  |  | 			ped->SetObjective(OBJECTIVE_NONE); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	if (veh->pDriver == ped) { | 
		
	
		
			
				|  |  |  |  | 		if (veh->bLowVehicle) { | 
		
	
		
			
				|  |  |  |  | 			ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(),	ASSOCGRP_STD, ANIM_CAR_LSIT, 100.0f); | 
		
	
		
			
				|  |  |  |  | 		} else { | 
		
	
		
			
				|  |  |  |  | 			ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_SIT, 100.0f); | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 	} else if (veh->bLowVehicle) { | 
		
	
		
			
				|  |  |  |  | 		ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_SITPLO, 100.0f); | 
		
	
		
			
				|  |  |  |  | 	} else { | 
		
	
		
			
				|  |  |  |  | 		ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_SITP, 100.0f); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 	 | 
		
	
		
			
				|  |  |  |  | 	ped->StopNonPartialAnims(); | 
		
	
		
			
				|  |  |  |  | 	ped->AddInCarAnims(veh, veh->pDriver == ped); | 
		
	
		
			
				|  |  |  |  | 	if (veh->bIsBus) | 
		
	
		
			
				|  |  |  |  | 		ped->bRenderPedInCar = false; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -12651,11 +12760,11 @@ CPed::ReplaceWeaponWhenExitingVehicle(void) | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | // --MIAMI: Add driveby check, enumarate weapon slots
 | 
		
	
		
			
				|  |  |  |  | // --MIAMI: Done
 | 
		
	
		
			
				|  |  |  |  | inline void | 
		
	
		
			
				|  |  |  |  | CPed::RemoveWeaponWhenEnteringVehicle(void) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	if (IsPlayer() && GetWeapon(5).m_eWeaponType && GetWeapon(5).m_nAmmoTotal > 0) { | 
		
	
		
			
				|  |  |  |  | 	if (IsPlayer() && HasWeaponSlot(5) && GetWeapon(5).m_nAmmoTotal > 0 && ((CPlayerPed*)this)->GetPlayerInfoForThisPlayerPed()->m_bDriveByAllowed) { | 
		
	
		
			
				|  |  |  |  | 		if (m_storedWeapon == WEAPONTYPE_UNIDENTIFIED) | 
		
	
		
			
				|  |  |  |  | 			m_storedWeapon = GetWeapon()->m_eWeaponType; | 
		
	
		
			
				|  |  |  |  | 		SetCurrentWeapon(GetWeapon(5).m_eWeaponType); | 
		
	
	
		
			
				
					|  |  |  | @ -14190,7 +14299,7 @@ CPed::ProcessObjective(void) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 							if (reloadAssoc || !m_pedInObjective->IsPedShootable()) { | 
		
	
		
			
				|  |  |  |  | 								if (reloadAssoc && | 
		
	
		
			
				|  |  |  |  | 									(!reloadAssoc->IsRunning() || reloadAssoc->currentTime / reloadAssoc->hierarchy->totalLength > 0.8f)) { | 
		
	
		
			
				|  |  |  |  | 									(!reloadAssoc->IsRunning() || reloadAssoc->GetProgress() > 0.8f)) { | 
		
	
		
			
				|  |  |  |  | 									CAnimBlendAssociation *punchAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_FIGHT_PPUNCH, 8.0f); | 
		
	
		
			
				|  |  |  |  | 									punchAssoc->flags |= ASSOC_DELETEFADEDOUT; | 
		
	
		
			
				|  |  |  |  | 									punchAssoc->flags |= ASSOC_FADEOUTWHENDONE; | 
		
	
	
		
			
				
					|  |  |  | @ -17529,33 +17638,11 @@ CPed::WarpPedIntoCar(CVehicle *car) | 
		
	
		
			
				|  |  |  |  | 		DMAudio.PlayOneShot(car->m_audioEntityId, SOUND_CAR_ENGINE_START, 1.0f); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | #ifdef VC_PED_PORTS | 
		
	
		
			
				|  |  |  |  | 	RpAnimBlendClumpSetBlendDeltas(GetClump(), ASSOC_PARTIAL, -1000.0f); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	// VC uses AddInCarAnims but we don't have that
 | 
		
	
		
			
				|  |  |  |  | 	m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, car->GetDriverAnim(), 100.0f); | 
		
	
		
			
				|  |  |  |  | 	RemoveWeaponWhenEnteringVehicle(); | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  | 	if (car->IsBoat()) { | 
		
	
		
			
				|  |  |  |  | #ifndef FIX_BUGS | 
		
	
		
			
				|  |  |  |  | 		m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_BOAT, 100.0f); | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  | 		m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, car->GetDriverAnim(), 100.0f); | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 		CWeaponInfo *ourWeapon = CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType); | 
		
	
		
			
				|  |  |  |  | 		RemoveWeaponModel(ourWeapon->m_nModelId); | 
		
	
		
			
				|  |  |  |  | 	} else { | 
		
	
		
			
				|  |  |  |  | 		// Because we can use Uzi for drive by
 | 
		
	
		
			
				|  |  |  |  | 	AddInCarAnims(car, car->pDriver == this); | 
		
	
		
			
				|  |  |  |  | 	RemoveWeaponWhenEnteringVehicle(); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		if (car->bLowVehicle) | 
		
	
		
			
				|  |  |  |  | 			m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_LSIT, 100.0f); | 
		
	
		
			
				|  |  |  |  | 		else | 
		
	
		
			
				|  |  |  |  | 			m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_SIT, 100.0f); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	StopNonPartialAnims(); | 
		
	
		
			
				|  |  |  |  | 	if (car->bIsBus) | 
		
	
		
			
				|  |  |  |  | 		bRenderPedInCar = false; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -17837,25 +17924,13 @@ CPed::SetEnterCar_AllClear(CVehicle *car, uint32 doorNode, uint32 doorFlag) | 
		
	
		
			
				|  |  |  |  | 	m_vecOffsetSeek = doorOpenPos - GetPosition(); | 
		
	
		
			
				|  |  |  |  | 	m_nPedStateTimer = CTimer::GetTimeInMilliseconds() + 600; | 
		
	
		
			
				|  |  |  |  | 	if (car->IsBoat()) { | 
		
	
		
			
				|  |  |  |  | #ifdef VC_PED_PORTS | 
		
	
		
			
				|  |  |  |  | 		// VC checks for handling flag, but we can't do that
 | 
		
	
		
			
				|  |  |  |  | 		if(car->GetModelIndex() == MI_SPEEDER) | 
		
	
		
			
				|  |  |  |  | 		if(car->pHandling->Flags & HANDLING_SIT_IN_BOAT) | 
		
	
		
			
				|  |  |  |  | 			m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_SIT, 100.0f); | 
		
	
		
			
				|  |  |  |  | 		else | 
		
	
		
			
				|  |  |  |  | 			m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_BOAT, 100.0f); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		PedSetInCarCB(nil, this); | 
		
	
		
			
				|  |  |  |  | 		bVehExitWillBeInstant = true; | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | #ifndef FIX_BUGS | 
		
	
		
			
				|  |  |  |  | 		m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_BOAT, 100.0f); | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  | 		m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, car->GetDriverAnim(), 100.0f); | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		m_pVehicleAnim->SetFinishCallback(PedSetInCarCB, this); | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 		if (IsPlayer()) | 
		
	
		
			
				|  |  |  |  | 			CWaterLevel::AllocateBoatWakeArray(); | 
		
	
		
			
				|  |  |  |  | 	} else { | 
		
	
	
		
			
				
					|  |  |  | @ -18418,14 +18493,15 @@ CPed::Load(uint8*& buf) | 
		
	
		
			
				|  |  |  |  | #undef CopyToBuf | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | // --MIAMI: Done
 | 
		
	
		
			
				|  |  |  |  | void | 
		
	
		
			
				|  |  |  |  | CPed::GiveDelayedWeapon(eWeaponType weapon, uint32 ammo) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	m_storedWeapon = weapon; | 
		
	
		
			
				|  |  |  |  | 	m_storedWeaponAmmo = ammo; | 
		
	
		
			
				|  |  |  |  | 	if (m_storedWeapon != WEAPONTYPE_UNIDENTIFIED) { | 
		
	
		
			
				|  |  |  |  | 		int modelId1 = CWeaponInfo::GetWeaponInfo(m_storedWeapon)->m_nModelId; | 
		
	
		
			
				|  |  |  |  | 		int modelId2 = CWeaponInfo::GetWeaponInfo(m_storedWeapon)->m_nModel2Id; | 
		
	
		
			
				|  |  |  |  | 	m_delayedWeapon = weapon; | 
		
	
		
			
				|  |  |  |  | 	m_delayedWeaponAmmo = ammo; | 
		
	
		
			
				|  |  |  |  | 	if (m_delayedWeapon != WEAPONTYPE_UNIDENTIFIED) { | 
		
	
		
			
				|  |  |  |  | 		int modelId1 = CWeaponInfo::GetWeaponInfo(m_delayedWeapon)->m_nModelId; | 
		
	
		
			
				|  |  |  |  | 		int modelId2 = CWeaponInfo::GetWeaponInfo(m_delayedWeapon)->m_nModel2Id; | 
		
	
		
			
				|  |  |  |  | 		if (modelId1 != -1) | 
		
	
		
			
				|  |  |  |  | 			CStreaming::RequestModel(modelId1, STREAMFLAGS_DEPENDENCY); | 
		
	
		
			
				|  |  |  |  | 		if (modelId2 != -1) | 
		
	
	
		
			
				
					|  |  |  | @ -18433,18 +18509,19 @@ CPed::GiveDelayedWeapon(eWeaponType weapon, uint32 ammo) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		if ((modelId1 == -1 || CStreaming::HasModelLoaded(modelId1)) | 
		
	
		
			
				|  |  |  |  | 			&& (modelId2 == -1 || CStreaming::HasModelLoaded(modelId2))) { | 
		
	
		
			
				|  |  |  |  | 			GiveWeapon(m_storedWeapon, m_storedWeaponAmmo, 1); | 
		
	
		
			
				|  |  |  |  | 			m_storedWeapon = WEAPONTYPE_UNIDENTIFIED; | 
		
	
		
			
				|  |  |  |  | 			GiveWeapon(m_delayedWeapon, m_delayedWeaponAmmo, true); | 
		
	
		
			
				|  |  |  |  | 			m_delayedWeapon = WEAPONTYPE_UNIDENTIFIED; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | // --MIAMI: Done
 | 
		
	
		
			
				|  |  |  |  | void | 
		
	
		
			
				|  |  |  |  | CPed::RequestDelayedWeapon() | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	if (m_storedWeapon != WEAPONTYPE_UNIDENTIFIED) { | 
		
	
		
			
				|  |  |  |  | 		int modelId1 = CWeaponInfo::GetWeaponInfo(m_storedWeapon)->m_nModelId; | 
		
	
		
			
				|  |  |  |  | 		int modelId2 = CWeaponInfo::GetWeaponInfo(m_storedWeapon)->m_nModel2Id; | 
		
	
		
			
				|  |  |  |  | 	if (m_delayedWeapon != WEAPONTYPE_UNIDENTIFIED) { | 
		
	
		
			
				|  |  |  |  | 		int modelId1 = CWeaponInfo::GetWeaponInfo(m_delayedWeapon)->m_nModelId; | 
		
	
		
			
				|  |  |  |  | 		int modelId2 = CWeaponInfo::GetWeaponInfo(m_delayedWeapon)->m_nModel2Id; | 
		
	
		
			
				|  |  |  |  | 		if (modelId1 != -1) | 
		
	
		
			
				|  |  |  |  | 			CStreaming::RequestModel(modelId1, STREAMFLAGS_DEPENDENCY); | 
		
	
		
			
				|  |  |  |  | 		if (modelId2 != -1) | 
		
	
	
		
			
				
					|  |  |  | @ -18452,12 +18529,13 @@ CPed::RequestDelayedWeapon() | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 		if ((modelId1 == -1 || CStreaming::HasModelLoaded(modelId1)) | 
		
	
		
			
				|  |  |  |  | 			&& (modelId2 == -1 || CStreaming::HasModelLoaded(modelId2))) { | 
		
	
		
			
				|  |  |  |  | 			GiveWeapon(m_storedWeapon, m_storedWeaponAmmo, 1); | 
		
	
		
			
				|  |  |  |  | 			m_storedWeapon = WEAPONTYPE_UNIDENTIFIED; | 
		
	
		
			
				|  |  |  |  | 			GiveWeapon(m_delayedWeapon, m_delayedWeaponAmmo, 1); | 
		
	
		
			
				|  |  |  |  | 			m_delayedWeapon = WEAPONTYPE_UNIDENTIFIED; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | // --MIAMI: Done
 | 
		
	
		
			
				|  |  |  |  | void | 
		
	
		
			
				|  |  |  |  | CPed::ClearFollowPath() | 
		
	
		
			
				|  |  |  |  | { | 
		
	
	
		
			
				
					|  |  |  | @ -18467,3 +18545,43 @@ CPed::ClearFollowPath() | 
		
	
		
			
				|  |  |  |  | 	m_nPathNodes = 0; | 
		
	
		
			
				|  |  |  |  | 	m_nCurPathNode = 0; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | // --MIAMI: Done
 | 
		
	
		
			
				|  |  |  |  | void | 
		
	
		
			
				|  |  |  |  | CPed::AddInCarAnims(CVehicle* car, bool isDriver) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	AnimationId anim; | 
		
	
		
			
				|  |  |  |  | 	AssocGroupId group; | 
		
	
		
			
				|  |  |  |  | 	if (car->IsBoat()) { | 
		
	
		
			
				|  |  |  |  | 		if (car->pHandling->Flags & HANDLING_SIT_IN_BOAT) { | 
		
	
		
			
				|  |  |  |  | 			anim = ANIM_CAR_SIT; | 
		
	
		
			
				|  |  |  |  | 		} else { | 
		
	
		
			
				|  |  |  |  | 			anim = ANIM_DRIVE_BOAT; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 		group = ASSOCGRP_STD; | 
		
	
		
			
				|  |  |  |  | 	} else if (car->IsBike()) { | 
		
	
		
			
				|  |  |  |  | 		if (isDriver) { | 
		
	
		
			
				|  |  |  |  | 			// TODO(Miami): Bikes
 | 
		
	
		
			
				|  |  |  |  | 		} else { | 
		
	
		
			
				|  |  |  |  | 			// TODO(Miami): Bikes
 | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 	} else { | 
		
	
		
			
				|  |  |  |  | 		if (isDriver) { | 
		
	
		
			
				|  |  |  |  | 			if (car->bLowVehicle) { | 
		
	
		
			
				|  |  |  |  | 				anim = ANIM_CAR_LSIT; | 
		
	
		
			
				|  |  |  |  | 			} else { | 
		
	
		
			
				|  |  |  |  | 				anim = ANIM_CAR_SIT; | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 		} else { | 
		
	
		
			
				|  |  |  |  | 			if (car->bLowVehicle) { | 
		
	
		
			
				|  |  |  |  | 				anim = ANIM_CAR_SITPLO; | 
		
	
		
			
				|  |  |  |  | 			} else { | 
		
	
		
			
				|  |  |  |  | 				anim = ANIM_CAR_SITP; | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 		group = ASSOCGRP_STD; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 	m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), group, anim, 100.0f); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	StopNonPartialAnims(); | 
		
	
		
			
				|  |  |  |  | } |