From baf37238c9698513cf4f67ebbd790d41a82aea88 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 29 Oct 2010 16:13:22 +0200 Subject: [PATCH] Crude outline, more to come. Clean up seeker a tad. --- balancetZork.cfg | 707 +++++++++++++++++++++++++++++++++++++++ qcsrc/server/w_seeker.qc | 105 +++--- 2 files changed, 748 insertions(+), 64 deletions(-) create mode 100644 balancetZork.cfg diff --git a/balancetZork.cfg b/balancetZork.cfg new file mode 100644 index 000000000..d1383b4f3 --- /dev/null +++ b/balancetZork.cfg @@ -0,0 +1,707 @@ +// {{{ starting gear +set g_start_weapon_laser -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_shotgun -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_uzi -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_grenadelauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_minelayer -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_electro -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_crylink -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_nex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_hagar -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_rocketlauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_minstanex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_hlac -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_campingrifle -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_fireball -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_seeker -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_balance_health_start 125 +set g_balance_armor_start 0 +set g_start_ammo_shells 20 +set g_start_ammo_nails 0 +set g_start_ammo_rockets 0 +set g_start_ammo_cells 0 +set g_start_ammo_fuel 0 +set g_warmup_start_health 200 "starting values when being in warmup-stage" +set g_warmup_start_armor 100 "starting values when being in warmup-stage" +set g_warmup_start_ammo_shells 50 "starting values when being in warmup-stage" +set g_warmup_start_ammo_nails 150 "starting values when being in warmup-stage" +set g_warmup_start_ammo_rockets 50 "starting values when being in warmup-stage" +set g_warmup_start_ammo_cells 50 "starting values when being in warmup-stage" +set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage" +set g_lms_start_health 200 +set g_lms_start_armor 100 +set g_lms_start_ammo_shells 30 +set g_lms_start_ammo_nails 250 +set g_lms_start_ammo_rockets 100 +set g_lms_start_ammo_cells 200 +set g_lms_start_ammo_fuel 0 +set g_balance_nix_roundtime 25 +set g_balance_nix_incrtime 1.6 +set g_balance_nix_ammo_shells 15 +set g_balance_nix_ammo_nails 45 +set g_balance_nix_ammo_rockets 15 +set g_balance_nix_ammo_cells 15 +set g_balance_nix_ammo_fuel 0 +set g_balance_nix_ammoincr_shells 2 +set g_balance_nix_ammoincr_nails 6 +set g_balance_nix_ammoincr_rockets 2 +set g_balance_nix_ammoincr_cells 2 +set g_balance_nix_ammoincr_fuel 2 +// }}} + +// {{{ pickup items +set g_pickup_ammo_anyway 1 +set g_pickup_weapons_anyway 1 +set g_pickup_shells 20 +set g_pickup_shells_weapon 10 +set g_pickup_shells_max 45 +set g_pickup_nails 120 +set g_pickup_nails_weapon 60 +set g_pickup_nails_max 300 +set g_pickup_rockets 25 +set g_pickup_rockets_weapon 15 +set g_pickup_rockets_max 150 +set g_pickup_cells 30 +set g_pickup_cells_weapon 20 +set g_pickup_cells_max 200 +set g_pickup_fuel 25 +set g_pickup_fuel_weapon 15 +set g_pickup_fuel_jetpack 50 +set g_pickup_fuel_max 999 +set g_pickup_armorsmall 5 +set g_pickup_armorsmall_max 999 +set g_pickup_armorsmall_anyway 0 +set g_pickup_armormedium 25 +set g_pickup_armormedium_max 999 +set g_pickup_armormedium_anyway 0 +set g_pickup_armorbig 50 +set g_pickup_armorbig_max 999 +set g_pickup_armorbig_anyway 0 +set g_pickup_armorlarge 100 +set g_pickup_armorlarge_max 999 +set g_pickup_armorlarge_anyway 0 +set g_pickup_healthsmall 5 +set g_pickup_healthsmall_max 999 +set g_pickup_healthsmall_anyway 0 +set g_pickup_healthmedium 25 +set g_pickup_healthmedium_max 999 +set g_pickup_healthmedium_anyway 0 +set g_pickup_healthlarge 50 +set g_pickup_healthlarge_max 999 +set g_pickup_healthlarge_anyway 0 +set g_pickup_healthmega 100 +set g_pickup_healthmega_max 999 +set g_pickup_healthmega_anyway 0 +set g_pickup_respawntime_short 15 +set g_pickup_respawntime_medium 20 +set g_pickup_respawntime_long 30 +set g_pickup_respawntime_powerup 120 +set g_pickup_respawntime_weapon 5 +set g_pickup_respawntime_ammo 25 +set g_pickup_respawntimejitter_short 0 +set g_pickup_respawntimejitter_medium 0 +set g_pickup_respawntimejitter_long 0 +set g_pickup_respawntimejitter_powerup 10 +set g_pickup_respawntimejitter_weapon 0 +set g_pickup_respawntimejitter_ammo 0 +// }}} + +// {{{ regen/rot +set g_balance_health_regen 0.1 +set g_balance_health_regenlinear 0 +set g_balance_pause_health_regen 5 +set g_balance_pause_health_regen_spawn 0 +set g_balance_health_rot 0.1 +set g_balance_health_rotlinear 0 +set g_balance_pause_health_rot 5 +set g_balance_pause_health_rot_spawn 10 +set g_balance_health_regenstable 100 +set g_balance_health_rotstable 100 +set g_balance_health_limit 999 +set g_balance_armor_regen 0 +set g_balance_armor_regenlinear 0 +set g_balance_armor_rot 0.1 +set g_balance_armor_rotlinear 0 +set g_balance_pause_armor_rot 5 +set g_balance_pause_armor_rot_spawn 10 +set g_balance_armor_regenstable 100 +set g_balance_armor_rotstable 100 +set g_balance_armor_limit 999 +set g_balance_armor_blockpercent 0.7 +set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)" +set g_balance_fuel_regenlinear 0 +set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter +set g_balance_fuel_rot 0.05 +set g_balance_fuel_rotlinear 0 +set g_balance_pause_fuel_rot 5 +set g_balance_pause_fuel_rot_spawn 10 +set g_balance_fuel_regenstable 50 +set g_balance_fuel_rotstable 100 +set g_balance_fuel_limit 999 +// }}} + +// {{{ misc +set g_balance_selfdamagepercent 0.65 +set g_balance_weaponswitchdelay 0.15 +set g_weaponspeedfactor 1 "weapon projectile speed multiplier" +set g_weaponratefactor 1 "weapon fire rate multiplier" +set g_weapondamagefactor 1 "weapon damage multiplier" +set g_weaponforcefactor 1 "weapon force multiplier" +set g_weaponspreadfactor 1 "weapon spread multiplier" +set g_balance_firetransfer_time 0.9 +set g_balance_firetransfer_damage 0.8 +set g_throughfloor_damage 0.5 +set g_throughfloor_force 0.7 +set g_projectiles_newton_style 2 +// possible values: +// 0: absolute velocity projectiles (like Quake) +// 1: relative velocity projectiles, "Newtonian" (like Tribes 2) +// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard) +// 3: absolute velocity + player velocity component in shot direction (note: does NOT yield the right relative velocity, but may be good enough, but it is somewhat prone to sniper rockets) +// 4: just add the player velocity length to the absolute velocity (tZork's sniper rockets) +set g_projectiles_newton_style_2_minfactor 0.7 +set g_projectiles_newton_style_2_maxfactor 5 +set g_projectiles_spread_style 7 +// possible values: +// 0: forward + solid sphere (like Quake) - varies velocity +// 1: forward + flattened solid sphere +// 2: forward + solid circle +// 3: forward + normal distribution 3D - varies velocity +// 4: forward + normal distribution on a plane +// 5: forward + circle with 1-r falloff +// 6: forward + circle with 1-r^2 falloff +// 7: forward + circle with (1-r)(2-r) falloff +set g_balance_falldamage_deadminspeed 150 +set g_balance_falldamage_minspeed 800 +set g_balance_falldamage_factor 0.20 +set g_balance_falldamage_maxdamage 15 +// }}} + +// {{{ powerups +set g_balance_powerup_invincible_takedamage 0.3 +set g_balance_powerup_invincible_time 30 +set g_balance_powerup_strength_damage 3 +set g_balance_powerup_strength_force 4 +set g_balance_powerup_strength_time 30 +set g_balance_powerup_strength_selfdamage 1.5 +set g_balance_powerup_strength_selfforce 1.5 +// }}} + +// {{{ jetpack/hook +set g_jetpack_antigravity 0.8 "factor of gravity compensation of the jetpack" +set g_jetpack_acceleration_side 1200 "acceleration of the jetpack in xy direction" +set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)" +set g_jetpack_maxspeed_side 1500 "max speed of the jetpack in xy direction" +set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction" +set g_jetpack_fuel 8 "fuel per second for jetpack" +set g_jetpack_attenuation 2 "jetpack sound attenuation" + +set g_grappling_hook_tarzan 2 // 2: can also pull players +set g_balance_grapplehook_speed_fly 1800 +set g_balance_grapplehook_speed_pull 2000 +set g_balance_grapplehook_force_rubber 2000 +set g_balance_grapplehook_force_rubber_overstretch 1000 +set g_balance_grapplehook_length_min 50 +set g_balance_grapplehook_stretch 50 +set g_balance_grapplehook_airfriction 0.2 +set g_balance_grapplehook_health 130 +// }}} + +// {{{ weapon properties +// {{{ laser +set g_balance_laser_primary_damage 20 // dps 33, hope that's not too high +set g_balance_laser_primary_edgedamage 20 +set g_balance_laser_primary_force 270 +set g_balance_laser_primary_radius 60 +set g_balance_laser_primary_speed 4000 +set g_balance_laser_primary_spread 0 +set g_balance_laser_primary_refire 0.6 +set g_balance_laser_primary_animtime 0.6 +set g_balance_laser_primary_lifetime 5 +set g_balance_laser_primary_shotangle 0 +set g_balance_laser_primary_delay 0 +set g_balance_laser_primary_gauntlet 0 +set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists +set g_balance_laser_secondary_damage 35 +set g_balance_laser_secondary_edgedamage 10 +set g_balance_laser_secondary_force 400 +set g_balance_laser_secondary_radius 70 +set g_balance_laser_secondary_speed 9000 +set g_balance_laser_secondary_spread 0 +set g_balance_laser_secondary_refire 0.7 +set g_balance_laser_secondary_animtime 0.3 +set g_balance_laser_secondary_lifetime 30 +set g_balance_laser_secondary_shotangle 0 +set g_balance_laser_secondary_delay 0 +set g_balance_laser_secondary_gauntlet 0 +// }}} +// {{{ shotgun +set g_balance_shotgun_primary_bullets 10 +set g_balance_shotgun_primary_damage 5 +set g_balance_shotgun_primary_force 60 +set g_balance_shotgun_primary_spread 0.07 +set g_balance_shotgun_primary_refire 0.8 +set g_balance_shotgun_primary_animtime 0.2 +set g_balance_shotgun_primary_ammo 1 +set g_balance_shotgun_primary_speed 12000 +set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu +set g_balance_shotgun_secondary 1 +set g_balance_shotgun_secondary_melee_delay 0.35 // match the anim +set g_balance_shotgun_secondary_melee_range 85 +set g_balance_shotgun_secondary_melee_swing 50 +set g_balance_shotgun_secondary_melee_time 0.1 +set g_balance_shotgun_secondary_damage 110 +set g_balance_shotgun_secondary_force 150 +set g_balance_shotgun_secondary_refire 1.1 +set g_balance_shotgun_secondary_animtime 1 +// }}} +// {{{ uzi +set g_balance_uzi_first 1 +set g_balance_uzi_first_damage 30 +set g_balance_uzi_first_force 50 +set g_balance_uzi_first_spread 0.015 +set g_balance_uzi_first_refire 0.3 +set g_balance_uzi_first_ammo 1 +set g_balance_uzi_sustained_damage 15 +set g_balance_uzi_sustained_force 10 +set g_balance_uzi_sustained_spread 0.08 +set g_balance_uzi_sustained_refire 0.1 +set g_balance_uzi_sustained_ammo 1 +set g_balance_uzi_speed 18000 +set g_balance_uzi_bulletconstant 115 // 13.1qu +// }}} +// {{{ mortar +set g_balance_grenadelauncher_primary_type 0 +set g_balance_grenadelauncher_primary_damage 60 +set g_balance_grenadelauncher_primary_edgedamage 38 +set g_balance_grenadelauncher_primary_force 400 +set g_balance_grenadelauncher_primary_radius 140 +set g_balance_grenadelauncher_primary_speed 2000 +set g_balance_grenadelauncher_primary_speed_up 200 +set g_balance_grenadelauncher_primary_speed_z 0 +set g_balance_grenadelauncher_primary_spread 0 +set g_balance_grenadelauncher_primary_lifetime 30 +set g_balance_grenadelauncher_primary_lifetime2 1 +set g_balance_grenadelauncher_primary_refire 0.8 +set g_balance_grenadelauncher_primary_animtime 0.3 +set g_balance_grenadelauncher_primary_ammo 2 +set g_balance_grenadelauncher_primary_health 25 +set g_balance_grenadelauncher_primary_damageforcescale 4 +set g_balance_grenadelauncher_primary_bouncefactor 0.5 +set g_balance_grenadelauncher_primary_bouncestop 0.075 +set g_balance_grenadelauncher_primary_remote_minbouncecnt 0 + +set g_balance_grenadelauncher_secondary_type 1 +set g_balance_grenadelauncher_secondary_damage 70 +set g_balance_grenadelauncher_secondary_edgedamage 38 +set g_balance_grenadelauncher_secondary_force 400 +set g_balance_grenadelauncher_secondary_radius 140 +set g_balance_grenadelauncher_secondary_speed 1400 +set g_balance_grenadelauncher_secondary_speed_up 200 +set g_balance_grenadelauncher_secondary_speed_z 0 +set g_balance_grenadelauncher_secondary_spread 0 +set g_balance_grenadelauncher_secondary_lifetime 2.5 +set g_balance_grenadelauncher_secondary_lifetime2 0 +set g_balance_grenadelauncher_secondary_refire 0.7 +set g_balance_grenadelauncher_secondary_animtime 0.3 +set g_balance_grenadelauncher_secondary_ammo 2 +set g_balance_grenadelauncher_secondary_health 10 +set g_balance_grenadelauncher_secondary_damageforcescale 4 +set g_balance_grenadelauncher_secondary_bouncefactor 0.5 +set g_balance_grenadelauncher_secondary_bouncestop 0.075 +set g_balance_grenadelauncher_secondary_remote_detonateprimary 0 +// }}} +// {{{ minelayer // TODO +set g_balance_minelayer_damage 35 +set g_balance_minelayer_edgedamage 30 +set g_balance_minelayer_force 250 +set g_balance_minelayer_radius 175 +set g_balance_minelayer_proximityradius 150 +set g_balance_minelayer_speed 750 +set g_balance_minelayer_lifetime 60 +set g_balance_minelayer_refire 1.5 +set g_balance_minelayer_animtime 0.4 +set g_balance_minelayer_ammo 5 +set g_balance_minelayer_health 15 +set g_balance_minelayer_limit 4 // 0 disables the limit +set g_balance_minelayer_protection 1 // don't explode if the mine would hurt the owner or a team mate +set g_balance_minelayer_damageforcescale 0 +set g_balance_minelayer_detonatedelay -1 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time +set g_balance_minelayer_time 0.5 +set g_balance_minelayer_remote_damage 45 +set g_balance_minelayer_remote_edgedamage 40 +set g_balance_minelayer_remote_radius 200 +set g_balance_minelayer_remote_force 300 +// }}} +// {{{ electro +set g_balance_electro_lightning 1 +set g_balance_electro_primary_damage 110 +set g_balance_electro_primary_edgedamage 0 +set g_balance_electro_primary_force 425 +set g_balance_electro_primary_force_up 125 +set g_balance_electro_primary_radius 850 +set g_balance_electro_primary_comboradius 150 +set g_balance_electro_primary_speed 0 +set g_balance_electro_primary_spread 0 +set g_balance_electro_primary_lifetime 0 +set g_balance_electro_primary_refire 0.4 +set g_balance_electro_primary_animtime 0.03333333 +set g_balance_electro_primary_ammo 7 +set g_balance_electro_primary_range 800 +set g_balance_electro_primary_falloff_mindist 255 // 0.3 * radius +set g_balance_electro_primary_falloff_maxdist 850 +set g_balance_electro_primary_falloff_halflifedist 425 + +set g_balance_electro_secondary_damage 25 +set g_balance_electro_secondary_edgedamage 0 +set g_balance_electro_secondary_force 100 +set g_balance_electro_secondary_radius 100 +set g_balance_electro_secondary_speed 500 +set g_balance_electro_secondary_speed_up 150 +set g_balance_electro_secondary_speed_z 0 +set g_balance_electro_secondary_spread 0.08 +set g_balance_electro_secondary_lifetime 3.5 +set g_balance_electro_secondary_refire 0.1 +set g_balance_electro_secondary_refire2 2 +set g_balance_electro_secondary_animtime 0.2 +set g_balance_electro_secondary_ammo 2 +set g_balance_electro_secondary_health 10 +set g_balance_electro_secondary_damageforcescale 4 +set g_balance_electro_secondary_count 3 + +set g_balance_electro_combo_damage 60 +set g_balance_electro_combo_edgedamage 0 +set g_balance_electro_combo_force 80 +set g_balance_electro_combo_radius 250 +set g_balance_electro_combo_comboradius 0 +set g_balance_electro_combo_speed 400 +// }}} +// {{{ crylink +set g_balance_crylink_primary_damage 5 +set g_balance_crylink_primary_edgedamage 2.5 +set g_balance_crylink_primary_force 25 +set g_balance_crylink_primary_radius 50 +set g_balance_crylink_primary_speed 2500 +set g_balance_crylink_primary_spread 0.04 +set g_balance_crylink_primary_shots 12 +set g_balance_crylink_primary_bounces 1 +set g_balance_crylink_primary_refire 1 +set g_balance_crylink_primary_animtime 0.4 +set g_balance_crylink_primary_ammo 2 +set g_balance_crylink_primary_bouncedamagefactor 0.2 + +set g_balance_crylink_primary_middle_lifetime 5 // range: 10000 full, fades to 20000 +set g_balance_crylink_primary_middle_fadetime 5 +set g_balance_crylink_primary_star_lifetime 2 // range: 800 full, fades to 1300 +set g_balance_crylink_primary_star_fadetime 0.25 +set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300 +set g_balance_crylink_primary_other_fadetime 0.25 + +set g_balance_crylink_secondary 1 +set g_balance_crylink_secondary_damage 2 +set g_balance_crylink_secondary_edgedamage 0 +set g_balance_crylink_secondary_force -20 +set g_balance_crylink_secondary_radius 5 +set g_balance_crylink_secondary_speed 1600 +set g_balance_crylink_secondary_spread 0.03 +set g_balance_crylink_secondary_shots 3 +set g_balance_crylink_secondary_bounces 0 +set g_balance_crylink_secondary_refire 0.15 +set g_balance_crylink_secondary_animtime 0.15 +set g_balance_crylink_secondary_ammo 1 +set g_balance_crylink_secondary_bouncedamagefactor 0.5 + +set g_balance_crylink_secondary_middle_lifetime 5 // range: 10000 full, fades to 10000 +set g_balance_crylink_secondary_middle_fadetime 5 +set g_balance_crylink_secondary_line_lifetime 2 // range: 4000 full, fades to 8000 +set g_balance_crylink_secondary_line_fadetime 2 +// }}} +// {{{ nex +set g_balance_nex_primary_damage 100 +set g_balance_nex_primary_force 600 +set g_balance_nex_primary_refire 0.75 +set g_balance_nex_primary_animtime 0.3 +set g_balance_nex_primary_ammo 5 +set g_balance_nex_primary_damagefalloff_mindist 0 +set g_balance_nex_primary_damagefalloff_maxdist 0 +set g_balance_nex_primary_damagefalloff_halflife 0 +set g_balance_nex_primary_damagefalloff_forcehalflife 0 + +set g_balance_nex_secondary 1 +set g_balance_nex_secondary_charge 1 +set g_balance_nex_secondary_charge_rate 0.7 +set g_balance_nex_secondary_damage 100 +set g_balance_nex_secondary_force 600 +set g_balance_nex_secondary_refire 1.5 +set g_balance_nex_secondary_animtime 0.3 +set g_balance_nex_secondary_ammo 5 +set g_balance_nex_secondary_damagefalloff_mindist 0 +set g_balance_nex_secondary_damagefalloff_maxdist 0 +set g_balance_nex_secondary_damagefalloff_halflife 0 +set g_balance_nex_secondary_damagefalloff_forcehalflife 0 + +set g_balance_nex_charge 1 +set g_balance_nex_charge_mindmg 10 +set g_balance_nex_charge_start 0 +set g_balance_nex_charge_rate 0.35 +set g_balance_nex_charge_limit 0.5 +set g_balance_nex_charge_shot_multiplier 0 +set g_balance_nex_charge_velocity_rate 0 +set g_balance_nex_charge_minspeed 400 +set g_balance_nex_charge_maxspeed 1000 +// }}} +// {{{ minstanex +set g_balance_minstanex_refire 1 +set g_balance_minstanex_animtime 0.3 +set g_balance_minstanex_ammo 10 +// }}} +// {{{ hagar +set g_balance_hagar_primary_damage 30 +set g_balance_hagar_primary_edgedamage 15 +set g_balance_hagar_primary_force 50 +set g_balance_hagar_primary_radius 65 +set g_balance_hagar_primary_spread 0.010 +set g_balance_hagar_primary_speed 3000 +set g_balance_hagar_primary_lifetime 30 +set g_balance_hagar_primary_refire 0.15 +set g_balance_hagar_primary_ammo 1 +set g_balance_hagar_secondary 1 +set g_balance_hagar_secondary_damage 30 +set g_balance_hagar_secondary_edgedamage 15 +set g_balance_hagar_secondary_force 50 +set g_balance_hagar_secondary_radius 65 +set g_balance_hagar_secondary_spread 0.015 +set g_balance_hagar_secondary_speed 1400 +set g_balance_hagar_secondary_lifetime_min 30 +set g_balance_hagar_secondary_lifetime_rand 0 +set g_balance_hagar_secondary_refire 0.15 +set g_balance_hagar_secondary_ammo 1 +// }}} +// {{{ rocketlauncher // TODO +set g_balance_rocketlauncher_damage 110 +set g_balance_rocketlauncher_edgedamage 25 +set g_balance_rocketlauncher_force 350 +set g_balance_rocketlauncher_radius 125 +set g_balance_rocketlauncher_speed 1000 +set g_balance_rocketlauncher_speedaccel 0 +set g_balance_rocketlauncher_speedstart 1000 +set g_balance_rocketlauncher_lifetime 5 +set g_balance_rocketlauncher_refire 1 +set g_balance_rocketlauncher_animtime 0.4 +set g_balance_rocketlauncher_ammo 3 +set g_balance_rocketlauncher_health 10 +set g_balance_rocketlauncher_damageforcescale 0 +set g_balance_rocketlauncher_detonatedelay -1 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time +set g_balance_rocketlauncher_guiderate 45 // max degrees per second +set g_balance_rocketlauncher_guideratedelay 0.01 // immediate +set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic) +set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in +set g_balance_rocketlauncher_guidestop 0 // stop guiding when firing again +set g_balance_rocketlauncher_laserguided_speed 1000 //650 +set g_balance_rocketlauncher_laserguided_speedaccel 0 +set g_balance_rocketlauncher_laserguided_speedstart 1000 +set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5 +set g_balance_rocketlauncher_laserguided_allow_steal 1 +set g_balance_rocketlauncher_remote_damage 90 +set g_balance_rocketlauncher_remote_edgedamage 20 +set g_balance_rocketlauncher_remote_radius 125 +set g_balance_rocketlauncher_remote_force 350 +// }}} +// {{{ porto +set g_balance_porto_primary_refire 1.5 +set g_balance_porto_primary_animtime 0.3 +set g_balance_porto_primary_speed 2000 +set g_balance_porto_primary_lifetime 30 +set g_balance_portal_health 200 // these get recharged whenever the portal is used +set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used +// }}} +// {{{ hook +set g_balance_hook_primary_fuel 5 // hook monkeys set 0 +set g_balance_hook_primary_refire 0 // hook monkeys set 0 +set g_balance_hook_primary_animtime 0.3 // good shoot anim +set g_balance_hook_primary_hooked_time_max 0 // infinite +set g_balance_hook_primary_hooked_time_free 2 // 2s being hooked are free +set g_balance_hook_primary_hooked_fuel 5 // fuel per second hooked +set g_balance_hook_secondary_damage 25 // not much +set g_balance_hook_secondary_edgedamage 5 // not much +set g_balance_hook_secondary_radius 500 // LOTS +set g_balance_hook_secondary_force -2000 // LOTS +set g_balance_hook_secondary_ammo 50 // a whole pack +set g_balance_hook_secondary_lifetime 5 // infinite +set g_balance_hook_secondary_speed 0 // not much throwing +set g_balance_hook_secondary_gravity 5 // fast falling +set g_balance_hook_secondary_refire 3 // don't drop too many bombs... +set g_balance_hook_secondary_animtime 0.3 // good shoot anim +set g_balance_hook_secondary_power 3 // effect behaves like a square function +set g_balance_hook_secondary_duration 1.5 // effect runs for three seconds +// }}} +// {{{ hlac +set g_balance_hlac_primary_spread_min 0.01 +set g_balance_hlac_primary_spread_max 0.6 +set g_balance_hlac_primary_spread_add 0.01 +set g_balance_hlac_primary_spread_crouchmod 0.5 + +set g_balance_hlac_primary_damage 22 +set g_balance_hlac_primary_edgedamage 2 +set g_balance_hlac_primary_force -100 +set g_balance_hlac_primary_radius 100 +set g_balance_hlac_primary_speed 5000 +set g_balance_hlac_primary_lifetime 3 + +set g_balance_hlac_primary_refire 0.1 +set g_balance_hlac_primary_animtime 0.4 +set g_balance_hlac_primary_ammo 1 + +set g_balance_hlac_secondary 1 +set g_balance_hlac_secondary_spread 0.2 +set g_balance_hlac_secondary_spread_crouchmod 0.5 + +set g_balance_hlac_secondary_damage 20 +set g_balance_hlac_secondary_edgedamage 3 +set g_balance_hlac_secondary_force 100 +set g_balance_hlac_secondary_radius 50 +set g_balance_hlac_secondary_speed 9000 +set g_balance_hlac_secondary_lifetime 3 +set g_balance_hlac_secondary_refire 1 +set g_balance_hlac_secondary_animtime 0.7 +set g_balance_hlac_secondary_ammo 10 +set g_balance_hlac_secondary_shots 6 +// }}} +// {{{ campingrifle +set g_balance_campingrifle_magazinecapacity 8 // make it pretty much useless in close combat +set g_balance_campingrifle_reloadtime 2 // matches reload anim +set g_balance_campingrifle_auto_reload_after_changing_weapons 0 +set g_balance_campingrifle_bursttime 0 +set g_balance_campingrifle_primary_tracer 1 +set g_balance_campingrifle_primary_damage 75 +set g_balance_campingrifle_primary_headshotaddeddamage 75 +set g_balance_campingrifle_primary_spread 0 +set g_balance_campingrifle_primary_force 2 +set g_balance_campingrifle_primary_speed 40000 +set g_balance_campingrifle_primary_lifetime 5 +set g_balance_campingrifle_primary_refire 1.5 +set g_balance_campingrifle_primary_animtime 0.6 +set g_balance_campingrifle_primary_ammo 10 +set g_balance_campingrifle_primary_bulletconstant 110 // 62.2qu +set g_balance_campingrifle_primary_burstcost 0 +set g_balance_campingrifle_primary_bullethail 0 // empty magazine on shot +set g_balance_campingrifle_secondary 1 +set g_balance_campingrifle_secondary_tracer 0 +set g_balance_campingrifle_secondary_damage 50 +set g_balance_campingrifle_secondary_headshotaddeddamage 50 // 50 damage only on head +set g_balance_campingrifle_secondary_spread 0 +set g_balance_campingrifle_secondary_force 2 +set g_balance_campingrifle_secondary_speed 20000 +set g_balance_campingrifle_secondary_lifetime 5 +set g_balance_campingrifle_secondary_refire 1.5 +set g_balance_campingrifle_secondary_animtime 0.6 +set g_balance_campingrifle_secondary_ammo 10 +set g_balance_campingrifle_secondary_bulletconstant 110 // 15.5qu +set g_balance_campingrifle_secondary_burstcost 0 +set g_balance_campingrifle_secondary_bullethail 0 // empty magazine on shot +// }}} +// {{{ tuba +set g_balance_tuba_refire 0.05 +set g_balance_tuba_animtime 0.05 +set g_balance_tuba_attenuation 0.5 +set g_balance_tuba_volume 1 +set g_balance_tuba_fadetime 0.25 +set g_balance_tuba_damage 5 +set g_balance_tuba_edgedamage 0 +set g_balance_tuba_radius 200 +set g_balance_tuba_force 40 +// }}} +// {{{ fireball +set g_balance_fireball_primary_ammo 40 +set g_balance_fireball_primary_animtime 0.15 +set g_balance_fireball_primary_bfgdamage 100 +set g_balance_fireball_primary_bfgforce 0 +set g_balance_fireball_primary_bfgradius 1000 +set g_balance_fireball_primary_damage 200 +set g_balance_fireball_primary_damageforcescale 4 +set g_balance_fireball_primary_edgedamage 0 +set g_balance_fireball_primary_force 700 +set g_balance_fireball_primary_health 50 +set g_balance_fireball_primary_laserburntime 0.5 +set g_balance_fireball_primary_laserdamage 80 +set g_balance_fireball_primary_laseredgedamage 20 +set g_balance_fireball_primary_laserradius 256 +set g_balance_fireball_primary_lifetime 15 +set g_balance_fireball_primary_radius 200 +set g_balance_fireball_primary_refire 5 +set g_balance_fireball_primary_refire2 0 +set g_balance_fireball_primary_speed 650 +set g_balance_fireball_primary_spread 0 +set g_balance_fireball_secondary_ammo 5 +set g_balance_fireball_secondary_animtime 0.3 +set g_balance_fireball_secondary_damage 40 +set g_balance_fireball_secondary_damageforcescale 4 +set g_balance_fireball_secondary_damagetime 5 +set g_balance_fireball_secondary_force 100 +set g_balance_fireball_secondary_laserburntime 0.5 +set g_balance_fireball_secondary_laserdamage 50 +set g_balance_fireball_secondary_laseredgedamage 20 +set g_balance_fireball_secondary_laserradius 110 +set g_balance_fireball_secondary_lifetime 7 +set g_balance_fireball_secondary_refire 2 +set g_balance_fireball_secondary_speed 900 +set g_balance_fireball_secondary_speed_up 100 +set g_balance_fireball_secondary_speed_z 0 +set g_balance_fireball_secondary_spread 0 +// }}} +// {{{ seeker +set g_balance_seeker_flac_ammo 0.5 +set g_balance_seeker_flac_animtime 0.1 +set g_balance_seeker_flac_damage 15 +set g_balance_seeker_flac_edgedamage 10 +set g_balance_seeker_flac_force 50 +set g_balance_seeker_flac_lifetime 0.05 +set g_balance_seeker_flac_lifetime_rand 0.02 +set g_balance_seeker_flac_radius 100 +set g_balance_seeker_flac_refire 0.1 +set g_balance_seeker_flac_speed 5000 +set g_balance_seeker_flac_speed_up 500 +set g_balance_seeker_flac_speed_z 0 +set g_balance_seeker_flac_spread 0.25 + +set g_balance_seeker_missile_accel 1.05 +set g_balance_seeker_missile_ammo 2 +set g_balance_seeker_missile_animtime 0.3 +set g_balance_seeker_missile_count 4 +set g_balance_seeker_missile_damage 40 +set g_balance_seeker_missile_damageforcescale 4 +set g_balance_seeker_missile_decel 0.9 +set g_balance_seeker_missile_delay 0.25 +set g_balance_seeker_missile_edgedamage 10 +set g_balance_seeker_missile_force 250 +set g_balance_seeker_missile_health 5 +set g_balance_seeker_missile_lifetime 15 +set g_balance_seeker_missile_proxy 0 +set g_balance_seeker_missile_proxy_delay 0.2 +set g_balance_seeker_missile_proxy_maxrange 45 +set g_balance_seeker_missile_radius 80 +set g_balance_seeker_missile_refire 0.5 +set g_balance_seeker_missile_smart 1 +set g_balance_seeker_missile_smart_mindist 800 +set g_balance_seeker_missile_smart_trace_max 2500 +set g_balance_seeker_missile_smart_trace_min 1000 +set g_balance_seeker_missile_speed 700 +set g_balance_seeker_missile_speed_accel 0 +set g_balance_seeker_missile_speed_up 300 +set g_balance_seeker_missile_speed_z 0 +set g_balance_seeker_missile_speed_max 1250 +set g_balance_seeker_missile_spread 0 +set g_balance_seeker_missile_turnrate 0.65 + +set g_balance_seeker_tag_ammo 1 +set g_balance_seeker_tag_animtime 0.3 +set g_balance_seeker_tag_damageforcescale 4 +set g_balance_seeker_tag_health 5 +set g_balance_seeker_tag_lifetime 15 +set g_balance_seeker_tag_refire 0.7 +set g_balance_seeker_tag_speed 9000 +set g_balance_seeker_tag_spread 0 +// End new seeker diff --git a/qcsrc/server/w_seeker.qc b/qcsrc/server/w_seeker.qc index 08b1a6782..b74f60e00 100644 --- a/qcsrc/server/w_seeker.qc +++ b/qcsrc/server/w_seeker.qc @@ -51,9 +51,9 @@ void Seeker_Missile_Think() { e = self.enemy; eorg = 0.5 * (e.absmin + e.absmax); - turnrate = cvar("g_balance_seeker_missile_turnrate"); // how fast to turn + turnrate = cvar("g_balance_seeker_missile_turnrate"); // how fast to turn desireddir = normalize(eorg - self.origin); - olddir = normalize(self.velocity); // get my current direction + olddir = normalize(self.velocity); // get my current direction dist = vlen(eorg - self.origin); // Do evasive maneuvers for world objects? ( this should be a cpu hog. :P ) @@ -66,18 +66,14 @@ void Seeker_Missile_Think() traceline(self.origin, eorg, FALSE, self); // Setup adaptive tracelength - self.wait = vlen(self.origin - trace_endpos); - if (self.wait < cvar("g_balance_seeker_missile_smart_trace_min")) self.wait = cvar("g_balance_seeker_missile_smart_trace_min"); - if (self.wait > cvar("g_balance_seeker_missile_smart_trace_max")) self.wait = cvar("g_balance_seeker_missile_smart_trace_max"); + self.wait = bound(cvar("g_balance_seeker_missile_smart_trace_min"), vlen(self.origin - trace_endpos), self.wait = cvar("g_balance_seeker_missile_smart_trace_max")); // Calc how important it is that we turn and add this to the desierd (enemy) dir. desireddir = normalize(((trace_plane_normal * (1 - trace_fraction)) + (desireddir * trace_fraction)) * 0.5); } - - //newdir = normalize((olddir + desireddir * turnrate) * 0.5);// take the average of the 2 directions; not the best method but simple & easy - newdir = normalize(olddir + desireddir * turnrate);// take the average of the 2 directions; not the best method but simple & easy - - self.velocity = newdir * self.switchweapon; // make me fly in the new direction at my flight speed + + newdir = normalize(olddir + desireddir * turnrate); // take the average of the 2 directions; not the best method but simple & easy + self.velocity = newdir * self.switchweapon; // make me fly in the new direction at my flight speed } // Proxy @@ -114,9 +110,8 @@ void Seeker_Missile_Think() return; } - self.angles = vectoangles(self.velocity); // turn model in the new flight direction - self.nextthink = time + 0.05; - + //self.angles = vectoangles(self.velocity); // turn model in the new flight direction + self.nextthink = time;// + 0.05; // csqc projectiles UpdateCSQCProjectile(self); } @@ -124,21 +119,19 @@ void Seeker_Missile_Think() void Seeker_Missile_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) { - float d; - d = damage; - if (self.health <= 0) return; if (self.owner == attacker) - d = d * 0.25; - - self.health = self.health - d; - + self.health = self.health - (damage * 0.25); + else + self.health = self.health - damage; + if (self.health <= 0) W_PrepareExplosionByDamage(attacker, Seeker_Missile_Explode); } +/* void Seeker_Missile_Animate() { self.frame = self.frame +1; @@ -161,6 +154,7 @@ void Seeker_Missile_Animate() UpdateCSQCProjectile(self); } +*/ void Seeker_Fire_Missile(vector f_diff) { @@ -182,30 +176,25 @@ void Seeker_Fire_Missile(vector f_diff) missile.bot_dodge = TRUE; missile.bot_dodgerating = cvar("g_balance_seeker_missile_damage"); - missile.think = Seeker_Missile_Animate; - - //if (!cvar("g_balance_seeker_missile_proxy")) + missile.think = Seeker_Missile_Think; missile.touch = Seeker_Missile_Touch; - missile.event_damage = Seeker_Missile_Damage; missile.nextthink = time;// + 0.2;// + cvar("g_balance_seeker_missile_activate_delay"); missile.cnt = time + cvar("g_balance_seeker_missile_lifetime"); missile.enemy = self.enemy; missile.solid = SOLID_BBOX; missile.scale = 2; - missile.takedamage = DAMAGE_YES; + missile.takedamage = DAMAGE_YES; missile.health = cvar("g_balance_seeker_missile_health"); missile.damageforcescale = cvar("g_balance_seeker_missile_damageforcescale"); missile.projectiledeathtype = WEP_SEEKER; + //missile.think = Seeker_Missile_Animate; // csqc projectiles. + setorigin (missile, w_shotorg); setsize (missile, '-4 -4 -4', '4 4 4'); - - - missile.movetype = MOVETYPE_FLYMISSILE;// MOVETYPE_TOSS; - + missile.movetype = MOVETYPE_FLYMISSILE; missile.flags = FL_PROJECTILE; - W_SETUPPROJECTILEVELOCITY_UP(missile, g_balance_seeker_missile); missile.switchweapon = vlen(missile.velocity); @@ -276,17 +265,13 @@ void Seeker_Tag_Damage (entity inflictor, entity attacker, float damage, float d Seeker_Tag_Explode(); } -void Seeker_Tag_Think() -{ - remove(self); - return; -} void Seeker_Tag_Touch() { vector dir; vector org2; - + entity e; + dir = normalize (self.owner.origin - self.origin); org2 = findbetterlocation (self.origin, 8); @@ -296,28 +281,19 @@ void Seeker_Tag_Touch() Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_HEADSHOT, self); if (other.takedamage == DAMAGE_AIM && other.deadflag == DEAD_NO) - { - entity e; + { e = spawn(); e.cnt = cvar("g_balance_seeker_missile_count"); e.owner = self.owner; e.enemy = other; e.think = Seeker_Vollycontroler_Think; e.nextthink = time; - - //sprint(self.owner, "^1Target lock ^3[^7 ",other.netname, " ^3]^1 acquired - autofire activated.\n"); - //sprint(other,"^1You are targeted!\n"); - - // stuffcmd(other,"play2 weapons/zany-alarm4.ogg\n"); - // stuffcmd(self.owner, "play2 weapons/zany-lock4.ogg\n"); } remove(self); return; } - - void Seeker_Fire_Tag() { local entity missile; @@ -332,7 +308,7 @@ void Seeker_Fire_Tag() missile.bot_dodge = TRUE; missile.bot_dodgerating = 50; missile.touch = Seeker_Tag_Touch; - missile.think = Seeker_Tag_Think; + missile.think = SUB_Remove; missile.nextthink = time + cvar("g_balance_seeker_tag_lifetime"); missile.movetype = MOVETYPE_FLY; missile.solid = SOLID_BBOX; @@ -405,28 +381,29 @@ void Seeker_Fire_Flac() pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); - missile = spawn (); - missile.owner = missile.realowner = self; - missile.classname = "missile"; - missile.bot_dodge = TRUE; + missile = spawn (); + missile.owner = missile.realowner = self; + missile.classname = "missile"; + missile.bot_dodge = TRUE; missile.bot_dodgerating = cvar("g_balance_seeker_flac_damage"); - missile.touch = Seeker_Flac_Explode; - missile.use = Seeker_Flac_Explode; - missile.think = adaptor_think2use_hittype_splash; - missile.nextthink = time + cvar("g_balance_seeker_flac_lifetime") + cvar("g_balance_seeker_flac_lifetime_rand"); - missile.solid = SOLID_BBOX; - missile.scale = 0.4; // BUG: the model is too big + missile.touch = Seeker_Flac_Explode; + missile.use = Seeker_Flac_Explode; + missile.think = adaptor_think2use_hittype_splash; + missile.nextthink = time + cvar("g_balance_seeker_flac_lifetime") + cvar("g_balance_seeker_flac_lifetime_rand"); + missile.solid = SOLID_BBOX; + missile.movetype = MOVETYPE_FLY; missile.projectiledeathtype = WEP_SEEKER; + missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY; + missile.flags = FL_PROJECTILE; + + // csqc projectiles + //missile.angles = vectoangles (missile.velocity); + //missile.scale = 0.4; // BUG: the model is too big + setorigin (missile, w_shotorg); setsize (missile, '-2 -2 -2', '2 2 2'); - missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY; - - missile.movetype = MOVETYPE_FLY; + W_SETUPPROJECTILEVELOCITY_UP(missile, g_balance_seeker_flac); - - missile.angles = vectoangles (missile.velocity); - missile.flags = FL_PROJECTILE; - CSQCProjectile(missile, TRUE, PROJECTILE_FLAC, TRUE); other = missile; MUTATOR_CALLHOOK(EditProjectile); -- 2.39.2