weapon_crossbow: Experimental tests regarding client-side bolts, needs testing

This commit is contained in:
Marco Cawthorne 2019-03-15 11:27:57 +01:00
parent 915e401998
commit fccb01c704
15 changed files with 55 additions and 13 deletions

View file

@ -16,6 +16,6 @@ void Sky_Update(void)
void Sky_Set(string name)
{
g_skyname = name;
print(sprintf("[SKY] Set to %s", g_skyname));
dprint(sprintf("[SKY] Set to %s\n", g_skyname));
Sky_Update();
}

View file

@ -74,6 +74,7 @@ void Decals_PlaceSmall(vector pos);
void Decals_PlaceBig(vector pos);
void Weapons_MakeVectors(void);
void Weapons_ViewAnimation(int i);
vector Weapons_GetCameraPos(void);
void Weapons_ViewPunchAngle(vector add);
void Weapons_PlaySound(entity t, float ch, string s, float vol, float at);
int Weapons_IsPresent(player pl, int w);

View file

@ -24,15 +24,18 @@ enum
void w_crossbow_precache(void)
{
#ifdef CSQC
precache_model("models/v_crossbow.mdl");
precache_model("models/crossbow_bolt.mdl");
#else
precache_model("models/w_crossbow.mdl");
precache_model("models/p_crossbow.mdl");
precache_model("models/crossbow_bolt.mdl");
precache_sound("weapons/xbow_reload1.wav");
precache_sound("weapons/xbow_fire1.wav");
precache_sound("weapons/xbow_hit1.wav");
precache_sound("weapons/xbow_hitbod1.wav");
precache_sound("weapons/xbow_hitbod2.wav");
#endif
}
string w_crossbow_vmodel(void)
{
@ -51,27 +54,38 @@ string w_crossbow_deathmsg(void)
return "";
}
void w_crossbow_pickup(void)
{
#ifdef SSQC
player pl = (player)self;
pl.crossbow_mag = bound(0, pl.crossbow_mag + 5, 5);
#endif
}
void w_crossbow_draw(void)
{
player pl = (player)self;
#ifdef CSQC
if (1/* has clip*/) {
if (pl.a_ammo1) {
Weapons_ViewAnimation(CROSSBOW_DRAW1);
} else {
Weapons_ViewAnimation(CROSSBOW_DRAW2);
}
#else
player pl = (player)self;
Weapons_UpdateAmmo(pl, pl.crossbow_mag, pl.ammo_bolt, __NULL__);
#endif
}
void w_crossbow_holster(void)
{
if (1/* has clip*/) {
player pl = (player)self;
#ifdef CSQC
if (pl.a_ammo1) {
Weapons_ViewAnimation(CROSSBOW_HOLSTER1);
} else {
Weapons_ViewAnimation(CROSSBOW_HOLSTER2);
}
#endif
}
void w_crossbow_primary(void)
{
@ -80,7 +94,8 @@ void w_crossbow_primary(void)
return;
}
if (1/* has clip*/) {
#ifdef CSQC
if (pl.a_ammo1) {
Weapons_ViewAnimation(CROSSBOW_FIRE1);
Weapons_PlaySound(pl, CHAN_ITEM, "weapons/xbow_reload1.wav", 1, ATTN_NORM);
} else {
@ -88,9 +103,10 @@ void w_crossbow_primary(void)
}
Weapons_PlaySound(pl, CHAN_WEAPON, "weapons/xbow_fire1.wav", 1, ATTN_NORM);
#endif
#ifdef SSQC
static void Crossbolt_Touch(void) {
#ifdef SSQC
Effect_CreateSpark(self.origin, trace_plane_normal);
if (other.takedamage == DAMAGE_YES) {
@ -103,12 +119,23 @@ void w_crossbow_primary(void)
} else {
Weapons_PlaySound(self, CHAN_WEAPON, "weapons/xbow_hit1.wav", 1, ATTN_NORM);
}
#endif
remove(self);
}
makevectors(self.v_angle);
Weapons_MakeVectors();
entity bolt = spawn();
setorigin(bolt, self.origin + self.view_ofs + (v_forward * 16));
#ifdef SSQC
static float bolt_nosend(entity pvsent, float fl) {
return FALSE;
}
bolt.SendEntity = bolt_nosend;
bolt.SendFlags = 1;
#else
setmodel(bolt, "models/crossbow_bolt.mdl");
bolt.drawmask = MASK_ENGINE;
#endif
setorigin(bolt, Weapons_GetCameraPos() + (v_forward * 16));
bolt.owner = self;
bolt.velocity = v_forward * 2000;
bolt.movetype = MOVETYPE_FLY;
@ -118,7 +145,6 @@ void w_crossbow_primary(void)
bolt.avelocity[2] = 10;
bolt.touch = Crossbolt_Touch;
setsize(bolt, [0,0,0], [0,0,0]);
#endif
Weapons_ViewPunchAngle([-2,0,0]);
pl.w_attack_next = 0.75f;
@ -145,8 +171,11 @@ void w_crossbow_reload(void)
return;
}
#ifdef CSQC
Weapons_PlaySound(pl, CHAN_ITEM, "weapons/xbow_reload1.wav", 1, ATTN_NORM);
Weapons_ViewAnimation(CROSSBOW_RELOAD);
#endif
pl.w_attack_next = 4.5f;
pl.w_idle_next = 10.0f;
}
@ -157,21 +186,23 @@ void w_crossbow_release(void)
return;
}
#ifdef CSQC
if (random() < 0.75) {
if (1/* has clip*/) {
if (pl.a_ammo1) {
Weapons_ViewAnimation(CROSSBOW_IDLE1);
} else {
Weapons_ViewAnimation(CROSSBOW_IDLE2);
}
pl.w_idle_next = 10.0f;
} else {
if (1/* has clip*/) {
if (pl.a_ammo1) {
Weapons_ViewAnimation(CROSSBOW_FIDGET1);
} else {
Weapons_ViewAnimation(CROSSBOW_FIDGET2);
}
pl.w_idle_next = 3.0f;
}
#endif
}
void w_crossbow_crosshair(void)
{
@ -208,7 +239,7 @@ weapon_t w_crossbow =
w_crossbow_release,
w_crossbow_crosshair,
w_crossbow_precache,
__NULL__,
w_crossbow_pickup,
w_crossbow_vmodel,
w_crossbow_wmodel,
w_crossbow_pmodel,

View file

@ -141,6 +141,15 @@ void Weapons_MakeVectors(void)
#endif
}
vector Weapons_GetCameraPos(void)
{
#ifdef SSQC
return self.origin + self.view_ofs;
#else
return pSeat->vPlayerOrigin + self.view_ofs;
#endif
}
void Weapons_ViewAnimation(int i)
{
#ifdef CSQC

View file

@ -70,6 +70,7 @@ void Weapons_DrawCrosshair(void);
void Decals_PlaceSmall(vector pos);
void Decals_PlaceBig(vector pos);
void Weapons_MakeVectors(void);
vector Weapons_GetCameraPos(void);
void Weapons_ViewAnimation(int i);
void Weapons_ViewPunchAngle(vector add);
void Weapons_PlaySound(entity t, float ch, string s, float vol, float at);

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.