📄 cl_fx.java
字号:
p.alpha = 1.0f; p.alphavel = -1.0f / (0.5f + Globals.rnd.nextFloat() * 0.3f); } } /* * =============== CL_TeleporterParticles =============== */ static void TeleporterParticles(entity_state_t ent) { int j; cparticle_t p; for (int i = 0; i < 8; i++) { if (free_particles == null) return; p = free_particles; free_particles = p.next; p.next = active_particles; active_particles = p; p.time = Globals.cl.time; p.color = 0xdb; for (j = 0; j < 2; j++) { p.org[j] = ent.origin[j] - 16 + (Lib.rand() & 31); p.vel[j] = Lib.crand() * 14; } p.org[2] = ent.origin[2] - 8 + (Lib.rand() & 7); p.vel[2] = 80 + (Lib.rand() & 7); p.accel[0] = p.accel[1] = 0; p.accel[2] = -PARTICLE_GRAVITY; p.alpha = 1.0f; p.alphavel = -0.5f; } } /* * =============== CL_LogoutEffect * * =============== */ static void LogoutEffect(float[] org, int type) { int j; cparticle_t p; for (int i = 0; i < 500; i++) { if (free_particles == null) return; p = free_particles; free_particles = p.next; p.next = active_particles; active_particles = p; p.time = Globals.cl.time; if (type == Defines.MZ_LOGIN) p.color = 0xd0 + (Lib.rand() & 7); // green else if (type == Defines.MZ_LOGOUT) p.color = 0x40 + (Lib.rand() & 7); // red else p.color = 0xe0 + (Lib.rand() & 7); // yellow p.org[0] = org[0] - 16 + Globals.rnd.nextFloat() * 32; p.org[1] = org[1] - 16 + Globals.rnd.nextFloat() * 32; p.org[2] = org[2] - 24 + Globals.rnd.nextFloat() * 56; for (j = 0; j < 3; j++) p.vel[j] = Lib.crand() * 20; p.accel[0] = p.accel[1] = 0; p.accel[2] = -PARTICLE_GRAVITY; p.alpha = 1.0f; p.alphavel = -1.0f / (1.0f + Globals.rnd.nextFloat() * 0.3f); } } /* * =============== CL_ItemRespawnParticles * * =============== */ static void ItemRespawnParticles(float[] org) { int j; cparticle_t p; for (int i = 0; i < 64; i++) { if (free_particles == null) return; p = free_particles; free_particles = p.next; p.next = active_particles; active_particles = p; p.time = Globals.cl.time; p.color = 0xd4 + (Lib.rand() & 3); // green p.org[0] = org[0] + Lib.crand() * 8; p.org[1] = org[1] + Lib.crand() * 8; p.org[2] = org[2] + Lib.crand() * 8; for (j = 0; j < 3; j++) p.vel[j] = Lib.crand() * 8; p.accel[0] = p.accel[1] = 0; p.accel[2] = -PARTICLE_GRAVITY * 0.2f; p.alpha = 1.0f; p.alphavel = -1.0f / (1.0f + Globals.rnd.nextFloat() * 0.3f); } } /* * =============== CL_ExplosionParticles =============== */ static void ExplosionParticles(float[] org) { int j; cparticle_t p; for (int i = 0; i < 256; i++) { if (free_particles == null) return; p = free_particles; free_particles = p.next; p.next = active_particles; active_particles = p; p.time = Globals.cl.time; p.color = 0xe0 + (Lib.rand() & 7); for (j = 0; j < 3; j++) { p.org[j] = org[j] + ((Lib.rand() % 32) - 16); p.vel[j] = (Lib.rand() % 384) - 192; } p.accel[0] = p.accel[1] = 0.0f; p.accel[2] = -PARTICLE_GRAVITY; p.alpha = 1.0f; p.alphavel = -0.8f / (0.5f + Globals.rnd.nextFloat() * 0.3f); } } static void BigTeleportParticles(float[] org) { cparticle_t p; float angle, dist; for (int i = 0; i < 4096; i++) { if (free_particles == null) return; p = free_particles; free_particles = p.next; p.next = active_particles; active_particles = p; p.time = Globals.cl.time; p.color = colortable[Lib.rand() & 3]; angle = (float) (Math.PI * 2 * (Lib.rand() & 1023) / 1023.0); dist = Lib.rand() & 31; p.org[0] = (float) (org[0] + Math.cos(angle) * dist); p.vel[0] = (float) (Math.cos(angle) * (70 + (Lib.rand() & 63))); p.accel[0] = (float) (-Math.cos(angle) * 100); p.org[1] = (float) (org[1] + Math.sin(angle) * dist); p.vel[1] = (float) (Math.sin(angle) * (70 + (Lib.rand() & 63))); p.accel[1] = (float) (-Math.sin(angle) * 100); p.org[2] = org[2] + 8 + (Lib.rand() % 90); p.vel[2] = -100 + (Lib.rand() & 31); p.accel[2] = PARTICLE_GRAVITY * 4; p.alpha = 1.0f; p.alphavel = -0.3f / (0.5f + Globals.rnd.nextFloat() * 0.3f); } } /* * =============== CL_BlasterParticles * * Wall impact puffs =============== */ static void BlasterParticles(float[] org, float[] dir) { int j; cparticle_t p; float d; int count = 40; for (int i = 0; i < count; i++) { if (free_particles == null) return; p = free_particles; free_particles = p.next; p.next = active_particles; active_particles = p; p.time = Globals.cl.time; p.color = 0xe0 + (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] = -PARTICLE_GRAVITY; p.alpha = 1.0f; p.alphavel = -1.0f / (0.5f + Globals.rnd.nextFloat() * 0.3f); } } // stack variable private static final float[] move = {0, 0, 0}; private static final float[] vec = {0, 0, 0}; /* * =============== CL_BlasterTrail * * =============== */ static void BlasterTrail(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 (free_particles == null) return; p = free_particles; free_particles = p.next; p.next = active_particles; 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 = 0xe0; 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); } } // stack variable // move, vec /* * =============== * CL_FlagTrail * =============== */ static void FlagTrail(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 (free_particles == null) return; p = free_particles; free_particles = p.next; p.next = active_particles; 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); } } // stack variable // move, vec /* * =============== CL_DiminishingTrail * * =============== */ static void DiminishingTrail(float[] start, float[] end, centity_t old, int flags) { cparticle_t p; float orgscale; float velscale; Math3D.VectorCopy(start, move); Math3D.VectorSubtract(end, start, vec); float len = Math3D.VectorNormalize(vec); float dec = 0.5f; Math3D.VectorScale(vec, dec, vec); if (old.trailcount > 900) { orgscale = 4; velscale = 15; } else if (old.trailcount > 800) { orgscale = 2; velscale = 10; } else { orgscale = 1; velscale = 5; } while (len > 0) { len -= dec; if (free_particles == null) return; // drop less particles as it flies if ((Lib.rand() & 1023) < old.trailcount) { p = free_particles; free_particles = p.next; p.next = active_particles; active_particles = p; Math3D.VectorClear(p.accel); p.time = Globals.cl.time; if ((flags & Defines.EF_GIB) != 0) { p.alpha = 1.0f; p.alphavel = -1.0f / (1.0f + Globals.rnd.nextFloat() * 0.4f); p.color = 0xe8 + (Lib.rand() & 7); for (int j = 0; j < 3; j++) { p.org[j] = move[j] + Lib.crand() * orgscale; p.vel[j] = Lib.crand() * velscale; p.accel[j] = 0; } p.vel[2] -= PARTICLE_GRAVITY; } else if ((flags & Defines.EF_GREENGIB) != 0) { p.alpha = 1.0f; p.alphavel = -1.0f / (1.0f + Globals.rnd.nextFloat() * 0.4f); p.color = 0xdb + (Lib.rand() & 7); for (int j = 0; j < 3; j++) { p.org[j] = move[j] + Lib.crand() * orgscale; p.vel[j] = Lib.crand() * velscale; p.accel[j] = 0; } p.vel[2] -= PARTICLE_GRAVITY; } else { p.alpha = 1.0f; p.alphavel = -1.0f / (1.0f + Globals.rnd.nextFloat() * 0.2f); p.color = 4 + (Lib.rand() & 7); for (int j = 0; j < 3; j++) { p.org[j] = move[j] + Lib.crand() * orgscale; p.vel[j] = Lib.crand() * velscale; } p.accel[2] = 20; } } old.trailcount -= 5; if (old.trailcount < 100) old.trailcount = 100; Math3D.VectorAdd(move, vec, move); } } // stack variable // move, vec /* * =============== CL_RocketTrail * * =============== */ static void RocketTrail(float[] start, float[] end, centity_t old) { float len; int j; cparticle_t p; float dec; // smoke DiminishingTrail(start, end, old, Defines.EF_ROCKET); // fire Math3D.VectorCopy(start, move); Math3D.VectorSubtract(end, start, vec); len = Math3D.VectorNormalize(vec); dec = 1; Math3D.VectorScale(vec, dec, vec); while (len > 0) { len -= dec; if (free_particles == null) return; if ((Lib.rand() & 7) == 0) { p = free_particles; free_particles = p.next; p.next = active_particles; active_particles = p; Math3D.VectorClear(p.accel); p.time = Globals.cl.time; p.alpha = 1.0f; p.alphavel = -1.0f / (1.0f + Globals.rnd.nextFloat() * 0.2f); p.color = 0xdc + (Lib.rand() & 3); for (j = 0; j < 3; j++) { p.org[j] = move[j] + Lib.crand() * 5; p.vel[j] = Lib.crand() * 20; } p.accel[2] = -PARTICLE_GRAVITY; } Math3D.VectorAdd(move, vec, move); } } // stack variable // move, vec /* * =============== CL_RailTrail * * =============== */ static void RailTrail(float[] start, float[] end) { float len; int j; cparticle_t p; float dec; float[] right = new float[3]; float[] up = new float[3]; int i; float d, c, s; float[] dir = new float[3]; byte clr = 0x74; Math3D.VectorCopy(start, move); Math3D.VectorSubtract(end, start, vec); len = Math3D.VectorNormalize(vec); Math3D.MakeNormalVectors(vec, right, up); for (i = 0; i < len; i++) { if (free_particles == null) return; p = free_particles; free_particles = p.next; p.next = active_particles; active_particles = p; p.time = Globals.cl.time; Math3D.VectorClear(p.accel); d = i * 0.1f; c = (float) Math.cos(d); s = (float) Math.sin(d); Math3D.VectorScale(right, c, dir); Math3D.VectorMA(dir, s, up, dir); p.alpha = 1.0f; p.alphavel = -1.0f / (1.0f + Globals.rnd.nextFloat() * 0.2f); p.color = clr + (Lib.rand() & 7); for (j = 0; j < 3; j++) { p.org[j] = move[j] + dir[j] * 3; p.vel[j] = dir[j] * 6; } Math3D.VectorAdd(move, vec, move); } dec = 0.75f; Math3D.VectorScale(vec, dec, vec); Math3D.VectorCopy(start, move); while (len > 0) { len -= dec; if (free_particles == null) return; p = free_particles; free_particles = p.next; p.next = active_particles; active_particles = p; p.time = Globals.cl.time; Math3D.VectorClear(p.accel); p.alpha = 1.0f; p.alphavel = -1.0f / (0.6f + Globals.rnd.nextFloat() * 0.2f); p.color = 0x0 + Lib.rand() & 15; for (j = 0; j < 3; j++) { p.org[j] = move[j] + Lib.crand() * 3; p.vel[j] = Lib.crand() * 3; p.accel[j] = 0; } Math3D.VectorAdd(move, vec, move); } } // stack variable // move, vec /* * =============== CL_IonripperTrail =============== */ static void IonripperTrail(float[] start, float[] ent) { float len; int j;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -