Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions gamedata/scripts/lua_help_ex.script
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@

poltergeist_spawn_corpse_on_death // Poltergeists spawn corpses on death
g_firepos_zoom // Make firepos work while aiming

g_decouple_horz_recoil // calculate horz recoil independently of vert recoil
g_use_non_linear_inertia // enable non linear weapon inertia movement

}

lua extensions {
Expand Down Expand Up @@ -90,6 +94,16 @@
int get_modded_exes_version() // Returns modded exes version in integer format
table get_string_table() // Returns all translated strings in [string id] = string text format
player_hud* get_player_hud()

-- color getters / setters
ClrGetA(number argb)
ClrGetR(number argb)
ClrGetG(number argb)
ClrGetB(number argb)
ClrSetA(number argb, number a)
ClrSetR(number argb, number r)
ClrSetG(number argb, number g)
ClrSetB(number argb, number b)
}

get_console() {
Expand Down
14 changes: 13 additions & 1 deletion src/xrGame/EffectorShot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@
//-----------------------------------------------------------------------------
// Weapon shot effector
//-----------------------------------------------------------------------------

// calculate horz recoil independently of vert recoil
BOOL g_decouple_horz_recoil = FALSE;

CWeaponShotEffector::CWeaponShotEffector()
{
Reset();
Expand Down Expand Up @@ -83,7 +87,15 @@ void CWeaponShotEffector::Shot2(float angle)
}

float rdm = m_Random.randF(-1.0f, 1.0f);
m_angle_horz += (m_angle_vert / m_cam_recoil.MaxAngleVert) * rdm * m_cam_recoil.StepAngleHorz;

if (g_decouple_horz_recoil)
{
m_angle_horz += rdm * m_cam_recoil.StepAngleHorz;
}
else
{
m_angle_horz += (m_angle_vert / m_cam_recoil.MaxAngleVert) * rdm * m_cam_recoil.StepAngleHorz;
}

clamp(m_angle_horz, -m_cam_recoil.MaxAngleHorz, m_cam_recoil.MaxAngleHorz);

Expand Down
56 changes: 50 additions & 6 deletions src/xrGame/Weapon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ float hud_fov_aim_multiplier = 1.0f;

extern int g_nearwall;

BOOL g_use_non_linear_inertia = FALSE;

float CWeapon::SDS_Radius(bool alt) {
// hack for GL to always return 0, fix later
if (m_zoomtype == 2)
Expand Down Expand Up @@ -2681,12 +2683,26 @@ void CWeapon::UpdateHudAdditional(Fmatrix& trans)
// Двигаемся в любом другом направлении - плавно убираем наклон
if (m_fLR_MovingFactor < 0.0f)
{
m_fLR_MovingFactor += fStepPerUpd;
if (g_use_non_linear_inertia)
{
m_fLR_MovingFactor += fStepPerUpd * (0.1f - 2.f * m_fLR_MovingFactor);
}
else
{
m_fLR_MovingFactor += fStepPerUpd;
}
clamp(m_fLR_MovingFactor, -1.0f, 0.0f);
}
else
{
m_fLR_MovingFactor -= fStepPerUpd;
if (g_use_non_linear_inertia)
{
m_fLR_MovingFactor -= fStepPerUpd * (0.1f + 2.f * m_fLR_MovingFactor);
}
else
{
m_fLR_MovingFactor -= fStepPerUpd;
}
clamp(m_fLR_MovingFactor, 0.0f, 1.0f);
}
}
Expand Down Expand Up @@ -2822,12 +2838,26 @@ void CWeapon::UpdateHudAdditional(Fmatrix& trans)
float fRetSpeedMod = (fYMag == 0.0f ? 1.0f : 0.75f) * (fInertiaReturnSpeedMod * 0.075f);
if (m_fLR_InertiaFactor < 0.0f)
{
m_fLR_InertiaFactor += fAvgTimeDelta * fRetSpeedMod;
if (g_use_non_linear_inertia)
{
m_fLR_InertiaFactor += (0.3f - m_fLR_InertiaFactor) * fAvgTimeDelta * fRetSpeedMod;
}
else
{
m_fLR_InertiaFactor += fAvgTimeDelta * fRetSpeedMod;
}
clamp(m_fLR_InertiaFactor, -1.0f, 0.0f);
}
else
{
m_fLR_InertiaFactor -= fAvgTimeDelta * fRetSpeedMod;
if (g_use_non_linear_inertia)
{
m_fLR_InertiaFactor -= (0.3f + m_fLR_InertiaFactor) * fAvgTimeDelta * fRetSpeedMod;
}
else
{
m_fLR_InertiaFactor -= fAvgTimeDelta * fRetSpeedMod;
}
clamp(m_fLR_InertiaFactor, 0.0f, 1.0f);
}
}
Expand All @@ -2838,12 +2868,26 @@ void CWeapon::UpdateHudAdditional(Fmatrix& trans)
float fRetSpeedMod = (fPMag == 0.0f ? 1.0f : 0.75f) * (fInertiaReturnSpeedMod * 0.075f);
if (m_fUD_InertiaFactor < 0.0f)
{
m_fUD_InertiaFactor += fAvgTimeDelta * fRetSpeedMod;
if (g_use_non_linear_inertia)
{
m_fUD_InertiaFactor += (0.3f - m_fUD_InertiaFactor) * fAvgTimeDelta * fRetSpeedMod;
}
else
{
m_fUD_InertiaFactor += fAvgTimeDelta * fRetSpeedMod;
}
clamp(m_fUD_InertiaFactor, -1.0f, 0.0f);
}
else
{
m_fUD_InertiaFactor -= fAvgTimeDelta * fRetSpeedMod;
if (g_use_non_linear_inertia)
{
m_fUD_InertiaFactor -= (0.3f + m_fUD_InertiaFactor) * fAvgTimeDelta * fRetSpeedMod;
}
else
{
m_fUD_InertiaFactor -= fAvgTimeDelta * fRetSpeedMod;
}
clamp(m_fUD_InertiaFactor, 0.0f, 1.0f);
}
}
Expand Down
6 changes: 6 additions & 0 deletions src/xrGame/console_commands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,9 @@ extern CrosshairSettings g_crosshair_device_far;
CrosshairOpacityCommands(crosshair, suffix); \
CrosshairLineCommands(crosshair, suffix)

extern BOOL g_decouple_horz_recoil;
extern BOOL g_use_non_linear_inertia;

extern float recon_show_speed;
extern float recon_hide_speed;
extern float recon_mindist;
Expand Down Expand Up @@ -2595,6 +2598,9 @@ void CCC_RegisterCommands()
CrosshairNearCommands(g_crosshair_device_near, "device_near");
CrosshairFarCommands(g_crosshair_device_far, "device_far");

CMD4(CCC_Integer, "g_decouple_horz_recoil", &g_decouple_horz_recoil, 0, 1);
CMD4(CCC_Integer, "g_use_non_linear_inertia", &g_use_non_linear_inertia, 0, 1);

CMD4(CCC_Float, "g_recon_show_speed", &recon_show_speed, 0.f, 20.f);
CMD4(CCC_Float, "g_recon_hide_speed", &recon_hide_speed, 0.f, 20.f);
CMD4(CCC_Float, "g_recon_mindist", &recon_mindist, 0.f, 300.f);
Expand Down
Loading