Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- script 461 (int tx, int ty, int tz) clientside
- {
- if (ConsolePlayerNumber() == -1) { terminate; }
- int pln = PlayerNumber();
- int i, k;
- int x, y, z;
- int vx, vy, vz, mag, magI;
- int hx, hy, hz;
- if (PlayerCoords[pln][3] == Timer())
- {
- x = PlayerCoords[pln][0];
- y = PlayerCoords[pln][1];
- z = PlayerCoords[pln][2];
- }
- else
- {
- x = GetActorX(0);
- y = GetActorY(0);
- z = GetActorZ(0);
- }
- z += BFG_ZOFF;
- vx = tx-x; vy = ty-y; vz = tz-z; mag = magnitudeThree_f(vx, vy, vz);
- vx = FixedDiv(vx, mag); vy = FixedDiv(vy, mag); vz = FixedDiv(vz, mag);
- magI = ftoi(mag);
- int angle = VectorAngle(vx, vy);
- int pitch = -VectorAngle(magnitudeTwo_f(vx, vy), vz);
- // Precalculate matrix multipliers
- // look at helix.txt for how I got to what I did
- int mx_x = FixedMul(cos(angle), cos(pitch));
- int mx_y = -sin(angle);
- int mx_z = FixedMul(cos(angle), sin(pitch));
- int my_x = FixedMul(sin(angle), cos(pitch));
- int my_y = cos(angle);
- int my_z = FixedMul(sin(angle), sin(pitch));
- int mz_x = -sin(pitch);
- int mz_z = cos(pitch);
- for (i = 48; i < magI; i += 16)
- {
- Spawn("DakkaBFGBeam_Client", x+(vx*i), y+(vy*i), z+(vz*i));
- }
- int wait;
- int last = BFG_HELIX_START;
- for (i = BFG_HELIX_START; i < magI; i += BFG_HELIX_STEP)
- {
- k = itof(i) / 1024;
- hx = itof(i);
- hy = FixedMul(sin(k), BFG_HELIXRADIUS_X);
- hz = FixedMul(cos(k), BFG_HELIXRADIUS_Y);
- Spawn("DakkaBFGBeam_Helix", x + FixedMul(hx, mx_x) + FixedMul(hy, mx_y) + FixedMul(hz, mx_z),
- y + FixedMul(hx, my_x) + FixedMul(hy, my_y) + FixedMul(hz, my_z),
- z + FixedMul(hx, mz_x) + FixedMul(hz, mz_z));
- Spawn("DakkaBFGBeam_HelixCenter", x+(vx*i), y+(vy*i), z+(vz*i));
- wait += (i - last);
- Delay(wait / BFG_HELIX_SPEED);
- wait %= BFG_HELIX_SPEED;
- last = i;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement