Difference for main/laser.c from version 1.2 to 1.3


version 1.2 version 1.3
Line 1005
 
Line 1005
   
  // For homing missiles, turn towards target.   // For homing missiles, turn towards target.
  if (Weapon_info[obj->id].homing_flag) {   if (Weapon_info[obj->id].homing_flag) {
  vms_vector vector_to_object, temp_vec;   vms_vector vector_to_object, vel_vec, res_vec;
  fix dot;   fix dot;
  fix speed, max_speed;   fix speed, max_speed;
   
Line 1034
 
Line 1034
   
  if (track_goal != -1) {   if (track_goal != -1) {
                             //edited 8/3/98 by Victor Rachels to fix homer high cpu effect                              //edited 8/3/98 by Victor Rachels to fix homer high cpu effect
                             fixang tang;                              fixang tang, mang;
                             //end this section editing - Victor Rachels                              //end this section editing - Victor Rachels
   
  vm_vec_sub(&vector_to_object, &Objects[track_goal].pos, &obj->pos);   vm_vec_sub(&vector_to_object, &Objects[track_goal].pos, &obj->pos);
   
  vm_vec_normalize_quick(&vector_to_object);   vm_vec_normalize_quick(&vector_to_object);
  temp_vec = obj->mtype.phys_info.velocity;   vel_vec = obj->mtype.phys_info.velocity;
  speed = vm_vec_normalize_quick(&temp_vec);   speed = vm_vec_normalize_quick(&vel_vec);
  max_speed = Weapon_info[obj->id].speed[Difficulty_level];   max_speed = Weapon_info[obj->id].speed[Difficulty_level];
  if (speed+F1_0 < max_speed) {   if (speed+F1_0 < max_speed) {
  speed += fixmul(max_speed, FrameTime/2);   speed += fixmul(max_speed, FrameTime/2);
Line 1049
 
Line 1049
  speed = max_speed;   speed = max_speed;
  }   }
   
  dot = vm_vec_dot(&temp_vec, &vector_to_object);   dot = vm_vec_dot(&vel_vec, &vector_to_object);
   
                                 //edited 8/2/98 by Victor Rachels to fix homer high cpu effect                                  vm_vec_add(&res_vec, &vel_vec, &vector_to_object);
                                 //check angle would be turning, if greater than maximum angle/sec, set to  
                                 // new angle, scaled by FrameTime for how much to turn this frame  
   
                                 tang = vm_vec_delta_ang_norm(&temp_vec,&vector_to_object,NULL);                                  tang = vm_vec_delta_ang(&vel_vec,&res_vec,NULL);
                                  if(tang > F1_0/(80/(Difficulty_level+1)-10 ) * FrameTime)                                  //mang = ((2000 + (Difficulty_level * 1000)) * FrameTime) / F1_0;
                                   mang = ((1+Difficulty_level) * FrameTime * 10000) / F1_0;
   
                                    if( tang > mang )
                                   {                                    {
                                     //make new vector at MaxHomingAng between previous vector and otherwise new vector;                                     vms_vector old_vec = res_vec;
                                     //Vector = ( (New - Old)* MaxAngle/OldAngle ) + Old  
                                    vm_vec_sub2(&temp_vec,&vector_to_object);                                     vms_vector v,d,axis;
                                    vm_vec_scale(&temp_vec,F1_0/(80/(Difficulty_level+1)-10 ) * FrameTime/tang);                                      vm_vec_copy_normalize(&v,&vel_vec);
                                    vm_vec_add2(&temp_vec,&vector_to_object);                                      vm_vec_copy_normalize(&d,&vector_to_object);
                                   }                                      vm_vec_crossprod(&axis,&v,&d);
                                 //end changes for fixing homers - Victor Rachels                                      vm_vec_normalize(&axis);
                                      fix sin,cos; fix_sincos(mang,&sin,&cos);
                                 vm_vec_add2(&temp_vec, &vector_to_object);                                     fix onemincos = F1_0 - cos;
  // The boss' smart children track better...                                     fix axax = fixmul(axis.x,axis.x);
  if (Weapon_info[obj->id].render_type != WEAPON_RENDER_POLYMODEL)                                     fix axay = fixmul(fixmul(axis.x,axis.y),onemincos);
  vm_vec_add2(&temp_vec, &vector_to_object);                                     fix axaz = fixmul(fixmul(axis.x,axis.z),onemincos);
  vm_vec_normalize_quick(&temp_vec);                                     fix ayay = fixmul(axis.y,axis.y);
  vm_vec_scale(&temp_vec, speed);                                     fix ayaz = fixmul(fixmul(axis.y,axis.z),onemincos);
  obj->mtype.phys_info.velocity = temp_vec;                                     fix azaz = fixmul(axis.z,axis.z);
                                      fix axsin = fixmul(axis.x,sin);
                                      fix aysin = fixmul(axis.y,sin);
                                      fix azsin = fixmul(axis.z,sin);
   
                                       res_vec.x = fixmul((axax+fixmul(cos,(F1_0-axax))),vel_vec.x) + fixmul((axay-azsin),vel_vec.y) + fixmul((axaz+aysin),vel_vec.z);
                                       res_vec.y = fixmul((axay+azsin),vel_vec.x) + fixmul((ayay+fixmul(cos,(F1_0-ayay))),vel_vec.y) + fixmul((ayaz-axsin),vel_vec.z);
                                       res_vec.z = fixmul((axaz-aysin),vel_vec.x) + fixmul((ayaz+axsin),vel_vec.y) + fixmul((azaz+fixmul(cos,(F1_0-azaz))),vel_vec.z);
   
                                      fixang nang = vm_vec_delta_ang_norm(&vel_vec,&res_vec,NULL);
                                        if(nang < 0)
                                         {
                                           res_vec = old_vec;
                                         }
     //                                  hud_message(MSGC_GAME_FEEDBACK,"tang %d mang %d nang %d",tang, mang, nang);
                                     }
       //                             else
         //                            {
           //                            hud_message(MSGC_GAME_FEEDBACK,"tang %d mang %d",tang, mang);
             //                        }
   
   
    // The boss' smart children track better... -- naah
    //if (Weapon_info[obj->id].render_type != WEAPON_RENDER_POLYMODEL)
    // vm_vec_add2(&temp_vec, &vector_to_object);
    vm_vec_normalize_quick(&res_vec);
    vm_vec_scale(&res_vec, speed);
    obj->mtype.phys_info.velocity = res_vec;
   
  // Subtract off life proportional to amount turned.   // Subtract off life proportional to amount turned.
  // For hardest turn, it will lose 2 seconds per second.   // For hardest turn, it will lose 2 seconds per second.
Line 1086
 
Line 1114
  absdot = F1_0/4;   absdot = F1_0/4;
  lifelost = fixmul(absdot*16, FrameTime);   lifelost = fixmul(absdot*16, FrameTime);
  obj->lifeleft -= lifelost;   obj->lifeleft -= lifelost;
  // mprintf((0, "Missile %3i, dot = %7.3f life lost = %7.3f, life left = %7.3f\n", obj-Objects, f2fl(dot), f2fl(lifelost), f2fl(obj->lifeleft)));   mprintf((0, "Missile %3i, dot = %7.3f life lost = %7.3f, life left = %7.3f\n", obj-Objects, f2fl(dot), f2fl(lifelost), f2fl(obj->lifeleft)));
  }   }
                                         //added 8/14/98 by Victor Rachels to make homers lose life while going straight, too                                          //added 8/14/98 by Victor Rachels to make homers lose life while going straight, too
                                         obj->lifeleft -= fixmul(F1_0, FrameTime);                                          obj->lifeleft -= fixmul(F1_0, FrameTime);
                                         //end addition - Victor Rachels  
                                         //added 8/18/98 by Victor Rachels to make homers go straight after lifelost  
                                       //killed 8/28/98 by Victor Rachles - doesn't work  
                                       //  if(obj->lifeleft <= F1_0)  
                                       //   {  
                                       //    obj->lifeleft = F1_0*100;  
                                       //    Weapon_info[obj->id].homing_flag=0;  
                                       //   }  
                                       //end kill - Victor Rachels  
                                         //end addition - Victor Rachels  
   
  }   }
   
  // Only polygon objects have visible orientation, so only they should turn.   // Only polygon objects have visible orientation, so only they should turn.
  if (Weapon_info[obj->id].render_type == WEAPON_RENDER_POLYMODEL)   if (Weapon_info[obj->id].render_type == WEAPON_RENDER_POLYMODEL)
  homing_missile_turn_towards_velocity(obj, &temp_vec); // temp_vec is normalized velocity.   homing_missile_turn_towards_velocity(obj, &res_vec); // res_vec is normalized velocity.
  }   }
  }   }
   

Legend:
line(s) removed in v.1.2 
line(s) changed
 line(s) added in v.1.3