alias use "impulse 21"
// for backwards compatibility
+ // TODO Remove after 0.8 release!
+ cl_particles_forcetraileffects 1
alias dropweapon "impulse 17"
alias +show_info +button7
vid_width 1024
vid_height 768
vid_pixelheight 1
+ vid_resizable 0 // cannot be turned on before it is sure it cannot cause a r_restart
+ vid_desktopfullscreen 1
prvm_language en
set _menu_prvm_language ""
set _menu_vid_width "$vid_width"
set _menu_vid_height "$vid_height"
set _menu_vid_pixelheight "$vid_pixelheight"
+ set _menu_vid_desktopfullscreen "$vid_desktopfullscreen"
seta menu_vid_scale 0
+ seta menu_vid_allowdualscreenresolution 0
// 2D resolution 800x600
vid_conwidth 800
vid_conheight 600
exec sRGB-disable.cfg
vid_sRGB_fallback 2
r_hdr_glowintensity 1
+ // #define Image_LinearFloatFromsRGBFloat(c) (((c) <= 0.04045f) ? (c) * (1.0f / 12.92f) : (float)pow(((c) + 0.055f)*(1.0f/1.055f), 2.4f))
+ set rpn_sRGB_to_linear "dup 0.055 add 1.055 div 2.4 pow exch 12.92 div dup 0.0031308 gt when"
+ // #define Image_sRGBFloatFromLinearFloat(c) (((c) < 0.0031308f) ? (c) * 12.92f : 1.055f * (float)pow((c), 1.0f/2.4f) - 0.055f)
+ set rpn_linear_to_sRGB "dup 1.0 2.4 div pow 1.055 mul 0.055 sub exch 12.92 mul dup 0.04045 ge when"
+
+ // -nosRGB to -sRGB sky shader conversion:
+ //
+ // q3map_sunExt 1 0.6875 0.375 340 25 47 0 16
+ // ^^ elevation
+ // ^^^ sunlight
+ // q3map_skylight 110 3
+ // ^^^ skylight
+ //
+ // With that, do (the last parameter is the ratio of skylight you assume hits
+ // the surfaces, about 0.25 for inner surfaces near sky, about 1.00 on
+ // terrain):
+ // ]skybox_nosRGB_to_sRGB 340 47 110 0.25
+ // rpn: still on stack: new_sunlight:
+ // rpn: still on stack: 380.464142
+ // rpn: still on stack: new_skylight:
+ // rpn: still on stack: 9.32523632
+ //
+ // The equivalent -sRGB shader then will have:
+ //
+ // q3map_sunExt 1 0.6875 0.375 380.464142 25 47 0 16
+ // q3map_skylight 9.32523632 3
+ alias skybox_nosRGB_to_sRGB "rpn $3 402.123 $4 div div $rpn_sRGB_to_linear 402.123 $4 div mul /new_skylight: $3 402.123 $4 div div $1 256 div $2 0.017453 mul sin mul add $rpn_sRGB_to_linear $3 402.123 $4 div div $rpn_sRGB_to_linear sub 256 mul $2 0.017453 mul sin div /new_sunlight:"
// these settings determine how much the view is affected by movement/damage
cl_smoothviewheight 0.05 // time of the averaging to the viewheight value so that it creates a smooth transition for crouching and such. 0 for instant transition
set sv_gibhealth 100 "Minus health a dead body must have in order to get gibbed"
- // fragmessage: This allows extra information to be displayed with the frag centerprints.
+ // fragmessage: This allows extra information to be displayed with the frag centerprints.
set sv_fraginfo 1 "Enable extra frag message information, 0 = Never display, 1 = Display only in warmup mode; 2 = Always display"
set sv_fraginfo_ping 1 "Enable ping display information, 0 = Never display, 1 = Always display (If the player is a bot, it will say bot instead of the ping.)"
set sv_fraginfo_handicap 1 "Enable handicap display information, 0 = Never display, 1 = Only when the player has handicap on, 2 = Always display (Displays Off if disabled)"
seta sv_defaultplayerskin_pink 0
seta sv_defaultplayercolors "" "set to 16*shirt+pants to force a color, note: it does NOT depend on defaultcharacter! Set to \"\" to disable"
set sv_autoscreenshot 0 "if set to 1, the server forces all clients to create a local screenshot once the map ended"
- net_messagetimeout 300
+ net_messagetimeout 30
net_connecttimeout 30
sv_jumpstep 1 // step up stairs while jumping, makes it easier to reach ledges
set ekg 0 "Throw huge amounts of gibs"
set g_powerups -1 "if set to 0 the strength and shield (invincibility) will not spawn on the map, if 1 they will spawn in all game modes, -1 is game mode default"
set g_use_ammunition 1 "if set to 0 all weapons have unlimited ammunition"
set g_pickup_items -1 "if set to 0 all items (health, armor, ammo, weapons...) are removed from the map, if 1 they are forced to spawn"
- set g_minstagib 0 "enable minstagib"
- set g_minstagib_extralives 1 "how many extra lives you will get per powerup"
- set g_minstagib_ammo_start 10 "starting ammo"
- set g_minstagib_ammo_drop 5 "how much ammo you'll get for weapons or cells"
- set g_minstagib_invis_alpha 0.15
- set g_minstagib_speed_highspeed 1.5 "speed-multiplier that applies while you carry the invincibility powerup"
- set g_vampire 0 "set to 1 to enable the vampire mode, where the damage done to your opponent gets added to your own health"
set g_weaponarena "0" "put in a list of weapons to enable a weapon arena mode, or try \"all\" or \"most\""
set g_weaponarena_random "0" "if set to a number, only that weapon count is given on every spawn (randomly)"
set g_weaponarena_random_with_laser "1" "additionally, always provide the laser in random weapon arena games"
set g_player_brightness 0 "set to 2 for brighter players"
seta g_balance_cloaked_alpha 0.25
- set g_sandbox 0 "allow players to spawn and edit objects around the map"
- set g_sandbox_info 1 "print object information to the server. 1 prints info about spawned / removed objects, 2 also prints info about edited objects"
- set g_sandbox_readonly 0 "when this mode is active, players cannot modify objects or use any sandbox commands"
- set g_sandbox_storage_name default "name of the selected storage to use"
- set g_sandbox_storage_autosave 5 "storage is automatically saved every specified number of seconds"
- set g_sandbox_storage_autoload 1 "if a storage file exists for the given map, automatically load it at startup"
- set g_sandbox_editor_flood 1 "players must wait this many seconds between spawning objects"
- set g_sandbox_editor_maxobjects 1000 "maximum number of objects that may exist at a time"
- set g_sandbox_editor_free 1 "0 = players can only copy or edit their own objects, 1 = players can copy but not edit other objects, 2 = players can copy and edit all object"
- set g_sandbox_editor_distance_spawn 200 "distance at which objects spawn in front of the player"
- set g_sandbox_editor_distance_edit 300 "distance at which players can edit or remove objects they are looking at"
- set g_sandbox_object_scale_min 0.1 "minimum scale that objects can be set to"
- set g_sandbox_object_scale_max 2 "maximum scale that objects can be set to"
- set g_sandbox_object_material_velocity_min 100 "velocity objects must have while colliding for material effects to be applied"
- set g_sandbox_object_material_velocity_factor 0.002 "velocity range which decides the intensity of material effects"
- set cl_sandbox_clipboard ""
-
seta menu_sandbox_spawn_model ""
seta menu_sandbox_attach_bone ""
seta menu_sandbox_edit_skin 0
set g_playerclip_collisions 1 "0 = disable collision testing against playerclips, might be useful on some defrag maps"
set g_botclip_collisions 1 "0 = disable collision testing against botclips, might be useful on some defrag maps"
- set welcome_message_time 8
-
set g_grappling_hook 0 "let players spawn with the grappling hook which allows them to pull themselves up"
- set g_invincible_projectiles 0 "set to 1 to disable any damage to projectiles in all balance configs, regardless of g_projectiles_damage"
- set g_dodging 0 "set to 1 to enable dodging in games"
- set g_rocket_flying 0 "set to 1 to enable rocket flying in all balance configs"
-
- seta cl_dodging_timeout 0.2 "determines how long apart (in seconds) two taps on the same direction key are considered a dodge. use 0 to disable"
-
- set sv_dodging_wall_dodging 0 "set to 1 to allow dodging off walls. 0 to disable"
- set sv_dodging_delay 0.5 "determines how long a player has to wait to be able to dodge again after dodging"
- set sv_dodging_up_speed 200 "the jump velocity of the dodge"
- set sv_dodging_horiz_speed 400 "the horizontal velocity of the dodge"
- set sv_dodging_ramp_time 0.1 "a ramp so that the horizontal part of the dodge is added smoothly (seconds)"
- set sv_dodging_height_threshold 10 "the maximum height above ground where to allow dodging"
- set sv_dodging_wall_distance_threshold 10 "the maximum distance from a wall that still allows dodging"
- set sv_dodging_sound 1 "if 1 dodging makes a sound. if 0 dodging is silent"
-
set g_spawn_alloweffects 1 "allow clients to enable spawn point and event effects such as particles and sounds, see cl_spawn_ cvars for more info"
set g_spawn_furthest 1 "this amount of the spawns shall be far away from any players"
set g_spawn_useallspawns 0 "use all spawns, e.g. also team spawns in non-teamplay, and all spawns, even enemy spawns, in teamplay"
- set g_spawn_near_teammate 0 "if set, players prefer spawns near a team mate"
- set g_spawn_near_teammate_distance 640 "max distance to consider a spawn to be near a team mate"
// respawn delay
set g_respawn_delay 2 "number of seconds you have to wait before you can respawn again"
+set g_respawn_delay_max 5 "number of seconds you can wait before you're forced to respawn (only effective with g_forced_respawn 1)"
set g_respawn_waves 0 "respawn in waves (every n seconds), intended to decrease overwhelming base attacks"
// overtime
//used for spectate/observer mode
bind F3 spec
- // NIX (No Items Xonotic) - at each time, everyone uses the same weapon,
- // and in regular intervals, this weapon is cycled
- set g_nix 0 "No Items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon, and so on"
- set g_nix_with_laser 0 "always carry the laser as an additional weapon in NIX"
- set g_nix_with_healtharmor 0 "when 1, health and armor still show up in NIX"
- set g_nix_with_powerups 0 "when 1, powerups still show up in NIX"
-
// score log
set sv_logscores_console 0 "print scores to server console"
set sv_logscores_file 0 "print scores to file"
seta scoreboard_accuracy_border_thickness 1 "accuracy stats border thickness"
seta scoreboard_accuracy_doublerows 0 "use two rows instead of one"
seta scoreboard_accuracy_nocolors 0 "don't use colors displaying accuracy stats"
- seta scoreboard_accuracy 0 "show weapon accuracy stats panel on scoreboard; colors can be configured with accuracy_color* cvars"
+ seta scoreboard_accuracy 1 "show weapon accuracy stats panel on scoreboard; colors can be configured with accuracy_color* cvars"
seta scoreboard_color_bg_r 0 "red color component of the scoreboard background"
seta scoreboard_color_bg_g 0.4 "green color component of the scoreboard background"
seta scoreboard_color_bg_b 0.6 "blue color component of the scoreboard background"
seta scoreboard_alpha_bg 0.6 "scoreboard background alpha"
seta scoreboard_alpha_fg 1 "scoreboard foreground alpha"
seta scoreboard_alpha_name 0.9 "alpha of player text in scoreboard list other than self"
- seta scoreboard_alpha_name_self 1 "alpha of player text in scoreboard list of self"
+ seta scoreboard_alpha_name_self 1 "alpha of player text in scoreboard list of self"
seta scoreboard_fadeinspeed 10 "speed at which scoreboard fades in, higher is faster (0 = instant)"
seta scoreboard_fadeoutspeed 5 "speed at which scoreboard fades out, higher is faster (0 = instant)"
seta scoreboard_highlight 1 "enable highlighting for rows and columns in the scoreboard"
makesaved v_kicktime
// ticrate
- //sys_ticrate 0.0166667
- sys_ticrate 0.0333333
+ //sys_ticrate 0.0166667 // 60fps. This would be ideal, but kills home routers.
+ sys_ticrate 0.0333333 // Use 30fps instead.
cl_netfps 60 // should match or be a multiple
sv_gameplayfix_delayprojectiles 0
sv_gameplayfix_q2airaccelerate 1
set sv_foginterval 1 "force enable fog in regular intervals"
- set g_physical_items 0 "1 uses ODE physics for dropped weapons, 2 for all items, requires physics_ode to be enabled"
- set g_physical_items_damageforcescale 3 "how affected physical weapons are by damage"
- set g_physical_items_reset 1 "return map items to their original lotation after being picked up"
-
// Audio track names (for old-style "cd loop NUMBER" usage)
set _cdtrack_first "1"
alias _cdtrack_0 "g_cdtracks_remaplist \"$g_cdtracks_remaplist $1\""
set cl_handicap 1 "the higher, the more damage you will receive (client setting) NOTE: reconnect or use sendcvar command to update the choice."
- seta cl_clippedspectating 1 "movement collision for spectators so that you can't pass through walls and such. (client setting) NOTE: reconnect or use sendcvar command to update the choice."
+ seta cl_clippedspectating 1 "movement collision for spectators so that you can't pass through walls and such. (client setting) NOTE: reconnect or use sendcvar command to update the choice."
seta cl_autoscreenshot 1 "Take a screenshot upon the end of a match... 0 = Disable completely, 1 = Allow sv_autoscreenshot to take a screenshot when requested, 2 = Always take an autoscreenshot anyway."
set g_bugrigs_speed_pow 2 "reference power for accel and steer responsiveness"
set g_bugrigs_steer 1 "steering amount"
- set g_touchexplode 0
- set g_touchexplode_radius 50
- set g_touchexplode_damage 10
- set g_touchexplode_edgedamage 0
- set g_touchexplode_force 150
-
set g_ban_sync_uri "" "sync using this ban list provider (empty string to disable)"
set g_ban_sync_interval 5 "sync every 5 minutes"
set g_ban_sync_trusted_servers "" "request ban lists from these xonotic servers (do not include your own server there, or unbanning may fail)"
seta cl_gibs_maxcount 100 "maximum amount of gibs (must be at least 1)"
seta cl_vehicle_spiderbot_cross_alpha 0.6
seta cl_vehicle_spiderbot_cross_size 1
- seta cl_vehicles_hudscale 0.5
+ seta cl_vehicles_hudscale 0.5
seta cl_vehicles_hudalpha 0.75
seta cl_vehicles_hud_tactical 1
seta cl_forcemyplayercolors 0 "set to the color value (encoding is same as _cl_color) for your own player model (ignored in teamplay; does not affect how enemies look with cl_forceplayermodels)"
seta cl_movement_errorcompensation 1 "try to compensate for prediction errors and reduce preceived lag"
- // debug cvars for keyhunt attaching
- set _angles "0 0 0"
- set _origin "0 0 0"
-
// campaign internal, set when loading a campaign map1G
set _campaign_index ""
set _campaign_name ""
mod_q3shader_default_polygonfactor 0
// allow fullbright
- set sv_allow_fullbright 0 "when set, clients may use r_fullbright on this server without getting a night vision effect overlay"
+ set sv_allow_fullbright 1 "when set, clients may use r_fullbright on this server without getting a night vision effect overlay"
// auto-teams (team selection by player ID)
// any player not listed is forced to spectate
exec vehicles.cfg
exec crosshairs.cfg
exec gamemodes.cfg
+ exec mutators.cfg
exec notifications.cfg
// load console command aliases and settings
exec hud_luminos.cfg
- // ... and now that everything is configured/aliased, we can do some things:
+ // ... and now that everything is configured/aliased, we can do some things:
// Change g_start_delay based upon if the server is local or not.
if_client set g_start_delay 0 "delay before the game starts, so everyone can join; recommended to set this to like 15 on a public server"
set cl_fullbright_items 0 "enable fullbright items (if server allows, controled by g_fullbrightitems)"
set cl_weapon_stay_color "2 0.5 0.5" "Color of picked up weapons when g_weapon_stay > 0"
set cl_weapon_stay_alpha 0.75 "Alpha of picked up weapons when g_weapon_stay > 0"
-
- seta g_superspectate 0 "server side, allows extended spectator functions through the cmd interface. followpowerup, followstrength, followstshield or followfc [red|blue] will transfer spectation to the relevent player, if any"
float autocvar_g_balance_crylink_primary_joinexplode_force;
float autocvar_g_balance_crylink_primary_joinexplode_radius;
float autocvar_g_balance_crylink_primary_joinspread;
- float autocvar_g_balance_crylink_primary_jointime;
float autocvar_g_balance_crylink_primary_linkexplode;
float autocvar_g_balance_crylink_primary_middle_fadetime;
float autocvar_g_balance_crylink_primary_middle_lifetime;
float autocvar_g_balance_crylink_secondary_joinexplode_force;
float autocvar_g_balance_crylink_secondary_joinexplode_radius;
float autocvar_g_balance_crylink_secondary_joinspread;
- float autocvar_g_balance_crylink_secondary_jointime;
float autocvar_g_balance_crylink_secondary_line_fadetime;
float autocvar_g_balance_crylink_secondary_line_lifetime;
float autocvar_g_balance_crylink_secondary_linkexplode;
float autocvar_g_domination_point_rate;
float autocvar_g_domination_teams_override;
float autocvar_g_forced_respawn;
+float autocvar_g_respawn_delay_max;
string autocvar_g_forced_team_blue;
string autocvar_g_forced_team_otherwise;
string autocvar_g_forced_team_pink;
string autocvar_g_forced_team_yellow;
float autocvar_g_freezetag_frozen_force;
float autocvar_g_freezetag_frozen_maxtime;
+ float autocvar_g_freezetag_revive_falldamage;
+ float autocvar_g_freezetag_revive_falldamage_health;
float autocvar_g_freezetag_point_leadlimit;
float autocvar_g_freezetag_point_limit;
float autocvar_g_freezetag_revive_extra_size;
#define autocvar_g_keyhunt_point_limit cvar("g_keyhunt_point_limit")
float autocvar_g_keyhunt_teams;
float autocvar_g_keyhunt_teams_override;
- float autocvar_g_lms_campcheck_damage;
- float autocvar_g_lms_campcheck_distance;
float autocvar_g_lms_extra_lives;
- float autocvar_g_lms_campcheck_interval;
float autocvar_g_lms_join_anytime;
float autocvar_g_lms_last_join;
#define autocvar_g_lms_lives_override cvar("g_lms_lives_override")
float autocvar_g_maxplayers_spectator_blocktime;
float autocvar_g_maxpushtime;
float autocvar_g_maxspeed;
- #define autocvar_g_midair cvar("g_midair")
float autocvar_g_midair_shieldtime;
#define autocvar_g_minstagib cvar("g_minstagib")
float autocvar_g_minstagib_ammo_drop;
float autocvar_sv_dodging_delay;
float autocvar_sv_dodging_height_threshold;
float autocvar_sv_dodging_horiz_speed;
+ float autocvar_sv_dodging_horiz_speed_frozen;
float autocvar_sv_dodging_ramp_time;
float autocvar_sv_dodging_sound;
float autocvar_sv_dodging_up_speed;
float autocvar_sv_dodging_wall_distance_threshold;
float autocvar_sv_dodging_wall_dodging;
+ float autocvar_sv_dodging_frozen;
float autocvar_sv_doublejump;
float autocvar_sv_eventlog;
float autocvar_sv_eventlog_console;
float autocvar_timelimit_suddendeath;
#define autocvar_utf8_enable cvar("utf8_enable")
float autocvar_waypoint_benchmark;
- float autocvar_welcome_message_time;
float autocvar_sv_gameplayfix_gravityunaffectedbyticrate;
float autocvar_g_trueaim_minrange;
float autocvar_g_debug_defaultsounds;
float autocvar_g_touchexplode_damage;
float autocvar_g_touchexplode_edgedamage;
float autocvar_g_touchexplode_force;
+ #define autocvar_g_bloodloss cvar("g_bloodloss")
+ float autocvar_g_random_gravity_negative_chance;
+ float autocvar_g_random_gravity_min;
+ float autocvar_g_random_gravity_max;
+ float autocvar_g_random_gravity_positive;
+ float autocvar_g_random_gravity_negative;
+ float autocvar_g_random_gravity_delay;
+ float autocvar_g_nades;
+ float autocvar_g_nades_spawn;
+ float autocvar_g_nades_nade_lifetime;
+ float autocvar_g_nades_nade_minforce;
+ float autocvar_g_nades_nade_maxforce;
+ float autocvar_g_nades_nade_health;
+ float autocvar_g_nades_nade_refire;
+ float autocvar_g_nades_nade_damage;
+ float autocvar_g_nades_nade_edgedamage;
+ float autocvar_g_nades_nade_radius;
+ float autocvar_g_nades_nade_force;
+ float autocvar_g_nades_nade_newton_style;
+ float autocvar_g_campcheck_damage;
+ float autocvar_g_campcheck_distance;
+ float autocvar_g_campcheck_interval;
+ float autocvar_g_jump_grunt;
if(self.alivetime)
{
- if(!inWarmupStage)
+ if(!warmup_stage)
PlayerStats_Event(self, PLAYERSTATS_ALIVETIME, time - self.alivetime);
self.alivetime = 0;
}
setorigin (self, (spot.origin + PL_VIEW_OFS)); // offset it so that the spectator spawns higher off the ground, looks better this way
self.prevorigin = self.origin;
self.items = 0;
- WEPSET_CLEAR_E(self);
+ self.weapons = '0 0 0';
self.model = "";
FixPlayermodel();
setmodel(self, "null");
n = tokenize_console(defaultmodel);
if(n > 0)
+ {
defaultmodel = argv(floor(n * self.model_randomizer));
+ // However, do NOT randomize if the player-selected model is in the list.
+ for (i = 0; i < n; ++i)
+ if ((argv(i) == self.playermodel && defaultskin == stof(self.playerskin)) || argv(i) == strcat(self.playermodel, ":", self.playerskin))
+ defaultmodel = argv(i);
+ }
i = strstrofs(defaultmodel, ":", 0);
if(i >= 0)
self.nex_charge = autocvar_g_balance_nex_charge_start;
}
- if(inWarmupStage)
+ if(warmup_stage)
{
self.ammo_shells = warmup_start_ammo_shells;
self.ammo_nails = warmup_start_ammo_nails;
self.ammo_fuel = warmup_start_ammo_fuel;
self.health = warmup_start_health;
self.armorvalue = warmup_start_armorvalue;
- WEPSET_COPY_EA(self, warmup_start_weapons);
+ self.weapons = warmup_start_weapons;
}
else
{
self.ammo_fuel = start_ammo_fuel;
self.health = start_health;
self.armorvalue = start_armorvalue;
- WEPSET_COPY_EA(self, start_weapons);
+ self.weapons = start_weapons;
}
- if(WEPSET_CONTAINS_ANY_EA(self, WEPBIT_SUPERWEAPONS)) // exception for minstagib, as minstanex is a superweapon
+ if(self.weapons & WEPSET_SUPERWEAPONS)
self.superweapons_finished = time + autocvar_g_balance_superweapons_time;
else
self.superweapons_finished = 0;
if(g_weaponarena_random)
{
if(g_weaponarena_random_with_laser)
- WEPSET_ANDNOT_EW(self, WEP_LASER);
+ self.weapons &= ~WEPSET_LASER;
W_RandomWeapons(self, g_weaponarena_random);
if(g_weaponarena_random_with_laser)
- WEPSET_OR_EW(self, WEP_LASER);
+ self.weapons |= WEPSET_LASER;
}
self.items = start_items;
self.weaponname = "";
self.switchingweapon = 0;
- if(!inWarmupStage)
+ if(!warmup_stage)
if(!self.alivetime)
self.alivetime = time;
if(IS_REAL_CLIENT(self.owner))
{
if(self.cnt <= 10)
- { Send_Notification(NOTIF_ONE, self.owner, MSG_ANNCE, Announcer_PickNumber(self.cnt)); }
+ { Send_Notification(NOTIF_ONE, self.owner, MSG_ANNCE, Announcer_PickNumber(CNT_KILL, self.cnt)); }
}
self.nextthink = time + 1;
self.cnt -= 1;
Send_Notification(NOTIF_ONE_ONLY, self, MSG_CENTER, CENTER_MOTD, getwelcomemessage());
}
- if(autocvar_g_bugrigs || WEPSET_EQ_AW(g_weaponarena_weapons, WEP_TUBA))
+ if(autocvar_g_bugrigs || (g_weaponarena_weapons == WEPSET_TUBA))
stuffcmd(self, "cl_cmd settemp chase_active 1\n");
}
// Here, everything has been done that requires this player to be a client.
- self.flags &~= FL_CLIENT;
+ self.flags &= ~FL_CLIENT;
if (self.chatbubbleentity)
remove (self.chatbubbleentity);
if(IS_REAL_CLIENT(self))
if(floor(finished - time - frametime) != floor(finished - time))
if(finished - time < 6)
- sound (self, CH_INFO, samp, VOL_BASE, ATTN_NORM);
+ sound (self, CH_INFO, samp, VOL_BASE, ATTEN_NORM);
}
void player_powerups (void)
if((self.items & IT_USING_JETPACK) && !self.deadflag)
self.modelflags |= MF_ROCKET;
else
- self.modelflags &~= MF_ROCKET;
+ self.modelflags &= ~MF_ROCKET;
- self.effects &~= (EF_RED | EF_BLUE | EF_ADDITIVE | EF_FULLBRIGHT | EF_FLAME | EF_NODEPTHTEST);
+ self.effects &= ~(EF_RED | EF_BLUE | EF_ADDITIVE | EF_FULLBRIGHT | EF_FLAME | EF_NODEPTHTEST);
if((self.alpha < 0 || self.deadflag) && !self.vehicle) // don't apply the flags if the player is gibbed
return;
}
if (self.items & IT_SUPERWEAPON)
{
- if (!WEPSET_CONTAINS_ANY_EA(self, WEPBIT_SUPERWEAPONS))
+ if (!(self.weapons & WEPSET_SUPERWEAPONS))
{
self.superweapons_finished = 0;
self.items = self.items - (self.items & IT_SUPERWEAPON);
if (time > self.superweapons_finished)
{
self.items = self.items - (self.items & IT_SUPERWEAPON);
- WEPSET_ANDNOT_EA(self, WEPBIT_SUPERWEAPONS);
+ self.weapons &= ~WEPSET_SUPERWEAPONS;
//Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_SUPERWEAPON_BROKEN, self.netname);
Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_SUPERWEAPON_BROKEN);
}
}
}
- else if(WEPSET_CONTAINS_ANY_EA(self, WEPBIT_SUPERWEAPONS))
+ else if(self.weapons & WEPSET_SUPERWEAPONS)
{
if (time < self.superweapons_finished || (self.items & IT_UNLIMITED_SUPERWEAPONS))
{
else
{
self.superweapons_finished = 0;
- WEPSET_ANDNOT_EA(self, WEPBIT_SUPERWEAPONS);
+ self.weapons &= ~WEPSET_SUPERWEAPONS;
}
}
else
if(autocvar_g_fullbrightplayers)
self.effects = self.effects | EF_FULLBRIGHT;
- // midair gamemode: damage only while in the air
- // if in midair mode, being on ground grants temporary invulnerability
- // (this is so that multishot weapon don't clear the ground flag on the
- // first damage in the frame, leaving the player vulnerable to the
- // remaining hits in the same frame)
- if (self.flags & FL_ONGROUND)
- if (g_midair)
- self.spawnshieldtime = max(self.spawnshieldtime, time + autocvar_g_midair_shieldtime);
-
if (time >= game_starttime)
if (time < self.spawnshieldtime)
self.effects = self.effects | (EF_ADDITIVE | EF_FULLBRIGHT);
}
if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
- self.ammo_fuel = CalcRotRegen(self.ammo_fuel, minf, autocvar_g_balance_fuel_regen, autocvar_g_balance_fuel_regenlinear, regen_mod * frametime * (time > self.pauseregen_finished) * (self.items & IT_FUEL_REGEN != 0), maxf, autocvar_g_balance_fuel_rot, autocvar_g_balance_fuel_rotlinear, rot_mod * frametime * (time > self.pauserotfuel_finished), limitf);
+ self.ammo_fuel = CalcRotRegen(self.ammo_fuel, minf, autocvar_g_balance_fuel_regen, autocvar_g_balance_fuel_regenlinear, regen_mod * frametime * (time > self.pauseregen_finished) * ((self.items & IT_FUEL_REGEN) != 0), maxf, autocvar_g_balance_fuel_rot, autocvar_g_balance_fuel_rotlinear, rot_mod * frametime * (time > self.pauserotfuel_finished), limitf);
}
float zoomstate_set;
if (self.movement_x > 0) // get if movement keys are pressed
{ // forward key pressed
self.pressedkeys |= KEY_FORWARD;
- self.pressedkeys &~= KEY_BACKWARD;
+ self.pressedkeys &= ~KEY_BACKWARD;
}
else if (self.movement_x < 0)
{ // backward key pressed
self.pressedkeys |= KEY_BACKWARD;
- self.pressedkeys &~= KEY_FORWARD;
+ self.pressedkeys &= ~KEY_FORWARD;
}
else
{ // no x input
- self.pressedkeys &~= KEY_FORWARD;
- self.pressedkeys &~= KEY_BACKWARD;
+ self.pressedkeys &= ~KEY_FORWARD;
+ self.pressedkeys &= ~KEY_BACKWARD;
}
if (self.movement_y > 0)
{ // right key pressed
self.pressedkeys |= KEY_RIGHT;
- self.pressedkeys &~= KEY_LEFT;
+ self.pressedkeys &= ~KEY_LEFT;
}
else if (self.movement_y < 0)
{ // left key pressed
self.pressedkeys |= KEY_LEFT;
- self.pressedkeys &~= KEY_RIGHT;
+ self.pressedkeys &= ~KEY_RIGHT;
}
else
{ // no y input
- self.pressedkeys &~= KEY_RIGHT;
- self.pressedkeys &~= KEY_LEFT;
+ self.pressedkeys &= ~KEY_RIGHT;
+ self.pressedkeys &= ~KEY_LEFT;
}
if (self.BUTTON_JUMP) // get if jump and crouch keys are pressed
self.pressedkeys |= KEY_JUMP;
else
- self.pressedkeys &~= KEY_JUMP;
+ self.pressedkeys &= ~KEY_JUMP;
if (self.BUTTON_CROUCH)
self.pressedkeys |= KEY_CROUCH;
else
- self.pressedkeys &~= KEY_CROUCH;
+ self.pressedkeys &= ~KEY_CROUCH;
if (self.BUTTON_ATCK)
self.pressedkeys |= KEY_ATCK;
else
- self.pressedkeys &~= KEY_ATCK;
+ self.pressedkeys &= ~KEY_ATCK;
if (self.BUTTON_ATCK2)
self.pressedkeys |= KEY_ATCK2;
else
- self.pressedkeys &~= KEY_ATCK2;
+ self.pressedkeys &= ~KEY_ATCK2;
}
/*
self.strength_finished = spectatee.strength_finished;
self.invincible_finished = spectatee.invincible_finished;
self.pressedkeys = spectatee.pressedkeys;
- WEPSET_COPY_EE(self, spectatee);
+ self.weapons = spectatee.weapons;
self.switchweapon = spectatee.switchweapon;
self.switchingweapon = spectatee.switchingweapon;
self.weapon = spectatee.weapon;
{
self.respawn_countdown = number - 1;
if(ceil(self.respawn_time - (time + 0.5)) == number) // only say it if it is the same number even in 0.5s; to prevent overlapping sounds
- Send_Notification(NOTIF_ONE, self, MSG_ANNCE, Announcer_PickNumber(number));
+ { Send_Notification(NOTIF_ONE, self, MSG_ANNCE, Announcer_PickNumber(CNT_RESPAWN, number)); }
}
}
}
{
if(self.BUTTON_INFO) // BUTTON_INFO hides initial MOTD
self.motd_actived_time = -2; // wait until BUTTON_INFO gets released
- else if(self.motd_actived_time == -2 || IS_PLAYER(self) || time - self.jointime > autocvar_welcome_message_time)
+ else if(self.motd_actived_time == -2 || IS_PLAYER(self))
{
// instanctly hide MOTD
self.motd_actived_time = 0;
float prefered_movetype;
if (self.flags & FL_JUMPRELEASED) {
if (self.BUTTON_JUMP && !self.version_mismatch) {
- self.flags &~= FL_JUMPRELEASED;
+ self.flags &= ~FL_JUMPRELEASED;
self.flags |= FL_SPAWNING;
} else if(self.BUTTON_ATCK && !self.version_mismatch) {
- self.flags &~= FL_JUMPRELEASED;
+ self.flags &= ~FL_JUMPRELEASED;
if(SpectateNext()) {
self.classname = "spectator";
}
self.flags |= FL_JUMPRELEASED;
if(self.flags & FL_SPAWNING)
{
- self.flags &~= FL_SPAWNING;
+ self.flags &= ~FL_SPAWNING;
LeaveSpectatorMode();
return;
}
{
if (self.flags & FL_JUMPRELEASED) {
if (self.BUTTON_JUMP && !self.version_mismatch) {
- self.flags &~= FL_JUMPRELEASED;
+ self.flags &= ~FL_JUMPRELEASED;
self.flags |= FL_SPAWNING;
- } else if(self.BUTTON_ATCK || self.impulse == 10 || self.impulse == 15 || self.impulse == 18 || self.impulse >= 200 && self.impulse <= 209) {
- self.flags &~= FL_JUMPRELEASED;
+ } else if(self.BUTTON_ATCK || self.impulse == 10 || self.impulse == 15 || self.impulse == 18 || (self.impulse >= 200 && self.impulse <= 209)) {
+ self.flags &= ~FL_JUMPRELEASED;
if(SpectateNext()) {
self.classname = "spectator";
} else {
PutClientInServer();
}
self.impulse = 0;
- } else if(self.impulse == 12 || self.impulse == 16 || self.impulse == 19 || self.impulse >= 220 && self.impulse <= 229) {
- self.flags &~= FL_JUMPRELEASED;
+ } else if(self.impulse == 12 || self.impulse == 16 || self.impulse == 19 || (self.impulse >= 220 && self.impulse <= 229)) {
+ self.flags &= ~FL_JUMPRELEASED;
if(SpectatePrev()) {
self.classname = "spectator";
} else {
}
self.impulse = 0;
} else if (self.BUTTON_ATCK2) {
- self.flags &~= FL_JUMPRELEASED;
+ self.flags &= ~FL_JUMPRELEASED;
self.classname = "observer";
PutClientInServer();
} else {
self.flags |= FL_JUMPRELEASED;
if(self.flags & FL_SPAWNING)
{
- self.flags &~= FL_SPAWNING;
+ self.flags &= ~FL_SPAWNING;
LeaveSpectatorMode();
return;
}
if (self.deadflag == DEAD_DYING)
{
- if(self.respawn_flags & RESPAWN_FORCE)
+ if(self.respawn_flags & RESPAWN_FORCE && !autocvar_g_respawn_delay_max)
self.deadflag = DEAD_RESPAWNING;
else if(!button_pressed)
self.deadflag = DEAD_DEAD;
{
if(button_pressed)
self.deadflag = DEAD_RESPAWNABLE;
+ else if(time >= self.respawn_time_max && self.respawn_flags & RESPAWN_FORCE)
+ self.deadflag = DEAD_RESPAWNING;
}
else if (self.deadflag == DEAD_RESPAWNABLE)
{
if(time > self.respawn_time)
{
self.respawn_time = time + 1; // only retry once a second
+ self.respawn_time_max = self.respawn_time;
respawn();
}
}
if(self.respawn_flags & RESPAWN_SILENT)
self.stat_respawn_time = 0;
+ else if(self.respawn_flags & RESPAWN_FORCE && autocvar_g_respawn_delay_max)
+ self.stat_respawn_time = self.respawn_time_max;
else
self.stat_respawn_time = self.respawn_time;
}
float do_crouch = self.BUTTON_CROUCH;
if(self.hook.state)
do_crouch = 0;
- if(self.health <= g_bloodloss)
- do_crouch = 1;
if(self.vehicle)
do_crouch = 0;
if(self.freezetag_frozen)
}
}
- if(self.health <= g_bloodloss && self.deadflag == DEAD_NO)
- {
- if(self.bloodloss_timer < time)
- {
- self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0');
- self.bloodloss_timer = time + 0.5 + random() * 0.5;
- }
- }
-
FixPlayermodel();
GrapplingHookFrame();
// LordHavoc: allow firing on move frames (sub-ticrate), this gives better timing on slow servers
//if(frametime)
{
- self.items &~= self.items_added;
+ self.items &= ~self.items_added;
W_WeaponFrame();
if(frametime)
player_anim();
-
- if(g_nexball)
- nexball_setstatus();
// secret status
secrets_setstatus();
else if(timeleft <= 10)
{
if(timeleft != self.idlekick_lasttimeleft)
- Send_Notification(NOTIF_ONE, self, MSG_ANNCE, Announcer_PickNumber(timeleft));
+ { Send_Notification(NOTIF_ONE, self, MSG_ANNCE, Announcer_PickNumber(CNT_IDLE, timeleft)); }
self.idlekick_lasttimeleft = timeleft;
}
}
//pointparticles(particleeffectnum("machinegun_impact"), self.origin + self.view_ofs + '0 0 7', '0 0 0', 1);
if(self.waypointsprite_attachedforcarrier)
- WaypointSprite_UpdateHealth(self.waypointsprite_attachedforcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, autocvar_g_balance_armor_blockpercent));
+ WaypointSprite_UpdateHealth(self.waypointsprite_attachedforcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON));
playerdemo_write();
void SpawnThrownWeapon (vector org, float w)
{
- if(g_pinata)
- {
- float j;
- for(j = WEP_FIRST; j <= WEP_LAST; ++j)
- {
- if(WEPSET_CONTAINS_EW(self, j))
- if(W_IsWeaponThrowable(j))
- W_ThrowNewWeapon(self, j, FALSE, org, randomvec() * 175 + '0 0 325');
- }
- }
- else
- {
- if(WEPSET_CONTAINS_EW(self, self.weapon))
- if(W_IsWeaponThrowable(self.weapon))
- W_ThrowNewWeapon(self, self.weapon, FALSE, org, randomvec() * 125 + '0 0 200');
- }
+ if(self.weapons & WepSet_FromWeapon(self.weapon))
+ if(W_IsWeaponThrowable(self.weapon))
+ W_ThrowNewWeapon(self, self.weapon, FALSE, org, randomvec() * 125 + '0 0 200');
}
void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
// damage resistance (ignore most of the damage from a bullet or similar)
damage = max(damage - 5, 1);
- v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, damage);
+ v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, deathtype, damage);
take = v_x;
save = v_y;
if(sound_allowed(MSG_BROADCAST, attacker))
{
if (save > 10)
- sound (self, CH_SHOTS, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/armorimpact.wav", VOL_BASE, ATTEN_NORM);
else if (take > 30)
- sound (self, CH_SHOTS, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/bodyimpact2.wav", VOL_BASE, ATTEN_NORM);
else if (take > 10)
- sound (self, CH_SHOTS, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/bodyimpact1.wav", VOL_BASE, ATTEN_NORM);
}
if (take > 50)
Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker);
- v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, damage);
+ v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, deathtype, damage);
take = v_x;
save = v_y;
if(sound_allowed(MSG_BROADCAST, attacker))
{
if (save > 10)
- sound (self, CH_SHOTS, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/armorimpact.wav", VOL_BASE, ATTEN_NORM);
else if (take > 30)
- sound (self, CH_SHOTS, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/bodyimpact2.wav", VOL_BASE, ATTEN_NORM);
else if (take > 10)
- sound (self, CH_SHOTS, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM); // FIXME possibly remove them?
+ sound (self, CH_SHOTS, "misc/bodyimpact1.wav", VOL_BASE, ATTEN_NORM); // FIXME possibly remove them?
}
if (take > 50)
self.dmg_take = self.dmg_take + take;//max(take - 10, 0);
self.dmg_inflictor = inflictor;
- if(g_ca && self != attacker && IS_PLAYER(attacker))
- PlayerTeamScore_Add(attacker, SP_SCORE, ST_SCORE, (damage - excess) * autocvar_g_ca_damage2score_multiplier);
-
float abot, vbot, awep;
abot = (IS_BOT_CLIENT(attacker));
vbot = (IS_BOT_CLIENT(self));
if(vbot || IS_REAL_CLIENT(self))
if(abot || IS_REAL_CLIENT(attacker))
if(attacker && self != attacker)
- if(IsDifferentTeam(self, attacker))
+ if(DIFF_TEAM(self, attacker))
{
if(DEATH_ISSPECIAL(deathtype))
awep = attacker.weapon;
self.solid = SOLID_CORPSE;
self.ballistics_density = autocvar_g_ballistics_density_corpse;
// don't stick to the floor
- self.flags &~= FL_ONGROUND;
+ self.flags &= ~FL_ONGROUND;
// dying animation
self.deadflag = DEAD_DYING;
// when to allow respawn
self.respawn_time = ceil((time + sdelay) / waves) * waves;
else
self.respawn_time = time + sdelay;
+ if(autocvar_g_respawn_delay_max > self.respawn_time)
+ self.respawn_time_max = time + autocvar_g_respawn_delay_max;
+ else
+ self.respawn_time_max = self.respawn_time;
if((sdelay + waves >= 5.0) && (self.respawn_time - time > 1.75))
self.respawn_countdown = 10; // first number to count down from is 10
else
if not(IS_PLAYER(source))
{
if not(intermission_running)
- if(teamsay || (autocvar_g_chat_nospectators == 1) || (autocvar_g_chat_nospectators == 2 && !(inWarmupStage || gameover)))
+ if(teamsay || (autocvar_g_chat_nospectators == 1) || (autocvar_g_chat_nospectators == 2 && !(warmup_stage || gameover)))
teamsay = -1; // spectators
}
{
msg_entity = self;
if(IS_REAL_CLIENT(msg_entity))
- soundto(MSG_ONE, self, chan, sample, VOL_BASE, ATTN_NONE);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASE, ATTEN_NONE);
}
break;
case VOICETYPE_TEAMRADIO:
msg_entity = self;
if(msg_entity.cvar_cl_voice_directional == 1)
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_MIN);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTEN_MIN);
else
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_NONE);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTEN_NONE);
break;
case VOICETYPE_AUTOTAUNT:
if(!sv_autotaunt)
if (tauntrand < msg_entity.cvar_cl_autotaunt)
{
if (msg_entity.cvar_cl_voice_directional >= 1)
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, bound(ATTN_MIN, msg_entity.cvar_cl_voice_directional_taunt_attenuation, ATTN_MAX));
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, bound(ATTEN_MIN, msg_entity.cvar_cl_voice_directional_taunt_attenuation, ATTEN_MAX));
else
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_NONE);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTEN_NONE);
}
break;
case VOICETYPE_TAUNT:
break;
msg_entity = self;
if (msg_entity.cvar_cl_voice_directional >= 1)
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, bound(ATTN_MIN, msg_entity.cvar_cl_voice_directional_taunt_attenuation, ATTN_MAX));
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, bound(ATTEN_MIN, msg_entity.cvar_cl_voice_directional_taunt_attenuation, ATTEN_MAX));
else
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_NONE);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTEN_NONE);
break;
case VOICETYPE_PLAYERSOUND:
msg_entity = self;
- soundto(MSG_ONE, self, chan, sample, VOL_BASE, ATTN_NORM);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASE, ATTEN_NORM);
break;
default:
backtrace("Invalid voice type!");
if(IS_REAL_CLIENT(msg_entity))
{
if(msg_entity.cvar_cl_voice_directional == 1)
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_MIN);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTEN_MIN);
else
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_NONE);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTEN_NONE);
}
}
break;
if(IS_REAL_CLIENT(msg_entity))
{
if(msg_entity.cvar_cl_voice_directional == 1)
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_MIN);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTEN_MIN);
else
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_NONE);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTEN_NONE);
}
msg_entity = self;
if(IS_REAL_CLIENT(msg_entity))
- soundto(MSG_ONE, self, chan, sample, VOL_BASE, ATTN_NONE);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASE, ATTEN_NONE);
}
break;
case VOICETYPE_TEAMRADIO:
if(!teamplay || msg_entity.team == self.team)
{
if(msg_entity.cvar_cl_voice_directional == 1)
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_MIN);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTEN_MIN);
else
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_NONE);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTEN_NONE);
}
break;
case VOICETYPE_AUTOTAUNT:
if (tauntrand < msg_entity.cvar_cl_autotaunt)
{
if (msg_entity.cvar_cl_voice_directional >= 1)
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, bound(ATTN_MIN, msg_entity.cvar_cl_voice_directional_taunt_attenuation, ATTN_MAX));
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, bound(ATTEN_MIN, msg_entity.cvar_cl_voice_directional_taunt_attenuation, ATTEN_MAX));
else
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_NONE);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTEN_NONE);
}
break;
case VOICETYPE_TAUNT:
FOR_EACH_REALCLIENT(msg_entity)
{
if (msg_entity.cvar_cl_voice_directional >= 1)
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, bound(ATTN_MIN, msg_entity.cvar_cl_voice_directional_taunt_attenuation, ATTN_MAX));
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, bound(ATTEN_MIN, msg_entity.cvar_cl_voice_directional_taunt_attenuation, ATTEN_MAX));
else
- soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_NONE);
+ soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTEN_NONE);
}
break;
case VOICETYPE_PLAYERSOUND:
- sound(self, chan, sample, VOL_BASE, ATTN_NORM);
+ sound(self, chan, sample, VOL_BASE, ATTEN_NORM);
break;
default:
backtrace("Invalid voice type!");
// Globals
- float g_cloaked, g_footsteps, g_jump_grunt, g_grappling_hook, g_midair, g_minstagib, g_pinata, g_norecoil, g_bloodloss;
+ float g_cloaked, g_footsteps, g_grappling_hook, g_minstagib;
float g_warmup_limit;
float g_warmup_allguns;
float g_warmup_allow_timeout;
float g_race_qualifying;
- float inWarmupStage;
+ float warmup_stage;
float g_pickup_respawntime_weapon;
float g_pickup_respawntime_superweapon;
float g_pickup_respawntime_ammo;
.float play_time;
.float respawn_flags;
.float respawn_time;
+.float respawn_time_max;
.float death_time;
.float fade_time;
.float fade_rate;
.void() weapon_think;
//float PLAYER_WEAPONSELECTION_DELAY = );
- float PLAYER_WEAPONSELECTION_SPEED = 18;
- vector PLAYER_WEAPONSELECTION_RANGE = '0 20 -40';
+ const float PLAYER_WEAPONSELECTION_SPEED = 18;
+ const vector PLAYER_WEAPONSELECTION_RANGE = '0 20 -40';
// weapon states (self.weaponentity.state)
- float WS_CLEAR = 0; // no weapon selected
- float WS_RAISE = 1; // raise frame
- float WS_DROP = 2; // deselecting frame
- float WS_INUSE = 3; // fire state
- float WS_READY = 4; // idle frame
+ const float WS_CLEAR = 0; // no weapon selected
+ const float WS_RAISE = 1; // raise frame
+ const float WS_DROP = 2; // deselecting frame
+ const float WS_INUSE = 3; // fire state
+ const float WS_READY = 4; // idle frame
// there is 2 weapon tics that can run in one server frame
#define W_TICSPERFRAME 2
void FixIntermissionClient(entity e);
void FixClientCvars(entity e);
- WEPSET_DECLARE_A(weaponsInMap);
+ WepSet weaponsInMap;
.float respawn_countdown; // next number to count
.float spectatee_status;
.float zoomstate;
- .float bloodloss_timer;
.float restriction;
.entity clientdata;