When setting user sounds, allow also setting a MSGTYPE

The SOUND lines now have an optional msgtype parameter:

   SOUND=MESG hide "^You miss the " "swing.wav" 75

Fixes #571
This commit is contained in:
Pasi Kallinen
2022-04-27 13:31:28 +03:00
parent 5d20140b74
commit c3c60b0b2c
4 changed files with 39 additions and 4 deletions

View File

@@ -5053,6 +5053,8 @@ Each SOUND entry is broken down into the following parts:
.PS "sound index" .PS "sound index"
.PL MESG .PL MESG
message window mapping (the only one supported in 3.7); message window mapping (the only one supported in 3.7);
.PL msgtype
optional; message type to use, see \(lqConfiguring Message Types\(rq
.PL pattern .PL pattern
the pattern to match; the pattern to match;
.PL "sound file" .PL "sound file"
@@ -5065,6 +5067,15 @@ optional; the index corresponding to a sound file.
.lp "" .lp ""
The pattern should be a POSIX extended regular expression. The pattern should be a POSIX extended regular expression.
.pg .pg
For example:
.sd
.si
SOUNDDIR=C:\\nethack\\sounds
SOUND=MESG "This door is locked" "lock.wav" 100
SOUND=MESG hide "^You miss the " "swing.wav" 75
.ei
.ed
.pg
.hn 2 .hn 2
Configuring Status Hilites Configuring Status Hilites
.pg .pg

View File

@@ -5589,6 +5589,7 @@ Each SOUND entry is broken down into the following parts:
%.sd %.sd
%.si %.si
{\tt MESG } --- message window mapping (the only one supported in 3.7);\\ {\tt MESG } --- message window mapping (the only one supported in 3.7);\\
{\tt msgtype } --- optional; message type to use, see ``Configuring User Sounds''\\
{\tt pattern } --- the pattern to match;\\ {\tt pattern } --- the pattern to match;\\
{\tt sound file } --- the sound file to play;\\ {\tt sound file } --- the sound file to play;\\
{\tt volume } --- the volume to be set while playing the sound file;\\ {\tt volume } --- the volume to be set while playing the sound file;\\
@@ -5600,6 +5601,15 @@ Each SOUND entry is broken down into the following parts:
%.lp "" %.lp ""
The pattern should be a POSIX extended regular expression. The pattern should be a POSIX extended regular expression.
For example:
\begin{verbatim}
SOUNDDIR=C:\\nethack\\sounds
SOUND=MESG "This door is locked" "lock.wav" 100
SOUND=MESG hide "^You miss the " "swing.wav" 75
\end{verbatim}
%.pg
%.lp %.lp
%.hn 2 %.hn 2
\subsection*{Configuring Status Hilites} \subsection*{Configuring Status Hilites}

View File

@@ -1595,6 +1595,8 @@ context sensitive item usage menu from inventory, aka "item actions"
pets are more likely to follow you closely if you are carrying something they pets are more likely to follow you closely if you are carrying something they
really like to eat; behave as if you are carrying such whenever you really like to eat; behave as if you are carrying such whenever you
are standing on stairs so that pets will try harder to come to you are standing on stairs so that pets will try harder to come to you
allow setting msgtype in SOUND line
Platform- and/or Interface-Specific New Features Platform- and/or Interface-Specific New Features
------------------------------------------------ ------------------------------------------------

View File

@@ -1422,12 +1422,18 @@ add_sound_mapping(const char* mapping)
char text[256]; char text[256];
char filename[256]; char filename[256];
char filespec[256]; char filespec[256];
char msgtyp[11];
int volume, idx = -1; int volume, idx = -1;
if (sscanf(mapping, "MESG \"%255[^\"]\"%*[\t ]\"%255[^\"]\" %d %d", text, msgtyp[0] = '\0';
filename, &volume, &idx) == 4 if (sscanf(mapping, "MESG \"%255[^\"]\"%*[\t ]\"%255[^\"]\" %d %d",
|| sscanf(mapping, "MESG \"%255[^\"]\"%*[\t ]\"%255[^\"]\" %d", text, text, filename, &volume, &idx) == 4
filename, &volume) == 3) { || sscanf(mapping, "MESG %10[^\"] \"%255[^\"]\"%*[\t ]\"%255[^\"]\" %d %d",
msgtyp, text, filename, &volume, &idx) == 5
|| sscanf(mapping, "MESG %10[^\"] \"%255[^\"]\"%*[\t ]\"%255[^\"]\" %d",
msgtyp, text, filename, &volume) == 4
|| sscanf(mapping, "MESG \"%255[^\"]\"%*[\t ]\"%255[^\"]\" %d",
text, filename, &volume) == 3) {
audio_mapping *new_map; audio_mapping *new_map;
if (!sounddir) if (!sounddir)
@@ -1455,6 +1461,12 @@ add_sound_mapping(const char* mapping)
raw_print(re_error_desc); raw_print(re_error_desc);
return 0; return 0;
} else { } else {
if (*msgtyp) {
char tmpbuf[BUFSZ];
Sprintf(tmpbuf, "%.10s \"%.230s\"", msgtyp, text);
(void) msgtype_parse_add(tmpbuf);
}
soundmap = new_map; soundmap = new_map;
} }
} else { } else {