Portal_ClearAll(self);
+ Unfreeze(self);
+
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");
Called when a client spawns in the server
=============
*/
-
void PutClientInServer (void)
{
if(IS_BOT_CLIENT(self))
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.oldvelocity = self.velocity;
self.fire_endtime = -1;
- msg_entity = self;
- WRITESPECTATABLE_MSG_ONE({
- WriteByte(MSG_ONE, SVC_TEMPENTITY);
- WriteByte(MSG_ONE, TE_CSQC_SPAWN);
- });
+ entity spawnevent = spawn();
+ spawnevent.owner = self;
+ Net_LinkEntity(spawnevent, FALSE, 0.5, SpawnEvent_Send);
self.model = "";
FixPlayermodel();
self.event_damage = PlayerDamage;
self.bot_attack = TRUE;
+ self.monster_attack = TRUE;
self.statdraintime = time + 5;
self.BUTTON_ATCK = self.BUTTON_JUMP = self.BUTTON_ATCK2 = 0;
self.target = s;
activator = world;
self = oldself;
+
+ Unfreeze(self);
spawn_spot = spot;
MUTATOR_CALLHOOK(PlayerSpawn);
self.weaponname = "";
self.switchingweapon = 0;
- if(!inWarmupStage)
+ if(!warmup_stage)
if(!self.alivetime)
self.alivetime = time;
antilag_clear(self);
-
- if (autocvar_g_spawnsound)
- soundat(world, self.origin, CH_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTN_NORM);
- } else if(IS_OBSERVER(self)) {
+ }
+ else if(IS_OBSERVER(self))
+ {
PutObserverInServer ();
}
}
else
WriteString(MSG_ENTITY, "");
WriteByte(MSG_ENTITY, self.count * 255.0); // g_balance_armor_blockpercent
- WriteByte(MSG_ENTITY, self.cnt * 255.0); // g_balance_weaponswitchdelay
WriteCoord(MSG_ENTITY, self.bouncefactor); // g_balance_grenadelauncher_bouncefactor
WriteCoord(MSG_ENTITY, self.bouncestop); // g_balance_grenadelauncher_bouncestop
WriteCoord(MSG_ENTITY, self.ebouncefactor); // g_balance_grenadelauncher_bouncefactor
self.count = autocvar_g_balance_armor_blockpercent;
self.SendFlags |= 1;
}
- if(self.cnt != autocvar_g_balance_weaponswitchdelay)
- {
- self.cnt = autocvar_g_balance_weaponswitchdelay;
- self.SendFlags |= 1;
- }
if(self.bouncefactor != autocvar_g_balance_grenadelauncher_bouncefactor)
{
self.bouncefactor = autocvar_g_balance_grenadelauncher_bouncefactor;
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;
{
if(gameover) return;
if(self.player_blocked) return;
- if(self.freezetag_frozen) return;
+ if(self.frozen) return;
ClientKill_TeamChange(0);
}
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");
}
MUTATOR_CALLHOOK(ClientDisconnect);
Portal_ClearAll(self);
+
+ Unfreeze(self);
RemoveGrapplingHook(self);
// 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) // don't apply the flags if the player is gibbed
+ if((self.alpha < 0 || self.deadflag) && !self.vehicle) // don't apply the flags if the player is gibbed
return;
Fire_ApplyDamage(self);
}
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.dmg_inflictor = spectatee.dmg_inflictor;
self.v_angle = spectatee.v_angle;
self.angles = spectatee.v_angle;
+ self.frozen = spectatee.frozen;
+ self.revive_progress = spectatee.revive_progress;
if(!self.BUTTON_USE)
self.fixangle = TRUE;
setorigin(self, spectatee.origin);
{
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)); }
}
}
}
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;
}
return;
#endif
+ if(self.frozen == 2)
+ {
+ self.revive_progress = bound(0, self.revive_progress + frametime * self.revive_speed, 1);
+ self.health = max(1, self.revive_progress * autocvar_g_balance_health_start);
+ self.iceblock.alpha = 1 - self.revive_progress;
+
+ if(self.revive_progress >= 1)
+ Unfreeze(self);
+ }
+
MUTATOR_CALLHOOK(PlayerPreThink);
if(!self.cvar_cl_newusekeysupported) // FIXME remove this - it was a stupid idea to begin with, we can JUST use the button
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.frozen)
do_crouch = 0;
if(self.weapon == WEP_SHOTGUN && self.weaponentity.wframe == WFRAME_FIRE2 && time < self.weapon_nextthink)
do_crouch = 0;
}
}
- 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();
+ // monsters status
+ monsters_setstatus();
+
self.dmg_team = max(0, self.dmg_team - autocvar_g_teamdamage_resetspeed * frametime);
//self.angles_y=self.v_angle_y + 90; // temp
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;
}
}