00001 #ifndef __SPARK_H__
00002 #define __SPARK_H__
00003
00004 #include "Typedefs.h"
00005 #ifdef _PC
00006 #include "Draw.h"
00007 #endif
00008 #ifdef _N64
00009 #include "faceme.h"
00010 #endif
00011
00012 struct object_def;
00013
00014
00015 typedef enum SparkTypeEnum {
00016 SPARK_NONE = -1,
00017 SPARK_SPARK = 0,
00018 SPARK_SPARK2,
00019 SPARK_SNOW,
00020 SPARK_POPCORN,
00021 SPARK_GRAVEL,
00022 SPARK_SAND,
00023 SPARK_MUD,
00024 SPARK_ELECTRIC,
00025 SPARK_WATER,
00026 SPARK_DIRT,
00027 SPARK_SMOKE1,
00028 SPARK_SMOKE2,
00029 SPARK_SMOKE3,
00030 SPARK_BLUE,
00031 SPARK_BIGBLUE,
00032 SPARK_SMALLORANGE,
00033 SPARK_SMALLRED,
00034 SPARK_EXPLOSION1,
00035 SPARK_EXPLOSION2,
00036 SPARK_STAR,
00037
00038 SPARK_NTYPES
00039 } SPARK_TYPE;
00040
00042
00043
00044
00046
00047 enum {
00048 TRAIL_NONE = -1,
00049 TRAIL_FIREWORK = 0,
00050 TRAIL_SPARK,
00051 TRAIL_SMOKE,
00052
00053 TRAIL_NTYPES
00054 };
00055
00056 #define MAX_TRAILS (128)
00057 #define TRAIL_MAX_BITS (12)
00058
00059 #define TRAIL_FADES (0x1)
00060 #define TRAIL_SHRINKS (0x2)
00061 #define TRAIL_EXPANDS (0x4)
00062
00063 typedef struct TrailDataStruct {
00064 REAL U, V, Usize, Vsize;
00065 REAL EndU, EndV;
00066 long A, R, G, B;
00067 long Type;
00068 REAL LifeTime;
00069 REAL Width;
00070 long MaxTrails;
00071 } TRAIL_DATA;
00072
00073
00074 typedef struct SparkTrailStruct {
00075 bool Free;
00076 VEC Pos[TRAIL_MAX_BITS];
00077 TRAIL_DATA *Data;
00078 long FirstTrail;
00079 long MaxTrails;
00080 long NTrails;
00081 } TRAIL;
00082
00083
00085
00086
00087
00089
00090 typedef struct SparkDataStruct {
00091 #ifdef _PC
00092 FACING_POLY FacingPoly;
00093 #endif
00094 #ifdef _N64
00095 REAL XSize, YSize;
00096 GAME_GFX GfxIdx;
00097 long u, v;
00098 long w, h;
00099 long Colour;
00100 FACEME_FLAG Flag;
00101 #endif
00102 long SparkType;
00103 REAL Mass;
00104 REAL Resistance;
00105 REAL Friction;
00106 REAL Restitution;
00107 unsigned long LifeTime;
00108 unsigned long LifeTimeVar;
00109 REAL SpinRateBase;
00110 REAL SpinRateVar;
00111 REAL SizeVar;
00112 REAL GrowRateBase;
00113 REAL GrowRateVar;
00114 long TrailType;
00115 } SPARK_DATA;
00116
00117 #define SPARK_WORLD_COLLIDE (0x1)
00118 #define SPARK_OBJECT_COLLIDE (0x2)
00119 #define SPARK_CREATE_TRAIL (0x4)
00120 #define SPARK_FIELD_AFFECT (0x8)
00121 #define SPARK_SPINS (0x10)
00122 #define SPARK_GROWS (0x20)
00123 #define SPARK_CAMERA_COLLIDE (0x40)
00124 #define SPARK_SEMI (0x80)
00125
00126
00128
00129
00130
00132
00133 typedef struct SparkStruct {
00134
00135 bool Free;
00136 VISIMASK VisiMask;
00137
00138 VEC Pos;
00139 VEC Vel;
00140
00141 REAL Spin, SpinRate;
00142 REAL Grow, GrowRate;
00143
00144 TRAIL *Trail;
00145 REAL TrailTime;
00146
00147 SPARK_DATA *Data;
00148
00149 unsigned long Age;
00150 } SPARK;
00151
00152
00153 typedef struct SparkGenStruct {
00154 SPARK_TYPE Type;
00155 VISIMASK VisiMask;
00156
00157 struct object_def *Parent;
00158
00159 VEC SparkVel;
00160 REAL SparkVelVar;
00161
00162 REAL Time, MaxTime;
00163 } SPARK_GEN;
00164
00165
00166 #ifdef _PC
00167 #define MAX_SPARKS 1024 // max number of sparks in game
00168 #endif
00169 #ifdef _N64
00170 #define MAX_SPARKS 512 // max number of sparks in game
00171 #endif
00172 #ifdef _PSX
00173 #define MAX_SPARKS 0
00174 #endif
00175
00176 #define MIN_SPARK_VEL Real( 100.0f ) // No sparks below this speed
00177 #define MAX_SPARK_VEL Real( 1600.0f ) // Always sparks above this speed
00178
00179 #define MIN_DUST_IMPULSE Real( 3.0f )
00180 #define DUST_PROBABILITY Real( 0.2f )
00181 #define DUST_SCALE Real( 50.0f )
00182 #define DUST_RND_SCALE Real( 30.0f )
00183
00184
00185
00187
00188
00189
00190 extern void InitSparks();
00191 extern void ProcessSparks();
00192 extern bool CreateSpark(SPARK_TYPE type, VEC *pos, VEC *vel, REAL velVar, VISIMASK mask);
00193 extern void DrawSparks();
00194 extern REAL SparkProbability(REAL vel);
00195
00196 extern TRAIL *GetFreeTrail(long trailType);
00197 extern void FreeTrail(TRAIL *trail);
00198 extern void UpdateTrail(TRAIL *trail, VEC *newPos);
00199 extern void ModifyFirstTrail(TRAIL *trail, VEC *newPos);
00200 extern void DrawTrails();
00201
00202
00204
00205
00206
00207
00208 extern SPARK Sparks[MAX_SPARKS];
00209 extern int NActiveSparks;
00210
00211 extern TRAIL SparkTrail[MAX_TRAILS];
00212 extern int NActiveTrails;
00213
00214 #endif