From 56567d7e30e8b0b3c7b716a16b894d24db3698b0 Mon Sep 17 00:00:00 2001 From: cypress Date: Fri, 15 Sep 2023 09:43:04 -0400 Subject: [PATCH] SERVER: Add barebones Ballistic Knife definitions --- source/server/weapons/weapon_core.qc | 21 ++-- source/shared/defs/custom.qc | 2 +- source/shared/weapon_defines.qc | 151 +++++++++++++++++++++++++++ 3 files changed, 159 insertions(+), 15 deletions(-) diff --git a/source/server/weapons/weapon_core.qc b/source/server/weapons/weapon_core.qc index 1654184..8c8368b 100644 --- a/source/server/weapons/weapon_core.qc +++ b/source/server/weapons/weapon_core.qc @@ -69,7 +69,7 @@ void() W_PlayTakeOut = void() W_AimIn = { - if (self.weapon == W_TESLA || self.weapon == W_DG3) + if (WepDef_DoesNotADS(self.weapon)) return; if (IsDualWeapon(self.weapon) || @@ -77,7 +77,6 @@ void() W_AimIn = self.knife_delay > time || self.sprinting || self.new_anim_stop || - self.weapon == W_BK || self.semiknife == true) { return; } @@ -785,7 +784,7 @@ void() LungeKnifeHit = makevectors (self.v_angle); source = self.origin + self.view_ofs; - if (self.weapon == W_BK) + if (self.weapon == W_BK || self.weapon == W_KRAUS) traceline (source, source + v_forward*80*1.2, 0, self); // naievil -- added some extra length else traceline (source, source + v_forward*74*1.2, 0, self); // naievil -- ^^ @@ -806,14 +805,8 @@ void() LungeKnifeHit = } sound (self, CHAN_WEAPON, "sounds/weapons/knife/knife_hitbod.wav", 1, ATTN_NORM); - if (self.bowie && self.weapon == W_BK) - f_damage = 1200; - else if (self.bowie) - f_damage = 1000; - else if (self.weapon == W_BK) - f_damage = 500; - else - f_damage = 150; + // Calculate melee damage + f_damage = WepDefp_CalculateMeleeDamage(self.weapon, self.bowie); if (trace_ent.classname == "ai_zombie_head") { @@ -1271,7 +1264,7 @@ void () W_Knife = sound (self, CHAN_WEAPON, "sounds/weapons/knife/knife.wav", 1, ATTN_NORM); makevectors (self.v_angle); source = self.origin + self.view_ofs; - if (self.weapon == W_BK) + if (self.weapon == W_BK || self.weapon == W_KRAUS) traceline (source, source + v_forward*80*1.2, 0, self); else traceline (source, source + v_forward*74*1.2, 0, self); @@ -1306,7 +1299,7 @@ void () W_Knife = if (r > 40 && hit)//lunge { - if (self.weapon == W_BK) + if (self.weapon == W_BK || self.weapon == W_KRAUS) { Set_W_Frame (14, 24, 1.4, 0, KNIFE, SUB_Null, "models/weapons/bk/v_bk.mdl", false, S_RIGHT); self.fire_delay = time + 1.5; @@ -1331,7 +1324,7 @@ void () W_Knife = } else { - if (self.weapon == W_BK)//slash + if (self.weapon == W_BK || self.weapon == W_KRAUS)//slash { Set_W_Frame (8, 13, 0, 0.4, KNIFE, SUB_Null, "models/weapons/bk/v_bk.mdl", false, S_RIGHT); self.fire_delay = time + 0.5; diff --git a/source/shared/defs/custom.qc b/source/shared/defs/custom.qc index bd30e9f..4c43aa2 100644 --- a/source/shared/defs/custom.qc +++ b/source/shared/defs/custom.qc @@ -125,7 +125,7 @@ const float EVENT_SONGPLAY = 41; #define W_LONGINUS 50 //panzer #define W_PENETRATOR 51 //ptrs #define W_WIDOW 52 //bar -//#define W_KRAUS 53 //ballistic +#define W_KRAUS 53 //ballistic #define W_MP5K 54 #define W_M14 55 diff --git a/source/shared/weapon_defines.qc b/source/shared/weapon_defines.qc index 348b18e..b76a692 100644 --- a/source/shared/weapon_defines.qc +++ b/source/shared/weapon_defines.qc @@ -52,6 +52,8 @@ string(float wep) GetWeaponName = return "The Widow Maker"; case W_BK: return "Ballistic Knife"; + case W_KRAUS: + return "The Krauss Refibrillator"; case W_BROWNING: return "Browning M1919"; case W_ACCELERATOR: @@ -560,6 +562,16 @@ float(float wep, float type) getWeaponMultiplier = case LIMBS_X: return 1; } break; + case W_BK: + case W_KRAUS: + switch (type) + { + case HEAD_X: return 2; + case UPPER_TORSO_X: return 1; + case LOWER_TORSO_X: return 1; + case LIMBS_X: return 1; + } + break; } return 1; } @@ -669,6 +681,9 @@ float(float wep) getWeaponMag = return 3; case W_DG3: return 6; + case W_BK: + case W_KRAUS: + return 1; } return 0; } @@ -778,6 +793,10 @@ float(float wep) getWeaponAmmo = return 15; case W_DG3: return 32; + case W_BK: + return 4; + case W_KRAUS: + return 9; } return 0; } @@ -879,6 +898,10 @@ float(float wep) getWeaponDamage = return 100; case W_SAMURAI: return 200; + case W_BK: + return 500; + case W_KRAUS: + return 1000; } return 0; @@ -1410,6 +1433,17 @@ float(float wep, float delaytype) getWeaponDelay = else if (delaytype == TAKEOUT) return 0.9; break; + case W_BK: + case W_KRAUS: + if (delaytype == RELOAD) + return 0.75; + else if (delaytype == FIRE) + return 0.8; + else if (delaytype == PUTOUT) + return 0.4; + else if (delaytype == TAKEOUT) + return 0.4; + break; } return 0; @@ -1453,6 +1487,8 @@ float GetWeaponWalkSpeed(float perks, float weapon) case W_DG3: case W_MP5K: case W_KOLLIDER: + case W_BK: + case W_KRAUS: speed_multiplier = SPEED_MULTIPLIER_STANDARD; break; case W_357: @@ -2565,6 +2601,42 @@ float(float wep, float frametype, optional float z) GetFrame = return 16; } break; + case W_BK: + case W_KRAUS: + switch (frametype) + { + case FIRE_START: + return 28; + case FIRE_END: + return 32; + case RELOAD_START: + return 33; + case RELOAD_END: + return 46; + case SPRINT_IN_START: + return 51; + case SPRINT_IN_END: + return 53; + case SPRINT_START: + return 54; + case SPRINT_END: + return 61; + case SPRINT_OUT_START: + return 62; + case SPRINT_OUT_END: + return 64; + case TAKE_OUT_START: + return 4; + case TAKE_OUT_END: + return 6; + case PUT_OUT_START: + return 47; + case PUT_OUT_END: + return 50; + case RELOAD_CANCEL: + return 41; + } + break; } return 0; @@ -2755,6 +2827,7 @@ string(float wep, float gorvmodel) GetWeaponModel = else return ("models/weapons/tesla/v_tesla.mdl"); case W_BK: + case W_KRAUS: if (gorvmodel) return ("models/weapons/bk/g_bk.mdl"); else @@ -2864,6 +2937,9 @@ string(float wep) GetWeaponSound = case W_TESLA: case W_DG3: return "sounds/weapons/tesla/shoot.wav"; + case W_BK: + case W_KRAUS: + return "sounds/weapons/ballknife/shoot.wav"; } return ""; @@ -2922,6 +2998,7 @@ float(float wep) IsPapWeapon = { case W_DG3: case W_PULVERIZER: case W_FIW: + case W_KRAUS: return 1; default: return 0; @@ -3007,6 +3084,8 @@ float(float wep) EqualNonPapWeapon = return W_TESLA; case W_FIW: return W_M2; + case W_KRAUS: + return W_BK; default: return wep; } @@ -3069,6 +3148,8 @@ float(float wep) EqualPapWeapon = return W_M14; case W_M2: return W_FIW; + case W_BK: + return W_KRAUS; default: return wep; } @@ -3404,6 +3485,12 @@ void (float wep, float anim_style, float dualwep, float curweaponframe) PlayWeap sound (self ,5, "sounds/weapons/tesla/clipoff.wav", 1, ATTN_NORM); else if (curweaponframe == 51) sound (self ,5, "sounds/weapons/tesla/switchon.wav", 1, ATTN_NORM); + break; + case W_BK: + case W_KRAUS: + if (curweaponframe == 41) + sound(self, 5, "sounds/weapons/ballknife/insert.wav", 1, ATTN_NORM); + break; } } @@ -3610,6 +3697,11 @@ void(float weptype) precache_extra = precache_sound("sounds/weapons/tesla/switchon.wav"); precache_sound("sounds/weapons/tesla/shoot.wav"); break; + case W_BK: + case W_KRAUS: + precache_sound("sounds/weapons/ballknife/shoot.wav"); + precache_sound("sounds/weapons/ballknife/insert.wav"); + break; case W_GRENADE: precache_model("models/props/grenade_bag.mdl"); break; @@ -3721,6 +3813,9 @@ float(float wep) getWeaponRecoilReturn = case W_TESLA: case W_DG3: return 1813; + case W_BK: + case W_KRAUS: + return 460; } return 0; } @@ -3735,6 +3830,8 @@ float(float weapon, float stance) CrossHairWeapon = case W_BIATCH: case W_357: case W_KILLU: + case W_BK: + case W_KRAUS: crosshair_spread = 22; break; case W_PTRS: @@ -3851,6 +3948,8 @@ float(float weapon, float stance) CrossHairMaxSpread = case W_PORTER: case W_TYPE: case W_SAMURAI: + case W_BK: + case W_KRAUS: crosshair_spread = 48; break; case W_PTRS: @@ -4143,6 +4242,10 @@ vector(float wep) GetWeaponRecoil = case W_DG3: kick_change = '74 74 85'; break; + case W_BK: + case W_KRAUS: + kick_change = '3 3 3'; + break; } total_recoil = kick_change_x + kick_change_y + kick_change_z; @@ -4409,6 +4512,54 @@ float(float wep) GetWeaponZoomAmount = return 0; } +// +// WepDef_CalculateMeleeDamage(weapon, has_bowie) +// Returns the amount of melee damage the Player can +// do given their weapon and Bowie Knife status. +// +float(float weapon, float has_bowie) WepDefp_CalculateMeleeDamage = +{ + switch(weapon) { + case W_BK: + if (has_bowie) + return 1000; + return 500; + break; + case W_KRAUS: + if (has_bowie) + return 1500; + return 1000; + break; + default: + break; + } + + if (has_bowie) + return 1000; + + return 150; +} + +// +// WepDef_DoesNotADS(weapon) +// Returns true if the weapon should not be allowed +// to aim down the sight. +// +float(float weapon) WepDef_DoesNotADS = +{ + switch(weapon) { + case W_TESLA: + case W_DG3: + case W_BK: + case W_KRAUS: + return true; + default: + return false; + } + + return false; +} + // // WepDef_OnlyOneAllowed(weapon) // Returns true if server is only allowed to distribute