mirror of
https://github.com/GTAmodding/re3.git
synced 2021-02-19 17:49:54 +01:00
Fixes from miami
This commit is contained in:
parent
efd49962d2
commit
70df13f9d3
@ -2823,9 +2823,8 @@ int8 CRunningScript::ProcessCommands0To99(int32 command)
|
||||
UpdateCompareFlag(ped->IsWithinArea(x1, y1, x2, y2));
|
||||
else
|
||||
UpdateCompareFlag(ped->m_pMyVehicle->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;
|
||||
@ -2844,9 +2843,8 @@ int8 CRunningScript::ProcessCommands0To99(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;
|
||||
@ -3425,9 +3423,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;
|
||||
@ -3452,9 +3449,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;
|
||||
@ -3671,9 +3667,8 @@ int8 CRunningScript::ProcessCommands100To199(int32 command)
|
||||
float x2 = *(float*)&ScriptParams[3];
|
||||
float y2 = *(float*)&ScriptParams[4];
|
||||
UpdateCompareFlag(vehicle->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;
|
||||
@ -3690,9 +3685,8 @@ int8 CRunningScript::ProcessCommands100To199(int32 command)
|
||||
float y2 = *(float*)&ScriptParams[5];
|
||||
float z2 = *(float*)&ScriptParams[6];
|
||||
UpdateCompareFlag(vehicle->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;
|
||||
@ -4429,9 +4423,8 @@ int8 CRunningScript::ProcessCommands300To399(int32 command)
|
||||
float y2 = *(float*)&ScriptParams[4];
|
||||
UpdateCompareFlag(pVehicle->GetStatus() == STATUS_WRECKED &&
|
||||
pVehicle->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;
|
||||
@ -4449,9 +4442,8 @@ int8 CRunningScript::ProcessCommands300To399(int32 command)
|
||||
float z2 = *(float*)&ScriptParams[6];
|
||||
UpdateCompareFlag(pVehicle->GetStatus() == STATUS_WRECKED &&
|
||||
pVehicle->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;
|
||||
@ -7279,9 +7271,8 @@ int8 CRunningScript::ProcessCommands700To799(int32 command)
|
||||
float x2 = *(float*)&ScriptParams[3];
|
||||
float y2 = *(float*)&ScriptParams[4];
|
||||
UpdateCompareFlag(pPed->bIsShooting && pPed->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;
|
||||
@ -7296,9 +7287,8 @@ int8 CRunningScript::ProcessCommands700To799(int32 command)
|
||||
float x2 = *(float*)&ScriptParams[3];
|
||||
float y2 = *(float*)&ScriptParams[4];
|
||||
UpdateCompareFlag(pPed->bIsShooting && pPed->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;
|
||||
|
@ -956,10 +956,10 @@ CMenuManager::Draw()
|
||||
CFont::SetDropShadowPosition(0);
|
||||
if (!CheckHover(MENU_X(30.0f), MENU_X(30.0f) + CFont::GetStringWidth(backTx), SCREEN_SCALE_FROM_BOTTOM(125.0f), SCREEN_SCALE_FROM_BOTTOM(105.0f))) {
|
||||
m_nHoverOption = HOVEROPTION_NOT_HOVERING;
|
||||
m_nCurrOption = m_nPrevOption = 0;
|
||||
m_nCurrOption = m_nOptionMouseHovering = 0;
|
||||
} else {
|
||||
m_nHoverOption = HOVEROPTION_RANDOM_ITEM;
|
||||
m_nCurrOption = m_nPrevOption = 1;
|
||||
m_nCurrOption = m_nOptionMouseHovering = 1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -1256,7 +1256,7 @@ CMenuManager::Draw()
|
||||
static int oldOption = -99;
|
||||
static int oldScreen = m_nCurrScreen;
|
||||
|
||||
m_nPrevOption = rowToCheck;
|
||||
m_nOptionMouseHovering = rowToCheck;
|
||||
if (m_nMouseOldPosX != m_nMousePosX || m_nMouseOldPosY != m_nMousePosY) {
|
||||
m_nCurrOption = rowToCheck;
|
||||
m_bShowMouse = true;
|
||||
@ -1980,10 +1980,10 @@ CMenuManager::DrawControllerSetupScreen()
|
||||
|
||||
float curOptY = i * rowHeight + yStart;
|
||||
if (m_nMousePosY > MENU_Y(curOptY) && m_nMousePosY < MENU_Y(rowHeight + curOptY)) {
|
||||
if (m_nPrevOption != i && m_nCurrExLayer == HOVEROPTION_LIST)
|
||||
if (m_nOptionMouseHovering != i && m_nCurrExLayer == HOVEROPTION_LIST)
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NAVIGATION, 0);
|
||||
|
||||
m_nPrevOption = i;
|
||||
m_nOptionMouseHovering = i;
|
||||
if (m_nMouseOldPosX != m_nMousePosX || m_nMouseOldPosY != m_nMousePosY) {
|
||||
m_nCurrExLayer = HOVEROPTION_LIST;
|
||||
m_nSelectedListRow = i;
|
||||
@ -2694,7 +2694,7 @@ CMenuManager::DrawPlayerSetupScreen()
|
||||
|
||||
if (m_nMousePosX > MENU_X_LEFT_ALIGNED(PLAYERSETUP_LIST_LEFT) && m_nMousePosX < MENU_X_RIGHT_ALIGNED(PLAYERSETUP_LIST_RIGHT)) {
|
||||
if (m_nMousePosY > MENU_Y(rowStartY) && m_nMousePosY < MENU_Y(rowEndY)) {
|
||||
m_nPrevOption = rowIdx;
|
||||
m_nOptionMouseHovering = rowIdx;
|
||||
if (m_nMouseOldPosX != m_nMousePosX || m_nMouseOldPosY != m_nMousePosY) {
|
||||
m_nCurrExLayer = HOVEROPTION_LIST;
|
||||
}
|
||||
@ -4025,7 +4025,7 @@ CMenuManager::ProcessButtonPresses(void)
|
||||
if (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action == MENUACTION_RESUME &&
|
||||
#endif
|
||||
(m_nHoverOption == HOVEROPTION_RANDOM_ITEM)) {
|
||||
m_nCurrOption = m_nPrevOption;
|
||||
m_nCurrOption = m_nOptionMouseHovering;
|
||||
optionSelected = true;
|
||||
}
|
||||
} else if (CPad::GetPad(0)->GetLeftMouseJustDown()) {
|
||||
@ -4039,7 +4039,7 @@ CMenuManager::ProcessButtonPresses(void)
|
||||
OutputDebugString("FRONTEND RADIO STATION CHANGED");
|
||||
} else if (m_nHoverOption == HOVEROPTION_RANDOM_ITEM
|
||||
&& aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action != MENUACTION_RESUME) {
|
||||
m_nCurrOption = m_nPrevOption;
|
||||
m_nCurrOption = m_nOptionMouseHovering;
|
||||
optionSelected = true;
|
||||
}
|
||||
#else
|
||||
@ -4126,7 +4126,7 @@ CMenuManager::ProcessButtonPresses(void)
|
||||
break;
|
||||
case HOVEROPTION_RANDOM_ITEM:
|
||||
if (((m_nCurrOption != 0) || (m_nCurrScreen != MENUPAGE_PAUSE_MENU)) {
|
||||
m_nCurrOption = m_nPrevOption;
|
||||
m_nCurrOption = m_nOptionMouseHovering;
|
||||
optionSelected = true;
|
||||
}
|
||||
break;
|
||||
|
@ -518,7 +518,7 @@ public:
|
||||
int32 m_nHoverOption;
|
||||
int32 m_nCurrScreen;
|
||||
int32 m_nCurrOption;
|
||||
int32 m_nPrevOption;
|
||||
int32 m_nOptionMouseHovering;
|
||||
int32 m_nPrevScreen;
|
||||
uint32 field_558;
|
||||
int32 m_nCurrSaveSlot;
|
||||
|
227
src/peds/Ped.cpp
227
src/peds/Ped.cpp
@ -383,7 +383,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
|
||||
weapon.m_nTimer = 0;
|
||||
}
|
||||
|
||||
m_lastFightMove = FIGHTMOVE_NULL;
|
||||
m_curFightMove = FIGHTMOVE_NULL;
|
||||
GiveWeapon(WEAPONTYPE_UNARMED, 0);
|
||||
m_wepAccuracy = 60;
|
||||
m_lastWepDam = -1;
|
||||
@ -471,7 +471,7 @@ CheckForPedsOnGroundToAttack(CPed *attacker, CPed **pedOnGround)
|
||||
|
||||
currentPedState = currentPed->m_nPedState;
|
||||
|
||||
if (currentPedState == PED_FALL || currentPedState == PED_GETUP || currentPedState == PED_DIE || currentPedState == PED_DEAD) {
|
||||
if (currentPed->OnGroundOrGettingUp()) {
|
||||
if (distance < 2.0f && angleDiff < DEGTORAD(65.0f)) {
|
||||
if (currentPedState == PED_DEAD) {
|
||||
foundDead = 1;
|
||||
@ -1821,7 +1821,7 @@ void
|
||||
CPed::PlayFootSteps(void)
|
||||
{
|
||||
if (bDoBloodyFootprints) {
|
||||
if (m_bloodyFootprintCountOrDeathTime > 0 && m_bloodyFootprintCountOrDeathTime < 300) {
|
||||
if (m_bloodyFootprintCountOrDeathTime != 0 && m_bloodyFootprintCountOrDeathTime < 300) {
|
||||
m_bloodyFootprintCountOrDeathTime--;
|
||||
|
||||
if (m_bloodyFootprintCountOrDeathTime == 0)
|
||||
@ -2716,7 +2716,7 @@ CPed::SetObjective(eObjective newObj)
|
||||
|
||||
}
|
||||
*/
|
||||
m_objective = newObj;
|
||||
m_objective = OBJECTIVE_NONE;
|
||||
m_prevObjective = OBJECTIVE_NONE;
|
||||
} else if (m_prevObjective != newObj || m_prevObjective == OBJECTIVE_NONE) {
|
||||
SetObjectiveTimer(0);
|
||||
@ -3364,9 +3364,7 @@ CPed::CheckForPointBlankPeds(CPed *pedToVerify)
|
||||
if (neededTurn > PI)
|
||||
neededTurn = 2*PI - neededTurn;
|
||||
|
||||
PedState nearPedState = nearPed->m_nPedState;
|
||||
|
||||
if (nearPedState == PED_FALL || nearPedState == PED_GETUP || nearPedState == PED_DIE || nearPedState == PED_DEAD || nearPedState == PED_DIVE_AWAY)
|
||||
if (nearPed->OnGroundOrGettingUp() || nearPed->m_nPedState == PED_DIVE_AWAY)
|
||||
return NO_POINT_BLANK_PED;
|
||||
|
||||
if (neededTurn < CAN_SEE_ENTITY_ANGLE_THRESHOLD) {
|
||||
@ -3652,56 +3650,7 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
|
||||
case WEAPONTYPE_BASEBALLBAT:
|
||||
if (bMeleeProof)
|
||||
return false;
|
||||
#ifdef VC_PED_PORTS
|
||||
if (/*method != WEAPONTYPE_KATANA || */
|
||||
damagedBy != FindPlayerPed()
|
||||
|| FindPlayerPed()->m_nPedState != PED_FIGHT
|
||||
/*|| FindPlayerPed()->m_lastFightMove != 28 && FindPlayerPed()->m_lastFightMove != 29 */
|
||||
|| CGeneral::GetRandomNumber() & 3) {
|
||||
|
||||
if (m_nPedState == PED_FALL) {
|
||||
if (IsPedHeadAbovePos(-0.3f)) {
|
||||
dieAnim = NUM_ANIMS;
|
||||
} else {
|
||||
if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FRONTAL))
|
||||
dieAnim = ANIM_FLOOR_HIT_F;
|
||||
else
|
||||
dieAnim = ANIM_FLOOR_HIT;
|
||||
dieDelta = dieDelta * 2.0f;
|
||||
dieSpeed = 0.5f;
|
||||
}
|
||||
} else if (damagedBy != FindPlayerPed()) { // || FindPlayerPed()->m_lastFightMove != 29)
|
||||
//if (damagedBy != FindPlayerPed() || FindPlayerPed()->m_lastFightMove != 30) {
|
||||
switch (direction) {
|
||||
case 0:
|
||||
dieAnim = ANIM_KO_SKID_FRONT;
|
||||
break;
|
||||
case 1:
|
||||
dieAnim = ANIM_KO_SPIN_R;
|
||||
break;
|
||||
case 2:
|
||||
dieAnim = ANIM_KO_SKID_BACK;
|
||||
break;
|
||||
case 3:
|
||||
dieAnim = ANIM_KO_SPIN_L;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
//} else {
|
||||
// dieAnim = ANIM_KO_SHOT_STOM;
|
||||
//}
|
||||
} else {
|
||||
dieAnim = ANIM_KO_SHOT_FACE;
|
||||
}
|
||||
} else {
|
||||
dieAnim = ANIM_KO_SHOT_FACE;
|
||||
// SpawnFlyingComponent in VC
|
||||
RemoveBodyPart(PED_HEAD, direction);
|
||||
headShot = true;
|
||||
willLinger = true;
|
||||
}
|
||||
#else
|
||||
if (m_nPedState == PED_FALL) {
|
||||
if (IsPedHeadAbovePos(-0.3f)) {
|
||||
dieAnim = NUM_ANIMS;
|
||||
@ -3731,7 +3680,6 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case WEAPONTYPE_COLT45:
|
||||
case WEAPONTYPE_UZI:
|
||||
@ -4853,11 +4801,11 @@ CPed::StartFightAttack(uint8 buttonPressure)
|
||||
|
||||
CPed *pedOnGround = nil;
|
||||
if (IsPlayer() && CheckForPedsOnGroundToAttack(this, &pedOnGround) > PED_IN_FRONT_OF_ATTACKER) {
|
||||
m_lastFightMove = FIGHTMOVE_GROUNDKICK;
|
||||
m_curFightMove = FIGHTMOVE_GROUNDKICK;
|
||||
} else if (m_pedStats->m_flags & STAT_SHOPPING_BAGS) {
|
||||
m_lastFightMove = FIGHTMOVE_ROUNDHOUSE;
|
||||
m_curFightMove = FIGHTMOVE_ROUNDHOUSE;
|
||||
} else {
|
||||
m_lastFightMove = FIGHTMOVE_STDPUNCH;
|
||||
m_curFightMove = FIGHTMOVE_STDPUNCH;
|
||||
}
|
||||
|
||||
if (pedOnGround && IsPlayer()) {
|
||||
@ -4871,7 +4819,7 @@ CPed::StartFightAttack(uint8 buttonPressure)
|
||||
SetLookFlag(pedOnGround, true);
|
||||
SetLookTimer(1500);
|
||||
}
|
||||
animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[m_lastFightMove].animId, 4.0f);
|
||||
animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[m_curFightMove].animId, 4.0f);
|
||||
animAssoc->SetFinishCallback(FinishFightMoveCB, this);
|
||||
m_fightState = FIGHTSTATE_NO_MOVE;
|
||||
m_takeAStepAfterAttack = false;
|
||||
@ -4999,9 +4947,9 @@ CPed::FightStrike(CVector &touchedNodePos)
|
||||
for (int i = 0; i < m_numNearPeds; i++) {
|
||||
nearPed = m_nearPeds[i];
|
||||
if (GetWeapon()->m_eWeaponType != WEAPONTYPE_UNARMED)
|
||||
maxDistanceToBeBeaten = nearPed->GetBoundRadius() + tFightMoves[m_lastFightMove].strikeRadius + 0.1f;
|
||||
maxDistanceToBeBeaten = nearPed->GetBoundRadius() + tFightMoves[m_curFightMove].strikeRadius + 0.1f;
|
||||
else
|
||||
maxDistanceToBeBeaten = nearPed->GetBoundRadius() + tFightMoves[m_lastFightMove].strikeRadius;
|
||||
maxDistanceToBeBeaten = nearPed->GetBoundRadius() + tFightMoves[m_curFightMove].strikeRadius;
|
||||
|
||||
if (nearPed->bUsesCollision || nearPed->m_nPedState == PED_DEAD) {
|
||||
CVector nearPedCentre;
|
||||
@ -5017,9 +4965,7 @@ CPed::FightStrike(CVector &touchedNodePos)
|
||||
ourCol = ((CPedModelInfo *)CModelInfo::GetModelInfo(GetModelIndex()))->AnimatePedColModelSkinned(GetClump());
|
||||
else
|
||||
#endif
|
||||
if (nearPed->m_nPedState == PED_FALL
|
||||
|| nearPed->m_nPedState == PED_DEAD || nearPed->m_nPedState == PED_DIE
|
||||
|| !nearPed->IsPedHeadAbovePos(-0.3f)) {
|
||||
if (nearPed->OnGround() || !nearPed->IsPedHeadAbovePos(-0.3f)) {
|
||||
ourCol = &CTempColModels::ms_colModelPedGroundHit;
|
||||
} else {
|
||||
#ifdef ANIMATE_PED_COL_MODEL
|
||||
@ -5034,7 +4980,7 @@ CPed::FightStrike(CVector &touchedNodePos)
|
||||
attackDistance = nearPed->GetPosition() + ourCol->spheres[j].center;
|
||||
attackDistance -= touchedNodePos;
|
||||
CColSphere *ourPieces = ourCol->spheres;
|
||||
float maxDistanceToBeat = ourPieces[j].radius + tFightMoves[m_lastFightMove].strikeRadius;
|
||||
float maxDistanceToBeat = ourPieces[j].radius + tFightMoves[m_curFightMove].strikeRadius;
|
||||
|
||||
// We can beat him too
|
||||
if (sq(maxDistanceToBeat) > attackDistance.MagnitudeSqr()) {
|
||||
@ -5055,7 +5001,7 @@ CPed::FightStrike(CVector &touchedNodePos)
|
||||
|
||||
float oldVictimHealth = nearPed->m_fHealth;
|
||||
CVector bloodPos = 0.5f * attackDistance + touchedNodePos;
|
||||
int damageMult = tFightMoves[m_lastFightMove].damage * ((CGeneral::GetRandomNumber() & 1) + 2) + 1;
|
||||
int damageMult = tFightMoves[m_curFightMove].damage * ((CGeneral::GetRandomNumber() & 1) + 2) + 1;
|
||||
|
||||
CVector2D diff (GetPosition() - nearPed->GetPosition());
|
||||
int direction = nearPed->GetLocalDirection(diff);
|
||||
@ -5067,7 +5013,7 @@ CPed::FightStrike(CVector &touchedNodePos)
|
||||
}
|
||||
|
||||
// Change direction if we used kick.
|
||||
if (m_lastFightMove == FIGHTMOVE_KICK) {
|
||||
if (m_curFightMove == FIGHTMOVE_KICK) {
|
||||
if (CGeneral::GetRandomNumber() & 1) {
|
||||
direction++;
|
||||
if (direction > 3)
|
||||
@ -5083,16 +5029,16 @@ CPed::FightStrike(CVector &touchedNodePos)
|
||||
else
|
||||
unk2 = damageMult;
|
||||
|
||||
nearPed->StartFightDefend(direction, tFightMoves[m_lastFightMove].hitLevel, unk2);
|
||||
nearPed->StartFightDefend(direction, tFightMoves[m_curFightMove].hitLevel, unk2);
|
||||
PlayHitSound(nearPed);
|
||||
m_fightState = FIGHTSTATE_JUST_ATTACKED;
|
||||
RpAnimBlendClumpGetAssociation(GetClump(), tFightMoves[m_lastFightMove].animId)->speed = 0.6f;
|
||||
RpAnimBlendClumpGetAssociation(GetClump(), tFightMoves[m_curFightMove].animId)->speed = 0.6f;
|
||||
if (!nearPed->DyingOrDead()) {
|
||||
nearPed->InflictDamage(this, WEAPONTYPE_UNARMED, damageMult * 3.0f, closestPedPiece, direction);
|
||||
}
|
||||
|
||||
if (CGame::nastyGame
|
||||
&& tFightMoves[m_lastFightMove].hitLevel > HITLEVEL_MEDIUM
|
||||
&& tFightMoves[m_curFightMove].hitLevel > HITLEVEL_MEDIUM
|
||||
&& nearPed->m_nPedState == PED_DIE
|
||||
&& nearPed->GetIsOnScreen()) {
|
||||
|
||||
@ -5102,7 +5048,7 @@ CPed::FightStrike(CVector &touchedNodePos)
|
||||
CParticle::AddParticle(PARTICLE_BLOOD, bloodPos, attackDistance, nil, 0.0f, 0, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
if (nearPed->m_nPedState != PED_FALL && nearPed->m_nPedState != PED_DIE && nearPed->m_nPedState != PED_DEAD) {
|
||||
if (!nearPed->OnGround()) {
|
||||
float curVictimHealth = nearPed->m_fHealth;
|
||||
if (curVictimHealth > 0.0f
|
||||
&& (curVictimHealth < 40.0f && oldVictimHealth > 40.0f && !nearPed->IsPlayer()
|
||||
@ -5122,7 +5068,7 @@ CPed::FightStrike(CVector &touchedNodePos)
|
||||
nearPed->bIsStanding = false;
|
||||
|
||||
float moveMult;
|
||||
if (m_lastFightMove == FIGHTMOVE_GROUNDKICK) {
|
||||
if (m_curFightMove == FIGHTMOVE_GROUNDKICK) {
|
||||
moveMult = Min(damageMult * 0.6f, 4.0f);
|
||||
} else {
|
||||
if (nearPed->m_nPedState != PED_DIE || damageMult >= 20) {
|
||||
@ -5434,21 +5380,21 @@ CPed::PlayHitSound(CPed *hitTo)
|
||||
};
|
||||
|
||||
// This is why first dimension is between FightMove 1 and 12.
|
||||
if (m_lastFightMove == FIGHTMOVE_NULL || m_lastFightMove >= FIGHTMOVE_HITFRONT)
|
||||
if (m_curFightMove == FIGHTMOVE_NULL || m_curFightMove >= FIGHTMOVE_HITFRONT)
|
||||
return;
|
||||
|
||||
uint16 soundId;
|
||||
|
||||
// And this is why second dimension is between 13 and 22.
|
||||
if (hitTo->m_lastFightMove <= FIGHTMOVE_GROUNDKICK || hitTo->m_lastFightMove >= FIGHTMOVE_IDLE2NORM) {
|
||||
if (hitTo->m_curFightMove > FIGHTMOVE_GROUNDKICK && hitTo->m_curFightMove < FIGHTMOVE_IDLE2NORM) {
|
||||
soundId = hitSoundsByFightMoves[m_curFightMove - FIGHTMOVE_STDPUNCH][hitTo->m_curFightMove - FIGHTMOVE_HITFRONT];
|
||||
|
||||
if (hitTo->m_nPedState == PED_DEAD || hitTo->UseGroundColModel()) {
|
||||
soundId = hitSoundsByFightMoves[m_lastFightMove - FIGHTMOVE_STDPUNCH][FIGHTMOVE_HITONFLOOR - FIGHTMOVE_HITFRONT];
|
||||
} else {
|
||||
soundId = hitSoundsByFightMoves[m_lastFightMove - FIGHTMOVE_STDPUNCH][FIGHTMOVE_HITFRONT - FIGHTMOVE_HITFRONT];
|
||||
}
|
||||
} else {
|
||||
soundId = hitSoundsByFightMoves[m_lastFightMove - FIGHTMOVE_STDPUNCH][hitTo->m_lastFightMove - FIGHTMOVE_HITFRONT];
|
||||
if (hitTo->m_nPedState == PED_DEAD || hitTo->UseGroundColModel()) {
|
||||
soundId = hitSoundsByFightMoves[m_curFightMove - FIGHTMOVE_STDPUNCH][FIGHTMOVE_HITONFLOOR - FIGHTMOVE_HITFRONT];
|
||||
} else {
|
||||
soundId = hitSoundsByFightMoves[m_curFightMove - FIGHTMOVE_STDPUNCH][FIGHTMOVE_HITFRONT - FIGHTMOVE_HITFRONT];
|
||||
}
|
||||
}
|
||||
|
||||
if (soundId != NO_SND)
|
||||
@ -6124,7 +6070,7 @@ CPed::EndFight(uint8 endType)
|
||||
if (m_nPedState != PED_FIGHT)
|
||||
return;
|
||||
|
||||
m_lastFightMove = FIGHTMOVE_NULL;
|
||||
m_curFightMove = FIGHTMOVE_NULL;
|
||||
RestorePreviousState();
|
||||
CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FIGHT_IDLE);
|
||||
if (animAssoc)
|
||||
@ -6353,24 +6299,27 @@ CPed::Fall(void)
|
||||
void
|
||||
CPed::Fight(void)
|
||||
{
|
||||
CAnimBlendAssociation *currentAssoc = nil, *animAssoc;
|
||||
CAnimBlendAssociation *currentAssoc, *animAssoc;
|
||||
bool hasShoppingBags, punchOnly, canKick, canKneeHead, canRoundhouse;
|
||||
float angleToFace, nextAngle;
|
||||
bool goForward = false;
|
||||
int nextFightMove;
|
||||
|
||||
switch (m_lastFightMove) {
|
||||
switch (m_curFightMove) {
|
||||
case FIGHTMOVE_NULL:
|
||||
return;
|
||||
case FIGHTMOVE_IDLE2NORM:
|
||||
m_lastFightMove = FIGHTMOVE_NULL;
|
||||
m_curFightMove = FIGHTMOVE_NULL;
|
||||
RestorePreviousState();
|
||||
|
||||
// FIX: Uninitialized
|
||||
currentAssoc = nil;
|
||||
break;
|
||||
case FIGHTMOVE_IDLE:
|
||||
// currentAssoc = nil;
|
||||
currentAssoc = nil;
|
||||
break;
|
||||
default:
|
||||
currentAssoc = RpAnimBlendClumpGetAssociation(GetClump(), tFightMoves[m_lastFightMove].animId);
|
||||
currentAssoc = RpAnimBlendClumpGetAssociation(GetClump(), tFightMoves[m_curFightMove].animId);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -6387,12 +6336,12 @@ CPed::Fight(void)
|
||||
|
||||
} else if (currentAssoc && m_fightState > FIGHTSTATE_MOVE_FINISHED) {
|
||||
float animTime = currentAssoc->currentTime;
|
||||
FightMove &curMove = tFightMoves[m_lastFightMove];
|
||||
FightMove &curMove = tFightMoves[m_curFightMove];
|
||||
if (curMove.hitLevel != HITLEVEL_NULL && animTime > curMove.startFireTime && animTime <= curMove.endFireTime && m_fightState >= FIGHTSTATE_NO_MOVE) {
|
||||
|
||||
CVector touchingNodePos(0.0f, 0.0f, 0.0f);
|
||||
|
||||
switch (m_lastFightMove) {
|
||||
switch (m_curFightMove) {
|
||||
case FIGHTMOVE_STDPUNCH:
|
||||
case FIGHTMOVE_PUNCHHOOK:
|
||||
case FIGHTMOVE_BODYBLOW:
|
||||
@ -6418,9 +6367,9 @@ CPed::Fight(void)
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_lastFightMove == FIGHTMOVE_PUNCHJAB) {
|
||||
if (m_curFightMove == FIGHTMOVE_PUNCHJAB) {
|
||||
touchingNodePos += 0.1f * GetForward();
|
||||
} else if (m_lastFightMove == FIGHTMOVE_PUNCHHOOK) {
|
||||
} else if (m_curFightMove == FIGHTMOVE_PUNCHHOOK) {
|
||||
touchingNodePos += 0.22f * GetForward();
|
||||
}
|
||||
FightStrike(touchingNodePos);
|
||||
@ -6440,7 +6389,7 @@ CPed::Fight(void)
|
||||
if (curMove.comboFollowOnTime > 0.0f && m_fightButtonPressure != 0 && animTime > curMove.comboFollowOnTime) {
|
||||
|
||||
// Notice that it increases fight move index, because we're in combo!
|
||||
animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[++m_lastFightMove].animId, 8.0f);
|
||||
animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[++m_curFightMove].animId, 8.0f);
|
||||
animAssoc->SetFinishCallback(FinishFightMoveCB, this);
|
||||
animAssoc->SetCurrentTime(0.1f * animAssoc->hierarchy->totalLength);
|
||||
m_fightButtonPressure = 0;
|
||||
@ -6448,7 +6397,7 @@ CPed::Fight(void)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (curMove.startFireTime > 0.0f && m_lastFightMove != FIGHTMOVE_SHUFFLE_F && animTime > curMove.startFireTime) {
|
||||
if (curMove.startFireTime > 0.0f && m_curFightMove != FIGHTMOVE_SHUFFLE_F && animTime > curMove.startFireTime) {
|
||||
if (IsPlayer())
|
||||
currentAssoc->speed = 1.3f;
|
||||
else
|
||||
@ -6504,8 +6453,7 @@ CPed::Fight(void)
|
||||
if (neededTurn > PI)
|
||||
neededTurn = TWOPI - neededTurn;
|
||||
|
||||
PedState nearPedState = nearPed->m_nPedState;
|
||||
if (nearPedState != PED_FALL && nearPedState != PED_GETUP && nearPedState != PED_DIE && nearPedState != PED_DEAD) {
|
||||
if (!nearPed->OnGroundOrGettingUp()) {
|
||||
|
||||
if (nearPedDist < 0.8f && neededTurn < DEGTORAD(75.0f) && canKneeHead) {
|
||||
canAffectMultiplePeople = false;
|
||||
@ -6546,7 +6494,7 @@ CPed::Fight(void)
|
||||
goForward = true;
|
||||
}
|
||||
|
||||
} else if (nearPedState != PED_DEAD || pedOnGround) {
|
||||
} else if (nearPed->m_nPedState != PED_DEAD || pedOnGround) {
|
||||
if (!nearPed->IsPedHeadAbovePos(-0.3f)) {
|
||||
canAffectMultiplePeople = false;
|
||||
nextFightMove = FIGHTMOVE_GROUNDKICK;
|
||||
@ -6600,8 +6548,7 @@ CPed::Fight(void)
|
||||
nextAngle = CGeneral::LimitRadianAngle(angleToFace);
|
||||
m_fRotationDest = nextAngle;
|
||||
m_fRotationCur = m_fRotationDest;
|
||||
PedState fightingPedState = m_pedInObjective->m_nPedState;
|
||||
if (fightingPedState != PED_FALL && fightingPedState != PED_GETUP && fightingPedState != PED_DIE && fightingPedState != PED_DEAD) {
|
||||
if (!m_pedInObjective->OnGroundOrGettingUp()) {
|
||||
|
||||
if (fightingPedDist >= 0.8f || !canKneeHead) {
|
||||
|
||||
@ -6650,8 +6597,8 @@ CPed::Fight(void)
|
||||
}
|
||||
|
||||
if (nextFightMove != FIGHTMOVE_IDLE) {
|
||||
m_lastFightMove = nextFightMove;
|
||||
animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[m_lastFightMove].animId, 4.0f);
|
||||
m_curFightMove = nextFightMove;
|
||||
animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[m_curFightMove].animId, 4.0f);
|
||||
|
||||
animAssoc->SetFinishCallback(FinishFightMoveCB, this);
|
||||
if (m_fightState == FIGHTSTATE_MOVE_FINISHED && animAssoc->currentTime != 0.0f) {
|
||||
@ -6661,21 +6608,21 @@ CPed::Fight(void)
|
||||
m_fightButtonPressure = 0;
|
||||
}
|
||||
m_fightState = FIGHTSTATE_NO_MOVE;
|
||||
} else if (m_takeAStepAfterAttack && m_lastFightMove != FIGHTMOVE_SHUFFLE_F
|
||||
} else if (m_takeAStepAfterAttack && m_curFightMove != FIGHTMOVE_SHUFFLE_F
|
||||
#ifndef FIX_BUGS
|
||||
&& CheckForPedsOnGroundToAttack(this, nil) == 4) {
|
||||
#else
|
||||
&& CheckForPedsOnGroundToAttack(this, nil) == PED_IN_FRONT_OF_ATTACKER) {
|
||||
#endif
|
||||
m_lastFightMove = FIGHTMOVE_SHUFFLE_F;
|
||||
animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), tFightMoves[m_lastFightMove].animId);
|
||||
m_curFightMove = FIGHTMOVE_SHUFFLE_F;
|
||||
animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), tFightMoves[m_curFightMove].animId);
|
||||
|
||||
if (animAssoc) {
|
||||
animAssoc->SetCurrentTime(0.0f);
|
||||
animAssoc->blendDelta = 4.0f;
|
||||
animAssoc->SetRun();
|
||||
} else {
|
||||
animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[m_lastFightMove].animId, 32.0f);
|
||||
animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[m_curFightMove].animId, 32.0f);
|
||||
}
|
||||
animAssoc->SetFinishCallback(FinishFightMoveCB, this);
|
||||
m_fightState = FIGHTSTATE_NO_MOVE;
|
||||
@ -6685,13 +6632,13 @@ CPed::Fight(void)
|
||||
} else if (m_takeAStepAfterAttack) {
|
||||
EndFight(ENDFIGHT_FAST);
|
||||
|
||||
} else if (m_lastFightMove == FIGHTMOVE_IDLE) {
|
||||
} else if (m_curFightMove == FIGHTMOVE_IDLE) {
|
||||
if (CTimer::GetTimeInMilliseconds() > m_nWaitTimer) {
|
||||
EndFight(ENDFIGHT_NORMAL);
|
||||
}
|
||||
|
||||
} else {
|
||||
m_lastFightMove = FIGHTMOVE_IDLE;
|
||||
m_curFightMove = FIGHTMOVE_IDLE;
|
||||
if (IsPlayer())
|
||||
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + 500;
|
||||
else
|
||||
@ -6781,7 +6728,7 @@ CPed::FinishFightMoveCB(CAnimBlendAssociation *animAssoc, void *arg)
|
||||
{
|
||||
CPed *ped = (CPed*)arg;
|
||||
|
||||
if (tFightMoves[ped->m_lastFightMove].animId == animAssoc->animId) {
|
||||
if (tFightMoves[ped->m_curFightMove].animId == animAssoc->animId) {
|
||||
ped->m_fightState = FIGHTSTATE_MOVE_FINISHED;
|
||||
animAssoc->blendDelta = -1000.0f;
|
||||
}
|
||||
@ -7527,9 +7474,9 @@ CPed::Flee(void)
|
||||
if (!m_collidingEntityWhileFleeing)
|
||||
return;
|
||||
|
||||
double damagingThingPriorityMult = (double)(m_collidingThingTimer - CTimer::GetTimeInMilliseconds()) * 2.0 / 2500;
|
||||
double collidingThingPriorityMult = (double)(m_collidingThingTimer - CTimer::GetTimeInMilliseconds()) * 2.0 / 2500;
|
||||
|
||||
if (damagingThingPriorityMult <= 1.5) {
|
||||
if (collidingThingPriorityMult <= 1.5) {
|
||||
|
||||
double angleToFleeEntity = CGeneral::GetRadianAngleBetweenPoints(
|
||||
GetPosition().x,
|
||||
@ -7538,35 +7485,34 @@ CPed::Flee(void)
|
||||
m_collidingEntityWhileFleeing->GetPosition().y);
|
||||
angleToFleeEntity = CGeneral::LimitRadianAngle(angleToFleeEntity);
|
||||
|
||||
// It includes projectiles, but is everything collides with us included?
|
||||
double angleToFleeDamagingThing = CGeneral::GetRadianAngleBetweenPoints(
|
||||
double angleToFleeCollidingThing = CGeneral::GetRadianAngleBetweenPoints(
|
||||
m_vecDamageNormal.x,
|
||||
m_vecDamageNormal.y,
|
||||
0.0f,
|
||||
0.0f);
|
||||
angleToFleeDamagingThing = CGeneral::LimitRadianAngle(angleToFleeDamagingThing);
|
||||
angleToFleeCollidingThing = CGeneral::LimitRadianAngle(angleToFleeCollidingThing);
|
||||
|
||||
if (angleToFleeEntity - PI > angleToFleeDamagingThing)
|
||||
angleToFleeDamagingThing += TWOPI;
|
||||
else if (PI + angleToFleeEntity < angleToFleeDamagingThing)
|
||||
angleToFleeDamagingThing -= TWOPI;
|
||||
if (angleToFleeEntity - PI > angleToFleeCollidingThing)
|
||||
angleToFleeCollidingThing += TWOPI;
|
||||
else if (PI + angleToFleeEntity < angleToFleeCollidingThing)
|
||||
angleToFleeCollidingThing -= TWOPI;
|
||||
|
||||
if (damagingThingPriorityMult <= 1.0f) {
|
||||
if (collidingThingPriorityMult <= 1.0f) {
|
||||
// Range [0.0, 1.0]
|
||||
|
||||
float angleToFleeBoth = (angleToFleeDamagingThing + angleToFleeEntity) * 0.5f;
|
||||
float angleToFleeBoth = (angleToFleeCollidingThing + angleToFleeEntity) * 0.5f;
|
||||
|
||||
if (m_fRotationDest - PI > angleToFleeBoth)
|
||||
angleToFleeBoth += TWOPI;
|
||||
else if (PI + m_fRotationDest < angleToFleeBoth)
|
||||
angleToFleeBoth -= TWOPI;
|
||||
|
||||
m_fRotationDest = (1.0f - damagingThingPriorityMult) * m_fRotationDest + damagingThingPriorityMult * angleToFleeBoth;
|
||||
m_fRotationDest = (1.0f - collidingThingPriorityMult) * m_fRotationDest + collidingThingPriorityMult * angleToFleeBoth;
|
||||
} else {
|
||||
// Range (1.0, 1.5]
|
||||
|
||||
double adjustedMult = (damagingThingPriorityMult - 1.0f) * 2.0f;
|
||||
m_fRotationDest = angleToFleeEntity * (1.0 - adjustedMult) + adjustedMult * angleToFleeDamagingThing;
|
||||
double adjustedMult = (collidingThingPriorityMult - 1.0f) * 2.0f;
|
||||
m_fRotationDest = angleToFleeEntity * (1.0 - adjustedMult) + adjustedMult * angleToFleeCollidingThing;
|
||||
}
|
||||
} else {
|
||||
m_fRotationDest = CGeneral::GetRadianAngleBetweenPoints(
|
||||
@ -8564,8 +8510,7 @@ CPed::KillPedWithCar(CVehicle *car, float impulse)
|
||||
CPed::InflictDamage(car, WEAPONTYPE_RAMMEDBYCAR, damage, PEDPIECE_TORSO, fallDirection);
|
||||
CPed::SetFall(1000, (AnimationId)(fallDirection + ANIM_KO_SKID_FRONT), true);
|
||||
|
||||
if ((m_nPedState == PED_FALL || m_nPedState == PED_DIE || m_nPedState == PED_DEAD)
|
||||
&& !m_pCollidingEntity &&
|
||||
if (OnGround() && !m_pCollidingEntity &&
|
||||
(!IsPlayer() || bHasHitWall || car->GetModelIndex() == MI_TRAIN || m_vecDamageNormal.z < -0.8f)) {
|
||||
|
||||
m_pCollidingEntity = car;
|
||||
@ -14992,7 +14937,7 @@ CPed::PreRender(void)
|
||||
CVector speed = FindPlayerSpeed();
|
||||
|
||||
if (Abs(speed.x) <= 0.05f && Abs(speed.y) <= 0.05f) {
|
||||
if (m_nPedState != PED_FALL && !DyingOrDead() && m_nPedState != PED_ATTACK && m_nPedState != PED_FIGHT) {
|
||||
if (!OnGround() && m_nPedState != PED_ATTACK && m_nPedState != PED_FIGHT) {
|
||||
if (!IsPedHeadAbovePos(0.3f) || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_TIRED)) {
|
||||
doSplashUp = false;
|
||||
}
|
||||
@ -16201,7 +16146,7 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk)
|
||||
Say(SOUND_PED_DEFEND);
|
||||
switch (hitLevel) {
|
||||
case HITLEVEL_GROUND:
|
||||
m_lastFightMove = FIGHTMOVE_HITONFLOOR;
|
||||
m_curFightMove = FIGHTMOVE_HITONFLOOR;
|
||||
break;
|
||||
case HITLEVEL_LOW:
|
||||
#ifndef VC_PED_PORTS
|
||||
@ -16218,52 +16163,52 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk)
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
m_lastFightMove = FIGHTMOVE_HITBODY;
|
||||
m_curFightMove = FIGHTMOVE_HITBODY;
|
||||
break;
|
||||
case HITLEVEL_HIGH:
|
||||
switch (direction) {
|
||||
case 1:
|
||||
m_lastFightMove = FIGHTMOVE_HITLEFT;
|
||||
m_curFightMove = FIGHTMOVE_HITLEFT;
|
||||
break;
|
||||
case 2:
|
||||
m_lastFightMove = FIGHTMOVE_HITBACK;
|
||||
m_curFightMove = FIGHTMOVE_HITBACK;
|
||||
break;
|
||||
case 3:
|
||||
m_lastFightMove = FIGHTMOVE_HITRIGHT;
|
||||
m_curFightMove = FIGHTMOVE_HITRIGHT;
|
||||
break;
|
||||
default:
|
||||
if (unk <= 5)
|
||||
m_lastFightMove = FIGHTMOVE_HITHEAD;
|
||||
m_curFightMove = FIGHTMOVE_HITHEAD;
|
||||
else
|
||||
m_lastFightMove = FIGHTMOVE_HITBIGSTEP;
|
||||
m_curFightMove = FIGHTMOVE_HITBIGSTEP;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
switch (direction) {
|
||||
case 1:
|
||||
m_lastFightMove = FIGHTMOVE_HITLEFT;
|
||||
m_curFightMove = FIGHTMOVE_HITLEFT;
|
||||
break;
|
||||
case 2:
|
||||
m_lastFightMove = FIGHTMOVE_HITBACK;
|
||||
m_curFightMove = FIGHTMOVE_HITBACK;
|
||||
break;
|
||||
case 3:
|
||||
m_lastFightMove = FIGHTMOVE_HITRIGHT;
|
||||
m_curFightMove = FIGHTMOVE_HITRIGHT;
|
||||
break;
|
||||
default:
|
||||
if (unk <= 5)
|
||||
m_lastFightMove = FIGHTMOVE_HITCHEST;
|
||||
m_curFightMove = FIGHTMOVE_HITCHEST;
|
||||
else
|
||||
m_lastFightMove = FIGHTMOVE_HITBIGSTEP;
|
||||
m_curFightMove = FIGHTMOVE_HITBIGSTEP;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (m_nPedState == PED_GETUP && !IsPedHeadAbovePos(0.0f))
|
||||
m_lastFightMove = FIGHTMOVE_HITONFLOOR;
|
||||
m_curFightMove = FIGHTMOVE_HITONFLOOR;
|
||||
|
||||
if (m_nPedState == PED_FIGHT) {
|
||||
CAnimBlendAssociation *moveAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[m_lastFightMove].animId, 8.0f);
|
||||
CAnimBlendAssociation *moveAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[m_curFightMove].animId, 8.0f);
|
||||
moveAssoc->SetCurrentTime(0.0f);
|
||||
moveAssoc->SetFinishCallback(FinishFightMoveCB, this);
|
||||
if (IsPlayer())
|
||||
@ -16272,7 +16217,7 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk)
|
||||
m_takeAStepAfterAttack = 0;
|
||||
m_fightButtonPressure = 0;
|
||||
} else if (IsPlayer() && m_currentWeapon != WEAPONTYPE_UNARMED) {
|
||||
CAnimBlendAssociation *moveAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[m_lastFightMove].animId, 4.0f);
|
||||
CAnimBlendAssociation *moveAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[m_curFightMove].animId, 4.0f);
|
||||
moveAssoc->SetCurrentTime(0.0f);
|
||||
moveAssoc->speed = 1.3f;
|
||||
} else {
|
||||
@ -16302,7 +16247,7 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk)
|
||||
SetMoveState(PEDMOVE_NONE);
|
||||
m_nStoredMoveState = PEDMOVE_NONE;
|
||||
CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_FIGHT_IDLE)->blendAmount = 1.0f;
|
||||
CAnimBlendAssociation *moveAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[m_lastFightMove].animId, 8.0f);
|
||||
CAnimBlendAssociation *moveAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[m_curFightMove].animId, 8.0f);
|
||||
moveAssoc->SetFinishCallback(FinishFightMoveCB, this);
|
||||
m_fightState = FIGHTSTATE_NO_MOVE;
|
||||
m_takeAStepAfterAttack = false;
|
||||
|
@ -480,7 +480,7 @@ public:
|
||||
uint8 m_wepAccuracy;
|
||||
CEntity *m_pPointGunAt;
|
||||
CVector m_vecHitLastPos;
|
||||
uint32 m_lastFightMove;
|
||||
uint32 m_curFightMove;
|
||||
uint8 m_fightButtonPressure;
|
||||
FightState m_fightState;
|
||||
bool m_takeAStepAfterAttack;
|
||||
@ -802,6 +802,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.
|
||||
|
@ -64,10 +64,6 @@ static psGlobalType PsGlobal;
|
||||
#undef MAKEPOINTS
|
||||
#define MAKEPOINTS(l) (*((POINTS /*FAR*/ *)&(l)))
|
||||
|
||||
#define SAFE_RELEASE(x) { if (x) x->Release(); x = NULL; }
|
||||
#define JIF(x) if (FAILED(hr=(x))) \
|
||||
{debug(TEXT("FAILED(hr=0x%x) in ") TEXT(#x) TEXT("\n"), hr); return;}
|
||||
|
||||
unsigned long _dwMemAvailPhys;
|
||||
RwUInt32 gGameState;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user