void viewmodel_animate(entity this)
{
- if (autocvar_chase_active) return;
- if (STAT(HEALTH) <= 0) return;
+ if (autocvar_chase_active || STAT(HEALTH) <= 0) return;
entity view = CSQCModel_server2csqc(player_localentnum - 1);
int channel = MSG_C2S;
WriteHeader(channel, fpsreport);
- WriteShort(channel, bound(0, rint(fps), 65535)); // prevent insane fps values
+ WriteShort(channel, bound(0, rint(fps), 32767)); // prevent insane fps values
}
}
{
// accumulate damage with each stat update
static float damage_total_prev = 0;
- float damage_total = STAT(DAMAGE_DEALT_TOTAL);
+ float damage_total = STAT(HITSOUND_DAMAGE_DEALT_TOTAL);
float unaccounted_damage_new = COMPARE_INCREASING(damage_total, damage_total_prev);
damage_total_prev = damage_total;
}
}
-const int MAX_SPECIALCOMMAND = 15;
-vector specialcommand_slots[MAX_SPECIALCOMMAND];
-vector specialcommand_colors[MAX_SPECIALCOMMAND];
-const float SPECIALCOMMAND_SPEED = 150;
-const float SPECIALCOMMAND_TURNSPEED = 2;
-const float SPECIALCOMMAND_SIZE = 0.025;
-const float SPECIALCOMMAND_CHANCE = 0.35;
-float sc_spawntime, sc_changetime;
-vector sc_color = '1 1 1';
-void SpecialCommand()
-{
- if(!STAT(MOVEVARS_SPECIALCOMMAND))
- return;
-
- if(time >= sc_changetime)
- {
- sc_changetime = time + 1;
- sc_color = randomvec() * 1.5;
- sc_color.x = bound(0.2, sc_color.x, 0.75);
- sc_color.y = bound(0.2, sc_color.y, 0.75);
- sc_color.z = bound(0.2, sc_color.z, 0.75);
- }
- drawfill('0 0 0', vec2(vid_conwidth, vid_conheight), sc_color, autocvar_hud_colorflash_alpha * bound(0.1, sc_changetime - time, 0.3), DRAWFLAG_ADDITIVE);
-
- if(!precache_pic("gfx/smile"))
- return; // damn party poopers
-
- for(int j = MAX_SPECIALCOMMAND - 1; j >= 0; --j)
- {
- vector slot = specialcommand_slots[j];
- if(slot.y)
- slot.y += SPECIALCOMMAND_SPEED * frametime;
- //if(slot.z)
- //slot.z = sin(SPECIALCOMMAND_TURNSPEED * M_PI * time);
- if(slot.y >= vid_conheight)
- slot = '0 0 0';
-
- if(slot == '0 0 0')
- {
- if(random() <= SPECIALCOMMAND_CHANCE && time > sc_spawntime) // low chance to spawn!
- {
- slot.x = bound(0, (random() * vid_conwidth + 1), vid_conwidth);
- slot.y = 1; // start it off 0 so we can use it
- slot.z = floor(random() * REGISTRY_MAX(Weapons));
- sc_spawntime = time + bound(0.4, random(), 0.75); // prevent spawning another one for this amount of time!
- vector newcolor = randomvec() * 2;
- newcolor.x = bound(0.4, newcolor.x, 1);
- newcolor.y = bound(0.4, newcolor.y, 1);
- newcolor.z = bound(0.4, newcolor.z, 1);
- specialcommand_colors[j] = newcolor;
- }
- }
- else
- {
- vector splash_size = '0 0 0';
- splash_size.x = max(vid_conwidth, vid_conheight) * SPECIALCOMMAND_SIZE;
- splash_size.y = max(vid_conwidth, vid_conheight) * SPECIALCOMMAND_SIZE;
- entity wep = REGISTRY_GET(Weapons, slot.z);
- if(wep == WEP_Null)
- drawpic(vec2(slot), "gfx/smile", vec2(splash_size), specialcommand_colors[j], 0.95, DRAWFLAG_NORMAL);
- else
- drawpic_skin(vec2(slot), wep.model2, vec2(splash_size), specialcommand_colors[j], 0.95, DRAWFLAG_NORMAL);
- //drawrotpic(vec2(slot), slot.z, "gfx/smile", vec2(splash_size), vec2(splash_size) / 2, specialcommand_colors[j], 0.95, DRAWFLAG_NORMAL);
- }
-
- specialcommand_slots[j] = slot;
- }
-}
-
void HUD_Draw(entity this)
{
// if we don't know gametype and scores yet avoid drawing the scoreboard
}
// crosshair goes VERY LAST
- SpecialCommand();
UpdateDamage();
HUD_Crosshair(this);
HitSound();
stats_get();
hud = STAT(HUD);
- ReplicateVars(false);
- if (ReplicateVars_NOT_SENDING())
- ReplicateVars_DELAY(0.8 + random() * 0.4); // no need to check cvars every frame
+ ReplicateVars(REPLICATEVARS_CHECK);
HUD_Scale_Disable();
current_player = player_localnum;
myteam = entcs_GetTeam(current_player);
- // abused multiple places below
entity local_player = ((csqcplayer) ? csqcplayer : CSQCModel_server2csqc(player_localentnum - 1));
if(!local_player)
local_player = this; // fall back!
if(intermission && !intermission_time)
intermission_time = time;
+ if(STAT(GAME_STOPPED) && !game_stopped_time)
+ game_stopped_time = time;
+ else if(game_stopped_time && !STAT(GAME_STOPPED))
+ game_stopped_time = 0;
+
if(intermission && !isdemo() && !(calledhooks & HOOK_END))
{
if(calledhooks & HOOK_START)
}
}
+ Welcome_Message_Show_Try();
+
Announcer();
View_CheckButtonStatus();
// Draw the World (and sky)
setproperty(VF_DRAWWORLD, 1);
- // Set the console size vars
vid_conwidth = autocvar_vid_conwidth;
vid_conheight = autocvar_vid_conheight;
vid_pixelheight = autocvar_vid_pixelheight;
View_DemoCamera();
- // Draw the Crosshair
- setproperty(VF_DRAWCROSSHAIR, 0); //Make sure engine crosshairs are always hidden
-
- // Draw the Engine Status Bar (the default Quake HUD)
- setproperty(VF_DRAWENGINESBAR, 0);
-
- // Update the mouse position
- /*
- mousepos_x = vid_conwidth;
- mousepos_y = vid_conheight;
- mousepos = mousepos*0.5 + getmousepos();
- */
+ setproperty(VF_DRAWCROSSHAIR, 0); // hide engine crosshair
+ setproperty(VF_DRAWENGINESBAR, 0); // hide engine status bar
IL_EACH(g_drawables, it.draw, it.draw(it));