34 object *pdebris = pair->
a;
35 object *pship = pair->
b;
51 if ( dist < pdebris->radius + pship->
radius ) {
59 debris_hit_info.
heavy = pdebris;
60 debris_hit_info.
light = pship;
62 debris_hit_info.
heavy = pship;
63 debris_hit_info.
light = pdebris;
74 if(!ship_override && !debris_override)
82 if ( debris_hit_info.
impulse < 0.5f )
86 ship_damage = 0.005f * debris_hit_info.
impulse;
88 if (ship_damage > 5.0
f)
89 ship_damage = 5.0f + (ship_damage - 5.0f)/2.0
f;
95 debris_damage = (debris_damage > ship_damage) ? debris_damage : ship_damage;
107 debris_hit( pdebris, pship, &hitpos, debris_damage);
108 int quadrant_num, apply_ship_damage;
113 if ( debris_hit_info.
heavy == pship ) {
118 if (apply_ship_damage) {
123 if (apply_ship_damage) {
137 if(!(debris_override && !ship_override))
141 if((debris_override && !ship_override) || (!debris_override && !ship_override))
149 float ship_max_speed, debris_speed;
160 ship_max_speed =
MAX(ship_max_speed, 10.0
f);
165 time = 1000.0f * (dist - pship->
radius - pdebris->
radius - 10.0f) / (ship_max_speed + debris_speed);
189 object *pasteroid = pair->
a;
190 object *pship = pair->
b;
205 if ( dist < pasteroid->radius + pship->
radius ) {
213 asteroid_hit_info.
heavy = pasteroid;
214 asteroid_hit_info.
light = pship;
216 asteroid_hit_info.
heavy = pship;
217 asteroid_hit_info.
light = pasteroid;
230 if(!ship_override && !asteroid_override)
233 float asteroid_damage;
240 if ( asteroid_hit_info.
impulse < 0.5f )
247 if (asteroid_hit_info.
impulse > max_ship_impulse) {
248 ship_damage = 0.001f * max_ship_impulse;
250 ship_damage = 0.001f * asteroid_hit_info.
impulse;
254 if (ship_damage > 5.0
f)
255 ship_damage = 5.0f + (ship_damage - 5.0f)/2.0
f;
270 asteroid_damage = (asteroid_damage > ship_damage) ? asteroid_damage : ship_damage;
273 asteroid_hit( pasteroid, pship, &hitpos, asteroid_damage);
278 if ( asteroid_hit_info.
heavy == pship ) {
298 if(!(asteroid_override && !ship_override))
302 if((asteroid_override && !ship_override) || (!asteroid_override && !ship_override))
313 float asteroid_max_speed, ship_max_speed, time;
317 asteroid_max_speed =
MAX(asteroid_max_speed, 10.0
f);
324 ship_max_speed =
MAX(ship_max_speed, 10.0
f);
328 time = 1000.0f * (dist - pship->
radius - pasteroid->
radius - 10.0f) / (asteroid_max_speed + ship_max_speed);
int timestamp(int delta_ms)
float vm_vec_mag_quick(const vec3d *v)
float ship_get_max_speed(ship *shipp)
float frand_range(float min, float max)
Return a floating point number in the range min..max.
int collide_asteroid_ship(obj_pair *pair)
float vm_vec_mag(const vec3d *v)
float ship_get_warpout_speed(object *objp)
int ship_is_beginning_warpout_speedup(object *objp)
int asteroid_check_collision(object *pasteroid, object *other_obj, vec3d *hitpos, collision_info_struct *asteroid_hit_info)
struct vec3d::@225::@227 xyz
ai_info Ai_info[MAX_AI_INFO]
int collide_debris_ship(obj_pair *pair)
void calculate_ship_ship_collision_physics(collision_info_struct *ship_ship_hit_info)
script_state Script_system("FS2_Open Scripting")
void debris_hit(object *debris_obj, object *other_obj, vec3d *hitpos, float damage)
void collide_ship_ship_do_sound(vec3d *world_hit_pos, object *A, object *B, int player_involved)
float ship_max_hull_strength
#define CHA_COLLIDEDEBRIS
float vm_vec_dist(const vec3d *v0, const vec3d *v1)
debris Debris[MAX_DEBRIS_PIECES]
#define CHA_COLLIDEASTEROID
const char * XSTR(const char *str, int index)
int RunCondition(int condition, char format='\0', void *data=NULL, class object *objp=NULL, int more_data=0)
void SetHookObjects(int num,...)
void hud_start_text_flash(char *txt, int t, int interval)
int debris_check_collision(object *pdebris, object *other_obj, vec3d *hitpos, collision_info_struct *debris_hit_info)
void RemHookVars(unsigned int num,...)
SCP_vector< ship_info > Ship_info
void ship_apply_local_damage(object *ship_objp, object *other_obj, vec3d *hitpos, float damage, int quadrant, bool create_spark, int submodel_num, vec3d *hit_normal)
void asteroid_hit(object *pasteroid_obj, object *other_obj, vec3d *hitpos, float damage)
void init_collision_info_struct(collision_info_struct *cis)
bool IsConditionOverride(int action, object *objp=NULL)
char ship_name[NAME_LENGTH]
int ship_is_shield_up(object *obj, int quadrant)
int get_ship_quadrant_from_global(vec3d *global_pos, object *objp)