/* ================== CL_FireEntityEvents ================== */ void CL_FireEntityEvents (frame_t *frame) { entity_state_t *s1; int pnum, num; for (pnum = 0 ; pnum<frame->num_entities ; pnum++) { num = (frame->parse_entities + pnum)&(MAX_PARSE_ENTITIES-1); s1 = &cl_parse_entities[num]; if (s1->event) CL_EntityEvent (s1); // EF_TELEPORTER acts like an event, but is not cleared each frame if (s1->effects & EF_TELEPORTER) CL_TeleporterParticles (s1); } }
// an entity has just been parsed that has an event value static void entity_event(int number) { centity_t *cent = &cl_entities[number]; // EF_TELEPORTER acts like an event, but is not cleared each frame if ((cent->current.effects & EF_TELEPORTER) && CL_FRAMESYNC) { CL_TeleporterParticles(cent->current.origin); } #if USE_FPS if (cent->event_frame != cl.frame.number) return; #endif switch (cent->current.event) { case EV_ITEM_RESPAWN: S_StartSound(NULL, number, CHAN_WEAPON, S_RegisterSound("items/respawn1.wav"), 1, ATTN_IDLE, 0); CL_ItemRespawnParticles(cent->current.origin); break; case EV_PLAYER_TELEPORT: S_StartSound(NULL, number, CHAN_WEAPON, S_RegisterSound("misc/tele1.wav"), 1, ATTN_IDLE, 0); CL_TeleportParticles(cent->current.origin); break; case EV_FOOTSTEP: if (cl_footsteps->integer) S_StartSound(NULL, number, CHAN_BODY, cl_sfx_footsteps[rand() & 3], 1, ATTN_NORM, 0); break; case EV_FALLSHORT: S_StartSound(NULL, number, CHAN_AUTO, S_RegisterSound("player/land1.wav"), 1, ATTN_NORM, 0); break; case EV_FALL: S_StartSound(NULL, number, CHAN_AUTO, S_RegisterSound("*fall2.wav"), 1, ATTN_NORM, 0); break; case EV_FALLFAR: S_StartSound(NULL, number, CHAN_AUTO, S_RegisterSound("*fall1.wav"), 1, ATTN_NORM, 0); break; } }