33 #define MAX_LIFE                                                                        10.0f 
   34 #define MIN_RADIUS_FOR_PERSISTANT_DEBRIS        50              // ship radius at which debris from it becomes persistant 
   35 #define DEBRIS_SOUND_DELAY                                              2000    // time to start debris sound after created 
   36 #define MAX_HULL_PIECES                 MAX_DEBRIS_PIECES // limit the number of hull debris chunks that can exist.  
   50 #define MAX_DEBRIS_DIST                                 10000.0f                        //      Debris goes away if it's this far away. 
   51 #define DEBRIS_DISTANCE_CHECK_TIME              (10*1000)               //      Check every 10 seconds. 
   52 #define DEBRIS_INDEX(dp) (dp-Debris) 
   54 #define MAX_SPEED_SMALL_DEBRIS          200                                     // maximum velocity of small debris piece 
   55 #define MAX_SPEED_BIG_DEBRIS                    150                                     // maximum velocity of big debris piece 
   56 #define MAX_SPEED_CAPITAL_DEBRIS        100                                     // maximum velocity of capital debris piece 
   61 static void debris_start_death_roll(
object *debris_obj, 
debris *debris_p)
 
   69                 if(fireball_type < 0) {
 
  200         if (tbase != NULL && (swapped!=-1) && pm)       {
 
  290         Assert( Debris[num].objnum == objnum );
 
  308                         debris_start_death_roll(obj, db);
 
  326                         int n, n_arcs = ((rand()>>5) % 3)+1;            
 
  340                         int a = 100, 
b = 1000;
 
  341                         int lifetime = (
myrand()%((
b)-(a)+1))+(
a);
 
  382                         if ( lifetime > 750 )   {
 
  385                         } 
else if ( lifetime >  500 )   {
 
  388                         } 
else if ( lifetime >  250 )   {
 
  391                         } 
else if ( lifetime >  100 )   {
 
  409                                 if ( mr < RAND_MAX/5 )  {
 
  436         oldest_time = 0x7fffffff;
 
  448 #define DEBRIS_ROTVEL_SCALE     5.0f 
  464         int             i, 
n, objnum, parent_objnum;
 
  487                 if ( dist > 200.0
f ) {
 
  496                         debris_start_death_roll(&
Objects[Debris[n].objnum], &Debris[n] );
 
  505         if (n == MAX_DEBRIS_PIECES) {
 
  509                         debris_start_death_roll(&
Objects[Debris[n].objnum], &Debris[n]);
 
  511                 nprintf((
"Warning",
"Frame %i: Could not create debris, no more slots left\n", 
Framecount));
 
  528                         if (rand() < RAND_MAX/6)        
 
  591         if ( model_num < 0 )    {
 
  607                 pos = &source_obj->
pos;
 
  613         if ( objnum == -1 ) {
 
  614                 mprintf((
"Couldn't create debris object -- out of object slots\n"));
 
  656         vec3d rotvel, radial_vel, to_center;
 
  705         vec3d world_rotvel, vel_from_rotvel;
 
  707         vm_vec_cross ( &vel_from_rotvel, &world_rotvel, &to_center );
 
  787         if ( damage < 0.0
f ) {
 
  794                 debris_start_death_roll(debris_obj, debris_p );
 
  822         if ( debris_hit_info == NULL ) {
 
  832                 mc.
p1 = &other_obj->
pos;                                        
 
  847         object *pship_obj = other_obj;
 
  850         object *heavy = debris_hit_info->
heavy;
 
  851         object *lighter = debris_hit_info->
light;
 
  852         object *heavy_obj = heavy;
 
  853         object *light_obj = lighter;
 
  865         vec3d p0_temp, p0_rotated;
 
  884         if ( debris_hit_info->
heavy == pship_obj ) {    
 
  892                 int copy_flags = mc.
flags;  
 
  893                 vec3d copy_p0, copy_p1;
 
  906                         debris_hit_info->
hit_time = FLT_MAX;
 
  919                                 for (smv = submodel_vector.begin(); smv != submodel_vector.end(); ++smv) {
 
  931                                 for (smv = submodel_vector.begin(); smv != submodel_vector.end(); ++smv) {
 
  960                                                         if (debris_hit_info->
edge_hit == 0) {
 
  965                                                         vec3d int_light_pos, diff;
 
  977                         mc.
flags = copy_flags;
 
  991                                         if (debris_hit_info->
edge_hit == 0) {
 
 1022                         if ( !debris_hit_info->
edge_hit ) {
 
 1077         float dx, dy, dz, mass;
 
 1078         dx = maxs->
xyz.x - mins->
xyz.x;
 
 1079         dy = maxs->
xyz.y - mins->
xyz.y;
 
 1080         dz = maxs->
xyz.z - mins->
xyz.z;
 
 1083         mass = 0.12f * dx * dy * dz;
 
 1084         pi->
mass = (
float) pow(mass, 0.6666667
f) * 4.65f;
 
 1101         int                     i, 
num, swapped;
 
 1150         if (tbase != NULL && (swapped!=-1) && pm)       {
 
void calc_debris_physics_properties(physics_info *pi, vec3d *min, vec3d *max)
 
void mc_info_init(mc_info *mc)
 
float submodel_get_radius(int modelnum, int submodelnum)
 
int model_collide(mc_info *mc_info_obj)
 
void radar_plot_object(object *objp)
 
int timestamp(int delta_ms)
 
#define MULTIPLAYER_CLIENT
 
weapon Weapons[MAX_WEAPONS]
 
0.75 second spark sound effect 
 
int Cmdline_old_collision_sys
 
int debris_get_team(object *objp)
 
void vm_vec_scale_add(vec3d *dest, const vec3d *src1, const vec3d *src2, float k)
 
float debris_min_lifetime
 
polymodel * model_get(int model_num)
 
0.50 second spark sound effect 
 
SCP_vector< game_snd > Snds
 
#define FIREBALL_LARGE_EXPLOSION
 
#define DEBRIS_ROTVEL_SCALE
 
ushort multi_get_next_network_signature(int what_kind)
 
void debris_render_DEPRECATED(object *obj)
 
void model_get_rotating_submodel_list(SCP_vector< int > *submodel_vector, object *objp)
 
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
 
#define SUBMODEL_NO_ROT_HIT
 
float side_slip_time_const
 
#define list_append(head, elem)
 
vec3d arc_pts[MAX_DEBRIS_ARCS][2]
 
void set_flags(uint flags)
 
struct vec3d::@225::@227 xyz
 
float model_get_core_radius(int modelnum)
 
vec3d * vm_vec_rotate(vec3d *dest, const vec3d *src, const matrix *m)
 
#define END_OF_LIST(head)
 
void model_add_arc(int model_num, int sub_model_num, vec3d *v1, vec3d *v2, int arc_type)
 
#define FIREBALL_EXPLOSION_LARGE1
 
float debris_max_hitpoints
 
GLenum GLenum GLenum GLenum GLenum scale
 
GLfloat GLfloat GLfloat v2
 
#define MAX_DEBRIS_PIECES
 
float vm_vec_mag_squared(const vec3d *v)
 
void particle_emit(particle_emitter *pe, int type, int optional_data, float range)
 
void debris_process_post(object *obj, float frame_time)
 
int obj_snd_assign(int objnum, int sndnum, vec3d *pos, int main, int flags, ship_subsys *associated_sub)
 
void submodel_render_DEPRECATED(int model_num, int submodel_num, matrix *orient, vec3d *pos, uint flags=MR_DEPRECATED_NORMAL, int objnum=-1, int *replacement_textures=NULL, int render=MODEL_RENDER_ALL)
 
0.10 second spark sound effect 
 
void debris_hit(object *debris_obj, object *other_obj, vec3d *hitpos, float damage)
 
void shipfx_debris_limit_speed(debris *db, ship *shipp)
 
vec3d heavy_collision_cm_pos
 
void model_instance_find_world_point(vec3d *outpnt, vec3d *mpnt, int model_instance_num, int submodel_num, const matrix *objorient, const vec3d *objpos)
 
void vm_vec_add2(vec3d *dest, const vec3d *src)
 
struct matrix::@228::@230 vec
 
float ship_max_hull_strength
 
void vm_vec_scale(vec3d *dest, float s)
 
#define DEBRIS_DISTANCE_CHECK_TIME
 
GLboolean GLboolean GLboolean GLboolean a
 
int fireball_ship_explosion_type(ship_info *sip)
 
int obj_create(ubyte type, int parent_obj, int instance, matrix *orient, vec3d *pos, float radius, uint flags)
 
void model_clear_instance(int model_num)
 
int snd_play_3d(game_snd *gs, vec3d *source_pos, vec3d *listen_pos, float radius, vec3d *source_vel, int looping, float vol_scale, int priority, vec3d *sound_fvec, float range_factor, int force, bool is_ambient)
 
texture_map maps[MAX_MODEL_TEXTURES]
 
void world_find_model_instance_point(vec3d *out, vec3d *world_pt, const polymodel_instance *pmi, int submodel_num, const matrix *orient, const vec3d *pos)
 
void submodel_render_queue(model_render_params *render_info, draw_list *scene, int model_num, int submodel_num, matrix *orient, vec3d *pos)
 
void debris_clear_expired_flag(debris *db)
 
submodel_instance * submodel
 
#define MIN_RADIUS_FOR_PERSISTANT_DEBRIS
 
float debris_max_lifetime
 
generic_bitmap debris_texture
 
#define MONITOR(function_name)
 
int model_load(char *filename, int n_subsystems, model_subsystem *subsystems, int ferror=1, int duplicate=0)
 
float vm_vec_normalize_safe(vec3d *v)
 
debris Debris[MAX_DEBRIS_PIECES]
 
#define MC_CHECK_SPHERELINE
 
void model_instance_find_obj_dir(vec3d *w_vec, vec3d *m_vec, int model_instance_num, int submodel_num, matrix *objorient)
 
vec3d * vm_vec_unrotate(vec3d *dest, const vec3d *src, const matrix *m)
 
#define DEBRIS_SOUND_DELAY
 
void maybe_delete_debris(debris *db)
 
#define MC_SUBMODEL_INSTANCE
 
object Objects[MAX_OBJECTS]
 
void submodel_get_two_random_points(int model_num, int submodel_num, vec3d *v1, vec3d *v2, vec3d *n1=NULL, vec3d *n2=NULL)
 
#define MONITOR_INC(function_name, inc)
 
#define DEBRIS_UPDATE_NUKE
 
void send_debris_update_packet(object *objp, int code)
 
#define FIREBALL_NUM_LARGE_EXPLOSIONS
 
void vm_vec_copy_scale(vec3d *dest, const vec3d *src, float s)
 
void set_hit_struct_info(collision_info_struct *hit, mc_info *mc, int submodel_rot_hit)
 
void vm_vec_rand_vec_quick(vec3d *rvec)
 
int SetTexture(int n_tex)
 
void vm_vec_sub(vec3d *dest, const vec3d *src0, const vec3d *src1)
 
int check_rotvel_limit(physics_info *pi)
 
int bm_load(const char *real_filename)
Loads a bitmap so we can draw with it later. 
 
GLboolean GLboolean GLboolean b
 
typedef float(SCP_EXT_CALLCONV *SCPTRACKIR_PFFLOATVOID)()
 
polymodel_instance * model_get_instance(int model_instance_num)
 
float vm_vec_dist_quick(const vec3d *v0, const vec3d *v1)
 
float frand()
Return random value in range 0.0..1.0- (1.0- means the closest number less than 1.0) 
 
void submodel_get_two_random_points_better(int model_num, int submodel_num, vec3d *v1, vec3d *v2)
 
0.25 second spark sound effect 
 
void bm_page_in_texture(int bitmapnum, int nframes)
Marks a texture as being used for this level. 
 
void debris_render(object *obj, draw_list *scene)
 
int debris_check_collision(object *pdebris, object *other_obj, vec3d *hitpos, collision_info_struct *debris_hit_info)
 
float vm_vec_copy_normalize(vec3d *dest, const vec3d *src)
 
#define MULTIPLAYER_MASTER
 
int arc_timestamp[MAX_DEBRIS_ARCS]
 
texture_info textures[TM_NUM_TYPES]
 
SCP_vector< ship_info > Ship_info
 
char species_name[NAME_LENGTH]
 
#define timestamp_elapsed(stamp)
 
float debris_min_hitpoints
 
SCP_vector< species_info > Species_info
 
1.00 second spark sound effect 
 
#define OF_SHOULD_BE_DEAD
 
#define DEBRIS_UPDATE_UPDATE
 
#define list_remove(head, elem)
 
debris sound (persistant, looping) 
 
GLsizei GLsizei GLuint * obj
 
void debris_delete(object *obj)
 
#define timestamp_rand(a, b)
 
object * debris_create(object *source_obj, int model_num, int submodel_num, vec3d *pos, vec3d *exp_center, int hull_flag, float exp_force)
 
char filename[MAX_FILENAME_LEN]
 
vec3d * vm_vec_cross(vec3d *dest, const vec3d *src0, const vec3d *src1)
 
void vm_vec_add(vec3d *dest, const vec3d *src0, const vec3d *src1)
 
matrix vmd_identity_matrix
 
#define timestamp_valid(stamp)
 
int Debris_vaporize_model
 
vec3d light_collision_cm_pos
 
int debris_damage_type_idx
 
GLfloat GLfloat GLfloat GLfloat v3
 
float vm_vec_normalize(vec3d *v)
 
int fireball_create(vec3d *pos, int fireball_type, int render_type, int parent_obj, float size, int reverse, vec3d *velocity, float warp_lifetime, int ship_class, matrix *orient_override, int low_res, int extra_flags, int warp_open_sound, int warp_close_sound)