arescentral / antares

A tactical space combat game
http://arescentral.org/antares/
GNU Lesser General Public License v3.0
100 stars 18 forks source link

Message typing sound is loud and disruptive to gameplay flow #472

Open kael131 opened 8 months ago

kael131 commented 8 months ago

I noticed this myself when playing but I also asked a friend to try Antares out for the first time and the first thing he mentioned was wanting to mute the sound that plays when in-mission messages are displayed to the player.

Primarily, it's most instrusive during the tutorial missions due to the large amounts of text.

When the mission briefing appears and the chapter name is given, e.g. "Tutorial Lesson 1, Moons for Goons" the typing sound plays correctly, but sounds during the mission itself seem to clip over each other. The sounds that accompany messages that highlight features of the UI are worse (play faster) than those appearing at the bottom of the screen.

I see a couple of ways it could be improved: Reduce volume of the sound by some percentage, say 50%, and play the sound less frequently; maybe every other character.

kael131 commented 8 months ago

Briefly looking through the code, I would increase the number of ticks between teletype sounds for messages, but I couldn't see exactly where the on-UI highlight messages that appear during tutorials are drawn.

Edit: I think I found where you were unsure of the correct timings yourself - Line 149 of labels.cpp. I wouldn't worry about staying faithful to the original, this is one of those QoL changes that will make the game more accessible for newcomers.

 if (!label->text().done()) {
            // TODO(sfiera): get data on the original rate here.  It looks like the rate of
            // printing was tied to the frame rate before: 3 per frame.  Here, we've switched to 1
            // per tick, so this would be equivalent to the old code at 20 FPS.  The question is,
            // does it feel equivalent?  It only comes up in the tutorial.
            for (size_t i = 0; i < units_done.count(); ++i) {
                label->text().advance();
            }
            if (!label->text().done()) {
                sys.sound.teletype();
            }
        }