mirror of
https://github.com/halpz/re3.git
synced 2025-07-03 20:00:49 +00:00
VC fighting, Peds, many fixes including ghost bikes
This commit is contained in:
@ -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;
|
||||
|
Reference in New Issue
Block a user