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

Function collide_generic_and_wall

physics/collide.cpp:1399–1467  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1397}
1398
1399void collide_generic_and_wall(object *genericobj, float hitspeed, int hitseg, int hitwall, vector *hitpt,
1400 vector *wall_normal, float hit_dot) {
1401 bool f_volatile, f_lava;
1402 bool f_forcefield;
1403 float volume = MAX_GAME_VOLUME;
1404
1405 // Check for a trigger on this wall
1406 int tmap;
1407 if (!ROOMNUM_OUTSIDE(hitseg)) // Make sure we've hit a wall, and not terrain
1408 {
1409 CheckTrigger(hitseg, hitwall, genericobj, TT_COLLIDE);
1410 tmap = Rooms[hitseg].faces[hitwall].tmap;
1411 } else {
1412 tmap = Terrain_tex_seg[Terrain_seg[CELLNUM(hitseg)].texseg_index].tex_index;
1413 }
1414 f_forcefield = (GameTextures[tmap].flags & TF_FORCEFIELD) != 0;
1415 f_volatile = (GameTextures[tmap].flags & TF_VOLATILE) != 0;
1416 f_lava = (GameTextures[tmap].flags & TF_LAVA) != 0;
1417
1418 if (IS_GUIDEBOT(genericobj)) {
1419 f_forcefield = false;
1420 f_volatile = false;
1421 f_lava = false;
1422 }
1423
1424 if (f_lava) {
1425 if (!((Game_mode & GM_MULTI) && (Netgame.local_role == LR_CLIENT))) {
1426 int id = FindWeaponName("NapalmBlob");
1427 if (id >= 0)
1428 SetNapalmDamageEffect(genericobj, nullptr, id);
1429 else
1430 Int3();
1431 }
1432 }
1433
1434 // If volatile, make the sound & apply damage
1435 if (f_volatile && !((Game_mode & GM_MULTI) && (Netgame.local_role == LR_CLIENT))) {
1436 ApplyDamageToGeneric(genericobj, genericobj, GD_VOLATILE_HISS, VOLATILE_DAMAGE);
1437 Sound_system.Play3dSound(SOUND_VOLATILE_HISS, SND_PRIORITY_HIGHEST, genericobj, MAX_GAME_VOLUME);
1438 }
1439
1440 if (f_forcefield && !((Game_mode & GM_MULTI) && (Netgame.local_role == LR_CLIENT))) {
1441 if (sound_override_force_field == -1) {
1442 Sound_system.Play3dSound(SOUND_FORCEFIELD_BOUNCE, SND_PRIORITY_LOW, genericobj, MAX_GAME_VOLUME);
1443 ApplyDamageToGeneric(genericobj, genericobj, GD_ENERGY, FORCEFIELD_DAMAGE);
1444 } else {
1445 Sound_system.Play3dSound(sound_override_force_field, SND_PRIORITY_LOW, genericobj, MAX_GAME_VOLUME);
1446 }
1447 }
1448
1449 if (genericobj->control_type != CT_AI) {
1450 if (!f_forcefield && !f_volatile && !f_lava && hitspeed > MIN_WALL_HIT_SOUND_VEL) {
1451 if (hitspeed < MAX_WALL_HIT_SOUND_VEL) {
1452 volume =
1453 MAX_GAME_VOLUME * (hitspeed - MIN_WALL_HIT_SOUND_VEL) / (MAX_WALL_HIT_SOUND_VEL - MIN_WALL_HIT_SOUND_VEL);
1454 }
1455
1456 if (hitspeed > MIN_WALL_DAMAGE_SPEED) {

Callers 1

collide_object_with_wallFunction · 0.85

Calls 6

CheckTriggerFunction · 0.85
FindWeaponNameFunction · 0.85
SetNapalmDamageEffectFunction · 0.85
ApplyDamageToGenericFunction · 0.85
DemoWrite3DSoundFunction · 0.85
Play3dSoundMethod · 0.80

Tested by

no test coverage detected