📄 cl_tent.java
字号:
break; // RAFAEL case Defines.TE_TUNNEL_SPARKS: cnt = MSG.ReadByte(Globals.net_message); MSG.ReadPos(Globals.net_message, pos); MSG.ReadDir(Globals.net_message, dir); color = MSG.ReadByte(Globals.net_message); CL_fx.ParticleEffect3(pos, dir, color, cnt); break; // ============= // PGM // PMM -following code integrated for flechette (different color) case Defines.TE_BLASTER2: // green blaster hitting wall case Defines.TE_FLECHETTE: // flechette MSG.ReadPos(Globals.net_message, pos); MSG.ReadDir(Globals.net_message, dir); // PMM if (type == Defines.TE_BLASTER2) CL_newfx.BlasterParticles2(pos, dir, 0xd0); else CL_newfx.BlasterParticles2(pos, dir, 0x6f); // 75 ex = AllocExplosion(); Math3D.VectorCopy(pos, ex.ent.origin); ex.ent.angles[0] = (float) (Math.acos(dir[2]) / Math.PI * 180); // PMM - fixed to correct for pitch of 0 if (dir[0] != 0.0f) ex.ent.angles[1] = (float) (Math.atan2(dir[1], dir[0]) / Math.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 = Defines.RF_FULLBRIGHT | Defines.RF_TRANSLUCENT; // PMM if (type == Defines.TE_BLASTER2) ex.ent.skinnum = 1; else // flechette ex.ent.skinnum = 2; ex.start = Globals.cl.frame.servertime - 100; ex.light = 150; // PMM if (type == Defines.TE_BLASTER2) ex.lightcolor[1] = 1; else // flechette { ex.lightcolor[0] = 0.19f; ex.lightcolor[1] = 0.41f; ex.lightcolor[2] = 0.75f; } ex.ent.model = cl_mod_explode; ex.frames = 4; S.StartSound(pos, 0, 0, cl_sfx_lashit, 1, Defines.ATTN_NORM, 0); break; case Defines.TE_LIGHTNING: ent = ParseLightning(cl_mod_lightning); S.StartSound(null, ent, Defines.CHAN_WEAPON, cl_sfx_lightning, 1, Defines.ATTN_NORM, 0); break; case Defines.TE_DEBUGTRAIL: MSG.ReadPos(Globals.net_message, pos); MSG.ReadPos(Globals.net_message, pos2); CL_newfx.DebugTrail(pos, pos2); break; case Defines.TE_PLAIN_EXPLOSION: MSG.ReadPos(Globals.net_message, pos); ex = AllocExplosion(); Math3D.VectorCopy(pos, ex.ent.origin); ex.type = ex_poly; ex.ent.flags = Defines.RF_FULLBRIGHT; ex.start = Globals.cl.frame.servertime - 100; ex.light = 350; ex.lightcolor[0] = 1.0f; ex.lightcolor[1] = 0.5f; ex.lightcolor[2] = 0.5f; ex.ent.angles[1] = Lib.rand() % 360; ex.ent.model = cl_mod_explo4; if (Globals.rnd.nextFloat() < 0.5) ex.baseframe = 15; ex.frames = 15; if (type == Defines.TE_ROCKET_EXPLOSION_WATER) S .StartSound(pos, 0, 0, cl_sfx_watrexp, 1, Defines.ATTN_NORM, 0); else S .StartSound(pos, 0, 0, cl_sfx_rockexp, 1, Defines.ATTN_NORM, 0); break; case Defines.TE_FLASHLIGHT: MSG.ReadPos(Globals.net_message, pos); ent = MSG.ReadShort(Globals.net_message); CL_newfx.Flashlight(ent, pos); break; case Defines.TE_FORCEWALL: MSG.ReadPos(Globals.net_message, pos); MSG.ReadPos(Globals.net_message, pos2); color = MSG.ReadByte(Globals.net_message); CL_newfx.ForceWall(pos, pos2, color); break; case Defines.TE_HEATBEAM: ent = ParsePlayerBeam(cl_mod_heatbeam); break; case Defines.TE_MONSTER_HEATBEAM: ent = ParsePlayerBeam(cl_mod_monster_heatbeam); break; case Defines.TE_HEATBEAM_SPARKS: // cnt = MSG.ReadByte (net_message); cnt = 50; MSG.ReadPos(Globals.net_message, pos); MSG.ReadDir(Globals.net_message, dir); // r = MSG.ReadByte (net_message); // magnitude = MSG.ReadShort (net_message); r = 8; magnitude = 60; color = r & 0xff; CL_newfx.ParticleSteamEffect(pos, dir, color, cnt, magnitude); S.StartSound(pos, 0, 0, cl_sfx_lashit, 1, Defines.ATTN_NORM, 0); break; case Defines.TE_HEATBEAM_STEAM: // cnt = MSG.ReadByte (net_message); cnt = 20; MSG.ReadPos(Globals.net_message, pos); MSG.ReadDir(Globals.net_message, dir); // r = MSG.ReadByte (net_message); // magnitude = MSG.ReadShort (net_message); // color = r & 0xff; color = 0xe0; magnitude = 60; CL_newfx.ParticleSteamEffect(pos, dir, color, cnt, magnitude); S.StartSound(pos, 0, 0, cl_sfx_lashit, 1, Defines.ATTN_NORM, 0); break; case Defines.TE_STEAM: ParseSteam(); break; case Defines.TE_BUBBLETRAIL2: // cnt = MSG.ReadByte (net_message); cnt = 8; MSG.ReadPos(Globals.net_message, pos); MSG.ReadPos(Globals.net_message, pos2); CL_newfx.BubbleTrail2(pos, pos2, cnt); S.StartSound(pos, 0, 0, cl_sfx_lashit, 1, Defines.ATTN_NORM, 0); break; case Defines.TE_MOREBLOOD: MSG.ReadPos(Globals.net_message, pos); MSG.ReadDir(Globals.net_message, dir); CL_fx.ParticleEffect(pos, dir, 0xe8, 250); break; case Defines.TE_CHAINFIST_SMOKE: dir[0] = 0; dir[1] = 0; dir[2] = 1; MSG.ReadPos(Globals.net_message, pos); CL_newfx.ParticleSmokeEffect(pos, dir, 0, 20, 20); break; case Defines.TE_ELECTRIC_SPARKS: MSG.ReadPos(Globals.net_message, pos); MSG.ReadDir(Globals.net_message, dir); // CL_ParticleEffect (pos, dir, 109, 40); CL_fx.ParticleEffect(pos, dir, 0x75, 40); //FIXME : replace or remove this sound S.StartSound(pos, 0, 0, cl_sfx_lashit, 1, Defines.ATTN_NORM, 0); break; case Defines.TE_TRACKER_EXPLOSION: MSG.ReadPos(Globals.net_message, pos); CL_newfx.ColorFlash(pos, 0, 150, -1, -1, -1); CL_newfx.ColorExplosionParticles(pos, 0, 1); S.StartSound(pos, 0, 0, cl_sfx_disrexp, 1, Defines.ATTN_NORM, 0); break; case Defines.TE_TELEPORT_EFFECT: case Defines.TE_DBALL_GOAL: MSG.ReadPos(Globals.net_message, pos); CL_fx.TeleportParticles(pos); break; case Defines.TE_WIDOWBEAMOUT: ParseWidow(); break; case Defines.TE_NUKEBLAST: ParseNuke(); break; case Defines.TE_WIDOWSPLASH: MSG.ReadPos(Globals.net_message, pos); CL_newfx.WidowSplash(pos); break; // PGM // ============== default: Com.Error(Defines.ERR_DROP, "CL_ParseTEnt: bad type"); } } // stack variable // dist, org private static final entity_t ent = new entity_t(); /* * ================= CL_AddBeams ================= */ static void AddBeams() { int i, j; beam_t[] b; float d; float yaw, pitch; float forward; float len, steps; float model_length; // update beams b = cl_beams; for (i = 0; i < MAX_BEAMS; i++) { if (b[i].model == null || b[i].endtime < Globals.cl.time) continue; // if coming from the player, update the start position if (b[i].entity == Globals.cl.playernum + 1) // entity 0 is the // world { Math3D.VectorCopy(Globals.cl.refdef.vieworg, b[i].start); b[i].start[2] -= 22; // adjust for view height } Math3D.VectorAdd(b[i].start, b[i].offset, org); // calculate pitch and yaw Math3D.VectorSubtract(b[i].end, org, dist); if (dist[1] == 0 && dist[0] == 0) { yaw = 0; if (dist[2] > 0) pitch = 90; else pitch = 270; } else { // PMM - fixed to correct for pitch of 0 if (dist[0] != 0.0f) yaw = (float) (Math.atan2(dist[1], dist[0]) * 180 / Math.PI); else if (dist[1] > 0) yaw = 90; else yaw = 270; if (yaw < 0) yaw += 360; forward = (float) Math.sqrt(dist[0] * dist[0] + dist[1] * dist[1]); pitch = (float) (Math.atan2(dist[2], forward) * -180.0 / Math.PI); if (pitch < 0) pitch += 360.0; } // add new entities for the beams d = Math3D.VectorNormalize(dist); //memset (&ent, 0, sizeof(ent)); ent.clear(); if (b[i].model == cl_mod_lightning) { model_length = 35.0f; d -= 20.0; // correction so it doesn't end in middle of tesla } else { model_length = 30.0f; } steps = (float) Math.ceil(d / model_length); len = (d - model_length) / (steps - 1); // PMM - special case for lightning model .. if the real length is // shorter than the model, // flip it around & draw it from the end to the start. This prevents // the model from going // through the tesla mine (instead it goes through the target) if ((b[i].model == cl_mod_lightning) && (d <= model_length)) { // Com_Printf ("special case\n"); Math3D.VectorCopy(b[i].end, ent.origin); // offset to push beam outside of tesla model (negative because // dist is from end to start // for this beam) // for (j=0 ; j<3 ; j++) // ent.origin[j] -= dist[j]*10.0; ent.model = b[i].model; ent.flags = Defines.RF_FULLBRIGHT; ent.angles[0] = pitch; ent.angles[1] = yaw; ent.angles[2] = Lib.rand() % 360; V.AddEntity(ent); return; } while (d > 0) { Math3D.VectorCopy(org, ent.origin); ent.model = b[i].model; if (b[i].model == cl_mod_lightning) { ent.flags = Defines.RF_FULLBRIGHT; ent.angles[0] = -pitch; ent.angles[1] = yaw + 180.0f; ent.angles[2] = Lib.rand() % 360; } else { ent.angles[0] = pitch; ent.angles[1] = yaw; ent.angles[2] = Lib.rand() % 360; } // Com_Printf("B: %d . %d\n", b[i].entity, b[i].dest_entity); V.AddEntity(ent); for (j = 0; j < 3; j++) org[j] += dist[j] * len; d -= model_length; } } } //extern cvar_t *hand; // stack variable private static final float[] dist = new float[3]; private static final float[] org = new float[3]; private static final float[] f = new float[3]; private static final float[] u = new float[3]; private static final float[] r = new float[3]; /* * ================= ROGUE - draw player locked beams CL_AddPlayerBeams * ================= */ static void AddPlayerBeams() { float d; //entity_t ent = new entity_t(); float yaw, pitch; float forward; float len, steps; int framenum = 0; float model_length;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -