mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-05-08 03:27:58 +03:00
Reversing Actor Final Part
This commit is contained in:
parent
cb239c3c7f
commit
6528ba4dac
40 changed files with 3983 additions and 779 deletions
|
@ -25,6 +25,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|||
#include "actor.h"
|
||||
#include "weapturret.h"
|
||||
|
||||
extern Vector MINS;
|
||||
extern Vector MAXS;
|
||||
|
||||
void Actor::InitMachineGunner
|
||||
(
|
||||
GlobalFuncs_t *func
|
||||
|
@ -44,8 +47,46 @@ void Actor::Begin_MachineGunner
|
|||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
STUB();
|
||||
m_csMood = STRING_ALERT;
|
||||
m_csIdleMood = STRING_NERVOUS;
|
||||
|
||||
if (m_pTurret)
|
||||
{
|
||||
Sentient *pOwner;
|
||||
m_pTurret->m_bHadOwner = true;
|
||||
pOwner = m_pTurret->GetOwner();
|
||||
if (pOwner)
|
||||
{
|
||||
Com_Printf(
|
||||
"^~^~^ Actor (entnum %d, radnum %d, targetname '%s') cannot use turret (entnum %d, radnum %d, targetname '%s')"
|
||||
" since it is already being used by Actor (entnum %d, radnum %d, targetname '%s')\n",
|
||||
entnum,
|
||||
radnum,
|
||||
targetname.c_str(),
|
||||
m_pTurret->entnum,
|
||||
m_pTurret->radnum,
|
||||
m_pTurret->TargetName().c_str(),
|
||||
pOwner->entnum,
|
||||
pOwner->radnum,
|
||||
pOwner->TargetName().c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
Holster();
|
||||
|
||||
m_pTurret->TurretBeginUsed(this);
|
||||
m_State = 1200;
|
||||
m_iStateTime = level.inttime;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Com_Printf(
|
||||
"^~^~^ Actor (entnum %d, radnum %d, targetname '%s') has no turret specified\n",
|
||||
entnum,
|
||||
radnum,
|
||||
targetname.c_str());
|
||||
}
|
||||
}
|
||||
void Actor::End_MachineGunner
|
||||
(
|
||||
|
@ -53,7 +94,7 @@ void Actor::End_MachineGunner
|
|||
)
|
||||
|
||||
{
|
||||
if (!Sentient::GetWeapon(WEAPON_MAIN))
|
||||
if (!GetWeapon(WEAPON_MAIN))
|
||||
giveItem("models/weapons/mp40.tik");
|
||||
|
||||
Unholster();
|
||||
|
@ -71,36 +112,217 @@ void Actor::BecomeTurretGuy
|
|||
)
|
||||
|
||||
{
|
||||
SetThinkIdle(8);
|
||||
SetThinkIdle(THINK_IDLE);
|
||||
|
||||
SetThink(THINKSTATE_ATTACK, 1);
|
||||
SetThink(THINKSTATE_DISGUISE, 10);
|
||||
SetThink(THINKSTATE_GRENADE, 16);
|
||||
SetThink(THINKSTATE_ATTACK, THINK_TURRET);
|
||||
SetThink(THINKSTATE_DISGUISE, THINK_DISGUISE_SALUTE);
|
||||
SetThink(THINKSTATE_GRENADE, THINK_GRENADE);
|
||||
|
||||
if (m_Think[m_ThinkLevel] == 1 && Turret_DecideToSelectState())
|
||||
if (CurrentThink() == THINK_IDLE && Turret_DecideToSelectState())
|
||||
{
|
||||
m_State = 100;
|
||||
m_iStateTime = level.inttime;
|
||||
}
|
||||
}
|
||||
|
||||
void Actor::Think_MachineGunner
|
||||
(
|
||||
void
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
STUB();
|
||||
if (RequireThink())
|
||||
{
|
||||
if (m_pTurret && m_pTurret->GetOwner() == this && !m_bNoPlayerCollision)
|
||||
{
|
||||
if (!m_bEnableEnemy)
|
||||
{
|
||||
ThinkHoldGun();
|
||||
return;
|
||||
}
|
||||
|
||||
if (level.inttime < m_iEnemyCheckTime + 200)
|
||||
{
|
||||
ThinkHoldGun();
|
||||
return;
|
||||
}
|
||||
|
||||
m_iEnemyCheckTime = level.inttime;
|
||||
|
||||
if (m_pTurret->CanTarget(G_GetEntity(0)->centroid))
|
||||
{
|
||||
ThinkHoldGun();
|
||||
return;
|
||||
}
|
||||
if (!m_pGrenade || m_fGrenadeAwareness < rand() * 0.000000046566129)
|
||||
{
|
||||
if (!G_SightTrace(
|
||||
EyePosition(),
|
||||
vec_zero,
|
||||
vec_zero,
|
||||
G_GetEntity(0)->centroid,
|
||||
this,
|
||||
G_GetEntity(0),
|
||||
33819417,
|
||||
qfalse,
|
||||
"Actor::Think_MachineGunner"))
|
||||
{
|
||||
ThinkHoldGun();
|
||||
return;
|
||||
}
|
||||
if (m_ThinkStates[0] != THINKSTATE_IDLE)
|
||||
{
|
||||
BecomeTurretGuy();
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_Enemy && !m_Enemy->IsSubclassOfActor() && !EnemyIsDisguised() && m_PotentialEnemies.GetCurrentVisibility() >= 1)
|
||||
{
|
||||
BecomeTurretGuy();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!m_Enemy || !m_Enemy->IsSubclassOfActor() || EnemyIsDisguised() || m_PotentialEnemies.GetCurrentVisibility() > 1)
|
||||
{
|
||||
ThinkHoldGun();
|
||||
return;
|
||||
}
|
||||
|
||||
SetCuriousAnimHint(6);
|
||||
}
|
||||
}
|
||||
BecomeTurretGuy();
|
||||
}
|
||||
}
|
||||
|
||||
void Actor::ThinkHoldGun
|
||||
(
|
||||
void
|
||||
)
|
||||
|
||||
{
|
||||
// FIXME: stub
|
||||
STUB();
|
||||
Vector end;
|
||||
trace_t trace;
|
||||
float temp;
|
||||
float temp2;
|
||||
float machine_gunner_hands_up_stand;
|
||||
float heightDiff;
|
||||
float right;
|
||||
vec3_t newOrigin;
|
||||
Vector offset;
|
||||
Vector start;
|
||||
vec3_t new_angles;
|
||||
Vector vForward;
|
||||
|
||||
UpdateEyeOrigin();
|
||||
m_pszDebugState = "";
|
||||
if (m_State == 1200)
|
||||
{
|
||||
if (m_pTurret->IsFiring())
|
||||
{
|
||||
if (m_pTurret->aim_target == G_GetEntity(0))
|
||||
{
|
||||
m_bNoSurprise = true;
|
||||
}
|
||||
m_csNextAnimString = STRING_ANIM_MG42_SHOOT_SCR;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_csNextAnimString = STRING_ANIM_MG42_IDLE_SCR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_csNextAnimString = STRING_ANIM_MG42_RELOAD_SCR;
|
||||
m_bAnimScriptSet = false;
|
||||
}
|
||||
m_eNextAnimMode = 8;
|
||||
m_bNextForceStart = false;
|
||||
|
||||
CheckUnregister();
|
||||
|
||||
m_YawAchieved = true;
|
||||
|
||||
setAngles(Vector(0,m_pTurret->angles[1],0));
|
||||
|
||||
vForward = Vector(m_pTurret->orientation[0]) * -39 + m_pTurret->origin;
|
||||
|
||||
if (m_State == 1201)
|
||||
{
|
||||
heightDiff = 71.6;
|
||||
}
|
||||
else
|
||||
{
|
||||
heightDiff = 71.8;
|
||||
}
|
||||
|
||||
machine_gunner_hands_up_stand = origin[2] - (m_pTurret->origin[2] - heightDiff);
|
||||
|
||||
|
||||
if (machine_gunner_hands_up_stand < 0)
|
||||
{
|
||||
if (m_State == 1201)
|
||||
{
|
||||
temp = (machine_gunner_hands_up_stand - m_pTurret->origin[2]) / 39;
|
||||
if (temp >= -1.0 && temp <= 1.0)
|
||||
{
|
||||
right = atan2(temp / sqrt(temp*-temp + 1), 1) * 180 / M_PI;
|
||||
m_pTurret->setAngles(Vector(right, m_pTurret->angles[1], m_pTurret->angles[2]));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_fCrouchWeight = machine_gunner_hands_up_stand / 17.1;
|
||||
if (m_fCrouchWeight < -1.0)
|
||||
{
|
||||
m_fCrouchWeight = -1.0;
|
||||
}
|
||||
|
||||
}
|
||||
temp2 = m_fCrouchWeight * 2.6;
|
||||
offset.x = (-(-9.3*m_fCrouchWeight + 23.4)) * orientation[0][0] + vForward.x;
|
||||
offset.y = (-(-9.3*m_fCrouchWeight + 23.4)) * orientation[0][0] + vForward.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_fCrouchWeight = machine_gunner_hands_up_stand / (heightDiff - 38.7);
|
||||
if (m_fCrouchWeight > 1.0)
|
||||
{
|
||||
m_fCrouchWeight = 1.0;
|
||||
}
|
||||
|
||||
temp2 = m_fCrouchWeight * -1.6;
|
||||
offset.x = (-(-3*m_fCrouchWeight + 23.4)) * orientation[0][0] + vForward.x;
|
||||
offset.y = (-(-3*m_fCrouchWeight + 23.4)) * orientation[0][0] + vForward.y;
|
||||
}
|
||||
|
||||
start.x = (temp2 + 10.3) * orientation[1][0] + offset.x;
|
||||
start.y = (temp2 + 10.3) * orientation[1][1] + offset.y;
|
||||
|
||||
if (m_fCrouchWeight >= 0.5)
|
||||
m_csCurrentPosition = STRING_CROUCH;
|
||||
else
|
||||
m_csCurrentPosition = STRING_STAND;
|
||||
|
||||
UpdateAimMotion();
|
||||
UpdateAnim();
|
||||
start.z = origin.z + 18.0;
|
||||
|
||||
end = start;
|
||||
end.z = origin.z - 94.0;
|
||||
|
||||
trace = G_Trace(start, MINS, MAXS, end, this, 1107437825, qfalse, "Actor::ThinkHoldGun");
|
||||
|
||||
if (trace.fraction != 1.0 && !trace.startsolid && !trace.allsolid && trace.ent)
|
||||
SafeSetOrigin(trace.endpos);
|
||||
|
||||
velocity = vec_zero;
|
||||
|
||||
UpdateBoneControllers();
|
||||
UpdateFootsteps();
|
||||
|
||||
}
|
||||
|
||||
void Actor::FinishedAnimation_MachineGunner
|
||||
(
|
||||
void
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue