MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / do_melee_attack

Function do_melee_attack

Descent3/AImain.cpp:2420–2495  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2418}
2419
2420void do_melee_attack(object *obj) {
2421 ai_frame *ai_info = obj->ai_info;
2422 float damage;
2423 notify melee_info;
2424 int attack_num;
2425 object *target = ObjGet(ai_info->target_handle);
2426
2427 if (ai_info->animation_type == AS_MELEE1) {
2428 damage = ai_info->melee_damage[0];
2429 ai_info->next_melee_time = Gametime + ai_info->melee_latency[0];
2430 attack_num = 0;
2431 } else {
2432 damage = ai_info->melee_damage[1];
2433 ai_info->next_melee_time = Gametime + ai_info->melee_latency[1];
2434 attack_num = 1;
2435 }
2436
2437 melee_info.obj_handle = ai_info->target_handle;
2438 melee_info.attack_num = attack_num;
2439
2440 AINotify(obj, AIN_MELEE_ATTACK_FRAME, (void *)&melee_info);
2441
2442 if (target) {
2443 float dist = ai_info->dist_to_target_actual;
2444
2445 if (dist <= AI_MAX_MELEE_RANGE) {
2446 AINotify(obj, AIN_MELEE_HIT, (void *)&melee_info);
2447
2448 if (damage >= 1.0f) {
2449 object *objptr = ObjGet(ai_info->target_handle);
2450
2451 if (objptr) {
2452 if (ps_rand() > D3_RAND_MAX / 2) {
2453 Sound_system.Play3dSound(SOUND_MELEE_HIT_0, SND_PRIORITY_HIGHEST, objptr);
2454 if (Game_mode & GM_MULTI)
2455 MultiPlay3dSound(SOUND_MELEE_HIT_0, OBJNUM(objptr), SND_PRIORITY_HIGHEST);
2456 if (Demo_flags == DF_RECORDING)
2457 DemoWrite3DSound(SOUND_MELEE_HIT_0, OBJNUM(objptr), SND_PRIORITY_HIGHEST);
2458 } else {
2459 Sound_system.Play3dSound(SOUND_MELEE_HIT_1, SND_PRIORITY_HIGHEST, objptr);
2460 if (Game_mode & GM_MULTI)
2461 MultiPlay3dSound(SOUND_MELEE_HIT_1, OBJNUM(objptr), SND_PRIORITY_HIGHEST);
2462 if (Demo_flags == DF_RECORDING)
2463 DemoWrite3DSound(SOUND_MELEE_HIT_1, OBJNUM(objptr), SND_PRIORITY_HIGHEST);
2464 }
2465
2466 if (objptr->type == OBJ_PLAYER)
2467 ApplyDamageToPlayer(objptr, obj, PD_MELEE_ATTACK, damage);
2468 else
2469 ApplyDamageToGeneric(objptr, obj, GD_MELEE_ATTACK, damage);
2470 }
2471 } else if (damage == 0.0f) {
2472 float energy;
2473 object *objptr = ObjGet(ai_info->target_handle);
2474
2475 // chrishack - milestone - replace with real code
2476 if (objptr) {
2477 Sound_system.Play3dSound(SOUND_ENERGY_DRAIN, SND_PRIORITY_HIGHEST, objptr);

Callers 1

AIUpdateAnimFunction · 0.85

Calls 9

ObjGetFunction · 0.85
AINotifyFunction · 0.85
ps_randFunction · 0.85
MultiPlay3dSoundFunction · 0.85
DemoWrite3DSoundFunction · 0.85
ApplyDamageToPlayerFunction · 0.85
ApplyDamageToGenericFunction · 0.85
DecreasePlayerEnergyFunction · 0.85
Play3dSoundMethod · 0.80

Tested by

no test coverage detected