/* particle.h - Header for particle.c - Don Yang (uguu.org) 08/31/98: Factor 09/11/98: Rotate */ /* Constants */ #define TITLE "Particle 1.22 (9/19/98) - by Don Yang" #define USE_DELAY_DOTS /* Undefine to disable motion blur */ #define ALLOW_FLOAT_MORPH /* Undefine to use integer morph */ #define TICKS_PER_FRAME 27600 /* 8253 ticks per frame */ #define MAX_PARTICLES 20000 /* Particle limits */ #define MIN_PARTICLES 20 #define SINE_SCALE 512 /* Sine table scale */ #define PI 3.1415926535897932384626433 #define PHASE_TIME 600 /* Phase shifter parameters */ #define MORPH_TIME 60 #define TIME_ERR 60 #define SYSTEM_COUNT 6 #define M_STAR 1 #define M_SQUARE 2 #define M_SPHERE 3 #define M_WAVE 4 #define M_FIREWORK 5 #define M_BUTTERFLY 6 #define SPACE_W 500 /* Logical space limits */ #define SPACE_H 500 #define SPACE_L 500 #define DISTANCE_X 150 /* Projection parameters */ #define DISTANCE_Y 125 #define OFFSET_X 160 #define OFFSET_Y 100 #define OFFSET_Z (5 * SPACE_L / 3) /* Macros */ #define Generate(x, r) ( (x) % ((r) * 2 - 1) - r + 1 ) #define WrapMin(x, r) ( ((x) <= -(r)) ? ((x) + (r) * 2 - 1) : (x) ) #define WrapMax(x, r) ( ((x) >= (r)) ? ((x) - (r) * 2 + 1) : (x) ) #ifdef ALLOW_FLOAT_MORPH #define Morph(s, t, f, p) ((int)( (double)(s) + ((f) * ((double)(t) - (s)) / (p)) )) #else #define Morph(s, t, f, p) ((int)( (long)(s) + ((f) * ((long)(t) - (s)) / (p)) )) #endif #define ProjectX(x, z) (DISTANCE_X * (long)(x) / (z + OFFSET_Z) + OFFSET_X) #define ProjectY(y, z) (DISTANCE_Y * (long)(y) / (z + OFFSET_Z) + OFFSET_Y) #define GetColor(z) ((15 * (z+SPACE_L-1) / (SPACE_L * 2 - 2)) * 16 + 15) #define Sine(a) ((long)SineTable[a]) #define Cosine(a) ((long)SineTable[((a) + 90) % 360]) /* Exports */ extern int _far SineTable[360]; extern int _far *ParticleX; extern int _far *ParticleY; extern int _far *ParticleZ; extern int NumberOfParticles; /* Functions */ void Factor(int n, int *row, int *column, int *extra); void Rotate(int _far *sx, int _far *sy, int _far *tx, int _far *ty, int count, int angle);