Base: Some minor edits to facilitate the TW akimbo weapons (clean this later...)

This commit is contained in:
Marco Cawthorne 2022-02-04 15:24:43 -08:00
parent 82e1f2e044
commit bef8dfb117
Signed by: eukara
GPG key ID: C196CD8BA993248A
6 changed files with 102 additions and 24 deletions

View file

@ -61,13 +61,21 @@ vector Weapons_GetCameraPos(void);
void Weapons_ViewAnimation(int);
void Weapons_ViewPunchAngle(vector);
int Weapons_IsPresent(player, int);
void Weapons_SetModel(string);
void Weapons_SetGeomset(string);
void Weapons_UpdateAmmo(base_player, int, int, int);
int Weapons_GetAnimation(void);
void Weapons_EnableModel(void);
void Weapons_DisableModel(void);
void Weapons_SetLeftModel(string);
void Weapons_SetRightModel(string);
void Weapons_SetRightGeomset(string);
void Weapons_SetLeftGeomset(string);
/* compat */
void Weapons_SetGeomset(string);
void Weapons_SetModel(string);
void Weapons_Sound(entity, float, string);
#ifdef CLIENT

View file

@ -117,7 +117,16 @@ Weapons_Init(void)
}
void
Weapons_SetModel(string mdl)
Weapons_SetLeftModel(string mdl)
{
#ifdef CLIENT
setmodel(pSeat->m_eViewModelL, mdl);
setsize(pSeat->m_eViewModelL, [0,0,0], [0,0,0]);
pSeat->m_eViewModelL.effects |= EF_NOSHADOW;
#endif
}
void
Weapons_SetRightModel(string mdl)
{
#ifdef CLIENT
setmodel(pSeat->m_eViewModel, mdl);
@ -127,12 +136,32 @@ Weapons_SetModel(string mdl)
}
void
Weapons_SetGeomset(string set)
Weapons_SetModel(string mdl)
{
Weapons_SetRightModel(mdl);
Weapons_SetLeftModel("");
}
void
Weapons_SetRightGeomset(string set)
{
#ifdef CLIENT
setcustomskin(pSeat->m_eViewModel, "", set);
#endif
}
void
Weapons_SetLeftGeomset(string set)
{
#ifdef CLIENT
setcustomskin(pSeat->m_eViewModelL, "", set);
#endif
}
void
Weapons_SetGeomset(string set)
{
Weapons_SetRightGeomset(set);
}
void
Weapons_Draw(void)

View file

@ -411,6 +411,7 @@ bot::RunAI(void)
makevectors(input_angles);
input_movevalues = [v_forward * vecDirection, v_right * vecDirection, v_up * vecDirection];
input_movevalues[2] = 0;
/* duck and stand still when our enemy is far away */
if (m_eTarget && enemyvisible && vlen(aimpos-origin) > 512) {

View file

@ -125,6 +125,9 @@ struct
entity m_eViewModel;
entity m_eMuzzleflash;
int m_iVMBones;
entity m_eViewModelL;
entity m_eMuzzleflashL;
int m_iVMBonesL;
void(void) m_pEventCall;
float m_flEventTime;

View file

@ -22,6 +22,7 @@ View_Init(void)
for (int s = g_seats.length; s-- > numclientseats;) {
pSeat = &g_seats[s];
if(!pSeat->m_eViewModel) {
/* right side */
pSeat->m_eViewModel = spawn();
pSeat->m_eViewModel.classname = "vm";
pSeat->m_eViewModel.renderflags = RF_DEPTHHACK;
@ -34,6 +35,20 @@ View_Init(void)
pSeat->m_eMuzzleflash.renderflags = RF_ADDITIVE;
pSeat->m_eMuzzleflash.effects |= EF_NOSHADOW;
setsize(pSeat->m_eMuzzleflash, [0,0,0], [0,0,0]);
/* left side */
pSeat->m_eViewModelL = spawn();
pSeat->m_eViewModelL.classname = "vm";
pSeat->m_eViewModelL.renderflags = RF_DEPTHHACK;
pSeat->m_eViewModelL.effects |= EF_NOSHADOW;
pSeat->m_eViewModelL.alpha = 1.0f;
setsize(pSeat->m_eViewModelL, [0,0,0], [0,0,0]);
pSeat->m_eMuzzleflashL = spawn();
pSeat->m_eMuzzleflashL.classname = "mflash";
pSeat->m_eMuzzleflashL.renderflags = RF_ADDITIVE;
pSeat->m_eMuzzleflashL.effects |= EF_NOSHADOW;
setsize(pSeat->m_eMuzzleflashL, [0,0,0], [0,0,0]);
}
}
}
@ -104,6 +119,8 @@ View_DrawViewModel(void)
{
entity m_eViewModel = pSeat->m_eViewModel;
entity m_eMuzzleflash = pSeat->m_eMuzzleflash;
entity m_eViewModelL = pSeat->m_eViewModelL;
entity m_eMuzzleflashL = pSeat->m_eMuzzleflashL;
player pl = (player) self;
@ -115,11 +132,14 @@ View_DrawViewModel(void)
return;
}
View_UpdateWeapon(m_eViewModelL, m_eMuzzleflashL);
View_UpdateWeapon(m_eViewModel, m_eMuzzleflash);
float fBaseTime2 = m_eViewModel.frame1time;
float fBaseTime = m_eViewModel.frame1time;
m_eViewModel.frame2time = pl.weapontime;
m_eViewModelL.frame1time =
m_eViewModelL.frame2time =
m_eViewModel.frame2time =
m_eViewModel.frame1time = pl.weapontime;
Event_Callback(m_eViewModel.frame1time, fBaseTime2);
processmodelevents(m_eViewModel.modelindex, m_eViewModel.frame, fBaseTime,
@ -152,15 +172,22 @@ View_DrawViewModel(void)
m_eViewModel.angles = pSeat->m_vecLag;
}
m_eViewModel.colormap = pSeat->m_ePlayer.colormap;
/* apply to the left side */
m_eViewModelL.angles = m_eViewModel.angles;
m_eViewModelL.colormap = m_eViewModel.colormap = pSeat->m_ePlayer.colormap;
/* now apply the scale hack */
m_eViewModel.scale = autocvar_r_viewmodelscale;
m_eViewModel.origin = pSeat->m_vecPredictedOrigin + pl.view_ofs;
m_eViewModelL.scale = m_eViewModel.scale = autocvar_r_viewmodelscale;
m_eViewModelL.origin = m_eViewModel.origin = pSeat->m_vecPredictedOrigin + pl.view_ofs;
/* we only calculate bob on the right model, to avoid double speed bobbing */
Viewmodel_CalcBob();
Viewmodel_ApplyBob(m_eViewModel);
Viewmodel_ApplyBob(m_eViewModelL);
/* this is currently broken */
#if 0
// Left-handed weapons
if (autocvar_v_lefthanded) {
v_right *= -1;
@ -172,8 +199,9 @@ View_DrawViewModel(void)
m_eViewModel.renderflags &= ~RF_USEAXIS;
}
}
#endif
// Only bother when zoomed out
/* only draw the model when it's 'enabled'... */
if (m_eViewModel.alpha != 0.0f) {
// Update muzzleflash position and draw it
if (m_eMuzzleflash.alpha > 0.0f) {
@ -185,12 +213,17 @@ View_DrawViewModel(void)
/*dynamiclight_add(pSeat->m_vecPredictedOrigin + (v_forward * 32), 400 * m_eMuzzleflash.alpha, [1,0.45,0]);*/
setorigin(m_eMuzzleflash, m_eMuzzleflash.origin);
setorigin(m_eMuzzleflashL, m_eMuzzleflash.origin);
addentity(m_eMuzzleflash);
addentity(m_eMuzzleflashL);
}
setorigin(m_eViewModel, m_eViewModel.origin);
setorigin(m_eViewModelL, m_eViewModel.origin);
addentity(m_eViewModel);
addentity(m_eViewModelL);
}
/* view roll */
if (pl.movetype == MOVETYPE_WALK) {
Camera_StrafeRoll(view_angles);
Camera_RunBob(view_angles);
@ -238,11 +271,12 @@ View_PreDraw(void)
void
View_PostDraw(void)
{
entity m_eMuzzleflash = pSeat->m_eMuzzleflash;
// Take away alpha once it has drawn fully at least once
if (m_eMuzzleflash.alpha > 0.0f) {
m_eMuzzleflash.alpha -= (clframetime * 16);
if (pSeat->m_eMuzzleflash.alpha > 0.0f) {
pSeat->m_eMuzzleflash.alpha -= (clframetime * 16);
}
if (pSeat->m_eMuzzleflashL.alpha > 0.0f) {
pSeat->m_eMuzzleflashL.alpha -= (clframetime * 16);
}
ClientGame_PostDraw();
@ -259,8 +293,8 @@ onto the view model
void
View_PlayAnimation(int iSequence)
{
pSeat->m_eViewModel.frame = (float)iSequence;
player pl = (player)pSeat->m_ePlayer;
pSeat->m_eViewModel.frame =
pSeat->m_eViewModelL.frame = (float)iSequence;
}
int
@ -269,17 +303,16 @@ View_GetAnimation(void)
return pSeat->m_eViewModel.frame;
}
void
View_EnableViewmodel(void)
{
entity m_eViewModel = pSeat->m_eViewModel;
m_eViewModel.alpha = 1.0f;
pSeat->m_eViewModel.alpha =
pSeat->m_eViewModelL.alpha = 1.0f;
}
void
View_DisableViewmodel(void)
{
entity m_eViewModel = pSeat->m_eViewModel;
m_eViewModel.alpha = 0.0f;
}
pSeat->m_eViewModel.alpha =
pSeat->m_eViewModelL.alpha = 0.0f;
}

View file

@ -48,9 +48,13 @@ class prop_static:NSRenderableEntity
void
prop_static::Respawn(void)
{
super::Respawn();
SetModel(GetSpawnModel());
SetSolid(SOLID_CORPSE);
//super::Respawn();
solid = SOLID_NOT;
setmodel(this, GetSpawnModel());
mins = [0,0,0];
maxs = [0,0,0];
setsize(this, mins, maxs);
setorigin(this, GetSpawnOrigin());
}
void