dxx-rebirth/similar
Kp 771eecf695 Fix ambient sound effects
Ambient sound effects have always been buggy in certain topologies,
since `ambient_mark_bfs` refuses to cross its own path.  Consider a
corridor:

 L _ _ _ _ _ _ _ _ _ _
     _     _
     _     L

Where L is a lavafall emitting sound, whitespace is insignificant, _ is
a segment, * is a tagged segment, and / is a segment that should be
tagged, but is not.  Let the leftmost L be a lower number segment than
the lower L.  Sound propagation after the first step is:

 L * * * * * _ _ _ _ _
     *     _
     *     L

After the second step, it should be:

 L * * * * * * * * _ _
     *     *
     *     L

However, `ambient_mark_bfs` will stop when it hits the intersection, so
instead the result is:

 L * * * * * / / / _ _
     *     *
     *     L

To further confuse the issue, emitter segments are processed in memory
order, so if the leftmost L is a higher index segment than the lower L,
the lower L will be processed first and the steps will be:

 L _ * * * * * * * _ _
     _     *
     _     L

 L * * * * * * * * _ _
     /     *
     /     L

Rewrite the propagation to record the travel depth remaining at each
node, and permit it to cross a segment with a lower depth remaining than
the current step.  This still stops early when traversal attempts to
backtrack over itself, but permits it to visit, tag, and cross segments
that were previously visited by a different emitter.
2018-04-09 00:58:28 +00:00
..
2d Remove build_colormap_good parameter used 2018-03-08 04:21:18 +00:00
3d Use constexpr integral_constant for various magic numbers 2017-10-14 17:10:30 +00:00
arch Make SDL-only SDL_Surface pointers static 2018-03-02 03:19:02 +00:00
editor Pass vertex factory to compute_center_point_on_side 2018-03-12 03:43:47 +00:00
main Fix ambient sound effects 2018-04-09 00:58:28 +00:00
misc Replace useless printf with puts 2017-12-05 05:29:55 +00:00