// target the next ship in the escort list void hud_escort_target_next() { int objnum; if ( Num_escort_ships == 0 ) { snd_play( &Snds[SND_TARGET_FAIL], 0.0f ); return; } Last_target_index++; if ( Last_target_index >= Num_escort_ships ) { Last_target_index = 0; } objnum = Escort_ships[Last_target_index].objnum; set_target_objnum( Player_ai, objnum); hud_restore_subsystem_target(&Ships[Objects[objnum].instance]); }
// start the emp effect for the passed ship (setup lightning arcs, timestamp, etc) // NOTE : if this ship is also me, I should call emp_start_local() as well void emp_start_ship(object *ship_objp, float intensity, float time) { ship *shipp; ai_info *aip; float start_intensity; // make sure this is a ship Assert(ship_objp->type == OBJ_SHIP); Assert(ship_objp->instance >= 0); shipp = &Ships[ship_objp->instance]; // determining pre-existing EMP intensity (if any) start_intensity = shipp->emp_intensity < 0.0f ? 0.0f : shipp->emp_intensity; // setup values (capping them if necessary) (make sure that we un-normalize start_intensity) if(intensity + (start_intensity * EMP_INTENSITY_MAX) >= EMP_INTENSITY_MAX){ intensity = EMP_INTENSITY_MAX - 1.0f; } else { intensity += (start_intensity * EMP_INTENSITY_MAX); } intensity /= EMP_INTENSITY_MAX; if(time >= EMP_TIME_MAX){ time = EMP_TIME_MAX - 0.1f; } shipp->emp_intensity = intensity; shipp->emp_decr = intensity / time; // multiplayer clients should bail now if(MULTIPLAYER_CLIENT){ return; } // do any initial AI effects Assert(shipp->ai_index >= 0); aip = &Ai_info[shipp->ai_index]; // lose his current target set_target_objnum(aip, -1); set_targeted_subsys(aip, NULL, -1); }