/* ========================================================================= */ void CL_ParseParticles ( void ) { q_int32_t color, count; vec3_t pos, dir; MSG_ReadPos ( &net_message, pos ); MSG_ReadDir ( &net_message, dir ); color = MSG_ReadByte ( &net_message ); count = MSG_ReadByte ( &net_message ); CL_ParticleEffect ( pos, dir, color, count ); }
void CL_ParseTEnt (void) { int32_t type; vec3_t pos, pos2, dir; explosion_t *ex; int32_t cnt; int32_t color; int32_t r, i; int32_t ent; int32_t magnitude; type = MSG_ReadByte (&net_message); switch (type) { case TE_BLOOD: // bullet hitting flesh MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); // Psychospaz's enhanced particle code CL_BloodHit (pos, dir); break; case TE_GUNSHOT: // bullet hitting wall case TE_SPARKS: case TE_BULLET_SPARKS: MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); // Psychospaz's enhanced particle code if (type == TE_BULLET_SPARKS) VectorScale(dir, 2, dir); { vec3_t color = { 255, 125, 10 }; CL_ParticleEffectSparks (pos, dir, color, (type == TE_GUNSHOT)? 5 : 10); } if (type != TE_SPARKS) { CL_GunSmokeEffect (pos, dir); if (type == TE_GUNSHOT || type == TE_BULLET_SPARKS) CL_ParticleBulletDecal(pos, dir, 2.5); // impact sound cnt = rand()&15; if (cnt == 1) S_StartSound (pos, 0, 0, clMedia.sfx_ric[0], 1, ATTN_NORM, 0); else if (cnt == 2) S_StartSound (pos, 0, 0, clMedia.sfx_ric[1], 1, ATTN_NORM, 0); else if (cnt == 3) S_StartSound (pos, 0, 0, clMedia.sfx_ric[2], 1, ATTN_NORM, 0); } break; case TE_SHOTGUN: // bullet hitting wall MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); // Psychospaz's enhanced particle code CL_GunSmokeEffect (pos, dir); CL_ParticleBulletDecal(pos, dir, 2.8); { vec3_t color = { 200, 100, 10 }; CL_ParticleEffectSparks (pos, dir, color, 8); } break; case TE_SCREEN_SPARKS: case TE_SHIELD_SPARKS: MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); if (type == TE_SCREEN_SPARKS) CL_ParticleEffect (pos, dir, 0xd0, 40); else CL_ParticleEffect (pos, dir, 0xb0, 40); //FIXME : replace or remove this sound S_StartSound (pos, 0, 0, clMedia.sfx_lashit, 1, ATTN_NORM, 0); break; case TE_SPLASH: // bullet hitting water cnt = MSG_ReadByte (&net_message); cnt = min(cnt, 40); // cap at 40 MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); r = MSG_ReadByte (&net_message); if (r > 6) color = 0x00; else color = splash_color[r]; // Psychospaz's enhanced particle code if (r == SPLASH_SPARKS) { CL_ParticleEffectSplashSpark (pos, dir, color, cnt); r = rand() & 3; if (r == 0) S_StartSound (pos, 0, 0, clMedia.sfx_spark[0], 1, ATTN_STATIC, 0); else if (r == 1) S_StartSound (pos, 0, 0, clMedia.sfx_spark[1], 1, ATTN_STATIC, 0); else S_StartSound (pos, 0, 0, clMedia.sfx_spark[2], 1, ATTN_STATIC, 0); } else { CL_ParticleEffectSplash (pos, dir, color, cnt); } break; case TE_LASER_SPARKS: cnt = MSG_ReadByte (&net_message); MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); color = MSG_ReadByte (&net_message); CL_ParticleEffect2 (pos, dir, color, cnt); break; case TE_RAILTRAIL: // railgun effect MSG_ReadPos (&net_message, pos); MSG_ReadPos (&net_message, pos2); CL_RailTrail (pos, pos2, false); S_StartSound (pos2, 0, 0, clMedia.sfx_railg, 1, ATTN_NORM, 0); break; // 12/23/2001 - red railgun trail case TE_RAILTRAIL2: // red railgun effect MSG_ReadPos (&net_message, pos); MSG_ReadPos (&net_message, pos2); CL_RailTrail (pos, pos2, true); S_StartSound (pos2, 0, 0, clMedia.sfx_railg, 1, ATTN_NORM, 0); break; case TE_EXPLOSION2: case TE_GRENADE_EXPLOSION: case TE_GRENADE_EXPLOSION_WATER: MSG_ReadPos (&net_message, pos); ex = CL_AllocExplosion (); VectorCopy (pos, ex->ent.origin); ex->type = ex_poly; ex->ent.flags = RF_FULLBRIGHT|RF_NOSHADOW; // noshadow flag ex->start = cl.frame.servertime - 100; ex->light = 350; ex->lightcolor[0] = 1.0; ex->lightcolor[1] = 0.5; ex->lightcolor[2] = 0.5; ex->ent.model = clMedia.mod_explo; ex->frames = 19; ex->baseframe = 30; ex->ent.angles[1] = rand() % 360; CL_Explosion_Sparks (pos, 16, 128); if (type != TE_EXPLOSION2) CL_Explosion_Decal (pos, 50, particle_burnmark); if (type == TE_GRENADE_EXPLOSION_WATER) S_StartSound (pos, 0, 0, clMedia.sfx_watrexp, 1, ATTN_NORM, 0); else S_StartSound (pos, 0, 0, clMedia.sfx_grenexp, 1, ATTN_NORM, 0); break; // RAFAEL case TE_PLASMA_EXPLOSION: MSG_ReadPos (&net_message, pos); ex = CL_AllocExplosion (); VectorCopy (pos, ex->ent.origin); ex->type = ex_poly; ex->ent.flags = RF_FULLBRIGHT|RF_NOSHADOW; // noshadow flag ex->start = cl.frame.servertime - 100; ex->light = 350; ex->lightcolor[0] = 1.0; ex->lightcolor[1] = 0.5; ex->lightcolor[2] = 0.5; ex->ent.angles[1] = rand() % 360; ex->ent.model = clMedia.mod_explo; if (frand() < 0.5) ex->baseframe = 15; ex->frames = 15; CL_Explosion_Sparks (pos, 16, 128); CL_Explosion_Decal (pos, 50, particle_burnmark); if (cl_plasma_explo_sound->value) S_StartSound (pos, 0, 0, clMedia.sfx_plasexp, 1, ATTN_NORM, 0); else S_StartSound (pos, 0, 0, clMedia.sfx_rockexp, 1, ATTN_NORM, 0); break; case TE_EXPLOSION1_BIG: // PMM MSG_ReadPos (&net_message, pos); ex = CL_AllocExplosion (); VectorCopy (pos, ex->ent.origin); ex->type = ex_poly; ex->ent.flags = RF_FULLBRIGHT|RF_NOSHADOW; // noshadow flag ex->start = cl.frame.servertime - 100; ex->light = 350; ex->lightcolor[0] = 1.0; ex->lightcolor[1] = 0.5; ex->lightcolor[2] = 0.5; ex->ent.angles[1] = rand() % 360; ex->ent.model = clMedia.mod_explo_big; if (frand() < 0.5) ex->baseframe = 15; ex->frames = 15; CL_Explosion_Sparks (pos, 48, 128); S_StartSound (pos, 0, 0, clMedia.sfx_rockexp, 1, ATTN_NORM, 0); break; case TE_EXPLOSION1_NP: // PMM MSG_ReadPos (&net_message, pos); ex = CL_AllocExplosion (); VectorCopy (pos, ex->ent.origin); ex->type = ex_poly; ex->ent.flags = RF_FULLBRIGHT|RF_NOSHADOW; // noshadow flag ex->start = cl.frame.servertime - 100; ex->light = 350; ex->lightcolor[0] = 1.0; ex->lightcolor[1] = 0.5; ex->lightcolor[2] = 0.5; ex->ent.angles[1] = rand() % 360; ex->ent.model = clMedia.mod_explo; if (frand() < 0.5) ex->baseframe = 15; ex->frames = 15; CL_Explosion_Sparks (pos, 10, 128); S_StartSound (pos, 0, 0, clMedia.sfx_grenexp, 1, ATTN_NORM, 0); break; case TE_EXPLOSION1: case TE_PLAIN_EXPLOSION: case TE_ROCKET_EXPLOSION: case TE_ROCKET_EXPLOSION_WATER: MSG_ReadPos (&net_message, pos); ex = CL_AllocExplosion (); VectorCopy (pos, ex->ent.origin); ex->type = ex_poly; ex->ent.flags = RF_FULLBRIGHT|RF_NOSHADOW; // noshadow flag ex->start = cl.frame.servertime - 100; ex->light = 350; ex->lightcolor[0] = 1.0; ex->lightcolor[1] = 0.5; ex->lightcolor[2] = 0.5; ex->ent.angles[1] = rand() % 360; ex->ent.model = clMedia.mod_explo; if (frand() < 0.5) ex->baseframe = 15; ex->frames = 15; CL_Explosion_Sparks (pos, 16, 128); if (type == TE_ROCKET_EXPLOSION || type == TE_ROCKET_EXPLOSION_WATER) CL_Explosion_Decal (pos, 50, particle_burnmark); if (type == TE_ROCKET_EXPLOSION_WATER) S_StartSound (pos, 0, 0, clMedia.sfx_watrexp, 1, ATTN_NORM, 0); else S_StartSound (pos, 0, 0, clMedia.sfx_rockexp, 1, ATTN_NORM, 0); break; case TE_BFG_EXPLOSION: MSG_ReadPos (&net_message, pos); ex = CL_AllocExplosion (); VectorCopy (pos, ex->ent.origin); ex->type = ex_poly; ex->ent.flags |= RF_FULLBRIGHT; ex->start = cl.frame.servertime - 100; ex->light = 350; ex->lightcolor[0] = 0.0; ex->lightcolor[1] = 1.0; ex->lightcolor[2] = 0.0; ex->ent.model = clMedia.mod_bfg_explo; ex->ent.flags |= RF_TRANSLUCENT | RF_TRANS_ADDITIVE; ex->ent.alpha = 0.30; ex->frames = 4; break; case TE_BFG_BIGEXPLOSION: MSG_ReadPos (&net_message, pos); CL_BFGExplosionParticles (pos); CL_Explosion_Decal (pos, 75, particle_bfgmark); break; case TE_BFG_LASER: CL_ParseLaser (0xd0d1d2d3); break; case TE_BUBBLETRAIL: MSG_ReadPos (&net_message, pos); MSG_ReadPos (&net_message, pos2); CL_BubbleTrail (pos, pos2); break; case TE_PARASITE_ATTACK: case TE_MEDIC_CABLE_ATTACK: ent = CL_ParseBeam (clMedia.mod_parasite_segment); break; case TE_BOSSTPORT: // boss teleporting to station MSG_ReadPos (&net_message, pos); CL_BigTeleportParticles (pos); S_StartSound (pos, 0, 0, S_RegisterSound ("misc/bigtele.wav"), 1, ATTN_NONE, 0); break; case TE_GRAPPLE_CABLE: ent = CL_ParseBeam2 (clMedia.mod_grapple_cable); break; // RAFAEL case TE_WELDING_SPARKS: cnt = MSG_ReadByte (&net_message); MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); color = MSG_ReadByte (&net_message); // Psychospaz's enhanced particle code { vec3_t sparkcolor = {color8red(color), color8green(color), color8blue(color)}; CL_ParticleEffectSparks (pos, dir, sparkcolor, 40); } ex = CL_AllocExplosion (); VectorCopy (pos, ex->ent.origin); ex->type = ex_flash; // note to self // we need a better no draw flag ex->ent.flags |= RF_BEAM; ex->start = cl.frame.servertime - 0.1; ex->light = 100 + (rand()%75); ex->lightcolor[0] = 1.0; ex->lightcolor[1] = 1.0; ex->lightcolor[2] = 0.3; ex->ent.model = clMedia.mod_flash; ex->frames = 2; break; case TE_GREENBLOOD: MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); // Psychospaz's enhanced particle code CL_GreenBloodHit (pos, dir); break; // RAFAEL case TE_TUNNEL_SPARKS: cnt = MSG_ReadByte (&net_message); MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); color = MSG_ReadByte (&net_message); CL_ParticleEffect3 (pos, dir, color, cnt); break; //============= //PGM // PMM -following code integrated for flechette (different color) case TE_BLASTER: // blaster hitting wall case TE_BLASTER2: // green blaster hitting wall case TE_BLUEHYPERBLASTER: // blue blaster hitting wall case TE_REDBLASTER: // red blaster hitting wall case TE_FLECHETTE: // flechette hitting wall MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); ex = CL_AllocExplosion (); VectorCopy (pos, ex->ent.origin); ex->ent.angles[0] = acos(dir[2])/M_PI*180; if (dir[0]) // PMM - fixed to correct for pitch of 0 ex->ent.angles[1] = atan2(dir[1], dir[0])/M_PI*180; else if (dir[1] > 0) ex->ent.angles[1] = 90; else if (dir[1] < 0) ex->ent.angles[1] = 270; else ex->ent.angles[1] = 0; ex->type = ex_misc; ex->ent.flags |= RF_FULLBRIGHT|RF_TRANSLUCENT|RF_NOSHADOW; // no shadow on these if (type == TE_BLASTER2) ex->ent.skinnum = 1; else if (type == TE_REDBLASTER) ex->ent.skinnum = 3; else if (type == TE_FLECHETTE || type == TE_BLUEHYPERBLASTER) ex->ent.skinnum = 2; else // TE_BLASTER ex->ent.skinnum = 0; ex->start = cl.frame.servertime - 100; ex->light = 150; if (type == TE_BLASTER2) { ex->lightcolor[0] = 0.15; ex->lightcolor[1] = 1; ex->lightcolor[2] = 0.15; } else if (type == TE_BLUEHYPERBLASTER) { ex->lightcolor[0] = 0.19; ex->lightcolor[1] = 0.41; ex->lightcolor[2] = 0.75; } else if (type == TE_REDBLASTER) { ex->lightcolor[0] = 0.75; ex->lightcolor[1] = 0.41; ex->lightcolor[2] = 0.19; } else if (type == TE_FLECHETTE) { ex->lightcolor[0] = 0.39; ex->lightcolor[1] = 0.61; ex->lightcolor[2] = 0.75; } else { // TE_BLASTER ex->lightcolor[0] = 1; ex->lightcolor[1] = 1; ex->lightcolor[2] = 0; } ex->ent.model = clMedia.mod_explode; ex->frames = 4; // Psychospaz's enhanced particle code { int32_t red, green, blue, numparts; float partsize = 4; numparts = (32 / max(cl_particle_scale->value/2, 1)); if (type == TE_BLASTER2) { CL_BlasterParticles (pos, dir, numparts, partsize, 50, 235, 50, -10, 0, -10); red=50; green=235; blue=50; } else if (type == TE_BLUEHYPERBLASTER) { CL_BlasterParticles (pos, dir, numparts, partsize, 50, 50, 235, -10, 0, -10); red=50; green=50; blue=235; } else if (type == TE_REDBLASTER) { CL_BlasterParticles (pos, dir, numparts, partsize, 235, 50, 50, 0, -90, -30); red=235; green=50; blue=50; } else if (type == TE_FLECHETTE) { CL_BlasterParticles (pos, dir, numparts, partsize, 100, 100, 195, -10, 0, -10); red=100; green=100; blue=195; } else { // TE_BLASTER CL_BlasterParticles (pos, dir, numparts, partsize, 255, 150, 50, 0, -90, -30); // was 40 red=255; green=150; blue=50; } CL_ParticleBlasterDecal(pos, dir, 10, red, green, blue); } S_StartSound (pos, 0, 0, clMedia.sfx_lashit, 1, ATTN_NORM, 0); break; // shockwave impact effect case TE_SHOCKSPLASH: MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); // Spawn 5 rings for (i = 0; i < 5; i++) { ex = CL_AllocExplosion (); VectorMA (pos, 16.0*(i+1), dir, ex->ent.origin); vectoangles2(dir, ex->ent.angles); //VectorCopy (dir, ex->ent.angles); ex->type = ex_poly2; ex->ent.flags |= RF_FULLBRIGHT|RF_TRANSLUCENT|RF_NOSHADOW; ex->start = cl.frame.servertime - 100; ex->light = 75; ex->lightcolor[0] = 0.39; ex->lightcolor[1] = 0.61; ex->lightcolor[2] = 0.75; ex->ent.model = clMedia.mod_shocksplash; ex->ent.alpha = 0.70; ex->baseframe = 4-i; ex->frames = 4+i; } S_StartSound (pos, 0, 0, clMedia.sfx_shockhit, 1, ATTN_NONE, 0); break; case TE_LIGHTNING: // Psychospaz's enhanced particle code ent = CL_ParseLightning (); S_StartSound (NULL, ent, CHAN_WEAPON, clMedia.sfx_lightning, 1, ATTN_NORM, 0); break; case TE_DEBUGTRAIL: MSG_ReadPos (&net_message, pos); MSG_ReadPos (&net_message, pos2); CL_DebugTrail (pos, pos2); break; case TE_FLASHLIGHT: MSG_ReadPos(&net_message, pos); ent = MSG_ReadShort(&net_message); CL_Flashlight(ent, pos); break; case TE_FORCEWALL: MSG_ReadPos(&net_message, pos); MSG_ReadPos(&net_message, pos2); color = MSG_ReadByte (&net_message); CL_ForceWall(pos, pos2, color); break; case TE_HEATBEAM: ent = CL_ParsePlayerBeam (clMedia.mod_heatbeam); break; case TE_MONSTER_HEATBEAM: ent = CL_ParsePlayerBeam (clMedia.mod_monster_heatbeam); break; case TE_HEATBEAM_SPARKS: cnt = 50; MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); r = 8; magnitude = 60; CL_ParticleSteamEffect (pos, dir, 240, 240, 240, -20, -20, -20, cnt, magnitude); S_StartSound (pos, 0, 0, clMedia.sfx_lashit, 1, ATTN_NORM, 0); break; case TE_HEATBEAM_STEAM: cnt = 20; MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); magnitude = 60; CL_ParticleSteamEffect (pos, dir, 255, 150, 50, 0, -90, -30, cnt, magnitude); CL_ParticlePlasmaBeamDecal (pos, dir, 10); // added burnmark S_StartSound (pos, 0, 0, clMedia.sfx_lashit, 1, ATTN_NORM, 0); break; case TE_STEAM: CL_ParseSteam(); break; case TE_BUBBLETRAIL2: cnt = 3; // was 8 MSG_ReadPos (&net_message, pos); MSG_ReadPos (&net_message, pos2); CL_BubbleTrail2 (pos, pos2, cnt); S_StartSound (pos, 0, 0, clMedia.sfx_lashit, 1, ATTN_NORM, 0); break; case TE_MOREBLOOD: MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); // Psychospaz's enhanced particle code CL_BloodHit (pos, dir); CL_BloodHit (pos, dir); break; case TE_CHAINFIST_SMOKE: dir[0]=0; dir[1]=0; dir[2]=1; MSG_ReadPos(&net_message, pos); // Psychospaz's enhanced particle code CL_ParticleSmokeEffect (pos, dir, 8); break; case TE_ELECTRIC_SPARKS: MSG_ReadPos (&net_message, pos); MSG_ReadDir (&net_message, dir); // new blue electric sparks CL_ElectricParticles (pos, dir, 40); //FIXME : replace or remove this sound S_StartSound (pos, 0, 0, clMedia.sfx_lashit, 1, ATTN_NORM, 0); break; case TE_TRACKER_EXPLOSION: MSG_ReadPos (&net_message, pos); CL_ColorFlash (pos, 0, 150, -1, -1, -1); // CL_ColorExplosionParticles (pos, 0, 1); CL_Tracker_Explode (pos); CL_Explosion_Decal (pos, 14, particle_trackermark); S_StartSound (pos, 0, 0, clMedia.sfx_disrexp, 1, ATTN_NORM, 0); break; case TE_TELEPORT_EFFECT: case TE_DBALL_GOAL: MSG_ReadPos (&net_message, pos); CL_TeleportParticles (pos); break; case TE_WIDOWBEAMOUT: CL_ParseWidow (); break; case TE_NUKEBLAST: CL_ParseNuke (); break; case TE_WIDOWSPLASH: MSG_ReadPos (&net_message, pos); CL_WidowSplash (pos); break; //PGM //============== default: Com_Error (ERR_DROP, "CL_ParseTEnt: bad type"); } }
/* ============== CL_ParseMuzzleFlash2 ============== */ void CL_ParseMuzzleFlash2 (void) { int ent; vec3_t origin; int flash_number; cdlight_t *dl; vec3_t forward, right; char soundname[64]; ent = MSG_ReadShort (&net_message); if (ent < 1 || ent >= MAX_EDICTS) Com_Error (ERR_DROP, "CL_ParseMuzzleFlash2: bad entity"); flash_number = MSG_ReadByte (&net_message); // locate the origin AngleVectors (cl_entities[ent].current.angles, forward, right, NULL); origin[0] = cl_entities[ent].current.origin[0] + forward[0] * monster_flash_offset[flash_number][0] + right[0] * monster_flash_offset[flash_number][1]; origin[1] = cl_entities[ent].current.origin[1] + forward[1] * monster_flash_offset[flash_number][0] + right[1] * monster_flash_offset[flash_number][1]; origin[2] = cl_entities[ent].current.origin[2] + forward[2] * monster_flash_offset[flash_number][0] + right[2] * monster_flash_offset[flash_number][1] + monster_flash_offset[flash_number][2]; dl = CL_AllocDlight (ent); VectorCopy (origin, dl->origin); dl->radius = 200 + (rand () & 31); dl->minlight = 32; dl->die = cl.time; // + 0.1; switch (flash_number) { case MZ2_INFANTRY_MACHINEGUN_1: case MZ2_INFANTRY_MACHINEGUN_2: case MZ2_INFANTRY_MACHINEGUN_3: case MZ2_INFANTRY_MACHINEGUN_4: case MZ2_INFANTRY_MACHINEGUN_5: case MZ2_INFANTRY_MACHINEGUN_6: case MZ2_INFANTRY_MACHINEGUN_7: case MZ2_INFANTRY_MACHINEGUN_8: case MZ2_INFANTRY_MACHINEGUN_9: case MZ2_INFANTRY_MACHINEGUN_10: case MZ2_INFANTRY_MACHINEGUN_11: case MZ2_INFANTRY_MACHINEGUN_12: case MZ2_INFANTRY_MACHINEGUN_13: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash (origin); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("infantry/infatck1.wav"), 1, ATTN_NORM, 0); break; case MZ2_SOLDIER_MACHINEGUN_1: case MZ2_SOLDIER_MACHINEGUN_2: case MZ2_SOLDIER_MACHINEGUN_3: case MZ2_SOLDIER_MACHINEGUN_4: case MZ2_SOLDIER_MACHINEGUN_5: case MZ2_SOLDIER_MACHINEGUN_6: case MZ2_SOLDIER_MACHINEGUN_7: case MZ2_SOLDIER_MACHINEGUN_8: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash (origin); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("soldier/solatck3.wav"), 1, ATTN_NORM, 0); break; case MZ2_GUNNER_MACHINEGUN_1: case MZ2_GUNNER_MACHINEGUN_2: case MZ2_GUNNER_MACHINEGUN_3: case MZ2_GUNNER_MACHINEGUN_4: case MZ2_GUNNER_MACHINEGUN_5: case MZ2_GUNNER_MACHINEGUN_6: case MZ2_GUNNER_MACHINEGUN_7: case MZ2_GUNNER_MACHINEGUN_8: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash (origin); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("gunner/gunatck2.wav"), 1, ATTN_NORM, 0); break; case MZ2_ACTOR_MACHINEGUN_1: case MZ2_SUPERTANK_MACHINEGUN_1: case MZ2_SUPERTANK_MACHINEGUN_2: case MZ2_SUPERTANK_MACHINEGUN_3: case MZ2_SUPERTANK_MACHINEGUN_4: case MZ2_SUPERTANK_MACHINEGUN_5: case MZ2_SUPERTANK_MACHINEGUN_6: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash (origin); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("infantry/infatck1.wav"), 1, ATTN_NORM, 0); break; case MZ2_BOSS2_MACHINEGUN_L1: case MZ2_BOSS2_MACHINEGUN_L2: case MZ2_BOSS2_MACHINEGUN_L3: case MZ2_BOSS2_MACHINEGUN_L4: case MZ2_BOSS2_MACHINEGUN_L5: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash (origin); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("infantry/infatck1.wav"), 1, ATTN_NONE, 0); break; case MZ2_SOLDIER_BLASTER_1: case MZ2_SOLDIER_BLASTER_2: case MZ2_SOLDIER_BLASTER_3: case MZ2_SOLDIER_BLASTER_4: case MZ2_SOLDIER_BLASTER_5: case MZ2_SOLDIER_BLASTER_6: case MZ2_SOLDIER_BLASTER_7: case MZ2_SOLDIER_BLASTER_8: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("soldier/solatck2.wav"), 1, ATTN_NORM, 0); break; case MZ2_FLYER_BLASTER_1: case MZ2_FLYER_BLASTER_2: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("flyer/flyatck3.wav"), 1, ATTN_NORM, 0); break; case MZ2_MEDIC_BLASTER_1: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("medic/medatck1.wav"), 1, ATTN_NORM, 0); break; case MZ2_HOVER_BLASTER_1: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("hover/hovatck1.wav"), 1, ATTN_NORM, 0); break; case MZ2_FLOAT_BLASTER_1: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("floater/fltatck1.wav"), 1, ATTN_NORM, 0); break; case MZ2_SOLDIER_SHOTGUN_1: case MZ2_SOLDIER_SHOTGUN_2: case MZ2_SOLDIER_SHOTGUN_3: case MZ2_SOLDIER_SHOTGUN_4: case MZ2_SOLDIER_SHOTGUN_5: case MZ2_SOLDIER_SHOTGUN_6: case MZ2_SOLDIER_SHOTGUN_7: case MZ2_SOLDIER_SHOTGUN_8: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; CL_SmokeAndFlash (origin); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("soldier/solatck1.wav"), 1, ATTN_NORM, 0); break; case MZ2_TANK_BLASTER_1: case MZ2_TANK_BLASTER_2: case MZ2_TANK_BLASTER_3: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("tank/tnkatck3.wav"), 1, ATTN_NORM, 0); break; case MZ2_TANK_MACHINEGUN_1: case MZ2_TANK_MACHINEGUN_2: case MZ2_TANK_MACHINEGUN_3: case MZ2_TANK_MACHINEGUN_4: case MZ2_TANK_MACHINEGUN_5: case MZ2_TANK_MACHINEGUN_6: case MZ2_TANK_MACHINEGUN_7: case MZ2_TANK_MACHINEGUN_8: case MZ2_TANK_MACHINEGUN_9: case MZ2_TANK_MACHINEGUN_10: case MZ2_TANK_MACHINEGUN_11: case MZ2_TANK_MACHINEGUN_12: case MZ2_TANK_MACHINEGUN_13: case MZ2_TANK_MACHINEGUN_14: case MZ2_TANK_MACHINEGUN_15: case MZ2_TANK_MACHINEGUN_16: case MZ2_TANK_MACHINEGUN_17: case MZ2_TANK_MACHINEGUN_18: case MZ2_TANK_MACHINEGUN_19: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash (origin); Com_sprintf (soundname, sizeof (soundname), "tank/tnkatk2%c.wav", 'a' + rand () % 5); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound (soundname), 1, ATTN_NORM, 0); break; case MZ2_CHICK_ROCKET_1: dl->color[0] = 1; dl->color[1] = 0.5; dl->color[2] = 0.2; S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("chick/chkatck2.wav"), 1, ATTN_NORM, 0); break; case MZ2_TANK_ROCKET_1: case MZ2_TANK_ROCKET_2: case MZ2_TANK_ROCKET_3: dl->color[0] = 1; dl->color[1] = 0.5; dl->color[2] = 0.2; S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("tank/tnkatck1.wav"), 1, ATTN_NORM, 0); break; case MZ2_SUPERTANK_ROCKET_1: case MZ2_SUPERTANK_ROCKET_2: case MZ2_SUPERTANK_ROCKET_3: case MZ2_BOSS2_ROCKET_1: case MZ2_BOSS2_ROCKET_2: case MZ2_BOSS2_ROCKET_3: case MZ2_BOSS2_ROCKET_4: dl->color[0] = 1; dl->color[1] = 0.5; dl->color[2] = 0.2; S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("tank/rocket.wav"), 1, ATTN_NORM, 0); break; case MZ2_GUNNER_GRENADE_1: case MZ2_GUNNER_GRENADE_2: case MZ2_GUNNER_GRENADE_3: case MZ2_GUNNER_GRENADE_4: dl->color[0] = 1; dl->color[1] = 0.5; dl->color[2] = 0; S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("gunner/gunatck3.wav"), 1, ATTN_NORM, 0); break; case MZ2_GLADIATOR_RAILGUN_1: dl->color[0] = 0.5; dl->color[1] = 0.5; dl->color[2] = 1.0; break; // --- Xian's shit starts --- case MZ2_MAKRON_BFG: dl->color[0] = 0.5; dl->color[1] = 1; dl->color[2] = 0.5; //S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("makron/bfg_fire.wav"), 1, ATTN_NORM, 0); break; case MZ2_MAKRON_BLASTER_1: case MZ2_MAKRON_BLASTER_2: case MZ2_MAKRON_BLASTER_3: case MZ2_MAKRON_BLASTER_4: case MZ2_MAKRON_BLASTER_5: case MZ2_MAKRON_BLASTER_6: case MZ2_MAKRON_BLASTER_7: case MZ2_MAKRON_BLASTER_8: case MZ2_MAKRON_BLASTER_9: case MZ2_MAKRON_BLASTER_10: case MZ2_MAKRON_BLASTER_11: case MZ2_MAKRON_BLASTER_12: case MZ2_MAKRON_BLASTER_13: case MZ2_MAKRON_BLASTER_14: case MZ2_MAKRON_BLASTER_15: case MZ2_MAKRON_BLASTER_16: case MZ2_MAKRON_BLASTER_17: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("makron/blaster.wav"), 1, ATTN_NORM, 0); break; case MZ2_JORG_MACHINEGUN_L1: case MZ2_JORG_MACHINEGUN_L2: case MZ2_JORG_MACHINEGUN_L3: case MZ2_JORG_MACHINEGUN_L4: case MZ2_JORG_MACHINEGUN_L5: case MZ2_JORG_MACHINEGUN_L6: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash (origin); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound ("boss3/xfire.wav"), 1, ATTN_NORM, 0); break; case MZ2_JORG_MACHINEGUN_R1: case MZ2_JORG_MACHINEGUN_R2: case MZ2_JORG_MACHINEGUN_R3: case MZ2_JORG_MACHINEGUN_R4: case MZ2_JORG_MACHINEGUN_R5: case MZ2_JORG_MACHINEGUN_R6: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash (origin); break; case MZ2_JORG_BFG_1: dl->color[0] = 0.5; dl->color[1] = 1; dl->color[2] = 0.5; break; case MZ2_BOSS2_MACHINEGUN_R1: case MZ2_BOSS2_MACHINEGUN_R2: case MZ2_BOSS2_MACHINEGUN_R3: case MZ2_BOSS2_MACHINEGUN_R4: case MZ2_BOSS2_MACHINEGUN_R5: dl->color[0] = 1; dl->color[1] = 1; dl->color[2] = 0; CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash (origin); break; // --- Xian's shit ends --- } }
/* ============== CL_ParseMuzzleFlash2 ============== */ void CL_ParseMuzzleFlash2 (sizebuf_t *msg) { int ent, flash_number; cdlight_t *dl; vec3_t origin, forward, right; char soundname[64]; ent = MSG_ReadShort (msg); if (ent < 1 || ent >= MAX_EDICTS) Com_Error (ERR_DROP, "CL_ParseMuzzleFlash2: bad entity"); flash_number = MSG_ReadByte (msg); if( flash_number == -1 ) { Com_Error (ERR_DROP, "CL_ParseMuzzleFlash2: read past end of message"); } // locate the origin AngleVectors (cl_entities[ent].current.angles, forward, right, NULL); origin[0] = cl_entities[ent].current.origin[0] + forward[0] * monster_flash_offset[flash_number][0] + right[0] * monster_flash_offset[flash_number][1]; origin[1] = cl_entities[ent].current.origin[1] + forward[1] * monster_flash_offset[flash_number][0] + right[1] * monster_flash_offset[flash_number][1]; origin[2] = cl_entities[ent].current.origin[2] + forward[2] * monster_flash_offset[flash_number][0] + right[2] * monster_flash_offset[flash_number][1] + monster_flash_offset[flash_number][2]; dl = CL_AllocDlight (ent); VectorCopy (origin, dl->origin); VectorClear(dl->color); dl->radius = 200 + (rand()&31); //dl->minlight = 32; dl->die = cl.time + 250; // + 0.1; //dl->decay = 0; switch (flash_number) { case MZ2_INFANTRY_MACHINEGUN_1: case MZ2_INFANTRY_MACHINEGUN_2: case MZ2_INFANTRY_MACHINEGUN_3: case MZ2_INFANTRY_MACHINEGUN_4: case MZ2_INFANTRY_MACHINEGUN_5: case MZ2_INFANTRY_MACHINEGUN_6: case MZ2_INFANTRY_MACHINEGUN_7: case MZ2_INFANTRY_MACHINEGUN_8: case MZ2_INFANTRY_MACHINEGUN_9: case MZ2_INFANTRY_MACHINEGUN_10: case MZ2_INFANTRY_MACHINEGUN_11: case MZ2_INFANTRY_MACHINEGUN_12: case MZ2_INFANTRY_MACHINEGUN_13: VectorSet(dl->color, 1, 1, 0); CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash(origin); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("infantry/infatck1.wav"), 1, ATTN_NORM, 0); break; case MZ2_SOLDIER_MACHINEGUN_1: case MZ2_SOLDIER_MACHINEGUN_2: case MZ2_SOLDIER_MACHINEGUN_3: case MZ2_SOLDIER_MACHINEGUN_4: case MZ2_SOLDIER_MACHINEGUN_5: case MZ2_SOLDIER_MACHINEGUN_6: case MZ2_SOLDIER_MACHINEGUN_7: case MZ2_SOLDIER_MACHINEGUN_8: VectorSet(dl->color, 1, 1, 0); CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash(origin); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("soldier/solatck3.wav"), 1, ATTN_NORM, 0); break; case MZ2_GUNNER_MACHINEGUN_1: case MZ2_GUNNER_MACHINEGUN_2: case MZ2_GUNNER_MACHINEGUN_3: case MZ2_GUNNER_MACHINEGUN_4: case MZ2_GUNNER_MACHINEGUN_5: case MZ2_GUNNER_MACHINEGUN_6: case MZ2_GUNNER_MACHINEGUN_7: case MZ2_GUNNER_MACHINEGUN_8: VectorSet(dl->color, 1, 1, 0); CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash(origin); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("gunner/gunatck2.wav"), 1, ATTN_NORM, 0); break; case MZ2_ACTOR_MACHINEGUN_1: case MZ2_SUPERTANK_MACHINEGUN_1: case MZ2_SUPERTANK_MACHINEGUN_2: case MZ2_SUPERTANK_MACHINEGUN_3: case MZ2_SUPERTANK_MACHINEGUN_4: case MZ2_SUPERTANK_MACHINEGUN_5: case MZ2_SUPERTANK_MACHINEGUN_6: case MZ2_TURRET_MACHINEGUN: // PGM VectorSet(dl->color, 1, 1, 0); CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash(origin); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("infantry/infatck1.wav"), 1, ATTN_NORM, 0); break; case MZ2_BOSS2_MACHINEGUN_L1: case MZ2_BOSS2_MACHINEGUN_L2: case MZ2_BOSS2_MACHINEGUN_L3: case MZ2_BOSS2_MACHINEGUN_L4: case MZ2_BOSS2_MACHINEGUN_L5: case MZ2_CARRIER_MACHINEGUN_L1: // PMM case MZ2_CARRIER_MACHINEGUN_L2: // PMM VectorSet(dl->color, 1, 1, 0); CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash(origin); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("infantry/infatck1.wav"), 1, ATTN_NONE, 0); break; case MZ2_SOLDIER_BLASTER_1: case MZ2_SOLDIER_BLASTER_2: case MZ2_SOLDIER_BLASTER_3: case MZ2_SOLDIER_BLASTER_4: case MZ2_SOLDIER_BLASTER_5: case MZ2_SOLDIER_BLASTER_6: case MZ2_SOLDIER_BLASTER_7: case MZ2_SOLDIER_BLASTER_8: case MZ2_TURRET_BLASTER: // PGM VectorSet(dl->color, 1, 1, 0); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("soldier/solatck2.wav"), 1, ATTN_NORM, 0); break; case MZ2_FLYER_BLASTER_1: case MZ2_FLYER_BLASTER_2: VectorSet(dl->color, 1, 1, 0); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("flyer/flyatck3.wav"), 1, ATTN_NORM, 0); break; case MZ2_MEDIC_BLASTER_1: VectorSet(dl->color, 1, 1, 0); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("medic/medatck1.wav"), 1, ATTN_NORM, 0); break; case MZ2_HOVER_BLASTER_1: VectorSet(dl->color, 1, 1, 0); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("hover/hovatck1.wav"), 1, ATTN_NORM, 0); break; case MZ2_FLOAT_BLASTER_1: VectorSet(dl->color, 1, 1, 0); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("floater/fltatck1.wav"), 1, ATTN_NORM, 0); break; case MZ2_SOLDIER_SHOTGUN_1: case MZ2_SOLDIER_SHOTGUN_2: case MZ2_SOLDIER_SHOTGUN_3: case MZ2_SOLDIER_SHOTGUN_4: case MZ2_SOLDIER_SHOTGUN_5: case MZ2_SOLDIER_SHOTGUN_6: case MZ2_SOLDIER_SHOTGUN_7: case MZ2_SOLDIER_SHOTGUN_8: VectorSet(dl->color, 1, 1, 0); CL_SmokeAndFlash(origin); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("soldier/solatck1.wav"), 1, ATTN_NORM, 0); break; case MZ2_TANK_BLASTER_1: case MZ2_TANK_BLASTER_2: case MZ2_TANK_BLASTER_3: VectorSet(dl->color, 1, 1, 0); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("tank/tnkatck3.wav"), 1, ATTN_NORM, 0); break; case MZ2_TANK_MACHINEGUN_1: case MZ2_TANK_MACHINEGUN_2: case MZ2_TANK_MACHINEGUN_3: case MZ2_TANK_MACHINEGUN_4: case MZ2_TANK_MACHINEGUN_5: case MZ2_TANK_MACHINEGUN_6: case MZ2_TANK_MACHINEGUN_7: case MZ2_TANK_MACHINEGUN_8: case MZ2_TANK_MACHINEGUN_9: case MZ2_TANK_MACHINEGUN_10: case MZ2_TANK_MACHINEGUN_11: case MZ2_TANK_MACHINEGUN_12: case MZ2_TANK_MACHINEGUN_13: case MZ2_TANK_MACHINEGUN_14: case MZ2_TANK_MACHINEGUN_15: case MZ2_TANK_MACHINEGUN_16: case MZ2_TANK_MACHINEGUN_17: case MZ2_TANK_MACHINEGUN_18: case MZ2_TANK_MACHINEGUN_19: VectorSet(dl->color, 1, 1, 0); CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash(origin); Com_sprintf(soundname, sizeof(soundname), "tank/tnkatk2%c.wav", 'a' + rand() % 5); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound(soundname), 1, ATTN_NORM, 0); break; case MZ2_CHICK_ROCKET_1: case MZ2_TURRET_ROCKET: // PGM VectorSet(dl->color, 1, 0.5f, 0.2f); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("chick/chkatck2.wav"), 1, ATTN_NORM, 0); break; case MZ2_TANK_ROCKET_1: case MZ2_TANK_ROCKET_2: case MZ2_TANK_ROCKET_3: VectorSet(dl->color, 1, 0.5f, 0.2f); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("tank/tnkatck1.wav"), 1, ATTN_NORM, 0); break; case MZ2_SUPERTANK_ROCKET_1: case MZ2_SUPERTANK_ROCKET_2: case MZ2_SUPERTANK_ROCKET_3: case MZ2_BOSS2_ROCKET_1: case MZ2_BOSS2_ROCKET_2: case MZ2_BOSS2_ROCKET_3: case MZ2_BOSS2_ROCKET_4: case MZ2_CARRIER_ROCKET_1: // case MZ2_CARRIER_ROCKET_2: // case MZ2_CARRIER_ROCKET_3: // case MZ2_CARRIER_ROCKET_4: VectorSet(dl->color, 1, 0.5f, 0.2f); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("tank/rocket.wav"), 1, ATTN_NORM, 0); break; case MZ2_GUNNER_GRENADE_1: case MZ2_GUNNER_GRENADE_2: case MZ2_GUNNER_GRENADE_3: case MZ2_GUNNER_GRENADE_4: VectorSet(dl->color, 1, 0.5f, 0); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("gunner/gunatck3.wav"), 1, ATTN_NORM, 0); break; case MZ2_GLADIATOR_RAILGUN_1: // PMM case MZ2_CARRIER_RAILGUN: case MZ2_WIDOW_RAIL: // pmm VectorSet(dl->color, 0.5f, 0.5f, 1.0f); break; // --- Xian's shit starts --- case MZ2_MAKRON_BFG: VectorSet(dl->color, 0.5f, 1, 0.5f); //S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("makron/bfg_fire.wav"), 1, ATTN_NORM, 0); break; case MZ2_MAKRON_BLASTER_1: case MZ2_MAKRON_BLASTER_2: case MZ2_MAKRON_BLASTER_3: case MZ2_MAKRON_BLASTER_4: case MZ2_MAKRON_BLASTER_5: case MZ2_MAKRON_BLASTER_6: case MZ2_MAKRON_BLASTER_7: case MZ2_MAKRON_BLASTER_8: case MZ2_MAKRON_BLASTER_9: case MZ2_MAKRON_BLASTER_10: case MZ2_MAKRON_BLASTER_11: case MZ2_MAKRON_BLASTER_12: case MZ2_MAKRON_BLASTER_13: case MZ2_MAKRON_BLASTER_14: case MZ2_MAKRON_BLASTER_15: case MZ2_MAKRON_BLASTER_16: case MZ2_MAKRON_BLASTER_17: VectorSet(dl->color, 1, 1, 0); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("makron/blaster.wav"), 1, ATTN_NORM, 0); break; case MZ2_JORG_MACHINEGUN_L1: case MZ2_JORG_MACHINEGUN_L2: case MZ2_JORG_MACHINEGUN_L3: case MZ2_JORG_MACHINEGUN_L4: case MZ2_JORG_MACHINEGUN_L5: case MZ2_JORG_MACHINEGUN_L6: VectorSet(dl->color, 1, 1, 0); CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash(origin); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("boss3/xfire.wav"), 1, ATTN_NORM, 0); break; case MZ2_JORG_MACHINEGUN_R1: case MZ2_JORG_MACHINEGUN_R2: case MZ2_JORG_MACHINEGUN_R3: case MZ2_JORG_MACHINEGUN_R4: case MZ2_JORG_MACHINEGUN_R5: case MZ2_JORG_MACHINEGUN_R6: VectorSet(dl->color, 1, 1, 0); CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash(origin); break; case MZ2_JORG_BFG_1: VectorSet(dl->color, 0.5f, 1, 0.5f); break; case MZ2_BOSS2_MACHINEGUN_R1: case MZ2_BOSS2_MACHINEGUN_R2: case MZ2_BOSS2_MACHINEGUN_R3: case MZ2_BOSS2_MACHINEGUN_R4: case MZ2_BOSS2_MACHINEGUN_R5: case MZ2_CARRIER_MACHINEGUN_R1: // PMM case MZ2_CARRIER_MACHINEGUN_R2: // PMM VectorSet(dl->color, 1, 1, 0); CL_ParticleEffect (origin, vec3_origin, 0, 40); CL_SmokeAndFlash(origin); break; // ====== // ROGUE case MZ2_STALKER_BLASTER: case MZ2_DAEDALUS_BLASTER: case MZ2_MEDIC_BLASTER_2: case MZ2_WIDOW_BLASTER: case MZ2_WIDOW_BLASTER_SWEEP1: case MZ2_WIDOW_BLASTER_SWEEP2: case MZ2_WIDOW_BLASTER_SWEEP3: case MZ2_WIDOW_BLASTER_SWEEP4: case MZ2_WIDOW_BLASTER_SWEEP5: case MZ2_WIDOW_BLASTER_SWEEP6: case MZ2_WIDOW_BLASTER_SWEEP7: case MZ2_WIDOW_BLASTER_SWEEP8: case MZ2_WIDOW_BLASTER_SWEEP9: case MZ2_WIDOW_BLASTER_100: case MZ2_WIDOW_BLASTER_90: case MZ2_WIDOW_BLASTER_80: case MZ2_WIDOW_BLASTER_70: case MZ2_WIDOW_BLASTER_60: case MZ2_WIDOW_BLASTER_50: case MZ2_WIDOW_BLASTER_40: case MZ2_WIDOW_BLASTER_30: case MZ2_WIDOW_BLASTER_20: case MZ2_WIDOW_BLASTER_10: case MZ2_WIDOW_BLASTER_0: case MZ2_WIDOW_BLASTER_10L: case MZ2_WIDOW_BLASTER_20L: case MZ2_WIDOW_BLASTER_30L: case MZ2_WIDOW_BLASTER_40L: case MZ2_WIDOW_BLASTER_50L: case MZ2_WIDOW_BLASTER_60L: case MZ2_WIDOW_BLASTER_70L: case MZ2_WIDOW_RUN_1: case MZ2_WIDOW_RUN_2: case MZ2_WIDOW_RUN_3: case MZ2_WIDOW_RUN_4: case MZ2_WIDOW_RUN_5: case MZ2_WIDOW_RUN_6: case MZ2_WIDOW_RUN_7: case MZ2_WIDOW_RUN_8: VectorSet(dl->color, 0, 1, 0); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("tank/tnkatck3.wav"), 1, ATTN_NORM, 0); break; case MZ2_WIDOW_DISRUPTOR: VectorSet(dl->color, -1, -1, -1); S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound("weapons/disint2.wav"), 1, ATTN_NORM, 0); break; case MZ2_WIDOW_PLASMABEAM: case MZ2_WIDOW2_BEAMER_1: case MZ2_WIDOW2_BEAMER_2: case MZ2_WIDOW2_BEAMER_3: case MZ2_WIDOW2_BEAMER_4: case MZ2_WIDOW2_BEAMER_5: case MZ2_WIDOW2_BEAM_SWEEP_1: case MZ2_WIDOW2_BEAM_SWEEP_2: case MZ2_WIDOW2_BEAM_SWEEP_3: case MZ2_WIDOW2_BEAM_SWEEP_4: case MZ2_WIDOW2_BEAM_SWEEP_5: case MZ2_WIDOW2_BEAM_SWEEP_6: case MZ2_WIDOW2_BEAM_SWEEP_7: case MZ2_WIDOW2_BEAM_SWEEP_8: case MZ2_WIDOW2_BEAM_SWEEP_9: case MZ2_WIDOW2_BEAM_SWEEP_10: case MZ2_WIDOW2_BEAM_SWEEP_11: dl->radius = 300 + (rand()&100); VectorSet(dl->color, 1, 1, 0); dl->die = cl.time + 200; break; // ROGUE // ====== // --- Xian's shit ends --- } }