📄 cl_newfx.java
字号:
static void TrackerTrail(float[] start, float[] end, int particleColor) { float len; cparticle_t p; int dec; float dist; Math3D.VectorCopy(start, move); Math3D.VectorSubtract(end, start, vec); len = Math3D.VectorNormalize(vec); Math3D.VectorCopy(vec, forward); Math3D.vectoangles(forward, angle_dir); Math3D.AngleVectors(angle_dir, forward, right, up); dec = 3; Math3D.VectorScale(vec, 3, vec); // FIXME: this is a really silly way to have a loop while (len > 0) { len -= dec; if (CL_fx.free_particles == null) return; p = CL_fx.free_particles; CL_fx.free_particles = p.next; p.next = CL_fx.active_particles; CL_fx.active_particles = p; Math3D.VectorClear(p.accel); p.time = Globals.cl.time; p.alpha = 1.0f; p.alphavel = -2.0f; p.color = particleColor; dist = Math3D.DotProduct(move, forward); Math3D.VectorMA(move, (float) (8 * Math.cos(dist)), up, p.org); for (int j = 0; j < 3; j++) { p.vel[j] = 0; p.accel[j] = 0; } p.vel[2] = 5; Math3D.VectorAdd(move, vec, move); } } // stack variable // dir static void Tracker_Shell(float[] origin) { cparticle_t p; for (int i = 0; i < 300; i++) { if (CL_fx.free_particles == null) return; p = CL_fx.free_particles; CL_fx.free_particles = p.next; p.next = CL_fx.active_particles; CL_fx.active_particles = p; Math3D.VectorClear(p.accel); p.time = Globals.cl.time; p.alpha = 1.0f; p.alphavel = CL_fx.INSTANT_PARTICLE; p.color = 0; dir[0] = Lib.crand(); dir[1] = Lib.crand(); dir[2] = Lib.crand(); Math3D.VectorNormalize(dir); Math3D.VectorMA(origin, 40, dir, p.org); } } // stack variable // dir static void MonsterPlasma_Shell(float[] origin) { cparticle_t p; for (int i = 0; i < 40; i++) { if (CL_fx.free_particles == null) return; p = CL_fx.free_particles; CL_fx.free_particles = p.next; p.next = CL_fx.active_particles; CL_fx.active_particles = p; Math3D.VectorClear(p.accel); p.time = Globals.cl.time; p.alpha = 1.0f; p.alphavel = CL_fx.INSTANT_PARTICLE; p.color = 0xe0; dir[0] = Lib.crand(); dir[1] = Lib.crand(); dir[2] = Lib.crand(); Math3D.VectorNormalize(dir); Math3D.VectorMA(origin, 10, dir, p.org); // VectorMA(origin, 10*(((rand () & 0x7fff) / ((float)0x7fff))), // dir, p.org); } } private static int[] wb_colortable = { 2 * 8, 13 * 8, 21 * 8, 18 * 8 }; // stack variable // dir static void Widowbeamout(cl_sustain_t self) { int i; cparticle_t p; float ratio; ratio = 1.0f - (((float) self.endtime - (float) Globals.cl.time) / 2100.0f); for (i = 0; i < 300; i++) { if (CL_fx.free_particles == null) return; p = CL_fx.free_particles; CL_fx.free_particles = p.next; p.next = CL_fx.active_particles; CL_fx.active_particles = p; Math3D.VectorClear(p.accel); p.time = Globals.cl.time; p.alpha = 1.0f; p.alphavel = CL_fx.INSTANT_PARTICLE; p.color = wb_colortable[Lib.rand() & 3]; dir[0] = Lib.crand(); dir[1] = Lib.crand(); dir[2] = Lib.crand(); Math3D.VectorNormalize(dir); Math3D.VectorMA(self.org, (45.0f * ratio), dir, p.org); // VectorMA(origin, 10*(((rand () & 0x7fff) / ((float)0x7fff))), // dir, p.org); } } private static int[] nb_colortable = { 110, 112, 114, 116 }; // stack variable // dir static void Nukeblast(cl_sustain_t self) { int i; cparticle_t p; float ratio; ratio = 1.0f - (((float) self.endtime - (float) Globals.cl.time) / 1000.0f); for (i = 0; i < 700; i++) { if (CL_fx.free_particles == null) return; p = CL_fx.free_particles; CL_fx.free_particles = p.next; p.next = CL_fx.active_particles; CL_fx.active_particles = p; Math3D.VectorClear(p.accel); p.time = Globals.cl.time; p.alpha = 1.0f; p.alphavel = CL_fx.INSTANT_PARTICLE; p.color = nb_colortable[Lib.rand() & 3]; dir[0] = Lib.crand(); dir[1] = Lib.crand(); dir[2] = Lib.crand(); Math3D.VectorNormalize(dir); Math3D.VectorMA(self.org, (200.0f * ratio), dir, p.org); // VectorMA(origin, 10*(((rand () & 0x7fff) / ((float)0x7fff))), // dir, p.org); } } private static int[] ws_colortable = { 2 * 8, 13 * 8, 21 * 8, 18 * 8 }; // stack variable // dir static void WidowSplash(float[] org) { int i; cparticle_t p; for (i = 0; i < 256; i++) { if (CL_fx.free_particles == null) return; p = CL_fx.free_particles; CL_fx.free_particles = p.next; p.next = CL_fx.active_particles; CL_fx.active_particles = p; p.time = Globals.cl.time; p.color = ws_colortable[Lib.rand() & 3]; dir[0] = Lib.crand(); dir[1] = Lib.crand(); dir[2] = Lib.crand(); Math3D.VectorNormalize(dir); Math3D.VectorMA(org, 45.0f, dir, p.org); Math3D.VectorMA(Globals.vec3_origin, 40.0f, dir, p.vel); p.accel[0] = p.accel[1] = 0; p.alpha = 1.0f; p.alphavel = -0.8f / (0.5f + Globals.rnd.nextFloat() * 0.3f); } } // stack variable // move, vec /* * =============== * CL_TagTrail * =============== */ static void TagTrail(float[] start, float[] end, float color) { float len; int j; cparticle_t p; int dec; Math3D.VectorCopy(start, move); Math3D.VectorSubtract(end, start, vec); len = Math3D.VectorNormalize(vec); dec = 5; Math3D.VectorScale(vec, 5, vec); while (len >= 0) { len -= dec; if (CL_fx.free_particles == null) return; p = CL_fx.free_particles; CL_fx.free_particles = p.next; p.next = CL_fx.active_particles; CL_fx.active_particles = p; Math3D.VectorClear(p.accel); p.time = Globals.cl.time; p.alpha = 1.0f; p.alphavel = -1.0f / (0.8f + Globals.rnd.nextFloat() * 0.2f); p.color = color; for (j = 0; j < 3; j++) { p.org[j] = move[j] + Lib.crand() * 16; p.vel[j] = Lib.crand() * 5; p.accel[j] = 0; } Math3D.VectorAdd(move, vec, move); } } /* * =============== CL_ColorExplosionParticles =============== */ static void ColorExplosionParticles(float[] org, int color, int run) { int i, j; cparticle_t p; for (i = 0; i < 128; i++) { if (CL_fx.free_particles == null) return; p = CL_fx.free_particles; CL_fx.free_particles = p.next; p.next = CL_fx.active_particles; CL_fx.active_particles = p; p.time = Globals.cl.time; p.color = color + (Lib.rand() % run); for (j = 0; j < 3; j++) { p.org[j] = org[j] + ((Lib.rand() % 32) - 16); p.vel[j] = (Lib.rand() % 256) - 128; } p.accel[0] = p.accel[1] = 0; p.accel[2] = -CL_fx.PARTICLE_GRAVITY; p.alpha = 1.0f; p.alphavel = -0.4f / (0.6f + Globals.rnd.nextFloat() * 0.2f); } } // stack variable // r, u /* * =============== CL_ParticleSmokeEffect - like the steam effect, but * unaffected by gravity =============== */ static void ParticleSmokeEffect(float[] org, float[] dir, int color, int count, int magnitude) { int i, j; cparticle_t p; float d; Math3D.MakeNormalVectors(dir, r, u); for (i = 0; i < count; i++) { if (CL_fx.free_particles == null) return; p = CL_fx.free_particles; CL_fx.free_particles = p.next; p.next = CL_fx.active_particles; CL_fx.active_particles = p; p.time = Globals.cl.time; p.color = color + (Lib.rand() & 7); for (j = 0; j < 3; j++) { p.org[j] = org[j] + magnitude * 0.1f * Lib.crand(); // p.vel[j] = dir[j]*magnitude; } Math3D.VectorScale(dir, magnitude, p.vel); d = Lib.crand() * magnitude / 3; Math3D.VectorMA(p.vel, d, r, p.vel); d = Lib.crand() * magnitude / 3; Math3D.VectorMA(p.vel, d, u, p.vel); p.accel[0] = p.accel[1] = p.accel[2] = 0; p.alpha = 1.0f; p.alphavel = -1.0f / (0.5f + Globals.rnd.nextFloat() * 0.3f); } } /* * =============== CL_BlasterParticles2 * * Wall impact puffs (Green) =============== */ static void BlasterParticles2(float[] org, float[] dir, long color) { int i, j; cparticle_t p; float d; int count; count = 40; for (i = 0; i < count; i++) { if (CL_fx.free_particles == null) return; p = CL_fx.free_particles; CL_fx.free_particles = p.next; p.next = CL_fx.active_particles; CL_fx.active_particles = p; p.time = Globals.cl.time; p.color = color + (Lib.rand() & 7); d = Lib.rand() & 15; for (j = 0; j < 3; j++) { p.org[j] = org[j] + ((Lib.rand() & 7) - 4) + d * dir[j]; p.vel[j] = dir[j] * 30 + Lib.crand() * 40; } p.accel[0] = p.accel[1] = 0; p.accel[2] = -CL_fx.PARTICLE_GRAVITY; p.alpha = 1.0f; p.alphavel = -1.0f / (0.5f + Globals.rnd.nextFloat() * 0.3f); } } // stack variable // move, vec /* * =============== CL_BlasterTrail2 * * Green! =============== */ static void BlasterTrail2(float[] start, float[] end) { float len; int j; cparticle_t p; int dec; Math3D.VectorCopy(start, move); Math3D.VectorSubtract(end, start, vec); len = Math3D.VectorNormalize(vec); dec = 5; Math3D.VectorScale(vec, 5, vec); // FIXME: this is a really silly way to have a loop while (len > 0) { len -= dec; if (CL_fx.free_particles == null) return; p = CL_fx.free_particles; CL_fx.free_particles = p.next; p.next = CL_fx.active_particles; CL_fx.active_particles = p; Math3D.VectorClear(p.accel); p.time = Globals.cl.time; p.alpha = 1.0f; p.alphavel = -1.0f / (0.3f + Globals.rnd.nextFloat() * 0.2f); p.color = 0xd0; for (j = 0; j < 3; j++) { p.org[j] = move[j] + Lib.crand(); p.vel[j] = Lib.crand() * 5; p.accel[j] = 0; } Math3D.VectorAdd(move, vec, move); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -