/* ================== */ int entArmor(edict_t * ent) { gitem_t *item; int index , iCells, iArmor; int power_armor_type; power_armor_type = PowerArmorType(ent); if (power_armor_type) { iCells = ent->client->pers.inventory[ITEM_INDEX(FindItem("cells"))]; if (iCells == 0) { /* ran out of cells for power armor */ ent->flags &= ~FL_POWER_ARMOR; power_armor_type = 0;; } } index = ArmorIndex(ent); if (power_armor_type && (!index || (level.framenum & 8))) iArmor = iCells; else if (index) { item = GetItemByIndex(index); iArmor = ent->client->pers.inventory[index]; } else iArmor = 0; return iArmor; }
/* =============== G_SetClientEffects =============== */ void G_SetClientEffects (edict_t *ent) { int pa_type; int remaining; ent->s.effects = 0; ent->s.renderfx = 0; if (ent->health <= 0 || level.intermissiontime) return; if (ent->powerarmor_time > level.time) { pa_type = PowerArmorType (ent); if (pa_type == POWER_ARMOR_SCREEN) { ent->s.effects |= EF_POWERSCREEN; } else if (pa_type == POWER_ARMOR_SHIELD) { ent->s.effects |= EF_COLOR_SHELL; ent->s.renderfx |= RF_SHELL_GREEN; } } //ZOID CTFEffects(ent); //ZOID if (ent->client->quad_framenum > level.framenum) { remaining = ent->client->quad_framenum - level.framenum; if (remaining > 30 || (remaining & 4) ) // ent->s.effects |= EF_QUAD; CTFSetPowerUpEffect(ent, EF_QUAD); } if (ent->client->invincible_framenum > level.framenum) { remaining = ent->client->invincible_framenum - level.framenum; if (remaining > 30 || (remaining & 4) ) // ent->s.effects |= EF_PENT; CTFSetPowerUpEffect(ent, EF_PENT); } // show cheaters!!! if (ent->flags & FL_GODMODE) { ent->s.effects |= EF_COLOR_SHELL; ent->s.renderfx |= (RF_SHELL_RED|RF_SHELL_GREEN|RF_SHELL_BLUE); } }
static void ShowStats(edict_t *ent, edict_t *player) { // float dist = 0.0; vec3_t v; int j; char stats[500]; BlinkyClient_t * bdata; char pname[11]; int health, armor, armorpow; int xd,yd,zd; vec3_t dp, normal={0,0,-1}; static int CellsIndex = -1; int index; j = 0; if (-1 == CellsIndex) CellsIndex = ITEM_INDEX(FindItem("cells")); bdata = &ent->client->blinky_client; VectorSubtract(ent->s.origin, player->s.origin, v); zd = -v[2]/SCANNER_UNIT; // save height differential v[2] = 0; // remove height component RotatePointAroundVector(dp, normal, v, ent->s.angles[1]); xd = -dp[0]/SCANNER_UNIT; yd = dp[1]/SCANNER_UNIT; if (player->client) strncpy(pname, player->client->pers.netname, sizeof(pname)-1); else strncpy(pname, player->classname, sizeof(pname)-1); pname[sizeof(pname)-1] = 0; health = player->health; armorpow = 0; if (PowerArmorType(ent)) armorpow = ent->client->pers.inventory[CellsIndex]; index = ArmorIndex (ent); if (index) armor = ent->client->pers.inventory[index]; if (armorpow) sprintf(stats+j, "%s: armor=%3d(%3d), health=%3d (f=%+5d,r=%+5d,u=%+5d)\n" , pname, armor,armorpow,health,xd, yd, zd); else sprintf(stats+j, "%s: armor=%3d, health=%3d (f=%+5d,r=%+5d,u=%+5d)\n" , pname, armor,health,xd, yd, zd); gi.cprintf(ent, PRINT_CHAT, "%s", stats); }
/* ============ T_Damage targ entity that is being damaged inflictor entity that is causing the damage attacker entity that caused the inflictor to damage targ example: targ=monster, inflictor=rocket, attacker=player dir direction of the attack point point at which the damage is being inflicted normal normal vector from that point damage amount of damage being inflicted knockback force to be applied against targ as a result of the damage dflags these flags are used to control how T_Damage works DAMAGE_RADIUS damage was indirect (from a nearby explosion) DAMAGE_NO_ARMOR armor does not protect from this damage DAMAGE_ENERGY damage is from an energy based weapon DAMAGE_NO_KNOCKBACK do not affect velocity, just view angles DAMAGE_BULLET damage is from a bullet (used for ricochets) DAMAGE_NO_PROTECTION kills godmode, armor, everything ============ */ static int CheckPowerArmor (edict_t *ent, vec3_t point, vec3_t normal, int damage, int dflags) { gclient_t *client; int save; int power_armor_type; int index; int damagePerCell; int pa_te_type; int power; int power_used; if (!damage) return 0; client = ent->client; if (dflags & DAMAGE_NO_ARMOR) return 0; if (client) { power_armor_type = PowerArmorType (ent); if (power_armor_type != POWER_ARMOR_NONE) { index = ITEM_INDEX(FindItem("Cells")); power = client->pers.inventory[index]; } } else if (ent->svflags & SVF_MONSTER) { power_armor_type = ent->monsterinfo.power_armor_type; power = ent->monsterinfo.power_armor_power; } else return 0; if (power_armor_type == POWER_ARMOR_NONE) return 0; if (!power) return 0; if (power_armor_type == POWER_ARMOR_SCREEN) { vec3_t vec; float dot; vec3_t forward; // only works if damage point is in front AngleVectors (ent->s.angles, forward, NULL, NULL); VectorSubtract (point, ent->s.origin, vec); VectorNormalize (vec); dot = DotProduct (vec, forward); if (dot <= 0.3) return 0; damagePerCell = 1; pa_te_type = TE_SCREEN_SPARKS; damage = damage / 3; } else { damagePerCell = 2; pa_te_type = TE_SHIELD_SPARKS; damage = (2 * damage) / 3; } save = power * damagePerCell; if (!save) return 0; if (save > damage) save = damage; SpawnDamage (pa_te_type, point, normal, save); ent->powerarmor_time = level.time + 0.2; power_used = save / damagePerCell; if (client) client->pers.inventory[index] -= power_used; else ent->monsterinfo.power_armor_power -= power_used; return save; }
/* =============== G_SetStats =============== */ void G_SetStats (edict_t *ent) { gitem_t *item; int index, cells; int power_armor_type; int i;//RAV // Make sure ent exists! if (!G_EntExists(ent)) return; //raven gzspace bug chase //if(ent->display == 0) // return; // // health // if(!voosh->value) { ent->client->ps.stats[STAT_HEALTH_ICON] = level.pic_health; ent->client->ps.stats[STAT_HEALTH] = ent->health; // // ammo // if (!ent->client->ammo_index /* || !ent->client->pers.inventory[ent->client->ammo_index] */) { ent->client->ps.stats[STAT_AMMO_ICON] = 0; ent->client->ps.stats[STAT_AMMO] = 0; } else { item = &itemlist[ent->client->ammo_index]; ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex (item->icon); ent->client->ps.stats[STAT_AMMO] = ent->client->pers.inventory[ent->client->ammo_index]; } // // armor // power_armor_type = PowerArmorType (ent); if (power_armor_type) { cells = ent->client->pers.inventory[ITEM_INDEX(FindItem ("cells"))]; if (cells == 0) { // ran out of cells for power armor ent->flags &= ~FL_POWER_ARMOR; gi.sound(ent, CHAN_ITEM, gi.soundindex("misc/power2.wav"), 1, ATTN_NORM, 0); power_armor_type = 0;; } } index = ArmorIndex (ent); if (power_armor_type && (!index || (level.framenum & 8) ) ) { // flash between power armor and other armor icon ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex ("i_powershield"); ent->client->ps.stats[STAT_ARMOR] = cells; } else if (index) { item = GetItemByIndex (index); ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex (item->icon); ent->client->ps.stats[STAT_ARMOR] = ent->client->pers.inventory[index]; } else { ent->client->ps.stats[STAT_ARMOR_ICON] = 0; ent->client->ps.stats[STAT_ARMOR] = 0; } } // // pickup message // if (level.time > ent->client->pickup_msg_time) { ent->client->ps.stats[STAT_PICKUP_ICON] = 0; ent->client->ps.stats[STAT_PICKUP_STRING] = 0; } // // timers // if (ent->client->quad_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_quad"); ent->client->ps.stats[STAT_TIMER] = (ent->client->quad_framenum - level.framenum)/10; } else if (ent->client->invincible_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_invulnerability"); ent->client->ps.stats[STAT_TIMER] = (ent->client->invincible_framenum - level.framenum)/10; } //RAV //respawn protection else if (ent->client->respawn_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_invulnerability"); ent->client->ps.stats[STAT_TIMER] = (ent->client->respawn_framenum - level.framenum)/10; } // else if (ent->client->enviro_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_envirosuit"); ent->client->ps.stats[STAT_TIMER] = (ent->client->enviro_framenum - level.framenum)/10; } else if (ent->client->breather_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_rebreather"); ent->client->ps.stats[STAT_TIMER] = (ent->client->breather_framenum - level.framenum)/10; } else { ent->client->ps.stats[STAT_TIMER_ICON] = 0; ent->client->ps.stats[STAT_TIMER] = 0; } // // selected item // if (ent->client->pers.selected_item == -1) ent->client->ps.stats[STAT_SELECTED_ICON] = 0; else ent->client->ps.stats[STAT_SELECTED_ICON] = gi.imageindex (itemlist[ent->client->pers.selected_item].icon); ent->client->ps.stats[STAT_SELECTED_ITEM] = ent->client->pers.selected_item; //RAV ent->client->ps.stats[STAT_RUNE] = 0; for (i=RUNE_FIRST; i<=RUNE_LAST; i++) { if (rune_has_rune(ent, i)) ent->client->ps.stats[STAT_RUNE] = CS_ITEMS + ITEM_INDEX(FindItem(rune_namefornum[i])); } // // // layouts // ent->client->ps.stats[STAT_LAYOUTS] = 0; if (deathmatch->value) { if (ent->client->pers.health <= 0 || level.intermissiontime || ent->client->showhelp || ent->client->showscores || ent->client->pers.db_hud || ent->client->pers.motd )//RAV { ent->client->ps.stats[STAT_LAYOUTS] |= 1; } if (ent->client->showinventory && ent->client->pers.health > 0) { ent->client->ps.stats[STAT_LAYOUTS] |= 2; } } else { if (ent->client->showscores || ent->client->showhelp || ent->client->pers.db_hud || ent->client->pers.motd )//RAV { ent->client->ps.stats[STAT_LAYOUTS] |= 1; } if (ent->client->showinventory && ent->client->pers.health > 0) { ent->client->ps.stats[STAT_LAYOUTS] |= 2; } } // frags // ent->client->ps.stats[STAT_FRAGS] = ent->client->resp.score; // // help icon / current weapon if not shown // if (ent->client->resp.helpchanged && (level.framenum&8) ) ent->client->ps.stats[STAT_HELPICON] = gi.imageindex ("i_help"); else if ( (ent->client->pers.hand == CENTER_HANDED || ent->client->ps.fov > 91) && ent->client->pers.weapon) ent->client->ps.stats[STAT_HELPICON] = gi.imageindex (ent->client->pers.weapon->icon); else ent->client->ps.stats[STAT_HELPICON] = 0; // gi.dprintf("pers.weapon is %s\n", ent->client->pers.weapon->classname); //ZOID if (ctf->value) SetCTFStats(ent); //ZOID }
/* =============== G_SetClientEffects =============== */ void G_SetClientEffects (edict_t * ent) { int pa_type; int remaining; ent->s.effects = 0; // zucc added RF_IR_VISIBLE //FB 6/1/99 - only for live players if (ent->deadflag != DEAD_DEAD) ent->s.renderfx = RF_IR_VISIBLE; else ent->s.renderfx = 0; if (ent->health <= 0 || level.intermissiontime) return; if (ent->powerarmor_time > level.time) { pa_type = PowerArmorType (ent); if (pa_type == POWER_ARMOR_SCREEN) { ent->s.effects |= EF_POWERSCREEN; } else if (pa_type == POWER_ARMOR_SHIELD) { ent->s.effects |= EF_COLOR_SHELL; ent->s.renderfx |= RF_SHELL_GREEN; } } if (ctf->value) CTFEffects (ent); if (ent->client->quad_framenum > level.framenum) { remaining = ent->client->quad_framenum - level.framenum; if (remaining > 30 || (remaining & 4)) ent->s.effects |= EF_QUAD; } if (ent->client->invincible_framenum > level.framenum) { remaining = ent->client->invincible_framenum - level.framenum; if (remaining > 30 || (remaining & 4)) ent->s.effects |= EF_PENT; } // show cheaters!!! if (ent->flags & FL_GODMODE) { ent->s.effects |= EF_COLOR_SHELL; ent->s.renderfx |= (RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE); } // AQ2:TNG - JBravo adding UVtime if (ctf->value && ((ent->client->ctf_uvtime & 4) || (lights_camera_action & 4))) { ent->s.effects |= EF_COLOR_SHELL; if (ent->client->resp.team == TEAM1) ent->s.renderfx |= RF_SHELL_RED; else if (ent->client->resp.team == TEAM2) ent->s.renderfx |= RF_SHELL_BLUE; else ent->s.renderfx |= RF_SHELL_GREEN; } // TNG Flashlight if ((darkmatch->value) && (ent->client) && (ent->flashlight)) { //ent->s.effects |= EF_YELLOWSHELL; // no good one? :/ ent->s.renderfx |= RF_FULLBRIGHT; } }
/* =============== G_SetStats =============== */ void G_SetStats (edict_t *ent) { gitem_t *item; int index, cells; int power_armor_type; // // health // ent->client->ps.stats[STAT_HEALTH_ICON] = level.pic_health; ent->client->ps.stats[STAT_HEALTH] = ent->health; // // ammo // if (!ent->client->ammo_index /* || !ent->client->pers.inventory[ent->client->ammo_index] */) { ent->client->ps.stats[STAT_AMMO_ICON] = 0; ent->client->ps.stats[STAT_AMMO] = 0; } else { item = &itemlist[ent->client->ammo_index]; ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex (item->icon); ent->client->ps.stats[STAT_AMMO] = ent->client->pers.inventory[ent->client->ammo_index]; } // // armor // power_armor_type = PowerArmorType (ent); if (power_armor_type) { cells = ent->client->pers.inventory[ITEM_INDEX(FindItem ("cells"))]; if (cells == 0) { // ran out of cells for power armor ent->flags &= ~FL_POWER_ARMOR; gi.sound(ent, CHAN_ITEM, gi.soundindex("misc/power2.wav"), 1, ATTN_NORM, 0); power_armor_type = 0;; } } index = ArmorIndex (ent); if (power_armor_type && (!index || (level.framenum & 8) ) ) { // flash between power armor and other armor icon ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex ("i_powershield"); ent->client->ps.stats[STAT_ARMOR] = cells; } else if (index) { item = GetItemByIndex (index); ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex (item->icon); ent->client->ps.stats[STAT_ARMOR] = ent->client->pers.inventory[index]; } else { ent->client->ps.stats[STAT_ARMOR_ICON] = 0; ent->client->ps.stats[STAT_ARMOR] = 0; } // // pickup message // if (level.time > ent->client->pickup_msg_time) { ent->client->ps.stats[STAT_PICKUP_ICON] = 0; ent->client->ps.stats[STAT_PICKUP_STRING] = 0; } // // timers // if (ent->client->quad_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_quad"); ent->client->ps.stats[STAT_TIMER] = (ent->client->quad_framenum - level.framenum)/10; } else if (ent->client->invincible_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_invulnerability"); ent->client->ps.stats[STAT_TIMER] = (ent->client->invincible_framenum - level.framenum)/10; } else if (ent->client->enviro_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_envirosuit"); ent->client->ps.stats[STAT_TIMER] = (ent->client->enviro_framenum - level.framenum)/10; } else if (ent->client->breather_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_rebreather"); ent->client->ps.stats[STAT_TIMER] = (ent->client->breather_framenum - level.framenum)/10; } else { ent->client->ps.stats[STAT_TIMER_ICON] = 0; ent->client->ps.stats[STAT_TIMER] = 0; } // // selected item // if (ent->client->pers.selected_item == -1) ent->client->ps.stats[STAT_SELECTED_ICON] = 0; else ent->client->ps.stats[STAT_SELECTED_ICON] = gi.imageindex (itemlist[ent->client->pers.selected_item].icon); ent->client->ps.stats[STAT_SELECTED_ITEM] = ent->client->pers.selected_item; // // layouts // ent->client->ps.stats[STAT_LAYOUTS] = 0; if (deathmatch->value) { if (ent->client->pers.health <= 0 || level.intermissiontime || ent->client->showscores) ent->client->ps.stats[STAT_LAYOUTS] |= 1; if (ent->client->showinventory && ent->client->pers.health > 0) ent->client->ps.stats[STAT_LAYOUTS] |= 2; } else { // TMF7 GHOST MODE ( two new conditions here for soul ability/collection layouts ) if (ent->client->showscores || ent->client->showhelp || ent->client->showcollection || ent->client->showabilities ) ent->client->ps.stats[STAT_LAYOUTS] |= 1; if (ent->client->showinventory && ent->client->pers.health > 0) ent->client->ps.stats[STAT_LAYOUTS] |= 2; } // // frags // ent->client->ps.stats[STAT_FRAGS] = ent->client->resp.score; // // help icon / current weapon if not shown // if (ent->client->pers.helpchanged && (level.framenum&8) ) ent->client->ps.stats[STAT_HELPICON] = gi.imageindex ("i_help"); else if ( (ent->client->pers.hand == CENTER_HANDED || ent->client->ps.fov > 91) && ent->client->pers.weapon) ent->client->ps.stats[STAT_HELPICON] = gi.imageindex (ent->client->pers.weapon->icon); else ent->client->ps.stats[STAT_HELPICON] = 0; ent->client->ps.stats[STAT_SPECTATOR] = 0; // TMF7 BEGIN GHOST MODE ( ghud ) // // souls // if ( ent->client->pool_of_souls ) { ent->client->ps.stats[STAT_SOULS_ICON] = gi.imageindex ("turtle"); ent->client->ps.stats[STAT_SOULS] = ent->client->pool_of_souls; } else { ent->client->ps.stats[STAT_SOULS_ICON] = 0; ent->client->ps.stats[STAT_SOULS] = 0; } // // soul pickup message // if ( level.time > ent->client->pickup_soul_msg_time ) { ent->client->ps.stats[STAT_SOULS_STRING] = CS_ITEMS+game.num_items+UNIQUE_SOUL_TYPES+1; // because 0 displays the level name } // TMF7 END GHOST MODE ( ghud ) }
void G_SetClientEffects(edict_t *ent) { int pa_type; int remaining; if (!ent) { return; } ent->s.effects = 0; ent->s.renderfx = 0; if ((ent->health <= 0) || level.intermissiontime) { return; } if (ent->powerarmor_time > level.time) { pa_type = PowerArmorType (ent); if (pa_type == POWER_ARMOR_SCREEN) { ent->s.effects |= EF_POWERSCREEN; } else if (pa_type == POWER_ARMOR_SHIELD) { ent->s.effects |= EF_COLOR_SHELL; ent->s.renderfx |= RF_SHELL_GREEN; } } if (ent->client->quad_framenum > level.framenum) { remaining = ent->client->quad_framenum - level.framenum; if ((remaining > 30) || (remaining & 4)) { ent->s.effects |= EF_QUAD; } } if (ent->client->invincible_framenum > level.framenum) { remaining = ent->client->invincible_framenum - level.framenum; if ((remaining > 30) || (remaining & 4)) { ent->s.effects |= EF_PENT; } } // show cheaters!!! if (ent->flags & FL_GODMODE) { ent->s.effects |= EF_COLOR_SHELL; ent->s.renderfx |= (RF_SHELL_RED|RF_SHELL_GREEN|RF_SHELL_BLUE); } if(ent->client->zCameraLocalEntity) /* FS: Zaero specific game dll changes */ { VectorCopy (ent->s.origin, ent->client->zCameraLocalEntity->s.origin); VectorCopy (ent->s.angles, ent->client->zCameraLocalEntity->s.angles); VectorCopy (ent->s.old_origin, ent->client->zCameraLocalEntity->s.old_origin); ent->client->zCameraLocalEntity->s.effects = ent->s.effects; } }
/* =============== G_SetStats =============== */ void G_SetStats (edict_t *ent) { gitem_t *item; int index, cells; int power_armor_type; // // health // ent->client->ps.stats[STAT_HEALTH_ICON] = level.pic_health; ent->client->ps.stats[STAT_HEALTH] = ent->health; // // ammo // if (!ent->client->ammo_index /* || !ent->client->pers.inventory[ent->client->ammo_index] */) { ent->client->ps.stats[STAT_AMMO_ICON] = 0; ent->client->ps.stats[STAT_AMMO] = 0; } else { item = &itemlist[ent->client->ammo_index]; ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex (item->icon); ent->client->ps.stats[STAT_AMMO] = ent->client->pers.inventory[ent->client->ammo_index]; } // // armor // power_armor_type = PowerArmorType (ent); if (power_armor_type) { cells = ent->client->pers.inventory[ITEM_INDEX(FindItem ("cells"))]; if (cells == 0) { // ran out of cells for power armor ent->flags &= ~FL_POWER_ARMOR; gi.sound(ent, CHAN_ITEM, gi.soundindex("misc/power2.wav"), 1, ATTN_NORM, 0); power_armor_type = 0;; } } index = ArmorIndex (ent); if (power_armor_type && (!index || (level.framenum & 8) ) ) { // flash between power armor and other armor icon // Knightmare- use correct icon for power screen if (power_armor_type == POWER_ARMOR_SHIELD) ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex ("i_powershield"); else // POWER_ARMOR_SCREEN ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex ("i_powerscreen"); ent->client->ps.stats[STAT_ARMOR] = cells; } else if (index) { item = GetItemByIndex (index); ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex (item->icon); ent->client->ps.stats[STAT_ARMOR] = ent->client->pers.inventory[index]; } else { ent->client->ps.stats[STAT_ARMOR_ICON] = 0; ent->client->ps.stats[STAT_ARMOR] = 0; } // // pickup message // if (level.time > ent->client->pickup_msg_time) { ent->client->ps.stats[STAT_PICKUP_ICON] = 0; ent->client->ps.stats[STAT_PICKUP_STRING] = 0; } // // timers // if (ent->client->quad_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_quad"); ent->client->ps.stats[STAT_TIMER] = (ent->client->quad_framenum - level.framenum)/10; } else if (ent->client->invincible_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_invulnerability"); ent->client->ps.stats[STAT_TIMER] = (ent->client->invincible_framenum - level.framenum)/10; } else if (ent->client->enviro_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_envirosuit"); ent->client->ps.stats[STAT_TIMER] = (ent->client->enviro_framenum - level.framenum)/10; } else if (ent->client->breather_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_rebreather"); ent->client->ps.stats[STAT_TIMER] = (ent->client->breather_framenum - level.framenum)/10; } else { ent->client->ps.stats[STAT_TIMER_ICON] = 0; ent->client->ps.stats[STAT_TIMER] = 0; } // // selected item // if (ent->client->pers.selected_item == -1) ent->client->ps.stats[STAT_SELECTED_ICON] = 0; else ent->client->ps.stats[STAT_SELECTED_ICON] = gi.imageindex (itemlist[ent->client->pers.selected_item].icon); ent->client->ps.stats[STAT_SELECTED_ITEM] = ent->client->pers.selected_item; // // layouts // ent->client->ps.stats[STAT_LAYOUTS] = 0; if (deathmatch->value) { if (ent->client->pers.health <= 0 || level.intermissiontime || ent->client->showscores) ent->client->ps.stats[STAT_LAYOUTS] |= 1; if (ent->client->showinventory && ent->client->pers.health > 0) ent->client->ps.stats[STAT_LAYOUTS] |= 2; } else { if (ent->client->showscores || ent->client->showhelp) ent->client->ps.stats[STAT_LAYOUTS] |= 1; if (ent->client->showinventory && ent->client->pers.health > 0) ent->client->ps.stats[STAT_LAYOUTS] |= 2; } // // frags // ent->client->ps.stats[STAT_FRAGS] = ent->client->resp.score; // // help icon / current weapon if not shown // if (ent->client->resp.helpchanged && (level.framenum &8) ) ent->client->ps.stats[STAT_HELPICON] = gi.imageindex ("i_help"); else if ( (ent->client->pers.hand == CENTER_HANDED || ent->client->ps.fov > 91) && ent->client->pers.weapon) ent->client->ps.stats[STAT_HELPICON] = gi.imageindex (ent->client->pers.weapon->icon); else ent->client->ps.stats[STAT_HELPICON] = 0; //ZOID SetCTFStats(ent); //ZOID }
void G_SetStats (edict_t *ent) { gitem_t *item; // int num; int index, cells; int power_armor_type = 0; // int time_left;//K03 // // health // ent->client->ps.stats[STAT_HEALTH_ICON] = level.pic_health; if (ent->health <= 32767) ent->client->ps.stats[STAT_HEALTH] = ent->health; else ent->client->ps.stats[STAT_HEALTH] = 666; //GHz START // 3.5 show percent ability is charged if (ent->client->charge_index) ent->client->ps.stats[STAT_CHARGE_LEVEL] = ent->myskills.abilities[ent->client->charge_index-1].charge; else ent->client->ps.stats[STAT_CHARGE_LEVEL] = 0; if (G_EntExists(ent->supplystation) /*&& (ent->supplystation->wait >= level.time)*/) { ent->client->ps.stats[STAT_STATION_ICON] = gi.imageindex("i_tele"); //if (ent->supplystation->wait < 100) ent->client->ps.stats[STAT_STATION_TIME] = (int)ent->supplystation->wait;//-level.time; //else // ent->client->ps.stats[STAT_STATION_TIME] = 0; } else { ent->client->ps.stats[STAT_STATION_ICON] = 0; ent->client->ps.stats[STAT_STATION_TIME] = 0; } if (ptr->value || domination->value) { //if (G_EntExists(ent)) if (ent->inuse && ent->teamnum) { index = 0; if (ent->teamnum == 1) { if (DEFENSE_TEAM == ent->teamnum) index = gi.imageindex("i_ctf1"); // show team color pic else index = gi.imageindex("i_ctf1d"); // not in control } else if (ent->teamnum == 2) { if (DEFENSE_TEAM == ent->teamnum) index = gi.imageindex("i_ctf2"); else index = gi.imageindex("i_ctf2d"); } ent->client->ps.stats[STAT_TEAM_ICON] = index; } else { ent->client->ps.stats[STAT_TEAM_ICON] = 0; } } if (ctf->value) { if (ent->inuse && ent->teamnum) { edict_t *base; index = 0; if ((base = CTF_GetFlagBaseEnt(ent->teamnum)) != NULL) { if (ent->teamnum == RED_TEAM) { if (base->count == BASE_FLAG_SECURE) index = gi.imageindex("i_ctf1"); // show team color pic else { if (level.framenum&8) index = gi.imageindex("i_ctf1d"); // flag taken else index = gi.imageindex("i_ctf1"); } } else if (ent->teamnum == BLUE_TEAM) { if (base->count == BASE_FLAG_SECURE) index = gi.imageindex("i_ctf2"); else { if (level.framenum&8) index = gi.imageindex("i_ctf2d"); else index = gi.imageindex("i_ctf2"); } } } ent->client->ps.stats[STAT_TEAM_ICON] = index; } else { ent->client->ps.stats[STAT_TEAM_ICON] = 0; } } //GHz END // player boss if (G_EntExists(ent->owner)) ent->client->ps.stats[STAT_HEALTH] = ent->owner->health; // // ammo // if (!ent->client->ammo_index /* || !ent->client->pers.inventory[ent->client->ammo_index] */) { ent->client->ps.stats[STAT_AMMO_ICON] = 0; ent->client->ps.stats[STAT_AMMO] = 0; } else { item = &itemlist[ent->client->ammo_index]; ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex (item->icon); ent->client->ps.stats[STAT_AMMO] = ent->client->pers.inventory[ent->client->ammo_index]; } //GHz START // blaster weapon ammo if (ent->client->pers.weapon == Fdi_BLASTER) { ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex("a_cells"); ent->client->ps.stats[STAT_AMMO] = ent->monsterinfo.lefty; } //GHz END // // armor // power_armor_type = PowerArmorType (ent); if (power_armor_type) { cells = ent->client->pers.inventory[ITEM_INDEX(Fdi_CELLS)]; if (cells == 0) { // ran out of cells for power armor ent->flags &= ~FL_POWER_ARMOR; gi.sound(ent, CHAN_ITEM, gi.soundindex("misc/power2.wav"), 1, ATTN_NORM, 0); power_armor_type = 0; } } index = ArmorIndex (ent); if (power_armor_type && (!index || ent->mtype || (level.framenum & 8) ) )//4.2 morphed players only have powered armor { // flash between power armor and other armor icon ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex ("i_powershield"); ent->client->ps.stats[STAT_ARMOR] = cells; } else if (index && !ent->mtype) { item = GetItemByIndex (index); ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex (item->icon); ent->client->ps.stats[STAT_ARMOR] = ent->client->pers.inventory[index]; } else { ent->client->ps.stats[STAT_ARMOR_ICON] = 0; ent->client->ps.stats[STAT_ARMOR] = 0; } // morphed players if (ent->mtype) { if ((ent->mtype == MORPH_MEDIC) && (ent->client->weapon_mode == 0 || ent->client->weapon_mode == 2)) { ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex("a_cells"); ent->client->ps.stats[STAT_AMMO] = ent->myskills.abilities[MEDIC].ammo; } else if (ent->mtype == MORPH_FLYER) { ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex("a_cells"); ent->client->ps.stats[STAT_AMMO] = ent->myskills.abilities[FLYER].ammo; } else if (ent->mtype == MORPH_CACODEMON) { ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex("a_rockets"); ent->client->ps.stats[STAT_AMMO] = ent->myskills.abilities[CACODEMON].ammo; } else { ent->client->ps.stats[STAT_AMMO_ICON] = 0; ent->client->ps.stats[STAT_AMMO] = 0; } } // player-monsters if (PM_PlayerHasMonster(ent)) { if (ent->owner->mtype == P_TANK) { if (ent->client->weapon_mode == 0) { ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex("a_rockets"); ent->client->ps.stats[STAT_AMMO] = ent->owner->monsterinfo.jumpup; } else if (ent->client->weapon_mode == 2) { ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex("a_bullets"); ent->client->ps.stats[STAT_AMMO] = ent->owner->monsterinfo.lefty; } else if (ent->client->weapon_mode == 3) { ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex("a_cells"); ent->client->ps.stats[STAT_AMMO] = ent->owner->monsterinfo.radius; } else { ent->client->ps.stats[STAT_AMMO_ICON] = 0; ent->client->ps.stats[STAT_AMMO] = 0; } if (power_armor_type) { ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex ("i_powershield"); ent->client->ps.stats[STAT_ARMOR] = cells; } else { ent->client->ps.stats[STAT_ARMOR_ICON] = 0; ent->client->ps.stats[STAT_ARMOR] = 0; } } else { ent->client->ps.stats[STAT_AMMO_ICON] = 0; ent->client->ps.stats[STAT_AMMO] = 0; } } // // pickup message // if (level.time > ent->client->pickup_msg_time) { ent->client->ps.stats[STAT_PICKUP_ICON] = 0; ent->client->ps.stats[STAT_PICKUP_STRING] = 0; } // // timers // if (ent->client->quad_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_quad"); ent->client->ps.stats[STAT_TIMER] = (ent->client->quad_framenum - level.framenum)/10; } // RAFAEL else if (ent->client->quadfire_framenum > level.framenum) { // note to self // need to change imageindex ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_quadfire"); ent->client->ps.stats[STAT_TIMER] = (ent->client->quadfire_framenum - level.framenum)/10; } else if (ent->client->invincible_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_invulnerability"); ent->client->ps.stats[STAT_TIMER] = (ent->client->invincible_framenum - level.framenum)/10; } else if (ent->client->enviro_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_envirosuit"); ent->client->ps.stats[STAT_TIMER] = (ent->client->enviro_framenum - level.framenum)/10; } else if (ent->client->breather_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_rebreather"); ent->client->ps.stats[STAT_TIMER] = (ent->client->breather_framenum - level.framenum)/10; } //K03 Begin else if (ent->client->thrusting == 1 || ent->client->cloakable || ent->client->hook_state) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("k_powercube"); ent->client->ps.stats[STAT_TIMER] = ent->client->pers.inventory[power_cube_index]; } //K03 End else { ent->client->ps.stats[STAT_TIMER_ICON] = 0; ent->client->ps.stats[STAT_TIMER] = 0; } // // selected item // if (ent->client->pers.selected_item == -1) ent->client->ps.stats[STAT_SELECTED_ICON] = 0; else ent->client->ps.stats[STAT_SELECTED_ICON] = gi.imageindex (itemlist[ent->client->pers.selected_item].icon); ent->client->ps.stats[STAT_SELECTED_ITEM] = ent->client->pers.selected_item; // // layouts // ent->client->ps.stats[STAT_LAYOUTS] = 0; if (deathmatch->value) { if (ent->client->pers.health <= 0 || level.intermissiontime || ent->client->showscores || ent->client->pers.scanner_active) ent->client->ps.stats[STAT_LAYOUTS] |= 1; if (ent->client->showinventory && ent->client->pers.health > 0) ent->client->ps.stats[STAT_LAYOUTS] |= 2; } else { if (ent->client->showscores || ent->client->showhelp) ent->client->ps.stats[STAT_LAYOUTS] |= 1; if (ent->client->showinventory && ent->client->pers.health > 0) ent->client->ps.stats[STAT_LAYOUTS] |= 2; } // // frags // ent->client->ps.stats[STAT_FRAGS] = ent->client->resp.score; // // help icon / current weapon if not shown // if (ent->client->resp.helpchanged && (level.framenum&8) ) ent->client->ps.stats[STAT_HELPICON] = gi.imageindex ("i_help"); else if ( (ent->client->pers.hand == CENTER_HANDED || ent->client->ps.fov > 91) && ent->client->pers.weapon) ent->client->ps.stats[STAT_HELPICON] = gi.imageindex (ent->client->pers.weapon->icon); else ent->client->ps.stats[STAT_HELPICON] = 0; //ponpoko /*K03 if(ent->client->zc.aiming == 1) { ent->client->ps.stats[STAT_SIGHT_PIC] = gi.imageindex ("zsight"); } else if(ent->client->zc.aiming == 3) { if(ent->client->zc.lockon) ent->client->ps.stats[STAT_SIGHT_PIC] = gi.imageindex ("zsight_l1"); else ent->client->ps.stats[STAT_SIGHT_PIC] = gi.imageindex ("zsight_l0"); } else ent->client->ps.stats[STAT_SIGHT_PIC] = 0;*/ //ponpoko //K03 Begin //ent->client->ps.stats[STAT_LEVEL] = ent->myskills.level; ent->client->ps.stats[STAT_STREAK] = ent->myskills.streak; /*if (timelimit->value) time_left = (timelimit->value*60 - level.time); else time_left = 60*99; ent->client->ps.stats[STAT_TIMEMIN] = (int)(time_left/60);*/ ent->client->ps.stats[STAT_TIMEMIN] = ent->client->pers.inventory[power_cube_index]; if (ent->client->ps.stats[STAT_TIMEMIN] < 0) ent->client->ps.stats[STAT_TIMEMIN] = 0; if (ent->client->pers.selected_item == -1) ent->client->ps.stats[STAT_SELECTED_NUM] = 0; else ent->client->ps.stats[STAT_SELECTED_NUM] = ent->client->pers.inventory[ent->client->pers.selected_item]; //K03 End //GHz Begin V_PlayerID(ent, NULL); // id code //GHz End //GHz START if ((ent->myskills.abilities[ID].disable) || (!ent->myskills.abilities[ID].current_level) || (level.time > ent->lastdmg+2)) ent->client->ps.stats[STAT_ID_DAMAGE] = 0; //GHz END }
void G_SetClientEffects(edict_t *ent) { int pa_type; int remaining; if (!ent) { return; } ent->s.effects = 0; /* player is always ir visible, even dead. */ ent->s.renderfx = RF_IR_VISIBLE; if ((ent->health <= 0) || level.intermissiontime) { return; } if (ent->flags & FL_DISGUISED) { ent->s.renderfx |= RF_USE_DISGUISE; } if (gamerules && gamerules->value) { if (DMGame.PlayerEffects) { DMGame.PlayerEffects(ent); } } if (ent->powerarmor_time > level.time) { pa_type = PowerArmorType(ent); if (pa_type == POWER_ARMOR_SCREEN) { ent->s.effects |= EF_POWERSCREEN; } else if (pa_type == POWER_ARMOR_SHIELD) { ent->s.effects |= EF_COLOR_SHELL; ent->s.renderfx |= RF_SHELL_GREEN; } } if (ent->client->quad_framenum > level.framenum) { remaining = ent->client->quad_framenum - level.framenum; if ((remaining > 30) || (remaining & 4)) { ent->s.effects |= EF_QUAD; } } if (ent->client->double_framenum > level.framenum) { remaining = ent->client->double_framenum - level.framenum; if ((remaining > 30) || (remaining & 4)) { ent->s.effects |= EF_DOUBLE; } } if ((ent->client->owned_sphere) && (ent->client->owned_sphere->spawnflags == 1)) { ent->s.effects |= EF_HALF_DAMAGE; } if (ent->client->tracker_pain_framenum > level.framenum) { ent->s.effects |= EF_TRACKERTRAIL; } if (ent->client->invincible_framenum > level.framenum) { remaining = ent->client->invincible_framenum - level.framenum; if ((remaining > 30) || (remaining & 4)) { ent->s.effects |= EF_PENT; } } /* show cheaters!!! */ if (ent->flags & FL_GODMODE) { ent->s.effects |= EF_COLOR_SHELL; ent->s.renderfx |= (RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE); } }
void G_SetClientEffects(edict_t *ent) { int pa_type; int remaining; if (!ent) { return; } ent->s.effects = 0; ent->s.renderfx = RF_IR_VISIBLE; if ((ent->health <= 0) || level.intermissiontime) { return; } if (ent->powerarmor_time > level.time) { pa_type = PowerArmorType(ent); if (pa_type == POWER_ARMOR_SCREEN) { ent->s.effects |= EF_POWERSCREEN; } else if (pa_type == POWER_ARMOR_SHIELD) { ent->s.effects |= EF_COLOR_SHELL; ent->s.renderfx |= RF_SHELL_GREEN; } } if (ent->client->quad_framenum > level.framenum) { remaining = ent->client->quad_framenum - level.framenum; if ((remaining > 30) || (remaining & 4)) { ent->s.effects |= EF_QUAD; } } if (ent->client->invincible_framenum > level.framenum) { remaining = ent->client->invincible_framenum - level.framenum; if ((remaining > 30) || (remaining & 4)) { ent->s.effects |= EF_PENT; } } /* show cheaters */ if (ent->flags & FL_GODMODE) { ent->s.effects |= EF_COLOR_SHELL; ent->s.renderfx |= (RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE); } }
/* =============== G_SetStats =============== */ void G_SetStats (edict_t *ent) { const gitem_t *item; int index, cells; int power_armor_type; cells = 0; ent->client->ps.stats[STAT_ID_VIEW_INDEX] = 0; if (!ent->client->pers.disable_id_view) if (TDM_GetPlayerIdView (ent)) ent->client->ps.stats[STAT_ID_VIEW_INDEX] = CS_TDM_ID_VIEW; // // health // ent->client->ps.stats[STAT_HEALTH_ICON] = level.pic_health; ent->client->ps.stats[STAT_HEALTH] = (ent->health & 0xFFFF); // // ammo // if (!ent->client->ammo_index /* || !ent->client->inventory[ent->client->ammo_index] */) { ent->client->ps.stats[STAT_AMMO_ICON] = 0; ent->client->ps.stats[STAT_AMMO] = 0; } else { item = &itemlist[ent->client->ammo_index]; ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex (item->icon); ent->client->ps.stats[STAT_AMMO] = ent->client->inventory[ent->client->ammo_index]; } // // armor // power_armor_type = PowerArmorType (ent); if (power_armor_type) { cells = ent->client->inventory[ITEM_AMMO_CELLS]; if (cells == 0) { // ran out of cells for power armor ent->flags &= ~FL_POWER_ARMOR; gi.sound(ent, CHAN_ITEM, gi.soundindex("misc/power2.wav"), 1, ATTN_NORM, 0); power_armor_type = 0;; } } index = ArmorIndex (ent); if (power_armor_type && (!index || (level.framenum & 8) ) ) { // flash between power armor and other armor icon ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex ("i_powershield"); ent->client->ps.stats[STAT_ARMOR] = cells; } else if (index) { item = GetItemByIndex (index); ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex (item->icon); ent->client->ps.stats[STAT_ARMOR] = ent->client->inventory[index]; } else { ent->client->ps.stats[STAT_ARMOR_ICON] = 0; ent->client->ps.stats[STAT_ARMOR] = 0; } // // pickup message // if (level.time > ent->client->pickup_msg_time) { ent->client->ps.stats[STAT_PICKUP_ICON] = 0; ent->client->ps.stats[STAT_PICKUP_STRING] = 0; } // // timers // if (ent->client->quad_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_quad"); ent->client->ps.stats[STAT_TIMER] = FRAMES_TO_SECS((ent->client->quad_framenum - level.framenum)); } else if (ent->client->enviro_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_envirosuit"); ent->client->ps.stats[STAT_TIMER] = FRAMES_TO_SECS(ent->client->enviro_framenum - level.framenum); } else if (ent->client->breather_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_rebreather"); ent->client->ps.stats[STAT_TIMER] = FRAMES_TO_SECS(ent->client->breather_framenum - level.framenum); } else { ent->client->ps.stats[STAT_TIMER_ICON] = 0; ent->client->ps.stats[STAT_TIMER] = 0; } if (ent->client->invincible_framenum > level.framenum) { //is the usual timer in use? if (ent->client->ps.stats[STAT_TIMER]) { //yes, show new timer for invuln ent->client->ps.stats[STAT_TIMER_PENT_ICON] = gi.imageindex ("p_invulnerability"); ent->client->ps.stats[STAT_TIMER_PENT] = FRAMES_TO_SECS(ent->client->invincible_framenum - level.framenum); } else { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_invulnerability"); ent->client->ps.stats[STAT_TIMER] = FRAMES_TO_SECS(ent->client->invincible_framenum - level.framenum); // clear previous timer if there was something if (ent->client->ps.stats[STAT_TIMER_PENT]) { ent->client->ps.stats[STAT_TIMER_PENT_ICON] = 0; ent->client->ps.stats[STAT_TIMER_PENT] = 0; } } } else { ent->client->ps.stats[STAT_TIMER_PENT_ICON] = 0; ent->client->ps.stats[STAT_TIMER_PENT] = 0; } // // selected item // if (ent->client->selected_item == -1 || itemlist[ent->client->selected_item].icon == NULL) ent->client->ps.stats[STAT_SELECTED_ICON] = 0; else ent->client->ps.stats[STAT_SELECTED_ICON] = gi.imageindex (itemlist[ent->client->selected_item].icon); ent->client->ps.stats[STAT_SELECTED_ITEM] = ent->client->selected_item; // // layouts // ent->client->ps.stats[STAT_LAYOUTS] = 0; if (ent->health <= 0 || tdm_match_status == MM_SCOREBOARD || ent->client->showscores || ent->client->pers.menu.active || ent->client->showoldscores || ent->client->showmotd) ent->client->ps.stats[STAT_LAYOUTS] |= 1; ent->client->ps.stats[STAT_GAME_STATUS_STRING_INDEX] = CS_TDM_GAME_STATUS; if (vote.active) ent->client->ps.stats[STAT_VOTE_STRING_INDEX] = CS_TDM_VOTE_STRING; else ent->client->ps.stats[STAT_VOTE_STRING_INDEX] = 0; //if (ent->client->showinventory && ent->health > 0) // ent->client->ps.stats[STAT_LAYOUTS] |= 2; // // frags // G_SetTeamScoreStats (ent); // frags for server browser ent->client->ps.stats[STAT_FRAGS] = ent->client->resp.score; // frags for ingame hud ent->client->ps.stats[STAT_SCORE] = ent->client->resp.score; ent->client->ps.stats[STAT_TIME_REMAINING] = CS_TDM_TIMELIMIT_STRING; if (tdm_match_status == MM_TIMEOUT) ent->client->ps.stats[STAT_TIMEOUT_STRING_INDEX] = CS_TDM_TIMEOUT_STRING; else ent->client->ps.stats[STAT_TIMEOUT_STRING_INDEX] = 0; // // help icon / current weapon if not shown // if ( (ent->client->pers.hand == CENTER_HANDED || ent->client->ps.fov > 90) && ent->client->weapon) ent->client->ps.stats[STAT_HELPICON] = gi.imageindex (ent->client->weapon->icon); else ent->client->ps.stats[STAT_HELPICON] = 0; ent->client->ps.stats[STAT_SPECTATOR] = 0; }
void G_SetStats (edict_t *ent) { gitem_t *item; int index, cells; int power_armor_type; // // health // ent->client->ps.stats[STAT_HEALTH_ICON] = level.pic_health; ent->client->ps.stats[STAT_HEALTH] = ent->health; // // ammo // if (!ent->client->ammo_index ) { ent->client->ps.stats[STAT_AMMO_ICON] = 0; ent->client->ps.stats[STAT_AMMO] = 0; } else { item = &itemlist[ent->client->ammo_index]; ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex (item->icon); ent->client->ps.stats[STAT_AMMO] = ent->client->pers.inventory[ent->client->ammo_index]; } // // armor // power_armor_type = PowerArmorType (ent); if (power_armor_type) { cells = ent->client->pers.inventory[ITEM_INDEX(FindItem ("cells"))]; if (cells == 0) { // ran out of cells for power armor ent->flags &= ~(FL_POWER_SHIELD|FL_POWER_SCREEN); gi.sound(ent, CHAN_ITEM, gi.soundindex("misc/power2.wav"), 1, ATTN_NORM, 0); power_armor_type = 0; } } index = ArmorIndex (ent); // Knightmare- show correct icon if ((power_armor_type == POWER_ARMOR_SHIELD) && (!index || (level.framenum & 8) ) ) { // flash between power armor and other armor icon ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex ("i_powershield"); ent->client->ps.stats[STAT_ARMOR] = cells; } else if ((power_armor_type == POWER_ARMOR_SCREEN) && (!index || (level.framenum & 8) ) ) { // flash between power armor and other armor icon ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex ("i_powerscreen"); ent->client->ps.stats[STAT_ARMOR] = cells; } else if (index) { item = GetItemByIndex (index); ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex (item->icon); ent->client->ps.stats[STAT_ARMOR] = ent->client->pers.inventory[index]; } else { ent->client->ps.stats[STAT_ARMOR_ICON] = 0; ent->client->ps.stats[STAT_ARMOR] = 0; } // // pickup message // if (level.time > ent->client->pickup_msg_time) { ent->client->ps.stats[STAT_PICKUP_ICON] = 0; ent->client->ps.stats[STAT_PICKUP_STRING] = 0; } // // timers // if (ent->client->quad_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_quad"); ent->client->ps.stats[STAT_TIMER] = (ent->client->quad_framenum - level.framenum)/10; } else if (ent->client->invincible_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_invulnerability"); ent->client->ps.stats[STAT_TIMER] = (ent->client->invincible_framenum - level.framenum)/10; } else if (ent->client->enviro_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_envirosuit"); ent->client->ps.stats[STAT_TIMER] = (ent->client->enviro_framenum - level.framenum)/10; } else if (ent->client->breather_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_rebreather"); ent->client->ps.stats[STAT_TIMER] = (ent->client->breather_framenum - level.framenum)/10; } #ifdef JETPACK_MOD else if ( (ent->client->jetpack) && (!ent->client->jetpack_infinite) && (ent->client->pers.inventory[fuel_index] >= 0) && (ent->client->pers.inventory[fuel_index] < 100000)) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex("p_jet"); ent->client->ps.stats[STAT_TIMER] = ent->client->pers.inventory[fuel_index]; } #endif else if (level.freeze) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_freeze"); ent->client->ps.stats[STAT_TIMER] = stasis_time->value - level.freezeframes/10; } else { ent->client->ps.stats[STAT_TIMER_ICON] = 0; ent->client->ps.stats[STAT_TIMER] = 0; } // // selected item // if (ent->client->pers.selected_item == -1) ent->client->ps.stats[STAT_SELECTED_ICON] = 0; else ent->client->ps.stats[STAT_SELECTED_ICON] = gi.imageindex (itemlist[ent->client->pers.selected_item].icon); ent->client->ps.stats[STAT_SELECTED_ITEM] = ent->client->pers.selected_item; // Lazarus vehicle/tracktrain // Knightmare- speed bar for CTF if (ctf->value) { if(ent->vehicle && !(ent->vehicle->spawnflags & 16)) { switch(ent->vehicle->moveinfo.state) { case -3: ent->client->ps.stats[STAT_SPEED_CTF] = gi.imageindex("speedr3"); break; case -2: ent->client->ps.stats[STAT_SPEED_CTF] = gi.imageindex("speedr2"); break; case -1: ent->client->ps.stats[STAT_SPEED_CTF] = gi.imageindex("speedr1"); break; case 1: ent->client->ps.stats[STAT_SPEED_CTF] = gi.imageindex("speed1"); break; case 2: ent->client->ps.stats[STAT_SPEED_CTF] = gi.imageindex("speed2"); break; case 3: ent->client->ps.stats[STAT_SPEED_CTF] = gi.imageindex("speed3"); break; default: ent->client->ps.stats[STAT_SPEED_CTF] = gi.imageindex("speed0"); break; } } else ent->client->ps.stats[STAT_SPEED_CTF] = 0; } else { if(ent->vehicle && !(ent->vehicle->spawnflags & 16)) { switch(ent->vehicle->moveinfo.state) { case -3: ent->client->ps.stats[STAT_SPEED] = gi.imageindex("speedr3"); break; case -2: ent->client->ps.stats[STAT_SPEED] = gi.imageindex("speedr2"); break; case -1: ent->client->ps.stats[STAT_SPEED] = gi.imageindex("speedr1"); break; case 1: ent->client->ps.stats[STAT_SPEED] = gi.imageindex("speed1"); break; case 2: ent->client->ps.stats[STAT_SPEED] = gi.imageindex("speed2"); break; case 3: ent->client->ps.stats[STAT_SPEED] = gi.imageindex("speed3"); break; default: ent->client->ps.stats[STAT_SPEED] = gi.imageindex("speed0"); break; } } else ent->client->ps.stats[STAT_SPEED] = 0; } // "whatsit" if (world->effects & FX_WORLDSPAWN_WHATSIT) { if (ent->client->showscores || ent->client->showhelp || ent->client->showinventory) ent->client->whatsit = NULL; else if(!(level.framenum % 5)) // only update every 1/2 second { char *temp = ent->client->whatsit; ent->client->whatsit = NULL; WhatIsIt(ent); if(ent->client->whatsit && !temp) WhatsIt(ent); } } else ent->client->whatsit = NULL; // // layouts // ent->client->ps.stats[STAT_LAYOUTS] = 0; if (deathmatch->value) { if (ent->client->pers.health <= 0 || level.intermissiontime || ent->client->showscores) ent->client->ps.stats[STAT_LAYOUTS] |= 1; if (ent->client->showinventory && ent->client->pers.health > 0) ent->client->ps.stats[STAT_LAYOUTS] |= 2; } else { if (ent->client->showscores || ent->client->showhelp) ent->client->ps.stats[STAT_LAYOUTS] |= 1; if (ent->client->showinventory && ent->client->pers.health > 0) ent->client->ps.stats[STAT_LAYOUTS] |= 2; } if(!ent->client->ps.stats[STAT_LAYOUTS] && ent->client->whatsit) ent->client->ps.stats[STAT_LAYOUTS] |= 1; // // frags // ent->client->ps.stats[STAT_FRAGS] = ent->client->resp.score; // // help icon / current weapon if not shown // if (ent->client->pers.helpchanged && (level.framenum&8) ) ent->client->ps.stats[STAT_HELPICON] = gi.imageindex ("i_help"); else if ( (ent->client->pers.hand == CENTER_HANDED || ent->client->ps.fov > 91) && ent->client->pers.weapon) ent->client->ps.stats[STAT_HELPICON] = gi.imageindex (ent->client->pers.weapon->icon); else ent->client->ps.stats[STAT_HELPICON] = 0; ent->client->ps.stats[STAT_SPECTATOR] = 0; if(ent->client->zoomed) ent->client->ps.stats[STAT_ZOOM] = gi.imageindex("zoom"); else ent->client->ps.stats[STAT_ZOOM] = 0; //ZOID SetCTFStats(ent); //ZOID // Knightmare- show tech icon if in DM if (deathmatch->value && !ctf->value) { int i = 0; gitem_t *tech; ent->client->ps.stats[STAT_CTF_TECH] = 0; while (tnames[i]) { if ((tech = FindItemByClassname(tnames[i])) != NULL && ent->client->pers.inventory[ITEM_INDEX(tech)]) { ent->client->ps.stats[STAT_CTF_TECH] = gi.imageindex(tech->icon); break; } i++; } } // end Knightmare }
/* =============== G_SetClientEffects =============== */ void G_SetClientEffects (edict_t *ent) { int pa_type; int remaining; ent->s.effects = 0; // ent->s.renderfx = 0; // PGM - player is always ir visible, even dead. ent->s.renderfx = RF_IR_VISIBLE; if (ent->health <= 0 || level.intermissiontime) return; //========= //PGM if(ent->flags & FL_DISGUISED) ent->s.renderfx |= RF_USE_DISGUISE; if (gamerules && gamerules->value) { if(DMGame.PlayerEffects) DMGame.PlayerEffects(ent); } //PGM //========= if (ent->powerarmor_time > level.time) { pa_type = PowerArmorType (ent); if (pa_type == POWER_ARMOR_SCREEN) { ent->s.effects |= EF_POWERSCREEN; } else if (pa_type == POWER_ARMOR_SHIELD) { ent->s.effects |= EF_COLOR_SHELL; ent->s.renderfx |= RF_SHELL_GREEN; } } if (ent->client->quad_framenum > level.framenum) { remaining = ent->client->quad_framenum - level.framenum; if (remaining > 30 || (remaining & 4) ) ent->s.effects |= EF_QUAD; } //======= //ROGUE if (ent->client->double_framenum > level.framenum) { remaining = ent->client->double_framenum - level.framenum; if (remaining > 30 || (remaining & 4) ) ent->s.effects |= EF_DOUBLE; } if ((ent->client->owned_sphere) && (ent->client->owned_sphere->spawnflags == 1)) { ent->s.effects |= EF_HALF_DAMAGE; } if (ent->client->tracker_pain_framenum > level.framenum) { ent->s.effects |= EF_TRACKERTRAIL; } //ROGUE //======= if (ent->client->invincible_framenum > level.framenum) { remaining = ent->client->invincible_framenum - level.framenum; if (remaining > 30 || (remaining & 4) ) ent->s.effects |= EF_PENT; } // show cheaters!!! if (ent->flags & FL_GODMODE) { ent->s.effects |= EF_COLOR_SHELL; ent->s.renderfx |= (RF_SHELL_RED|RF_SHELL_GREEN|RF_SHELL_BLUE); } //PGM /* if (ent->client->torch_framenum > level.framenum) { gi.WriteByte (svc_temp_entity); gi.WriteByte (TE_FLASHLIGHT); gi.WritePosition (ent->s.origin); gi.WriteShort (ent - g_edicts); gi.multicast (ent->s.origin, MULTICAST_PVS); } */ //PGM }
/* =============== G_SetStats =============== */ void G_SetStats (edict_t *ent) { gitem_t *item; int index, cells; int power_armor_type; int gotChicken = ent->client->pers.inventory[chickenItemIndex]; // Chicken int isCamera = ent->client->bIsCamera; // Chicken int noabilitys = false; // Chicken // // health // ent->client->ps.stats[STAT_HEALTH_ICON] = level.pic_health; ent->client->ps.stats[STAT_HEALTH] = ent->health; // // ammo // if (!ent->client->ammo_index /* || !ent->client->pers.inventory[ent->client->ammo_index] */) { ent->client->ps.stats[STAT_AMMO_ICON] = 0; ent->client->ps.stats[STAT_AMMO] = 0; } else { item = &itemlist[ent->client->ammo_index]; ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex (item->icon); ent->client->ps.stats[STAT_AMMO] = ent->client->pers.inventory[ent->client->ammo_index]; } // // armor // power_armor_type = PowerArmorType (ent); if (power_armor_type) { cells = ent->client->pers.inventory[ITEM_INDEX(FindItem ("cells"))]; if (gotChicken || cells == 0 || ent->movetype == MOVETYPE_NOCLIP || isCamera) // Chicken { // ran out of cells for power armor ent->flags &= ~FL_POWER_ARMOR; gi.sound(ent, CHAN_ITEM, gi.soundindex("misc/power2.wav"), 1, ATTN_NORM, 0); power_armor_type = 0;; } } index = ArmorIndex (ent); if (power_armor_type && (!index || (level.framenum & 8) ) ) { // flash between power armor and other armor icon ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex ("i_powershield"); ent->client->ps.stats[STAT_ARMOR] = cells; } else if (index) { item = GetItemByIndex (index); ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex (item->icon); ent->client->ps.stats[STAT_ARMOR] = ent->client->pers.inventory[index]; } else { ent->client->ps.stats[STAT_ARMOR_ICON] = 0; ent->client->ps.stats[STAT_ARMOR] = 0; } // // pickup message // if (level.time > ent->client->pickup_msg_time) { ent->client->ps.stats[STAT_PICKUP_ICON] = 0; ent->client->ps.stats[STAT_PICKUP_STRING] = 0; } // // timers // if (ent->movetype != MOVETYPE_NOCLIP && !isCamera) // Chicken { // Chicken if (gotChicken == 0 && ent->client->quad_framenum > level.framenum) // Chicken { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_quad"); ent->client->ps.stats[STAT_TIMER] = (ent->client->quad_framenum - level.framenum)/10; } else if ((ent->client->invincible_framenum > level.framenum && chickenGame && gotChicken && allowInvulnerable) || // Chicken (gotChicken == 0 && ent->client->invincible_framenum > level.framenum)) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_invulnerability"); ent->client->ps.stats[STAT_TIMER] = (ent->client->invincible_framenum - level.framenum)/10; } else if (ent->client->enviro_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_envirosuit"); ent->client->ps.stats[STAT_TIMER] = (ent->client->enviro_framenum - level.framenum)/10; } else if (ent->client->breather_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex ("p_rebreather"); ent->client->ps.stats[STAT_TIMER] = (ent->client->breather_framenum - level.framenum)/10; } else noabilitys = true; // Chicken } // Chicken else // Chicken noabilitys = true; // Chicken if (noabilitys) // Chicken { ent->client->invincible_framenum = level.framenum; // Chicken ent->client->quad_framenum = level.framenum; // Chicken ent->client->ps.stats[STAT_TIMER_ICON] = 0; ent->client->ps.stats[STAT_TIMER] = 0; } // // selected item // if (ent->client->pers.selected_item == -1) ent->client->ps.stats[STAT_SELECTED_ICON] = 0; else ent->client->ps.stats[STAT_SELECTED_ICON] = gi.imageindex (itemlist[ent->client->pers.selected_item].icon); ent->client->ps.stats[STAT_SELECTED_ITEM] = ent->client->pers.selected_item; // // layouts // ent->client->ps.stats[STAT_LAYOUTS] = 0; if (deathmatch->value) { if (ent->client->pers.health <= 0 || level.intermissiontime || ent->client->showscores) ent->client->ps.stats[STAT_LAYOUTS] |= 1; if (ent->client->showinventory && ent->client->pers.health > 0) ent->client->ps.stats[STAT_LAYOUTS] |= 2; if (Chicken_ShowMenu(ent)) ent->client->ps.stats[STAT_LAYOUTS] |= 1; // Chicken } else { if (ent->client->showscores || ent->client->showhelp) ent->client->ps.stats[STAT_LAYOUTS] |= 1; if (ent->client->showinventory && ent->client->pers.health > 0) ent->client->ps.stats[STAT_LAYOUTS] |= 2; } // // frags // if (teams == 0) ent->client->ps.stats[STAT_FRAGS] = ent->client->resp.score; // // help icon / current weapon if not shown // if (ent->client->resp.helpchanged && (level.framenum&8) ) ent->client->ps.stats[STAT_HELPICON] = gi.imageindex ("i_help"); else if ( (ent->client->pers.hand == CENTER_HANDED || ent->client->ps.fov > 91) && ent->client->pers.weapon) ent->client->ps.stats[STAT_HELPICON] = gi.imageindex (ent->client->pers.weapon->icon); else ent->client->ps.stats[STAT_HELPICON] = 0; Chicken_Stats(ent); // Chicken }
/* =============== G_SetClientEffects =============== */ void G_SetClientEffects (edict_t *ent) { int pa_type; int remaining; ent->s.effects = 0; ent->s.renderfx = RF_IR_VISIBLE; // was 0, because all players are ir-goggle visible if (ent->health <= 0 || level.intermissiontime) return; if(ent->flags & FL_DISGUISED) ent->s.renderfx |= RF_USE_DISGUISE; if (ent->powerarmor_time > level.time) { pa_type = PowerArmorType (ent); if (pa_type == POWER_ARMOR_SCREEN) { ent->s.effects |= EF_POWERSCREEN; } else if (pa_type == POWER_ARMOR_SHIELD) { ent->s.effects |= EF_COLOR_SHELL; ent->s.renderfx |= RF_SHELL_GREEN; } } //ZOID CTFEffects(ent); //ZOID if (ent->client->quad_framenum > level.framenum) { remaining = ent->client->quad_framenum - level.framenum; if (remaining > 30 || (remaining & 4) ) ent->s.effects |= EF_QUAD; } if (ent->client->invincible_framenum > level.framenum) { remaining = ent->client->invincible_framenum - level.framenum; if (remaining > 30 || (remaining & 4) ) ent->s.effects |= EF_PENT; } // show cheaters!!! if (ent->flags & FL_GODMODE) { ent->s.effects |= EF_COLOR_SHELL; ent->s.renderfx |= (RF_SHELL_RED|RF_SHELL_GREEN|RF_SHELL_BLUE); } if (ent->client->flashlight) { vec3_t end, forward, offset, right, start, up; trace_t tr; if(level.flashlight_cost > 0) { if(!Q_stricmp(FLASHLIGHT_ITEM,"health") || (ent->client->pers.inventory[ITEM_INDEX(FindItem(FLASHLIGHT_ITEM))]>=level.flashlight_cost) ) { // Player has items remaining if(ent->client->flashlight_time <= level.time) { ent->client->pers.inventory[ITEM_INDEX(FindItem(FLASHLIGHT_ITEM))]-=level.flashlight_cost; ent->client->flashlight_time = level.time + FLASHLIGHT_DRAIN; } } else { // Out of item ent->client->flashlight = false; } } if(ent->client->flashlight) { AngleVectors (ent->s.angles, forward, right, up); VectorSet(offset, 0, 0, ent->viewheight-8); G_ProjectSource (ent->s.origin, offset, forward, right, start); VectorMA(start,384,forward,end); // was 128 tr = gi.trace (start,NULL,NULL, end, ent, CONTENTS_SOLID|CONTENTS_MONSTER|CONTENTS_DEADMONSTER); if (tr.fraction != 1) VectorMA(tr.endpos,-4,forward,end); VectorCopy(tr.endpos,end); gi.WriteByte (svc_temp_entity); gi.WriteByte (TE_FLASHLIGHT); gi.WritePosition (end); gi.WriteShort (ent - g_edicts); gi.multicast (end, MULTICAST_PVS); } } }
void G_SetStats(edict_t *ent) { gitem_t *item; int index, cells = 0; int power_armor_type; if (!ent) { return; } /* health */ ent->client->ps.stats[STAT_HEALTH_ICON] = level.pic_health; ent->client->ps.stats[STAT_HEALTH] = ent->health; /* ammo */ if (!ent->client->ammo_index) { ent->client->ps.stats[STAT_AMMO_ICON] = 0; ent->client->ps.stats[STAT_AMMO] = 0; } else { item = &itemlist[ent->client->ammo_index]; ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex(item->icon); ent->client->ps.stats[STAT_AMMO] = ent->client->pers.inventory[ent->client->ammo_index]; } /* armor */ power_armor_type = PowerArmorType(ent); if (power_armor_type) { cells = ent->client->pers.inventory[ITEM_INDEX(FindItem("cells"))]; if (cells == 0) { /* ran out of cells for power armor */ ent->flags &= ~FL_POWER_ARMOR; gi.sound(ent, CHAN_ITEM, gi.soundindex( "misc/power2.wav"), 1, ATTN_NORM, 0); power_armor_type = 0; } } index = ArmorIndex(ent); if (power_armor_type && (!index || (level.framenum & 8))) { /* flash between power armor and other armor icon */ ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex("i_powershield"); ent->client->ps.stats[STAT_ARMOR] = cells; } else if (index) { item = GetItemByIndex(index); ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex(item->icon); ent->client->ps.stats[STAT_ARMOR] = ent->client->pers.inventory[index]; } else { ent->client->ps.stats[STAT_ARMOR_ICON] = 0; ent->client->ps.stats[STAT_ARMOR] = 0; } /* pickup message */ if (level.time > ent->client->pickup_msg_time) { ent->client->ps.stats[STAT_PICKUP_ICON] = 0; ent->client->ps.stats[STAT_PICKUP_STRING] = 0; } /* timers */ if (ent->client->quad_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex("p_quad"); ent->client->ps.stats[STAT_TIMER] = (ent->client->quad_framenum - level.framenum) / 10; } else if (ent->client->invincible_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex( "p_invulnerability"); ent->client->ps.stats[STAT_TIMER] = (ent->client->invincible_framenum - level.framenum) / 10; } else if (ent->client->enviro_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex("p_envirosuit"); ent->client->ps.stats[STAT_TIMER] = (ent->client->enviro_framenum - level.framenum) / 10; } else if (ent->client->breather_framenum > level.framenum) { ent->client->ps.stats[STAT_TIMER_ICON] = gi.imageindex("p_rebreather"); ent->client->ps.stats[STAT_TIMER] = (ent->client->breather_framenum - level.framenum) / 10; } else { ent->client->ps.stats[STAT_TIMER_ICON] = 0; ent->client->ps.stats[STAT_TIMER] = 0; } /* selected item */ if (ent->client->pers.selected_item == -1) { ent->client->ps.stats[STAT_SELECTED_ICON] = 0; } else { ent->client->ps.stats[STAT_SELECTED_ICON] = gi.imageindex(itemlist[ent->client->pers.selected_item].icon); } ent->client->ps.stats[STAT_SELECTED_ITEM] = ent->client->pers.selected_item; /* layouts */ ent->client->ps.stats[STAT_LAYOUTS] = 0; if (deathmatch->value) { if ((ent->client->pers.health <= 0) || level.intermissiontime || ent->client->showscores) { ent->client->ps.stats[STAT_LAYOUTS] |= 1; } if (ent->client->showinventory && (ent->client->pers.health > 0)) { ent->client->ps.stats[STAT_LAYOUTS] |= 2; } } else { if (ent->client->showscores || ent->client->showhelp) { ent->client->ps.stats[STAT_LAYOUTS] |= 1; } if (ent->client->showinventory && (ent->client->pers.health > 0)) { ent->client->ps.stats[STAT_LAYOUTS] |= 2; } } /* frags */ ent->client->ps.stats[STAT_FRAGS] = ent->client->resp.score; /* help icon / current weapon if not shown */ if (ent->client->pers.helpchanged && (level.framenum & 8)) { ent->client->ps.stats[STAT_HELPICON] = gi.imageindex("i_help"); } else if (((ent->client->pers.hand == CENTER_HANDED) || (ent->client->ps.fov > 91)) && ent->client->pers.weapon) { cvar_t *gun; gun = gi.cvar("cl_gun", "2", 0); if (gun->value != 2) { ent->client->ps.stats[STAT_HELPICON] = gi.imageindex( ent->client->pers.weapon->icon); } else { ent->client->ps.stats[STAT_HELPICON] = 0; } } else { ent->client->ps.stats[STAT_HELPICON] = 0; } ent->client->ps.stats[STAT_SPECTATOR] = 0; }