Skip to content

Commit c47e082

Browse files
committed
misc fixes to start/loop/end snds
1 parent 5eea353 commit c47e082

1 file changed

Lines changed: 16 additions & 12 deletions

File tree

code/ship/ship.cpp

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10790,31 +10790,35 @@ void update_firing_sounds(object* objp, ship* shipp)
1079010790
// equality comparisons to -1 are correct here, -2 is valid and means a loop is active but the modder didnt specify an actual loop sound
1079110791

1079210792
if (swp->firing_loop_sounds[i] == -1 && trigger_down && !primaries_locked && selected && has_resources && burst_only_allowed && !dying) {
10793+
auto* pm = model_get(Ship_info[shipp->ship_info_index].model_num);
10794+
vec3d snd_pos, world_snd_pos;
10795+
vm_vec_avg_n(&snd_pos, pm->gun_banks[i].num_slots, pm->gun_banks[i].pnt);
10796+
vm_vec_unrotate(&world_snd_pos, &snd_pos, &objp->orient);
10797+
world_snd_pos += objp->pos;
10798+
1079310799
if (wip->start_firing_snd.isValid() && start_snd_played != wip->start_firing_snd) {
10794-
if (objp == Player_obj)
10795-
snd_play(gamesnd_get_game_sound(wip->start_firing_snd));
10796-
else
10797-
snd_play_3d(gamesnd_get_game_sound(wip->start_firing_snd), &objp->pos, &View_position);
10800+
snd_play_3d(gamesnd_get_game_sound(wip->start_firing_snd), &objp->pos, &world_snd_pos);
1079810801

1079910802
start_snd_played = wip->start_firing_snd;
1080010803
}
1080110804

10802-
vec3d pos = model_get(Ship_info[shipp->ship_info_index].model_num)->view_positions[0].pnt;
10803-
1080410805
if (wip->linked_loop_firing_snd.isValid() && shipp->flags[Ship::Ship_Flags::Primary_linked])
10805-
swp->firing_loop_sounds[i] = obj_snd_assign(shipp->objnum, wip->linked_loop_firing_snd, &pos, OS_PLAY_ON_PLAYER);
10806+
swp->firing_loop_sounds[i] = obj_snd_assign(shipp->objnum, wip->linked_loop_firing_snd, &snd_pos, OS_PLAY_ON_PLAYER);
1080610807
else if (wip->loop_firing_snd.isValid())
10807-
swp->firing_loop_sounds[i] = obj_snd_assign(shipp->objnum, wip->loop_firing_snd, &pos, OS_PLAY_ON_PLAYER);
10808+
swp->firing_loop_sounds[i] = obj_snd_assign(shipp->objnum, wip->loop_firing_snd, &snd_pos, OS_PLAY_ON_PLAYER);
1080810809
else
1080910810
swp->firing_loop_sounds[i] = -2;
1081010811
}
1081110812

1081210813
if (swp->firing_loop_sounds[i] != -1 && (!trigger_down || primaries_locked || !selected || !has_resources || !burst_only_allowed || dying)) {
10814+
auto* pm = model_get(Ship_info[shipp->ship_info_index].model_num);
10815+
vec3d world_snd_pos;
10816+
vm_vec_avg_n(&world_snd_pos, pm->gun_banks[i].num_slots, pm->gun_banks[i].pnt);
10817+
vm_vec_unrotate(&world_snd_pos, &world_snd_pos, &objp->orient);
10818+
world_snd_pos += objp->pos;
10819+
1081310820
if (wip->end_firing_snd.isValid() && end_snd_played != wip->end_firing_snd) {
10814-
if (objp == Player_obj)
10815-
snd_play(gamesnd_get_game_sound(wip->end_firing_snd));
10816-
else
10817-
snd_play_3d(gamesnd_get_game_sound(wip->end_firing_snd), &objp->pos, &View_position);
10821+
snd_play_3d(gamesnd_get_game_sound(wip->end_firing_snd), &objp->pos, &world_snd_pos);
1081810822

1081910823
end_snd_played = wip->end_firing_snd;
1082010824
}

0 commit comments

Comments
 (0)