From 2f1167a74247d7ae37fb126f405a091a80262ad1 Mon Sep 17 00:00:00 2001 From: lordhavoc Date: Fri, 28 Jan 2005 14:23:53 +0000 Subject: [PATCH] crylink projectiles redesigned (it now resembles a flak cannon) electro rebalanced to be a bit like the q1 rl/gl tracer model added to fireBullet (optional per call) adjusted uzi/shotgun shoot origin and casing origin to be more correct some other tweaks added default.cfg for easier maintenance (since it has to be updated so often) default.cfg g_balance_* cvars are now set instead of seta, so they aren't saved to config (was annoying to maintain) git-svn-id: svn://svn.icculus.org/nexuiz/trunk@274 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- qcsrc/default.cfg | 330 ++++++++++++++++++++++++++++++++++++++++ qcsrc/gamec/w_common.c | 22 ++- qcsrc/gamec/w_crylink.c | 60 ++++++-- qcsrc/gamec/w_electro.c | 31 ++-- qcsrc/gamec/w_laser.c | 6 +- qcsrc/gamec/w_shotgun.c | 54 +++---- qcsrc/gamec/w_uzi.c | 30 ++-- 7 files changed, 453 insertions(+), 80 deletions(-) create mode 100755 qcsrc/default.cfg diff --git a/qcsrc/default.cfg b/qcsrc/default.cfg new file mode 100755 index 000000000..28e69b544 --- /dev/null +++ b/qcsrc/default.cfg @@ -0,0 +1,330 @@ +bind TAB "+showscores" +bind ENTER "+jump" +bind ESCAPE "togglemenu" +bind SPACE "+jump" +bind ' "" +bind , "" +bind - "sizedown" +bind 0 "impulse 0" +bind 1 "impulse 1" +bind 2 "impulse 2" +bind 3 "impulse 3" +bind 4 "impulse 4" +bind 5 "impulse 5" +bind 6 "impulse 6" +bind 7 "impulse 7" +bind 8 "impulse 8" +bind 9 "impulse 9" +bind = "sizeup" +bind [ "" +bind \ "slowmo 0" +bind ] "" +bind _ "sizedown" +bind ` "toggleconsole" +bind a "+moveleft" +bind b "" +bind c "" +bind d "+moveright" +bind e "" +bind f "" +bind g "" +bind h "" +bind i "" +bind j "" +bind k "" +bind l "" +bind m "" +bind n "" +bind o "" +bind p "" +bind q "" +bind r "" +bind s "+back" +bind t "messagemode" +bind u "" +bind v "" +bind w "+forward" +bind x "" +bind y "" +bind z "" +bind ~ "toggleconsole" +bind UPARROW "+forward" +bind DOWNARROW "+back" +bind LEFTARROW "+left" +bind RIGHTARROW "+right" +bind ALT "+strafe" +bind CTRL "+attack" +bind SHIFT "+crouch" +bind F1 "help" +bind F2 "menu_save" +bind F3 "menu_load" +bind F4 "menu_options" +bind F5 "menu_multiplayer" +bind F6 "echo Quicksaving...; wait; save quick" +bind F9 "echo Quickloading...; wait; load quick" +bind F10 "quit" +bind F11 "screenshot" +bind F12 "screenshot" +bind INS "+klook" +bind DEL "+lookdown" +bind PGDN "+lookup" +bind END "centerview" +bind PAUSE "pause" +bind CAPSLOCK "impulse 7" +bind MOUSE1 "+attack" +bind MOUSE2 "+button3" +bind MOUSE3 "+button4" +bind MWHEELUP "impulse 10" +bind MWHEELDOWN "impulse 12" +scr_screenshot_jpeg_quality "0.9" +scr_screenshot_jpeg "1" +vid_pixelaspect "1" +vid_conheight "768" +vid_conwidth "1024" +showpause "1" +showturtle "0" +showram "1" +scr_conforcewhiledisconnected "0" +scr_conbrightness "0.2" +scr_conalpha "0.7" +scr_conspeed "900" +viewsize "110" +fov "90" +cl_decals_fadetime "20" +cl_decals_time "0" +cl_decals "1" +cl_particles_bubbles "1" +cl_particles_sparks "1" +cl_particles_smoke_alphafade "0.55" +cl_particles_smoke_alpha "0.5" +cl_particles_smoke "1" +cl_particles_bulletimpacts "1" +cl_particles_explosions_shell "0" +cl_particles_explosions_sparks "1" +cl_particles_explosions_smokes "0" +cl_particles_explosions_bubbles "1" +cl_particles_blood_bloodhack "1" +cl_particles_blood_alpha "1" +cl_particles_blood "1" +cl_particles_bloodshowers "1" +cl_particles_size "1" +cl_particles_quality "1" +cl_particles "1" +cl_noplayershadow "0" +cl_beams_lightatend "0" +cl_beams_relative "1" +cl_beams_polygons "1" +cl_stainmapsclearonload "0" +cl_stainmaps "0" +cl_explosions_lifetime "0.5" +cl_explosions_size_end "128" +cl_explosions_size_start "16" +cl_explosions_alpha_end "0" +cl_explosions_alpha_start "1.5" +m_side "0.8" +m_forward "1" +m_yaw "0.022" +m_pitch "0.022" +freelook "1" +sensitivity "6" +lookstrafe "0" +lookspring "0" +cl_anglespeedkey "1.5" +cl_pitchspeed "150" +cl_yawspeed "140" +cl_movespeedkey "2.0" +cl_sidespeed "480" +cl_backspeed "480" +cl_forwardspeed "480" +cl_upspeed "400" +snd_swapstereo "0" +_snd_mixahead "0.1" +snd_streaming "1" +snd_staticvolume "1" +bgmvolume "1" +volume "1" +r_lightningbeam_qmbtexture "0" +r_lightningbeam_color_blue "1" +r_lightningbeam_color_green "1" +r_lightningbeam_color_red "1" +r_lightningbeam_repeatdistance "1024" +r_lightningbeam_scroll "5" +r_lightningbeam_thickness "4" +sbar_alpha_fg "1" +sbar_alpha_bg "0.4" +showdate_format "%Y-%m-%d" +showdate "0" +showtime_format "%H:%M:%S" +showtime "0" +showfps "0" +r_explosionclip "1" +gl_flashblend "1" +r_coronas "1" +r_modellights "8" +crosshair_static "1" +crosshair_size "0.8" +crosshair_flashrange "0.1" +crosshair_flashspeed "2" +crosshair_alpha "1" +crosshair_brightness "1" +r_detailtextures "1" +r_skyscroll2 "2" +r_skyscroll1 "1" +r_sky "1" +r_editlights_rtlightscolorscale "2" +r_editlights_rtlightssizescale "0.7" +r_editlights_quakelightsizescale "0.8" +r_shadow_realtime_world_shadows "0" +r_shadow_realtime_world_lightmaps "0" +r_shadow_realtime_world_dlightshadows "0" +r_shadow_realtime_dlight_shadows "0" +r_shadow_realtime_dlight "1" +r_shadow_gloss "1" +r_watershader "1" +r_waterscroll "1" +r_lerpmodels "1" +r_lerpsprites "1" +r_dynamic "1" +r_wateralpha "1" +r_fullbrights "0" +r_meshqueue_entries "16" +scr_zoomwindow_fov "20" +scr_zoomwindow_viewsizey "20" +scr_zoomwindow_viewsizex "20" +scr_zoomwindow "0" +gl_dither "1" +gl_polyblend "1" +r_waterwarp "1" +gl_texture_anisotropy "1" +r_precachetextures "1" +r_lerpimages "1" +gl_picmip "0" +gl_max_size "2048" +gl_max_scrapsize "256" +joystick "0" +m_filter "0" +gl_combine "1" +vid_mouse "1" +vid_vsync "1" +vid_bitsperpixel "32" +vid_fullscreen "1" +v_hwgamma "1" +v_color_white_b "1" +v_color_white_g "1" +v_color_white_r "1" +v_color_grey_b "0.5" +v_color_grey_g "0.5" +v_color_grey_r "0.5" +v_color_black_b "0" +v_color_black_g "0" +v_color_black_r "0" +v_color_enable "0" +v_contrast "1" +v_brightness "0" +v_gamma "1.125000" +sv_maxrate "10000" +sv_aim "2" +sv_master4 "" +sv_master3 "" +sv_master2 "" +sv_master1 "" +sv_heartbeatperiod "180" +hostname "Deathmatch Game" +r_mipskins "0" +r_mipsprites "1" +r_miplightmaps "0" +saved4 "0" +saved3 "127.031" +saved2 "0" +saved1 "1" +savedgamecfg "0" +con_notify "4" +con_notifytime "3" +timeformat "[%b %e %X] " +timestamps "0" +sys_ticrate "0.05" +sv_echobprint "1" +host_maxfps "1000" +host_minfps "10" +_cl_rate "10000" +_cl_color "0" +_cl_name "Player" +chase_active "0" +chase_up "20" +chase_back "100" +cl_stairsmoothspeed "160" +crosshair "5" +sys_usetimegettime "1" +sv_maxvelocity "100000" +sv_maxspeed "400" +sv_accelerate "5.5" +sv_friction "5" +r_shadow_realtime_world "1" +r_shadow_realtime_world_shadows "0" +r_shadow_realtime_world_lightmaps "1" +r_shadow_bumpscale_basetexture "5" +r_shadow_gloss "1.4" +vid_fullscreen "1" +in_pitch_max "90" +in_pitch_min "-90" +seta "cl_weapon_bobintensity" "1" +seta "cl_weapon_q1pitching" "1" +vid_conheight "600" +vid_conwidth "800" +developer "0" +r_bloom "1" +_cl_playerskin "textures/fshock" +_cl_playermodel "models/player/fshock.zym" +r_shadow_realtime_world_shadows "1" +vid_height "768" +vid_width "1024" +sv_stepheight "34" + +// weapon settings: +set g_balance_laser_damage 15 +set g_balance_laser_edgedamage 15 +set g_balance_laser_force 200 +set g_balance_laser_radius 50 +set g_balance_laser_speed 1000 +set g_balance_shotgun_damage 3.5 +set g_balance_shotgun_bullets 10 +set g_balance_uzi_damage 4 +set g_balance_uzi_spread 0.1 +set g_balance_uzi_spread2 0.01 +set g_balance_uzi_refire 0.05 +set g_balance_grenadelauncher_damage 65 +set g_balance_grenadelauncher_edgedamage 35 +set g_balance_grenadelauncher_force 400 +set g_balance_grenadelauncher_radius 140 +set g_balance_grenadelauncher_speed 2000 +set g_balance_grenadelauncher_speed_up 200 +set g_balance_grenadelauncher_speed2 900 +set g_balance_grenadelauncher_speed2_up 200 +set g_balance_electro_damage 90 +set g_balance_electro_edgedamage 45 +set g_balance_electro_force 200 +set g_balance_electro_radius 100 +set g_balance_electro_refire 1 +set g_balance_electro_speed 2000 +set g_balance_electro_ballspeed 900 +set g_balance_electro_ballspeed_up 200 +set g_balance_crylink_damage 20 +set g_balance_crylink_edgedamage 0 +set g_balance_crylink_force 55 +set g_balance_crylink_radius 3 +set g_balance_crylink_speed 1800 +set g_balance_crylink_spread 0.15 +set g_balance_crylink_refire 0.4 +set g_balance_nex_damage 200 +set g_balance_hagar_damage 40 +set g_balance_hagar_edgedamage 15 +set g_balance_hagar_force 100 +set g_balance_hagar_radius 70 +set g_balance_hagar_speed 3000 +set g_balance_hagar_speed2 1400 +set g_balance_hagar_speed2_up 100 +set g_balance_rocketlauncher_damage 130 +set g_balance_rocketlauncher_edgedamage 50 +set g_balance_rocketlauncher_force 600 +set g_balance_rocketlauncher_radius 170 +set g_balance_rocketlauncher_speed 850 diff --git a/qcsrc/gamec/w_common.c b/qcsrc/gamec/w_common.c index 5aa1903a9..18b4e2ea6 100644 --- a/qcsrc/gamec/w_common.c +++ b/qcsrc/gamec/w_common.c @@ -500,16 +500,32 @@ void FireRailgunBullet (vector start, vector end, float bdamage, float deathtype //remove(explosion); } - -void fireBullet (vector start, vector dir, float spread, float damage, float dtype) +void fireBullet (vector start, vector dir, float spread, float damage, float dtype, float tracer) { vector end; float r; + local entity e; // use traceline_hitcorpse to make sure it can hit gibs and corpses too - end = start + (dir + randomvec() * spread) * 1048576; + dir = dir + randomvec() * spread; + end = start + dir * 4096; traceline_hitcorpse (self, start, end, FALSE, self); + if (tracer) + { + e = spawn(); + e.owner = self; + e.movetype = MOVETYPE_FLY; + e.solid = SOLID_NOT; + e.think = SUB_Remove; + e.nextthink = time + vlen(trace_endpos - start) / 6000; + e.velocity = dir * 6000; + e.angles = vectoangles(e.velocity); + setmodel (e, "models/elaser.mdl"); + setsize (e, '0 0 0', '0 0 0'); + setorigin (e, start); + } + // FIXME - causes excessive 'tinking'. Hopefully remove "tink1.wav" from the ricochets with csqc if ((trace_fraction != 1.0) && (pointcontents (trace_endpos) != CONTENT_SKY)) { diff --git a/qcsrc/gamec/w_crylink.c b/qcsrc/gamec/w_crylink.c index 4a8237dc7..f86178954 100644 --- a/qcsrc/gamec/w_crylink.c +++ b/qcsrc/gamec/w_crylink.c @@ -4,6 +4,8 @@ void() crylink_fire2_01; void() crylink_deselect_01; void() crylink_select_01; +.float gravity; + float() crylink_check = { if (self.ammo_cells >= 1) @@ -37,18 +39,25 @@ void W_Crylink_Touch (void) self.event_damage = nullfunction; //te_smallflash(self.origin); RadiusDamage (self, self.owner, cvar("g_balance_crylink_damage"), cvar("g_balance_crylink_edgedamage"), cvar("g_balance_crylink_radius"), world, cvar("g_balance_crylink_force"), IT_CRYLINK); - remove (self); + self.touch = nullfunction; + self.norespawn = TRUE; + self.gravity = 1; + self.glow_size = 0; + self.glow_color = 0; + self.think = SUB_Remove; + SUB_SetFade(self, time); + //remove (self); } void W_Crylink_Attack (void) //(float postion) { float counter; - sound (self, CHAN_WEAPON, "weapons/shotgun_fire.wav", 1, ATTN_NORM); - self.attack_finished = time + 0.7; + sound (self, CHAN_WEAPON, "weapons/crylink.wav", 1, ATTN_NORM); + self.attack_finished = time + cvar("g_balance_crylink_refire"); self.ammo_cells = self.ammo_cells - 1; - while (counter < 5) + while (counter < 7) { entity proj; @@ -57,16 +66,15 @@ void W_Crylink_Attack (void) //(float postion) proj.owner = self; proj.classname = "spike"; - proj.movetype = MOVETYPE_FLY; + proj.movetype = MOVETYPE_BOUNCE; proj.solid = SOLID_BBOX; + proj.gravity = 0.001; setmodel (proj, "models/plasma.mdl"); setsize (proj, '0 0 0', '0 0 0'); setorigin (proj, self.origin + self.view_ofs + v_forward * 10 + v_right * 5 + v_up * -14); - proj.velocity = v_forward * cvar("g_balance_crylink_speed"); - proj.velocity = proj.velocity + v_right * ( crandom() * 50 ); - proj.velocity = proj.velocity + v_up * ( crandom() * 50 ); + proj.velocity = (v_forward + (counter / 7) * randomvec() * cvar("g_balance_crylink_spread")) * cvar("g_balance_crylink_speed"); proj.touch = W_Crylink_Touch; proj.think = SUB_Remove; proj.nextthink = time + 9; @@ -75,14 +83,48 @@ void W_Crylink_Attack (void) //(float postion) proj.glow_size = 20; proj.effects = proj.effects | EF_ADDITIVE; + proj.effects = proj.effects | EF_LOWPRECISION; counter = counter + 1; } } void W_Crylink_Attack2 (void) { + float counter; + + sound (self, CHAN_WEAPON, "weapons/crylink.wav", 1, ATTN_NORM); + self.attack_finished = time + cvar("g_balance_crylink_refire"); + self.ammo_cells = self.ammo_cells - 1; + + while (counter < 5) + { + entity proj; + + makevectors(self.v_angle); + proj = spawn (); + proj.owner = self; + proj.classname = "spike"; + + proj.movetype = MOVETYPE_BOUNCE; + proj.solid = SOLID_BBOX; + proj.gravity = 0.001; + + setmodel (proj, "models/plasma.mdl"); + setsize (proj, '0 0 0', '0 0 0'); + setorigin (proj, self.origin + self.view_ofs + v_forward * 10 + v_right * 5 + v_up * -14); + proj.velocity = (v_forward + (counter / 2 - 1) * v_right * cvar("g_balance_crylink_spread")) * cvar("g_balance_crylink_speed"); + proj.touch = W_Crylink_Touch; + proj.think = SUB_Remove; + proj.nextthink = time + 9; + proj.glow_color = 10; + proj.glow_size = 20; + + proj.effects = proj.effects | EF_ADDITIVE; + proj.effects = proj.effects | EF_LOWPRECISION; + counter = counter + 1; + } } @@ -97,7 +139,7 @@ void() crylink_fire1_01 = }; void() crylink_fire2_01 = { - weapon_doattack(crylink_check, crylink_check, W_Crylink_Attack); + weapon_doattack(crylink_check, crylink_check, W_Crylink_Attack2); weapon_thinkf(WFRAME_FIRE1, 0.15, crylink_ready_01); }; void() crylink_fire3_01 = diff --git a/qcsrc/gamec/w_electro.c b/qcsrc/gamec/w_electro.c index 8ca10d059..0981f599c 100644 --- a/qcsrc/gamec/w_electro.c +++ b/qcsrc/gamec/w_electro.c @@ -4,14 +4,7 @@ void() electro_fire2_01; void() electro_deselect_01; void() electro_select_01; -float() electro_check1 = -{ - if (self.ammo_cells > 1) - return TRUE; - return FALSE; -}; - -float() electro_check2 = +float() electro_check = { if (self.ammo_cells > 2) return TRUE; @@ -23,9 +16,9 @@ void(float req) w_electro = if (req == WR_IDLE) electro_ready_01(); else if (req == WR_FIRE1) - weapon_prepareattack(electro_check1, electro_check1, electro_fire1_01, 0.4); + weapon_prepareattack(electro_check, electro_check, electro_fire1_01, 0.4); else if (req == WR_FIRE2) - weapon_prepareattack(electro_check1, electro_check2, electro_fire2_01, 2); + weapon_prepareattack(electro_check, electro_check, electro_fire2_01, 2); else if (req == WR_RAISE) electro_select_01(); else if (req == WR_UPDATECOUNTS) @@ -35,7 +28,7 @@ void(float req) w_electro = else if (req == WR_SETUP) weapon_setup(WEP_ELECTRO, "w_electro.zym", IT_CELLS); else if (req == WR_CHECKAMMO) - weapon_hasammo = electro_check1(); + weapon_hasammo = electro_check(); }; @@ -54,7 +47,7 @@ void W_Plasma_Explode (entity ignore) te_customflash (self.origin, 5000, 10, '0 0 1'); self.event_damage = nullfunction; - RadiusDamage (self, self.owner, cvar("g_balance_electro_grenade_damage"), cvar("g_balance_electro_grenade_edgedamage"), cvar("g_balance_electro_grenade_radius"), world, cvar("g_balance_electro_grenade_force"), IT_ELECTRO); + RadiusDamage (self, self.owner, cvar("g_balance_electro_damage"), cvar("g_balance_electro_edgedamage"), cvar("g_balance_electro_radius"), world, cvar("g_balance_electro_force"), IT_ELECTRO); sound (self, CHAN_IMPACT, "weapons/plasmahit.wav", 1, ATTN_NORM); remove (self); @@ -117,7 +110,7 @@ void() W_Electro_Attack if (postion == 2) setorigin (proj, self.origin + self.view_ofs + v_forward * 15 + v_right * 15 + v_up * -14); - proj.velocity = v_forward * cvar("g_balance_electro_shot_speed"); + proj.velocity = v_forward * cvar("g_balance_electro_speed"); proj.touch = W_Plasma_Explode; proj.think = W_Plasma_Think; proj.nextthink = time + 0.1; @@ -126,8 +119,8 @@ void() W_Electro_Attack proj.effects = proj.effects | EF_ADDITIVE; - self.attack_finished = time + 0.4; - self.ammo_cells = self.ammo_cells - 1; + self.attack_finished = time + cvar("g_balance_electro_refire"); + self.ammo_cells = self.ammo_cells - 2; } void() W_Electro_Attack2 @@ -168,7 +161,7 @@ void() W_Electro_Attack2 if (postion == 2) setorigin (Plasma, self.origin + self.view_ofs + v_forward * 15 + v_right * 15 + v_up * -14); - Plasma.velocity = v_forward * cvar("g_balance_electro_grenade_speed") + v_up * cvar("g_balance_electro_grenade_speed_up"); + Plasma.velocity = v_forward * cvar("g_balance_electro_ballspeed") + v_up * cvar("g_balance_electro_ballspeed_up"); Plasma.angles = vectoangles (Plasma.velocity); Plasma.avelocity_y = random () * -500 - 500; Plasma.avelocity_x = random () * -500 - 500; @@ -180,7 +173,7 @@ void() W_Electro_Attack2 Plasma.effects = Plasma.effects | EF_ADDITIVE; - self.attack_finished = time + 1; + self.attack_finished = time + cvar("g_balance_electro_refire"); self.ammo_cells = self.ammo_cells - 2; } @@ -192,7 +185,7 @@ void() electro_select_01 = {weapon_thinkf(-1, PLAYER_WEAPONSELECTION_DELAY, w_re void() electro_deselect_01 = {weapon_thinkf(-1, PLAYER_WEAPONSELECTION_DELAY, w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);}; void() electro_fire1_01 = { - weapon_doattack(electro_check1, electro_check1, W_Electro_Attack); + weapon_doattack(electro_check, electro_check, W_Electro_Attack); self.electrocount = self.electrocount + 1; if (self.electrocount == 3) @@ -202,7 +195,7 @@ void() electro_fire1_01 = }; void() electro_fire2_01 = { - weapon_doattack(electro_check1, electro_check2, W_Electro_Attack2); + weapon_doattack(electro_check, electro_check, W_Electro_Attack2); self.electrocount = self.electrocount + 1; if (self.electrocount == 3) diff --git a/qcsrc/gamec/w_laser.c b/qcsrc/gamec/w_laser.c index e245ce44f..8c02e372e 100644 --- a/qcsrc/gamec/w_laser.c +++ b/qcsrc/gamec/w_laser.c @@ -13,7 +13,7 @@ void(float req) w_laser = else if (req == WR_FIRE1) weapon_prepareattack(laser_check, laser_check, laser_fire1_01, 0.4); else if (req == WR_FIRE2) - weapon_prepareattack(laser_check, laser_check, laser_fire2_01, 0.3); + weapon_prepareattack(laser_check, laser_check, laser_fire2_01, 0.7); else if (req == WR_RAISE) laser_select_01(); else if (req == WR_UPDATECOUNTS) @@ -100,6 +100,8 @@ void W_Laser_Attack (void) void W_Laser_Attack2 (void) { + makevectors(self.v_angle); + self.velocity = self.velocity - v_forward * 900; /* weapon_shotdir(18, 5, -12); // self.origin + self.view_ofs + v_forward * 18 + v_right * 5 + v_up * -12); @@ -124,6 +126,6 @@ void() laser_fire1_01 = void() laser_fire2_01 = { weapon_doattack(laser_check, laser_check, W_Laser_Attack2); - weapon_thinkf(WFRAME_FIRE1, 0.2, laser_ready_01); + weapon_thinkf(WFRAME_FIRE1, 0.3, laser_ready_01); }; diff --git a/qcsrc/gamec/w_shotgun.c b/qcsrc/gamec/w_shotgun.c index 108ec0d83..8a868dbf4 100644 --- a/qcsrc/gamec/w_shotgun.c +++ b/qcsrc/gamec/w_shotgun.c @@ -33,28 +33,7 @@ void(float req) w_shotgun = void W_Shotgun_Attack (void) { - float sc; - float bullets; - - makevectors(self.v_angle); - sound (self, CHAN_WEAPON, "weapons/shotgun_fire.wav", 1, ATTN_NORM); - bullets = 10; - - for (sc = bullets; sc > 0; sc = sc - 1) - fireBullet (self.origin + self.view_ofs, v_forward, 0.1, 3.5, IT_SHOTGUN); - self.ammo_shells = self.ammo_shells - 1; - self.attack_finished = time + 0.7; - - vector org; // casing code - org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 4) + (v_forward * 15); - SpawnCasing (org, ((random () * 50 + 50) * v_right) - ((random () * 25 + 25) * v_forward) - ((random () * 5 + 10) * v_up), 2, v_forward,'0 250 0', 100, 1); - org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 4) + (v_forward * 20); - W_Smoke(org, v_forward, 12); - //te_smallflash(org); -} - -void W_Shotgun_Attack2 (void) -{ + local vector org; float sc; float bullets; float d; @@ -64,18 +43,18 @@ void W_Shotgun_Attack2 (void) bullets = cvar("g_balance_shotgun_bullets"); d = cvar("g_balance_shotgun_damage"); - for (sc = bullets; sc > 0; sc = sc - 1) - fireBullet (self.origin + self.view_ofs, v_forward, 0.1, d, IT_SHOTGUN); + org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 5); + for (sc = 0;sc < bullets;sc = sc + 1) + fireBullet (org, v_forward, 0.1, d, IT_SHOTGUN, sc < 3); self.ammo_shells = self.ammo_shells - 1; - self.attack_finished = time + 1.4; - - self.punchangle_x = -5; + self.attack_finished = time + 0.7; - vector org; // casing code - org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 4) + (v_forward * 15); + // casing code + org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 10); SpawnCasing (org, ((random () * 50 + 50) * v_right) - ((random () * 25 + 25) * v_forward) - ((random () * 5 + 10) * v_up), 2, v_forward,'0 250 0', 100, 1); - org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 4) + (v_forward * 20); + org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 20); W_Smoke(org, v_forward, 12); + //te_smallflash(org); } // weapon frames @@ -90,16 +69,19 @@ void() shotgun_fire1_01 = }; void() shotgun_fire2_03 = { - weapon_doattack(shotgun_check, shotgun_check, W_Shotgun_Attack2); - weapon_thinkf(WFRAME_FIRE1, 0.9, shotgun_ready_01); + self.punchangle_x = -5; + weapon_doattack(shotgun_check, shotgun_check, W_Shotgun_Attack); + weapon_thinkf(WFRAME_FIRE1, 0.9, shotgun_ready_01); } void() shotgun_fire2_02 = { - weapon_doattack(shotgun_check, shotgun_check, W_Shotgun_Attack2); - weapon_thinkf(WFRAME_FIRE1, 0.2, shotgun_fire2_03); + self.punchangle_x = -5; + weapon_doattack(shotgun_check, shotgun_check, W_Shotgun_Attack); + weapon_thinkf(WFRAME_FIRE1, 0.2, shotgun_fire2_03); } void() shotgun_fire2_01 = { - weapon_doattack(shotgun_check, shotgun_check, W_Shotgun_Attack2); - weapon_thinkf(WFRAME_FIRE1, 0.2, shotgun_fire2_02); + self.punchangle_x = -5; + weapon_doattack(shotgun_check, shotgun_check, W_Shotgun_Attack); + weapon_thinkf(WFRAME_FIRE1, 0.2, shotgun_fire2_02); } \ No newline at end of file diff --git a/qcsrc/gamec/w_uzi.c b/qcsrc/gamec/w_uzi.c index 33795fac0..fbc2c0a7a 100644 --- a/qcsrc/gamec/w_uzi.c +++ b/qcsrc/gamec/w_uzi.c @@ -16,7 +16,7 @@ void(float req) w_uzi = if (req == WR_IDLE) uzi_ready_01(); else if (req == WR_FIRE1) - weapon_prepareattack(uzi_check, uzi_check, uzi_fire1_01, 0.075); + weapon_prepareattack(uzi_check, uzi_check, uzi_fire1_01, cvar("g_balance_uzi_refire")); else if (req == WR_FIRE2) weapon_prepareattack(uzi_check, uzi_check, uzi_fire2_01, 0.4); else if (req == WR_RAISE) @@ -31,37 +31,45 @@ void(float req) w_uzi = weapon_hasammo = uzi_check(); }; +.float uzi_bulletcounter; void W_Uzi_Attack (void) { + local vector org; makevectors(self.v_angle); sound (self, CHAN_WEAPON, "weapons/uzi_fire.wav", 1, ATTN_NORM); - fireBullet (self.origin + self.view_ofs, v_forward, 0.01, cvar("g_balance_uzi_damage"), IT_UZI); + org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 5); + self.uzi_bulletcounter = self.uzi_bulletcounter + 1; + if (self.uzi_bulletcounter >= 4) + self.uzi_bulletcounter = 0; + fireBullet (org, v_forward, cvar("g_balance_uzi_spread"), cvar("g_balance_uzi_damage"), IT_UZI, self.uzi_bulletcounter == 0); self.punchangle_x = random () - 0.5; self.punchangle_y = random () - 0.5; self.punchangle_z = random () - 0.5; - self.attack_finished = time + 0.2; - self.ammo_nails = self.ammo_nails - 1; + //self.attack_finished = time + 0.2; + self.ammo_nails = self.ammo_nails - 0.25; - vector org; // casing code - org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 1) + (v_forward * 15); + // casing code + org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 10); SpawnCasing (org, ((random () * 50 + 50) * v_right) - ((random () * 25 + 25) * v_forward) - ((random () * 5 + 10) * v_up), 2, v_forward,'0 250 0', 100, 2); } void W_Uzi_Attack2 (void) { + local vector org; makevectors(self.v_angle); sound (self, CHAN_WEAPON, "weapons/uzi_fire.wav", 1, ATTN_NORM); - fireBullet (self.origin + self.view_ofs, v_forward, 0.01, 21, IT_UZI); + org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 5); + fireBullet (org, v_forward, cvar("g_balance_uzi_spread2"), 21, IT_UZI); - self.attack_finished = time + 0.3; - self.ammo_nails = self.ammo_nails - 1; + //self.attack_finished = time + 0.3; + self.ammo_nails = self.ammo_nails - 0.25; - vector org; // casing code - org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 1) + (v_forward * 20); + // casing code + org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 10); SpawnCasing (org, ((random () * 50 + 50) * v_right) - ((random () * 25 + 25) * v_forward) - ((random () * 5 + 10) * v_up), 2, v_forward,'0 250 0', 100, 2); } // weapon frames -- 2.39.2