//----------------------------------------------------------------------------- // // $Id$ // //----------------------------------------------------------------------------- // // $Log$ // Revision 1.16 2002/06/23 21:44:08 jbravo // Fixed shots fired stats for non TP modes and some cleanups // // Revision 1.15 2002/06/23 19:24:19 niceass // bandage bug fix // // Revision 1.14 2002/06/16 20:06:14 jbravo // Reindented all the source files with "indent -kr -ut -i8 -l120 -lc120 -sob -bad -bap" // // Revision 1.13 2002/03/18 19:18:39 slicer // Fixed bandage bugs ( i hope ) // // Revision 1.12 2002/01/11 19:48:30 jbravo // Formatted the source in non DOS format. // // Revision 1.11 2001/12/31 16:28:42 jbravo // I made a Booboo with the Log tag. // // //----------------------------------------------------------------------------- #include "g_local.h" //Elder: someone should comment this b/c it's hard to follow //Makes the damage "non-instant" like AQ2 void CheckBleeding(gentity_t * targ) { int damage; int temp; int realBleedTime; gentity_t *tent; // Elder: use the server's FPS as a basis for bleed time realBleedTime = trap_Cvar_VariableIntegerValue("sv_fps"); // just safety check it if (realBleedTime <= 0) realBleedTime = BLEED_TIME; if (!(targ->client->bleeding) || (targ->health <= 0)) return; // NiceAss: (10.0f / realBleedTime) is just (Q2 FPS / Q3 FPS) temp = (int) (targ->client->bleeding * 0.2f * (10.0f / realBleedTime)); targ->client->bleeding -= temp; if (temp <= 0) temp = 1; targ->client->bleed_remain += temp; damage = (int) (targ->client->bleed_remain / realBleedTime); if (targ->client->bleed_remain >= realBleedTime) { //G_Printf("Bleed Remain: %i Server Time: %i\n", targ->client->bleed_remain, level.time); // if ( (targ->client->ps.stats[STAT_RQ3] & RQ3_BANDAGE_WORK) == RQ3_BANDAGE_WORK && targ->health -= damage; if (targ->health <= 0) { player_die(targ, &g_entities[targ->client->lasthurt_client], &g_entities[targ->client->lasthurt_client], damage, targ->client->lasthurt_mod); } else { targ->client->bleed_remain %= realBleedTime; } if (g_RQ3_ejectBlood.integer && targ->client->bleed_delay <= level.time) { vec3_t bleedOrigin; targ->client->bleed_delay = level.time + 2000; // 2 seconds VectorAdd(targ->client->bleedloc_offset, targ->client->ps.origin, bleedOrigin); //gi.cprintf(ent, PRINT_HIGH, "Bleeding now.\n"); //EjectBlooder(ent, pos, pos); // do bleeding tent = G_TempEntity(bleedOrigin, EV_EJECTBLOOD); tent->s.otherEntityNum = targ->s.clientNum; } } } //Elder: apparently does nothing and is unused void StartBandage(gentity_t * ent) { ent->client->bleeding = 0; }