diff --git a/src/shared/NSMonster.qc b/src/shared/NSMonster.qc index f9c91359..d47f0053 100644 --- a/src/shared/NSMonster.qc +++ b/src/shared/NSMonster.qc @@ -1582,6 +1582,9 @@ NSMonster::EvaluateEntity(void) EVALUATE_FIELD(effects, MONFL_CHANGED_EFFECTS) EVALUATE_FIELD(m_iBody, MONFL_CHANGED_BODY) EVALUATE_FIELD(scale, MONFL_CHANGED_SCALE) + EVALUATE_VECTOR(m_vecAxialScale, 0, MONFL_CHANGED_SCALE) + EVALUATE_VECTOR(m_vecAxialScale, 1, MONFL_CHANGED_SCALE) + EVALUATE_VECTOR(m_vecAxialScale, 2, MONFL_CHANGED_SCALE) EVALUATE_VECTOR(velocity, 0, MONFL_CHANGED_VELOCITY) EVALUATE_VECTOR(velocity, 1, MONFL_CHANGED_VELOCITY) EVALUATE_VECTOR(velocity, 2, MONFL_CHANGED_VELOCITY) @@ -1635,6 +1638,9 @@ NSMonster::SendEntity(entity ePEnt, float flChanged) SENDENTITY_FLOAT(effects, MONFL_CHANGED_EFFECTS) SENDENTITY_SHORT(m_iBody, MONFL_CHANGED_BODY) SENDENTITY_FLOAT(scale, MONFL_CHANGED_SCALE) + SENDENTITY_FLOAT(m_vecAxialScale[0], MONFL_CHANGED_SCALE) + SENDENTITY_FLOAT(m_vecAxialScale[1], MONFL_CHANGED_SCALE) + SENDENTITY_FLOAT(m_vecAxialScale[2], MONFL_CHANGED_SCALE) SENDENTITY_COORD(velocity[0], MONFL_CHANGED_VELOCITY) SENDENTITY_COORD(velocity[1], MONFL_CHANGED_VELOCITY) SENDENTITY_COORD(velocity[2], MONFL_CHANGED_VELOCITY) @@ -1715,6 +1721,9 @@ NSMonster::ReceiveEntity(float flNew, float flChanged) READENTITY_FLOAT(effects, MONFL_CHANGED_EFFECTS) READENTITY_SHORT(m_iBody, MONFL_CHANGED_BODY) READENTITY_FLOAT(scale, MONFL_CHANGED_SCALE) + READENTITY_FLOAT(m_vecAxialScale[0], MONFL_CHANGED_SCALE) + READENTITY_FLOAT(m_vecAxialScale[1], MONFL_CHANGED_SCALE) + READENTITY_FLOAT(m_vecAxialScale[2], MONFL_CHANGED_SCALE) READENTITY_COORD(velocity[0], MONFL_CHANGED_VELOCITY) READENTITY_COORD(velocity[1], MONFL_CHANGED_VELOCITY) READENTITY_COORD(velocity[2], MONFL_CHANGED_VELOCITY) diff --git a/src/shared/NSRenderableEntity.h b/src/shared/NSRenderableEntity.h index 79a3a0ed..f897028c 100644 --- a/src/shared/NSRenderableEntity.h +++ b/src/shared/NSRenderableEntity.h @@ -105,6 +105,7 @@ private: PREDICTED_FLOAT(m_iRenderMode) PREDICTED_FLOAT(m_flRenderAmt) PREDICTED_VECTOR(m_vecRenderColor) + PREDICTED_VECTOR(m_vecAxialScale) /* model events */ float m_flBaseTime; @@ -172,6 +173,9 @@ public: nonvirtual void SetBoneControl4(float); /** Sets the value of the bone controller #5. */ nonvirtual void SetBoneControl5(float); + /** Sets the axial, anisotropic scale of an entity, affecting the individual axis (forward, right, up). */ + nonvirtual void SetAxialScale(vector); + /** Returns the bodygroup of the entity. */ nonvirtual int GetBody(void); /** Returns the body within a given group. */ @@ -194,10 +198,13 @@ public: nonvirtual float GetBoneControl4(void); /** Returns the value of the entity's bone controller #5. */ nonvirtual float GetBoneControl5(void); + /** Returns the axial/anisotropic scale of the entity, same as input format (forward, right, up) */ + nonvirtual vector GetAxialScale(void); #ifdef CLIENT /** Called by predraw(); and will set the appropriate rendering specific fields. */ nonvirtual void RenderFXPass(void); + nonvirtual void RenderAxialScale(void); #endif }; diff --git a/src/shared/NSRenderableEntity.qc b/src/shared/NSRenderableEntity.qc index 9380ee78..b5104618 100644 --- a/src/shared/NSRenderableEntity.qc +++ b/src/shared/NSRenderableEntity.qc @@ -29,6 +29,7 @@ NSRenderableEntity::NSRenderableEntity(void) m_flBoneControl4 = 0.5f; m_flBoneControl5 = 0.5f; m_iBody = 0i; + m_vecAxialScale = [1,1,1]; effects |= EF_NOSHADOW; @@ -117,6 +118,9 @@ NSRenderableEntity::EvaluateEntity(void) EVALUATE_FIELD(effects, RDENT_CHANGED_EFFECTS) EVALUATE_FIELD(m_iBody, RDENT_CHANGED_BODY) EVALUATE_FIELD(scale, RDENT_CHANGED_SCALE) + EVALUATE_VECTOR(m_vecAxialScale, 0, RDENT_CHANGED_SCALE) + EVALUATE_VECTOR(m_vecAxialScale, 1, RDENT_CHANGED_SCALE) + EVALUATE_VECTOR(m_vecAxialScale, 2, RDENT_CHANGED_SCALE) EVALUATE_VECTOR(velocity, 0, RDENT_CHANGED_VELOCITY) EVALUATE_VECTOR(velocity, 1, RDENT_CHANGED_VELOCITY) EVALUATE_VECTOR(velocity, 2, RDENT_CHANGED_VELOCITY) @@ -201,6 +205,9 @@ NSRenderableEntity::SendEntity(entity ePEnt, float flChanged) SENDENTITY_FLOAT(effects, RDENT_CHANGED_EFFECTS) SENDENTITY_SHORT(m_iBody, RDENT_CHANGED_BODY) SENDENTITY_FLOAT(scale, RDENT_CHANGED_SCALE) + SENDENTITY_FLOAT(m_vecAxialScale[0], RDENT_CHANGED_SCALE) + SENDENTITY_FLOAT(m_vecAxialScale[1], RDENT_CHANGED_SCALE) + SENDENTITY_FLOAT(m_vecAxialScale[2], RDENT_CHANGED_SCALE) SENDENTITY_COORD(velocity[0], RDENT_CHANGED_VELOCITY) SENDENTITY_COORD(velocity[1], RDENT_CHANGED_VELOCITY) SENDENTITY_COORD(velocity[2], RDENT_CHANGED_VELOCITY) @@ -258,6 +265,9 @@ NSRenderableEntity::ReceiveEntity(float flNew, float flChanged) READENTITY_FLOAT(effects, RDENT_CHANGED_EFFECTS) READENTITY_SHORT(m_iBody, RDENT_CHANGED_BODY) READENTITY_FLOAT(scale, RDENT_CHANGED_SCALE) + READENTITY_FLOAT(m_vecAxialScale[0], RDENT_CHANGED_SCALE) + READENTITY_FLOAT(m_vecAxialScale[1], RDENT_CHANGED_SCALE) + READENTITY_FLOAT(m_vecAxialScale[2], RDENT_CHANGED_SCALE) READENTITY_COORD(velocity[0], RDENT_CHANGED_VELOCITY) READENTITY_COORD(velocity[1], RDENT_CHANGED_VELOCITY) READENTITY_COORD(velocity[2], RDENT_CHANGED_VELOCITY) @@ -522,6 +532,19 @@ NSRenderableEntity::RenderDebugSkeleton(void) } } +void +NSRenderableEntity::RenderAxialScale(void) +{ + /* only bother if we're non-standard */ + if (m_vecAxialScale != [1,1,1]) { + makevectors(angles); + v_forward *= m_vecAxialScale[0]; + v_right *= m_vecAxialScale[1]; + v_up *= m_vecAxialScale[2]; + renderflags |= RF_USEAXIS; + } +} + /* ============ NSRenderableEntity::predraw @@ -531,6 +554,7 @@ entities, so TODO: make things like anims, sentences apply only to relevant child-classes ============ */ +var vector autocvar_testscale = [1,1,1]; float NSRenderableEntity::predraw(void) { @@ -554,6 +578,8 @@ NSRenderableEntity::predraw(void) processmodelevents(modelindex, frame, m_flBaseTime, frame1time, HandleAnimEvent); + RenderAxialScale(); + if (alpha > 0.0) { /* TODO: Move this somewhere more sane */ if (m_iRenderFX == RFX_Q2PULSE) { @@ -654,6 +680,12 @@ NSRenderableEntity::SetBoneControl5(float val) m_flBoneControl5 = val; } +void +NSRenderableEntity::SetAxialScale(vector scaleVec) +{ + m_vecAxialScale = scaleVec; +} + int NSRenderableEntity::GetBody(void) { @@ -720,6 +752,12 @@ NSRenderableEntity::GetBoneControl5(void) return m_flBoneControl5; } +vector +NSRenderableEntity::GetAxialScale(void) +{ + return m_vecAxialScale; +} + void NSRenderableEntity::HandleAnimEvent(float flTimeStamp, int iCode, string strData) { diff --git a/src/shared/NSTalkMonster.qc b/src/shared/NSTalkMonster.qc index b732a6ff..08aeb387 100644 --- a/src/shared/NSTalkMonster.qc +++ b/src/shared/NSTalkMonster.qc @@ -796,6 +796,9 @@ NSTalkMonster::SendEntity(entity ePEnt, float flChanged) SENDENTITY_FLOAT(effects, MONFL_CHANGED_EFFECTS) SENDENTITY_SHORT(m_iBody, MONFL_CHANGED_BODY) SENDENTITY_FLOAT(scale, MONFL_CHANGED_SCALE) + SENDENTITY_FLOAT(m_vecAxialScale[0], MONFL_CHANGED_SCALE) + SENDENTITY_FLOAT(m_vecAxialScale[1], MONFL_CHANGED_SCALE) + SENDENTITY_FLOAT(m_vecAxialScale[2], MONFL_CHANGED_SCALE) SENDENTITY_COORD(velocity[0], MONFL_CHANGED_VELOCITY) SENDENTITY_COORD(velocity[1], MONFL_CHANGED_VELOCITY) SENDENTITY_COORD(velocity[2], MONFL_CHANGED_VELOCITY) @@ -805,7 +808,9 @@ NSTalkMonster::SendEntity(entity ePEnt, float flChanged) SENDENTITY_ANGLE(m_vecRenderColor[1], MONFL_CHANGED_RENDERCOLOR) SENDENTITY_ANGLE(m_vecRenderColor[2], MONFL_CHANGED_RENDERCOLOR) SENDENTITY_ANGLE(m_flRenderAmt, MONFL_CHANGED_RENDERAMT) - SENDENTITY_FLOAT(m_flHeadYaw, MONFL_CHANGED_HEADYAW) + SENDENTITY_FLOAT(bonecontrol1, MONFL_CHANGED_HEADYAW) + SENDENTITY_FLOAT(subblendfrac, MONFL_CHANGED_HEADYAW) + SENDENTITY_FLOAT(frame1time, MONFL_CHANGED_HEADYAW) return (1); } @@ -955,6 +960,8 @@ NSTalkMonster::predraw(void) basesubblendfrac = autocvar(basesubblendfrac, 0); basesubblend2frac = autocvar(basesubblend2frac, 0); + RenderAxialScale(); + addentity(this); _RenderDebugViewCone(); @@ -993,6 +1000,9 @@ NSTalkMonster::ReceiveEntity(float flNew, float flChanged) READENTITY_FLOAT(effects, MONFL_CHANGED_EFFECTS) READENTITY_SHORT(m_iBody, MONFL_CHANGED_BODY) READENTITY_FLOAT(scale, MONFL_CHANGED_SCALE) + READENTITY_FLOAT(m_vecAxialScale[0], MONFL_CHANGED_SCALE) + READENTITY_FLOAT(m_vecAxialScale[1], MONFL_CHANGED_SCALE) + READENTITY_FLOAT(m_vecAxialScale[2], MONFL_CHANGED_SCALE) READENTITY_COORD(velocity[0], MONFL_CHANGED_VELOCITY) READENTITY_COORD(velocity[1], MONFL_CHANGED_VELOCITY) READENTITY_COORD(velocity[2], MONFL_CHANGED_VELOCITY) @@ -1002,7 +1012,9 @@ NSTalkMonster::ReceiveEntity(float flNew, float flChanged) READENTITY_ANGLE(m_vecRenderColor[1], MONFL_CHANGED_RENDERCOLOR) READENTITY_ANGLE(m_vecRenderColor[2], MONFL_CHANGED_RENDERCOLOR) READENTITY_ANGLE(m_flRenderAmt, MONFL_CHANGED_RENDERAMT) - READENTITY_FLOAT(m_flHeadYaw, MONFL_CHANGED_HEADYAW) + READENTITY_FLOAT(bonecontrol1, MONFL_CHANGED_HEADYAW) + READENTITY_FLOAT(subblendfrac, MONFL_CHANGED_HEADYAW) + READENTITY_FLOAT(frame1time, MONFL_CHANGED_HEADYAW) if (scale == 0.0) scale = 1.0f;