further utilize sound interface - part 2
Expand windsound to support SNDCAP_USERSOUNDS (existing),
SNDCAP_SOUNDEFFECTS, SNDCAP_HEROMUSIC.
Place a small number of wav files into sound/wav that are considered
more specific to some game stuff in the core, namely: playing
instruments by the hero, squeaky board traps. The intention is that
those ones can be integrated into the game without requiring user
file deposits or mappings. Building soundlib support for sound/windsound
searches for them as resources, so they should "just work."
No actual instrument playback is available in the base sound/windsound
soundlib implementation (yet, at least), so it works around that in
a cheap way by using the note-variant wav sounds to concoct the
notes. There are better ways of doing music generation than that,
of course, but this will do in the early going. Any other soundlib
port (such as Qt) can probably easily do the exact same thing. If it
can play USER_SOUNDS, it can almost certainly use the
sound/wav/se_squeak*.wav and sound/wav/sound_*.wav files for
SND_HEROMUSIC and squeaky board sounds soundeffects.
A few of the se_ sounds in sound/wav are free yet licensed, and
there is a file called attributions.txt to meticulously attempt
to comply with the two license variations involved.
SND_SOUNDEFFECTS_AUTOMAP
If SND_SOUNDEFFECTS_AUTOMAP is defined, and a SND_LIB_ interface
that supports SNDPROC_SOUNDEFFECTS is also defined to integrate
soundlib support, the following gets added:
o If sounddir is defined (existing longstanding feature that's
been used with USER_SOUNDS for many, many years) any wav file
present in SOUNDDIR with a name that matches one of the defined
sound effects in include/sndproc.h will get played each time
that soundeffect comes up. So, just drop appropriate wav files
into sounddir and rename it to match.
No tedious config file entries are required to get soundeffects.
[ The only config file change required is to
set SOUNDDIR to point to your directory with the wav files.
Note: SOUNDDIR only works in your config file if NetHack
was built with USER_SOUNDS defined. ]
This is new so there may certainly be some bugs in here.
Please kindly report them if you encounter any.
For those that don't read C very well, these are the file names
that should trigger the SOUNDEFFECTS_AUTOMAP, assuming it is working.
se_faint_splashing.wav
se_crackling_of_hellfire.wav
se_heart_beat.wav
se_typing_noise.wav
se_hollow_sound.wav
se_rustling_paper.wav
se_crushing_sound.wav
se_splash.wav
se_chains_rattling_gears_turning.wav
se_smashing_and_crushing.wav
se_gears_turning_chains_rattling.wav
se_loud_splash.wav
se_lound_crash.wav
se_crashing_rock.wav
se_sizzling.wav
se_crashing_boulder.wav
se_boulder_drop.wav
se_item_tumble_downwards.wav
se_drain_noises.wav
se_ring_in_drain.wav
se_groans_and_moans.wav
se_scratching.wav
se_glass_shattering.wav
se_egg_cracking.wav
se_gushing_sound.wav
se_glass_crashing.wav
se_egg_splatting.wav
se_sinister_laughter.wav
se_blast.wav
se_stone_breaking.wav
se_stone_crumbling.wav
se_snakes_hissing.wav
se_loud_pop.wav
se_clanking_pipe.wav
se_sewer_song.wav
se_monster_behind_boulder.wav
se_wailing_of_the_banshee.wav
se_swoosh.wav
se_explosion.wav
se_crashing_sound.wav
se_someone_summoning.wav
se_rushing_wind_noise.wav
se_splat_from_engulf.wav
se_faint_sloshing.wav
se_crunching_sound.wav
se_slurping_sound.wav
se_masticating_sound.wav
se_distant_thunder.wav
se_applause.wav
se_shrill_whistle.wav
se_someone_yells.wav
se_door_unlock_and_open.wav
se_door_open.wav
se_door_crash_open.wav
se_dry_throat_rattle.wav
se_cough.wav
se_angry_snakes.wav
se_zap_then_explosion.wav
se_zap.wav
se_horn_being_played.wav
se_mon_chugging_potion.wav
se_bugle_playing_reveille.wav
se_crash_through_floor.wav
se_thump.wav
se_scream.wav
se_tumbler_click.wav
se_gear_turn.wav
se_divine_music.wav
se_thunderclap.wav
se_sad_wailing.wav
se_maniacal_laughter.wav
se_rumbling_of_earth.wav
se_clanging_sound.wav
se_mutter_imprecations.wav
se_mutter_incantation.wav
se_angry_voice.wav
se_sceptor_pounding.wav
se_courtly_conversation.wav
se_low_buzzing.wav
se_angry_drone.wav
se_bees.wav
se_someone_searching.wav
se_guards_footsteps.wav
se_faint_chime.wav
se_loud_click.wav
se_soft_click.wav
se_squeak.wav
se_squeak_C.wav
se_squeak_D_flat.wav
se_squeak_D.wav
se_squeak_E_flat.wav
se_squeak_E.wav
se_squeak_F.wav
se_squeak_F_sharp.wav
se_squeak_G.wav
se_squeak_G_sharp.wav
se_squeak_A.wav
se_squeak_B_flat.wav
se_squeak_B.wav
se_someone_bowling.wav
se_rumbling.wav
se_loud_crash.wav
se_deafening_roar_atmospheric.wav
se_low_hum.wav
se_laughter.wav
se_cockatrice_hiss.wav
se_chant.wav
se_cracking_sound.wav
se_ripping_sound.wav
se_thud.wav
se_clank.wav
se_crumbling_sound.wav
se_soft_crackling.wav
se_crackling.wav
se_sharp_crack.wav
se_wall_of_force.wav
se_alarm.wav
se_kick_door_it_shatters.wav
se_kick_door_it_crashes_open.wav
se_bubble_rising.wav
se_bolt_of_lightning.wav
se_board_squeak.wav
se_board_squeaks_loudly.wav
se_boing.wav
se_crashed_ceiling.wav
se_clash.wav
se_crash_door.wav
se_crash.wav
se_crash_throne_destroyed.wav
se_crash_something_broke.wav
se_kadoom_boulder_falls_in.wav
se_klunk_pipe.wav
se_kerplunk_boulder_gone.wav
se_klunk.wav
se_klick.wav
se_kaboom_door_explodes.wav
se_kaboom_boom_boom.wav
se_kaablamm_of_mine.wav
se_kaboom.wav
se_splat_egg.wav
se_destroy_web.wav
se_iron_ball_dragging_you.wav
se_iron_ball_hits_you.wav
se_lid_slams_open_falls_shut.wav
se_chain_shatters.wav
se_furious_bubbling.wav
se_air_crackles.wav
se_potion_crash_and_break.wav
se_hiss.wav
se_growl.wav
se_canine_bark.wav
se_canine_growl.wav
se_canine_whine.wav
se_canine_yip.wav
se_canine_howl.wav
se_feline_yowl.wav
se_feline_meow.wav
se_feline_purr.wav
se_feline_yip.wav
se_feline_mew.wav
se_roar.wav
se_snarl.wav
se_buzz.wav
se_squeek.wav
se_squawk.wav
se_squeal.wav
se_screech.wav
se_equine_neigh.wav
se_equine_whinny.wav
se_equine_whicker.wav
se_bovine_moo.wav
se_bovine_bellow.wav
se_wail.wav
se_groan.wav
se_grunt.wav
se_gurgle.wav
se_elephant_trumpet.wav
se_snake_rattle.wav
se_hallu_growl.wav
This needs further testing. At the moment only windsound has
this.
If nobody else looks into it for Qt, I'll take a look in a
few days.
This commit is contained in:
@@ -1813,6 +1813,7 @@ extern boolean munslime(struct monst *, boolean);
|
||||
|
||||
extern void awaken_soldiers(struct monst *);
|
||||
extern int do_play_instrument(struct obj *);
|
||||
enum instruments obj_to_instr(struct obj *);
|
||||
|
||||
/* ### nhlsel.c ### */
|
||||
|
||||
@@ -2605,6 +2606,10 @@ extern void play_usersound_via_idx(int, int);
|
||||
extern void assign_soundlib(int);
|
||||
extern void activate_chosen_soundlib(void);
|
||||
extern void get_soundlib_name(char *dest, int maxlen);
|
||||
#ifdef SND_SOUNDEFFECTS_AUTOMAP
|
||||
extern char *get_sound_effect_filename(int32_t seidint,
|
||||
char *buf, size_t bufsz, int32_t);
|
||||
#endif
|
||||
|
||||
/* ### sp_lev.c ### */
|
||||
|
||||
|
||||
@@ -126,12 +126,13 @@ extern struct sound_procs soundprocs;
|
||||
|
||||
/* subset for NetHack */
|
||||
enum instruments {
|
||||
ins_choir_aahs = 53, ins_trumpet = 57, ins_trombone = 58,
|
||||
ins_french_horn = 61, ins_english_horn = 70, ins_piccolo = 73,
|
||||
ins_cello = 43, ins_orchestral_harp = 47, ins_choir_aahs = 53,
|
||||
ins_trumpet = 57, ins_trombone = 58, ins_french_horn = 61,
|
||||
ins_baritone_sax = 68, ins_english_horn = 70, ins_piccolo = 73,
|
||||
ins_flute = 74, ins_pan_flute = 76, ins_blown_bottle = 77,
|
||||
ins_whistle = 79, ins_tinkle_bell = 113, ins_woodblock = 116,
|
||||
ins_taiko_drum = 117, ins_melodic_tom = 118, ins_seashore = 123,
|
||||
ins_fencepost
|
||||
ins_no_instrument
|
||||
};
|
||||
|
||||
#if 0
|
||||
@@ -174,11 +175,12 @@ enum instruments_broad {
|
||||
ins_guitar_fret_noise = 121, ins_breath_noise = 122, ins_seashore = 123,
|
||||
ins_bird_tweet = 124, ins_telephone_ring = 125, ins_helicopter = 126,
|
||||
ins_applause = 127, ins_gunshot = 128,
|
||||
ins_fencepost
|
||||
ins_no_instrument
|
||||
};
|
||||
#endif
|
||||
|
||||
enum sound_effect_entries {
|
||||
se_zero_invalid = 0,
|
||||
se_faint_splashing = 1,
|
||||
se_crackling_of_hellfire = 2,
|
||||
se_heart_beat = 3,
|
||||
@@ -358,6 +360,7 @@ enum sound_effect_entries {
|
||||
se_elephant_trumpet = 177,
|
||||
se_snake_rattle = 178,
|
||||
se_hallu_growl = 179,
|
||||
number_of_se_entries
|
||||
};
|
||||
|
||||
#if defined(SND_LIB_QTSOUND) || defined(SND_LIB_PORTAUDIO) \
|
||||
@@ -366,6 +369,15 @@ enum sound_effect_entries {
|
||||
|| defined(SND_LIB_SOUND_ESCCODES) || defined(SND_LIB_VISSOUND) \
|
||||
|| defined(SND_LIB_WINDSOUND)
|
||||
|
||||
#define SND_LIB_INTEGRATED /* shortcut for conditional code in other files */
|
||||
|
||||
#define Play_usersound(filename, vol, idx) \
|
||||
do { \
|
||||
if (!Deaf && soundprocs.sound_play_usersound \
|
||||
&& ((soundprocs.sndcap & SNDCAP_USERSOUNDS) != 0)) \
|
||||
(*soundprocs.sound_play_usersound)((filename), (vol), (idx)); \
|
||||
} while(0)
|
||||
|
||||
#define Soundeffect(seid, vol) \
|
||||
do { \
|
||||
if (!Deaf && soundprocs.sound_soundeffect \
|
||||
@@ -373,8 +385,19 @@ enum sound_effect_entries {
|
||||
(*soundprocs.sound_soundeffect)(emptystr, (seid), (vol)); \
|
||||
} while(0)
|
||||
|
||||
#define Hero_playnotes(instrument, str, vol) \
|
||||
do { \
|
||||
if (!Deaf && soundprocs.sound_hero_playnotes \
|
||||
&& ((soundprocs.sndcap & SNDCAP_HEROMUSIC) != 0)) \
|
||||
(*soundprocs.sound_hero_playnotes)((instrument), (str), (vol)); \
|
||||
} while(0)
|
||||
#else
|
||||
#ifdef SND_LIB_INTEGRATED
|
||||
#undef SND_LIB_INTEGRATED
|
||||
#endif
|
||||
#define Play_usersound(filename, vol, idx)
|
||||
#define Soundeffect(seid, vol)
|
||||
#define Hero_playnotes(instrument, str, vol)
|
||||
#endif
|
||||
|
||||
#endif /* SNDPROCS_H */
|
||||
|
||||
@@ -93,6 +93,10 @@
|
||||
extern void interject_assistance(int, int, genericptr_t, genericptr_t);
|
||||
extern void interject(int);
|
||||
|
||||
#if defined(SND_LIB_WINDSOUND)
|
||||
#define SND_SOUNDEFFECTS_AUTOMAP
|
||||
#endif
|
||||
|
||||
/*
|
||||
*===============================================
|
||||
* Compiler-specific adjustments
|
||||
|
||||
63
sound/wav/README
Normal file
63
sound/wav/README
Normal file
@@ -0,0 +1,63 @@
|
||||
January 22, 2023 - sounds
|
||||
|
||||
Important: For the included se_* wav files, please refer to the file
|
||||
'sound/wav attributions.txt' for the details about the
|
||||
source, author, and licensing.
|
||||
|
||||
There were old aiif versions of some sound samples distributed
|
||||
in uuencoded form in earlier versions of NetHack: bell.uu, bugle.uu,
|
||||
erthdrum.uu, firehorn.uu, frsthorn.uu, lethdrum.uu, mgcflute.uu,
|
||||
mgcharp.uu, toolhorn.uu, wdnflute.uu and wdnharp.uu.
|
||||
|
||||
Those had been removed in commit 217671e00f626e53d314757b4687950466efb360
|
||||
in May 2019, at the same time built-in speaker support was removed.
|
||||
|
||||
Some of those original files have been converted into wav files starting
|
||||
with NetHack 3.7. The pitch variation versions offer a chance for very
|
||||
simple tune playback on platforms that offer a basic play-sound function
|
||||
call, which many do. There is no need to manipulate the underlying sounds
|
||||
with those, although sound library interfaces may certainly produce
|
||||
music in more elabote and pleasing ways. Contributions are welcome.
|
||||
|
||||
While they make the distribution larger, they offer a more immersive
|
||||
experience while playing locally on many platforms or with many
|
||||
sound libraries. Also, file/distribution size is not the same
|
||||
concern in 2023 that it might have been in 1995 or 2003.
|
||||
|
||||
This is the note that accompanied those original sound files.
|
||||
|
||||
------------------------------------------------------------
|
||||
README for the AIFF files:
|
||||
|
||||
These files are sound files for the instruments in NetHack.
|
||||
There are 11 sounds, one for each distinct instrument.
|
||||
The sounds are in 8-bit 22kHz AIFF format, which should be
|
||||
readable by a broad range of platforms. Since the sounds
|
||||
came from Rolands S-750 sample library (most of them) there
|
||||
should be no copyright on them when we treat them like we
|
||||
do here (as instruments) - indeed, the sample library I
|
||||
got from Roland didn't even bear a (c) symbol.
|
||||
|
||||
Some of the sounds are very adequate (Drum of Earthquake,
|
||||
Wooden Flute, Magic Harp) while some are less true to the
|
||||
original name (how does a Frost Horn sound?) Actually, I
|
||||
don't know what a Bugle is (Bugle horn?) so I took a trumpet
|
||||
sound for that. Correct me if I'm wrong.
|
||||
|
||||
What does this have to do with the main code? Well, nothing
|
||||
so far. There are some places that are #ifdef MAC and calls
|
||||
mac_speaker; that function takes an object and a tune (in
|
||||
capital letters A-G) and plays the tune with the given
|
||||
instrument. When playing a specific tune, that tune is of
|
||||
course used. For "improvise," I use middle "C."
|
||||
|
||||
Ideally, we should do something equal with sound that we
|
||||
have with displays, so we can use one common set of calls
|
||||
in the main code, and have ports do whatever seems appropriate
|
||||
for the available hardware.
|
||||
|
||||
Any comment on the sounds or their use is welcome:
|
||||
|
||||
Jon W{tte
|
||||
Mac Team
|
||||
nethack-bugs@nethack.org
|
||||
152
sound/wav/attributions.txt
Normal file
152
sound/wav/attributions.txt
Normal file
@@ -0,0 +1,152 @@
|
||||
/* NetHack 3.7 attributions.txt $NHDT-Date: 1652831519 2022/05/17 23:51:59 $
|
||||
|
||||
Attributions and credits and modifications for sounds used are listed below.
|
||||
|
||||
File: se_squeak_C.wav
|
||||
Source: https://freesound.org/people/seth-m/sounds/269722/
|
||||
Original: download/269722__seth-m__wood-creaks.wav
|
||||
By: https://freesound.org/people/seth-m/
|
||||
License: http://creativecommons.org/publicdomain/zero/1.0/
|
||||
Download Date: January 21, 2023
|
||||
Description of modifications made to the original:
|
||||
- 00h00m02.194s to 00h00m02.765s as selection.
|
||||
- Saved selection to file named se_squeak_C.wav
|
||||
- .571 seconds
|
||||
|
||||
|
||||
File: se_squeak_D_flat.wav
|
||||
Source: https://freesound.org/people/AlienXXX/sounds/151346/
|
||||
Original: download/151346__alienxxx__creaking-floor-upstairs.wav
|
||||
By: https://freesound.org/people/AlienXXX/
|
||||
License: https://creativecommons.org/licenses/by/4.0/
|
||||
Download Date: January 21, 2023
|
||||
Description of modifications made to the original:
|
||||
- 00h00m37.641s to 00h00m39.320s as selection.
|
||||
- Used Audacity, Effect to change selection pitch to C#/Dflat 3.
|
||||
- Saved selection to file named se_squeak_D_flat.wav
|
||||
- 1.679 seconds
|
||||
|
||||
|
||||
File: se_squeak_D.wav
|
||||
Source: https://freesound.org/people/Talitha5/sounds/321883/
|
||||
Original: download/321883__talitha5__floorboard-creaking.mp3
|
||||
By: https://freesound.org/people/Talitha5/
|
||||
License: http://creativecommons.org/publicdomain/zero/1.0/
|
||||
Download Date: January 21, 2023
|
||||
Description of modifications made to the original:
|
||||
- 00h00m24.447s to 00h00m225.790s as selection.
|
||||
- Saved selection to file named se_squeak_D.wav
|
||||
- 2.067 seconds
|
||||
|
||||
|
||||
File:se_squeak_E_flat.wav
|
||||
Source: https://freesound.org/people/tosha73/sounds/570864/
|
||||
Original: download/570864__tosha73__creaking-boards.wav
|
||||
By: https://freesound.org/people/tosha73/
|
||||
License: https://creativecommons.org/licenses/by/4.0/
|
||||
Download Date: January 21, 2023
|
||||
Description of modifications made to the original:
|
||||
- 00h00m30.192s to 00h00m30.819s as selection.
|
||||
- Saved selection to file named se_squeak_E_flat.wav
|
||||
- .627 seconds
|
||||
|
||||
|
||||
File: se_squeak_E.wav
|
||||
Source: https://freesound.org/people/Benboncan/sounds/101381/
|
||||
Original: download/101381__benboncan__creaking-floorboard.wav
|
||||
By: https://freesound.org/people/Benboncan/
|
||||
License: https://creativecommons.org/licenses/by/4.0/
|
||||
Download Date: January 21, 2023
|
||||
Description of modifications made to the original:
|
||||
- 00h00m12.892s to 00h00m14.709s as selection.
|
||||
- Saved selection to file named se_squeak_E.wav
|
||||
- 1.817 seconds
|
||||
|
||||
|
||||
File: se_squeak_F.wav
|
||||
Source: https://freesound.org/people/Talitha5/sounds/321883/
|
||||
Original: download/321883__talitha5__floorboard-creaking.mp3
|
||||
By: https://freesound.org/people/Talitha5/
|
||||
License: http://creativecommons.org/publicdomain/zero/1.0/
|
||||
Download Date: January 21, 2023
|
||||
Description of modifications made to the original:
|
||||
- 00h00m56.926s to 00h00m58.402s as selection.
|
||||
- Saved selection to file named se_squeak_F.wav
|
||||
- 1.476 seconds.
|
||||
|
||||
|
||||
File: se_squeak_F_sharp.wav
|
||||
Source: https://freesound.org/people/seth-m/sounds/269722/
|
||||
Original: download/269722__seth-m__wood-creaks.wav
|
||||
By: https://freesound.org/people/seth-m/
|
||||
License: http://creativecommons.org/publicdomain/zero/1.0/
|
||||
Download Date: January 21, 2023
|
||||
Description of modifications made to the original:
|
||||
- 00h00m04.361s to 00h00m04.795s as selection.
|
||||
- Saved selection to file named se_squeak_F_sharp.wav
|
||||
- .434 seconds
|
||||
|
||||
|
||||
File: se_squeak_G.wav
|
||||
Source: https://freesound.org/people/Garuda1982/sounds/420856/
|
||||
Original: download/420856__garuda1982__floorboards-squeak-field-recording-with-zoom-h2n.wav
|
||||
By: https://freesound.org/people/Garuda1982/
|
||||
License: http://creativecommons.org/publicdomain/zero/1.0/
|
||||
Download Date: January 21, 2023
|
||||
Description of modifications made to the original:
|
||||
- 00h00m14.369s to 00h00m15.629s as selection.
|
||||
- Saved selection to file named se_squeak_G.wav
|
||||
- 1.26 seconds
|
||||
|
||||
|
||||
File: se_squeak_G_sharp.wav
|
||||
Source: https://freesound.org/people/seth-m/sounds/269722/
|
||||
Original: download/269722__seth-m__wood-creaks.wav
|
||||
By: https://freesound.org/people/seth-m/
|
||||
License: http://creativecommons.org/publicdomain/zero/1.0/
|
||||
Download Date: January 21, 2023
|
||||
Description of modifications made to the original:
|
||||
- 00h00m03.331s to 00h00m03.966s as selection.
|
||||
- Used Audacity, Effect to change selection pitch to G#/A flat 7
|
||||
- Saved selection to file named se_squeak_G_sharp.wav
|
||||
- .635 seconds
|
||||
|
||||
|
||||
File: se_squeak_A.wav
|
||||
Source: https://freesound.org/people/Greg_Surr/sounds/590161/
|
||||
Original: download/590161__greg-surr__creaking-in-room-11.wav
|
||||
By: https://freesound.org/people/Greg_Surr/
|
||||
License: http://creativecommons.org/publicdomain/zero/1.0/
|
||||
Download Date: January 21, 2023
|
||||
Description of modifications made to the original:
|
||||
- 00h00m00.209s to 00h00m01.385s as selection.
|
||||
- Saved selection to file named se_squeak_A.wav
|
||||
- 1.176s
|
||||
|
||||
|
||||
File: se_squeak_B_flat.wav
|
||||
Source: https://freesound.org/people/shelbyshark/sounds/487105/
|
||||
Original: download/487105__shelbyshark__floorcreak.wav
|
||||
By: https://freesound.org/people/shelbyshark/
|
||||
License: http://creativecommons.org/publicdomain/zero/1.0/
|
||||
Download Date: January 21, 2023
|
||||
Description of modifications made to the original:
|
||||
- 00h00m02.350s to 00h00m04.576s as selection.
|
||||
- Used Audacity, Effect to change selection pitch to A#/Bflat.
|
||||
- Saved selection to file named se_squeak_B_flat.wav
|
||||
- 2.226 seconds
|
||||
|
||||
|
||||
File:se_squeak_B.wav
|
||||
Source: https://freesound.org/people/tosha73/sounds/570864/
|
||||
Original: download/570864__tosha73__creaking-boards.wav
|
||||
By: https://freesound.org/people/tosha73/
|
||||
License: https://creativecommons.org/licenses/by/4.0/
|
||||
Download Date: January 21, 2023
|
||||
Description of modifications made to the original:
|
||||
- 00h00m00.000s to 00h00m00.572s as selection.
|
||||
- Saved selection to file named se_squeak_B.wav
|
||||
- .572 seconds
|
||||
|
||||
|
||||
|
||||
BIN
sound/wav/se_squeak_A.wav
Normal file
BIN
sound/wav/se_squeak_A.wav
Normal file
Binary file not shown.
BIN
sound/wav/se_squeak_B.wav
Normal file
BIN
sound/wav/se_squeak_B.wav
Normal file
Binary file not shown.
BIN
sound/wav/se_squeak_B_flat.wav
Normal file
BIN
sound/wav/se_squeak_B_flat.wav
Normal file
Binary file not shown.
BIN
sound/wav/se_squeak_C.wav
Normal file
BIN
sound/wav/se_squeak_C.wav
Normal file
Binary file not shown.
BIN
sound/wav/se_squeak_D.wav
Normal file
BIN
sound/wav/se_squeak_D.wav
Normal file
Binary file not shown.
BIN
sound/wav/se_squeak_D_flat.wav
Normal file
BIN
sound/wav/se_squeak_D_flat.wav
Normal file
Binary file not shown.
BIN
sound/wav/se_squeak_E.wav
Normal file
BIN
sound/wav/se_squeak_E.wav
Normal file
Binary file not shown.
BIN
sound/wav/se_squeak_E_flat.wav
Normal file
BIN
sound/wav/se_squeak_E_flat.wav
Normal file
Binary file not shown.
BIN
sound/wav/se_squeak_F.wav
Normal file
BIN
sound/wav/se_squeak_F.wav
Normal file
Binary file not shown.
BIN
sound/wav/se_squeak_F_sharp.wav
Normal file
BIN
sound/wav/se_squeak_F_sharp.wav
Normal file
Binary file not shown.
BIN
sound/wav/se_squeak_G.wav
Normal file
BIN
sound/wav/se_squeak_G.wav
Normal file
Binary file not shown.
BIN
sound/wav/se_squeak_G_sharp.wav
Normal file
BIN
sound/wav/se_squeak_G_sharp.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Bell.wav
Normal file
BIN
sound/wav/sound_Bell.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Bugle_A.wav
Normal file
BIN
sound/wav/sound_Bugle_A.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Bugle_B.wav
Normal file
BIN
sound/wav/sound_Bugle_B.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Bugle_C.wav
Normal file
BIN
sound/wav/sound_Bugle_C.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Bugle_D.wav
Normal file
BIN
sound/wav/sound_Bugle_D.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Bugle_E.wav
Normal file
BIN
sound/wav/sound_Bugle_E.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Bugle_F.wav
Normal file
BIN
sound/wav/sound_Bugle_F.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Bugle_G.wav
Normal file
BIN
sound/wav/sound_Bugle_G.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Drum_Of_Earthquake.wav
Normal file
BIN
sound/wav/sound_Drum_Of_Earthquake.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Fire_Horn.wav
Normal file
BIN
sound/wav/sound_Fire_Horn.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Frost_Horn.wav
Normal file
BIN
sound/wav/sound_Frost_Horn.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Leather_Drum.wav
Normal file
BIN
sound/wav/sound_Leather_Drum.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Magic_Harp_A.wav
Normal file
BIN
sound/wav/sound_Magic_Harp_A.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Magic_Harp_B.wav
Normal file
BIN
sound/wav/sound_Magic_Harp_B.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Magic_Harp_C.wav
Normal file
BIN
sound/wav/sound_Magic_Harp_C.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Magic_Harp_D.wav
Normal file
BIN
sound/wav/sound_Magic_Harp_D.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Magic_Harp_E.wav
Normal file
BIN
sound/wav/sound_Magic_Harp_E.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Magic_Harp_F.wav
Normal file
BIN
sound/wav/sound_Magic_Harp_F.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Magic_Harp_G.wav
Normal file
BIN
sound/wav/sound_Magic_Harp_G.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Tooled_Horn_A.wav
Normal file
BIN
sound/wav/sound_Tooled_Horn_A.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Tooled_Horn_B.wav
Normal file
BIN
sound/wav/sound_Tooled_Horn_B.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Tooled_Horn_C.wav
Normal file
BIN
sound/wav/sound_Tooled_Horn_C.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Tooled_Horn_D.wav
Normal file
BIN
sound/wav/sound_Tooled_Horn_D.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Tooled_Horn_E.wav
Normal file
BIN
sound/wav/sound_Tooled_Horn_E.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Tooled_Horn_F.wav
Normal file
BIN
sound/wav/sound_Tooled_Horn_F.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Tooled_Horn_G.wav
Normal file
BIN
sound/wav/sound_Tooled_Horn_G.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Wooden_Flute_A.wav
Normal file
BIN
sound/wav/sound_Wooden_Flute_A.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Wooden_Flute_B.wav
Normal file
BIN
sound/wav/sound_Wooden_Flute_B.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Wooden_Flute_C.wav
Normal file
BIN
sound/wav/sound_Wooden_Flute_C.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Wooden_Flute_D.wav
Normal file
BIN
sound/wav/sound_Wooden_Flute_D.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Wooden_Flute_E.wav
Normal file
BIN
sound/wav/sound_Wooden_Flute_E.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Wooden_Flute_F.wav
Normal file
BIN
sound/wav/sound_Wooden_Flute_F.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Wooden_Flute_G.wav
Normal file
BIN
sound/wav/sound_Wooden_Flute_G.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Wooden_Harp_A.wav
Normal file
BIN
sound/wav/sound_Wooden_Harp_A.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Wooden_Harp_B.wav
Normal file
BIN
sound/wav/sound_Wooden_Harp_B.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Wooden_Harp_C.wav
Normal file
BIN
sound/wav/sound_Wooden_Harp_C.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Wooden_Harp_D.wav
Normal file
BIN
sound/wav/sound_Wooden_Harp_D.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Wooden_Harp_E.wav
Normal file
BIN
sound/wav/sound_Wooden_Harp_E.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Wooden_Harp_F.wav
Normal file
BIN
sound/wav/sound_Wooden_Harp_F.wav
Normal file
Binary file not shown.
BIN
sound/wav/sound_Wooden_Harp_G.wav
Normal file
BIN
sound/wav/sound_Wooden_Harp_G.wav
Normal file
Binary file not shown.
@@ -25,7 +25,7 @@ static void windsound_play_usersound(char *, int32_t, int32_t);
|
||||
|
||||
struct sound_procs windsound_procs = {
|
||||
SOUNDID(windsound),
|
||||
SNDCAP_USERSOUNDS,
|
||||
SNDCAP_USERSOUNDS | SNDCAP_SOUNDEFFECTS | SNDCAP_HEROMUSIC,
|
||||
windsound_init_nhsound,
|
||||
windsound_exit_nhsound,
|
||||
windsound_achievement,
|
||||
@@ -53,11 +53,103 @@ windsound_achievement(schar ach1, schar ach2, int32_t repeat)
|
||||
void
|
||||
windsound_soundeffect(char *desc, int32_t seid, int32_t volume)
|
||||
{
|
||||
#ifdef SND_SOUNDEFFECTS_AUTOMAP
|
||||
int reslt = 0;
|
||||
char buf[PATHLEN];
|
||||
const char *filename;
|
||||
DWORD fdwsound;
|
||||
|
||||
if (seid >= se_squeak_C || seid <= se_squeak_B) {
|
||||
filename = get_sound_effect_filename(seid, buf, sizeof buf, 1);
|
||||
fdwsound = SND_ASYNC | SND_RESOURCE;
|
||||
} else {
|
||||
filename = get_sound_effect_filename(seid, buf, sizeof buf, 0);
|
||||
fdwsound = SND_ASYNC | SND_NODEFAULT;
|
||||
}
|
||||
|
||||
if (filename) {
|
||||
reslt = PlaySound(filename, NULL, fdwsound);
|
||||
// (void) sndPlaySound(filename, fdwsound);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#define WAVEMUSIC_SOUNDS
|
||||
|
||||
void
|
||||
windsound_hero_playnotes(int32_t instrument, char *str, int32_t volume)
|
||||
{
|
||||
#ifdef WAVEMUSIC_SOUNDS
|
||||
int reslt = 0;
|
||||
boolean has_note_variations = FALSE;
|
||||
char resourcename[120], *end_of_res = 0, *c = 0;
|
||||
|
||||
if (!str)
|
||||
return;
|
||||
resourcename[0] = '\0';
|
||||
switch(instrument) {
|
||||
case ins_flute: /* WOODEN_FLUTE */
|
||||
Strcpy(resourcename, "sound_Wooden_Flute");
|
||||
has_note_variations = TRUE;
|
||||
break;
|
||||
case ins_pan_flute: /* MAGIC_FLUTE */
|
||||
/* wav files for sound_Magic_Flute not added yet */
|
||||
Strcpy(resourcename, "sound_Wooden_Flute");
|
||||
has_note_variations = TRUE;
|
||||
break;
|
||||
case ins_english_horn: /* TOOLED_HORN */
|
||||
Strcpy(resourcename, "sound_Tooled_Horn");
|
||||
has_note_variations = TRUE;
|
||||
break;
|
||||
case ins_french_horn: /* FROST_HORN */
|
||||
Strcpy(resourcename, "sound_Frost_Horn");
|
||||
break;
|
||||
case ins_baritone_sax: /* FIRE_HORN */
|
||||
Strcpy(resourcename, "sound_Fire_Horn");
|
||||
break;
|
||||
case ins_trumpet: /* BUGLE */
|
||||
Strcpy(resourcename, "sound_Bugle");
|
||||
has_note_variations = TRUE;
|
||||
break;
|
||||
case ins_orchestral_harp: /* WOODEN_HARP */
|
||||
Strcpy(resourcename, "sound_Wooden_Harp");
|
||||
has_note_variations = TRUE;
|
||||
break;
|
||||
case ins_cello: /* MAGIC_HARP */
|
||||
Strcpy(resourcename, "sound_Magic_Harp");
|
||||
has_note_variations = TRUE;
|
||||
case ins_tinkle_bell:
|
||||
Strcpy(resourcename, "sound_Bell");
|
||||
break;
|
||||
case ins_taiko_drum: /* DRUM_OF_EARTHQUAKE */
|
||||
Strcpy(resourcename, "sound_Drum_Of_Earthquake");
|
||||
break;
|
||||
case ins_melodic_tom: /* LEATHER_DRUM */
|
||||
Strcpy(resourcename, "sound_Leather_Drum");
|
||||
break;
|
||||
}
|
||||
if (has_note_variations) {
|
||||
int i, idx = 0, notecount = strlen(str);
|
||||
static const char *const note_suffixes[]
|
||||
= { "_A", "_B", "_C", "_D", "_E", "_F", "_G" };
|
||||
|
||||
end_of_res = eos(resourcename);
|
||||
c = str;
|
||||
for (i = 0; i < notecount; ++i) {
|
||||
if (*c >= 'A' && *c <= 'G') {
|
||||
idx = (*c) - 'A';
|
||||
Strcpy(end_of_res, note_suffixes[idx]);
|
||||
if (i == (notecount - 1))
|
||||
break; /* drop out of for-loop and play it async below */
|
||||
reslt = PlaySound(resourcename, NULL,
|
||||
SND_SYNC | SND_RESOURCE);
|
||||
}
|
||||
c++;
|
||||
}
|
||||
}
|
||||
/* the final, or only, one is played ASYNC */
|
||||
reslt = PlaySound(resourcename, NULL, SND_ASYNC | SND_RESOURCE);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
@@ -68,4 +160,3 @@ windsound_play_usersound(char *filename, int32_t volume UNUSED, int32_t idx UNUS
|
||||
}
|
||||
|
||||
#endif /* SND_LIB_WINDSOUND */
|
||||
|
||||
|
||||
46
src/music.c
46
src/music.c
@@ -506,7 +506,7 @@ do_improvisation(struct obj* instr)
|
||||
itmp.otyp -= 1;
|
||||
mundane = TRUE;
|
||||
}
|
||||
|
||||
Hero_playnotes(obj_to_instr(&itmp), "C", 50);
|
||||
|
||||
#define PLAY_NORMAL 0x00
|
||||
#define PLAY_STUNNED 0x01
|
||||
@@ -738,6 +738,7 @@ do_play_instrument(struct obj* instr)
|
||||
|
||||
You(!Deaf ? "extract a strange sound from %s!"
|
||||
: "can feel %s emitting vibrations.", the(xname(instr)));
|
||||
Hero_playnotes(obj_to_instr(instr), buf, 50);
|
||||
|
||||
|
||||
/* Check if there was the Stronghold drawbridge near
|
||||
@@ -832,4 +833,47 @@ do_play_instrument(struct obj* instr)
|
||||
return ECMD_OK;
|
||||
}
|
||||
|
||||
enum instruments
|
||||
obj_to_instr(struct obj *obj) {
|
||||
enum instruments ret_instr = ins_no_instrument;
|
||||
|
||||
#if defined(SND_LIB_INTEGRATED)
|
||||
switch(obj->otyp) {
|
||||
case WOODEN_FLUTE:
|
||||
ret_instr = ins_flute;
|
||||
break;
|
||||
case MAGIC_FLUTE:
|
||||
ret_instr = ins_pan_flute;
|
||||
break;
|
||||
case TOOLED_HORN:
|
||||
ret_instr = ins_english_horn;
|
||||
break;
|
||||
case FROST_HORN:
|
||||
ret_instr = ins_french_horn;
|
||||
break;
|
||||
case FIRE_HORN:
|
||||
ret_instr = ins_baritone_sax;
|
||||
break;
|
||||
case BUGLE:
|
||||
ret_instr = ins_trumpet;
|
||||
break;
|
||||
case WOODEN_HARP:
|
||||
ret_instr = ins_orchestral_harp;
|
||||
break;
|
||||
case MAGIC_HARP:
|
||||
ret_instr = ins_cello;
|
||||
case BELL:
|
||||
case BELL_OF_OPENING:
|
||||
ret_instr = ins_tinkle_bell;
|
||||
break;
|
||||
case DRUM_OF_EARTHQUAKE:
|
||||
ret_instr = ins_taiko_drum;
|
||||
break;
|
||||
case LEATHER_DRUM:
|
||||
ret_instr = ins_melodic_tom;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
return ret_instr;
|
||||
}
|
||||
/*music.c*/
|
||||
|
||||
268
src/sounds.c
268
src/sounds.c
@@ -1517,9 +1517,9 @@ play_sound_for_message(const char* msg)
|
||||
|
||||
if (soundprocs.sound_play_usersound) {
|
||||
snd = sound_matches_message(msg);
|
||||
if (snd)
|
||||
(*soundprocs.sound_play_usersound)(
|
||||
snd->filename, snd->volume, snd->idx);
|
||||
if (snd) {
|
||||
Play_usersound(snd->filename, snd->volume, snd->idx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1530,9 +1530,9 @@ maybe_play_sound(const char* msg)
|
||||
|
||||
if (soundprocs.sound_play_usersound) {
|
||||
snd = sound_matches_message(msg);
|
||||
if (snd)
|
||||
(*soundprocs.sound_play_usersound)(
|
||||
snd->filename, snd->volume, snd->idx);
|
||||
if (snd) {
|
||||
Play_usersound(snd->filename, snd->volume, snd->idx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1784,4 +1784,260 @@ nosound_play_usersound(char *filename, int volume, int idx)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef SND_SOUNDEFFECTS_AUTOMAP
|
||||
struct soundeffect_automapping {
|
||||
enum sound_effect_entries seid;
|
||||
const char *base_filename;
|
||||
};
|
||||
|
||||
static const struct soundeffect_automapping se_mappings_init[number_of_se_entries] = {
|
||||
{ se_zero_invalid, "" },
|
||||
{ se_faint_splashing, "faint_splashing" },
|
||||
{ se_crackling_of_hellfire, "crackling_of_hellfire" },
|
||||
{ se_heart_beat, "heart_beat" },
|
||||
{ se_typing_noise, "typing_noise" },
|
||||
{ se_hollow_sound, "hollow_sound" },
|
||||
{ se_rustling_paper, "rustling_paper" },
|
||||
{ se_crushing_sound, "crushing_sound" },
|
||||
{ se_splash, "splash" },
|
||||
{ se_chains_rattling_gears_turning, "chains_rattling_gears_turning" },
|
||||
{ se_smashing_and_crushing, "smashing_and_crushing" },
|
||||
{ se_gears_turning_chains_rattling, "gears_turning_chains_rattling" },
|
||||
{ se_loud_splash, "loud_splash" },
|
||||
{ se_lound_crash, "lound_crash" },
|
||||
{ se_crashing_rock, "crashing_rock" },
|
||||
{ se_sizzling, "sizzling" },
|
||||
{ se_crashing_boulder, "crashing_boulder" },
|
||||
{ se_boulder_drop, "boulder_drop" },
|
||||
{ se_item_tumble_downwards, "item_tumble_downwards" },
|
||||
{ se_drain_noises, "drain_noises" },
|
||||
{ se_ring_in_drain, "ring_in_drain" },
|
||||
{ se_groans_and_moans, "groans_and_moans" },
|
||||
{ se_scratching, "scratching" },
|
||||
{ se_glass_shattering, "glass_shattering" },
|
||||
{ se_egg_cracking, "egg_cracking" },
|
||||
{ se_gushing_sound, "gushing_sound" },
|
||||
{ se_glass_crashing, "glass_crashing" },
|
||||
{ se_egg_splatting, "egg_splatting" },
|
||||
{ se_sinister_laughter, "sinister_laughter" },
|
||||
{ se_blast, "blast" },
|
||||
{ se_stone_breaking, "stone_breaking" },
|
||||
{ se_stone_crumbling, "stone_crumbling" },
|
||||
{ se_snakes_hissing, "snakes_hissing" },
|
||||
{ se_loud_pop, "loud_pop" },
|
||||
{ se_clanking_pipe, "clanking_pipe" },
|
||||
{ se_sewer_song, "sewer_song" },
|
||||
{ se_monster_behind_boulder, "monster_behind_boulder" },
|
||||
{ se_wailing_of_the_banshee, "wailing_of_the_banshee" },
|
||||
{ se_swoosh, "swoosh" },
|
||||
{ se_explosion, "explosion" },
|
||||
{ se_crashing_sound, "crashing_sound" },
|
||||
{ se_someone_summoning, "someone_summoning" },
|
||||
{ se_rushing_wind_noise, "rushing_wind_noise" },
|
||||
{ se_splat_from_engulf, "splat_from_engulf" },
|
||||
{ se_faint_sloshing, "faint_sloshing" },
|
||||
{ se_crunching_sound, "crunching_sound" },
|
||||
{ se_slurping_sound, "slurping_sound" },
|
||||
{ se_masticating_sound, "masticating_sound" },
|
||||
{ se_distant_thunder, "distant_thunder" },
|
||||
{ se_applause, "applause" },
|
||||
{ se_shrill_whistle, "shrill_whistle" },
|
||||
{ se_someone_yells, "someone_yells" },
|
||||
{ se_door_unlock_and_open, "door_unlock_and_open" },
|
||||
{ se_door_open, "door_open" },
|
||||
{ se_door_crash_open, "door_crash_open" },
|
||||
{ se_dry_throat_rattle, "dry_throat_rattle" },
|
||||
{ se_cough, "cough" },
|
||||
{ se_angry_snakes, "angry_snakes" },
|
||||
{ se_zap_then_explosion, "zap_then_explosion" },
|
||||
{ se_zap, "zap" },
|
||||
{ se_horn_being_played, "horn_being_played" },
|
||||
{ se_mon_chugging_potion, "mon_chugging_potion" },
|
||||
{ se_bugle_playing_reveille, "bugle_playing_reveille" },
|
||||
{ se_crash_through_floor, "crash_through_floor" },
|
||||
{ se_thump, "thump" },
|
||||
{ se_scream, "scream" },
|
||||
{ se_tumbler_click, "tumbler_click" },
|
||||
{ se_gear_turn, "gear_turn" },
|
||||
{ se_divine_music, "divine_music" },
|
||||
{ se_thunderclap, "thunderclap" },
|
||||
{ se_sad_wailing, "sad_wailing" },
|
||||
{ se_maniacal_laughter, "maniacal_laughter" },
|
||||
{ se_rumbling_of_earth, "rumbling_of_earth" },
|
||||
{ se_clanging_sound, "clanging_sound" },
|
||||
{ se_mutter_imprecations, "mutter_imprecations" },
|
||||
{ se_mutter_incantation, "mutter_incantation" },
|
||||
{ se_angry_voice, "angry_voice" },
|
||||
{ se_sceptor_pounding, "sceptor_pounding" },
|
||||
{ se_courtly_conversation, "courtly_conversation" },
|
||||
{ se_low_buzzing, "low_buzzing" },
|
||||
{ se_angry_drone, "angry_drone" },
|
||||
{ se_bees, "bees" },
|
||||
{ se_someone_searching, "someone_searching" },
|
||||
{ se_guards_footsteps, "guards_footsteps" },
|
||||
{ se_faint_chime, "faint_chime" },
|
||||
{ se_loud_click, "loud_click" },
|
||||
{ se_soft_click, "soft_click" },
|
||||
{ se_squeak, "squeak" },
|
||||
{ se_squeak_C, "squeak_C" },
|
||||
{ se_squeak_D_flat, "squeak_D_flat" },
|
||||
{ se_squeak_D, "squeak_D" },
|
||||
{ se_squeak_E_flat, "squeak_E_flat" },
|
||||
{ se_squeak_E, "squeak_E" },
|
||||
{ se_squeak_F, "squeak_F" },
|
||||
{ se_squeak_F_sharp, "squeak_F_sharp" },
|
||||
{ se_squeak_G, "squeak_G" },
|
||||
{ se_squeak_G_sharp, "squeak_G_sharp" },
|
||||
{ se_squeak_A, "squeak_A" },
|
||||
{ se_squeak_B_flat, "squeak_B_flat" },
|
||||
{ se_squeak_B, "squeak_B" },
|
||||
{ se_someone_bowling, "someone_bowling" },
|
||||
{ se_rumbling, "rumbling" },
|
||||
{ se_loud_crash, "loud_crash" },
|
||||
{ se_deafening_roar_atmospheric, "deafening_roar_atmospheric" },
|
||||
{ se_low_hum, "low_hum" },
|
||||
{ se_laughter, "laughter" },
|
||||
{ se_cockatrice_hiss, "cockatrice_hiss" },
|
||||
{ se_chant, "chant" },
|
||||
{ se_cracking_sound, "cracking_sound" },
|
||||
{ se_ripping_sound, "ripping_sound" },
|
||||
{ se_thud, "thud" },
|
||||
{ se_clank, "clank" },
|
||||
{ se_crumbling_sound, "crumbling_sound" },
|
||||
{ se_soft_crackling, "soft_crackling" },
|
||||
{ se_crackling, "crackling" },
|
||||
{ se_sharp_crack, "sharp_crack" },
|
||||
{ se_wall_of_force, "wall_of_force" },
|
||||
{ se_alarm, "alarm" },
|
||||
{ se_kick_door_it_shatters, "kick_door_it_shatters" },
|
||||
{ se_kick_door_it_crashes_open, "kick_door_it_crashes_open" },
|
||||
{ se_bubble_rising, "bubble_rising" },
|
||||
{ se_bolt_of_lightning, "bolt_of_lightning" },
|
||||
{ se_board_squeak, "board_squeak" },
|
||||
{ se_board_squeaks_loudly, "board_squeaks_loudly" },
|
||||
{ se_boing, "boing" },
|
||||
{ se_crashed_ceiling, "crashed_ceiling" },
|
||||
{ se_clash, "clash" },
|
||||
{ se_crash_door, "crash_door" },
|
||||
{ se_crash, "crash" },
|
||||
{ se_crash_throne_destroyed, "crash_throne_destroyed" },
|
||||
{ se_crash_something_broke, "crash_something_broke" },
|
||||
{ se_kadoom_boulder_falls_in, "kadoom_boulder_falls_in" },
|
||||
{ se_klunk_pipe, "klunk_pipe" },
|
||||
{ se_kerplunk_boulder_gone, "kerplunk_boulder_gone" },
|
||||
{ se_klunk, "klunk" },
|
||||
{ se_klick, "klick" },
|
||||
{ se_kaboom_door_explodes, "kaboom_door_explodes" },
|
||||
{ se_kaboom_boom_boom, "kaboom_boom_boom" },
|
||||
{ se_kaablamm_of_mine, "kaablamm_of_mine" },
|
||||
{ se_kaboom, "kaboom" },
|
||||
{ se_splat_egg, "splat_egg" },
|
||||
{ se_destroy_web, "destroy_web" },
|
||||
{ se_iron_ball_dragging_you, "iron_ball_dragging_you" },
|
||||
{ se_iron_ball_hits_you, "iron_ball_hits_you" },
|
||||
{ se_lid_slams_open_falls_shut, "lid_slams_open_falls_shut" },
|
||||
{ se_chain_shatters, "chain_shatters" },
|
||||
{ se_furious_bubbling, "furious_bubbling" },
|
||||
{ se_air_crackles, "air_crackles" },
|
||||
{ se_potion_crash_and_break, "potion_crash_and_break" },
|
||||
{ se_hiss, "hiss" },
|
||||
{ se_growl, "growl" },
|
||||
{ se_canine_bark, "canine_bark" },
|
||||
{ se_canine_growl, "canine_growl" },
|
||||
{ se_canine_whine, "canine_whine" },
|
||||
{ se_canine_yip, "canine_yip" },
|
||||
{ se_canine_howl, "canine_howl" },
|
||||
{ se_feline_yowl, "feline_yowl" },
|
||||
{ se_feline_meow, "feline_meow" },
|
||||
{ se_feline_purr, "feline_purr" },
|
||||
{ se_feline_yip, "feline_yip" },
|
||||
{ se_feline_mew, "feline_mew" },
|
||||
{ se_roar, "roar" },
|
||||
{ se_snarl, "snarl" },
|
||||
{ se_buzz, "buzz" },
|
||||
{ se_squeek, "squeek" },
|
||||
{ se_squawk, "squawk" },
|
||||
{ se_squeal, "squeal" },
|
||||
{ se_screech, "screech" },
|
||||
{ se_equine_neigh, "equine_neigh" },
|
||||
{ se_equine_whinny, "equine_whinny" },
|
||||
{ se_equine_whicker, "equine_whicker" },
|
||||
{ se_bovine_moo, "bovine_moo" },
|
||||
{ se_bovine_bellow, "bovine_bellow" },
|
||||
{ se_wail, "wail" },
|
||||
{ se_groan, "groan" },
|
||||
{ se_grunt, "grunt" },
|
||||
{ se_gurgle, "gurgle" },
|
||||
{ se_elephant_trumpet, "elephant_trumpet" },
|
||||
{ se_snake_rattle, "snake_rattle" },
|
||||
{ se_hallu_growl, "hallu_growl" },
|
||||
};
|
||||
|
||||
static const char *semap_basenames[SIZE(se_mappings_init)];
|
||||
static boolean basenames_initialized = FALSE;
|
||||
|
||||
static void
|
||||
initialize_semap_basenames(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* to avoid things getting out of sequence; seid an index to the name */
|
||||
for (i = 1; i < SIZE(se_mappings_init); ++i) {
|
||||
if (se_mappings_init[i].seid > 0
|
||||
&& se_mappings_init[i].seid < SIZE(semap_basenames))
|
||||
semap_basenames[se_mappings_init[i].seid]
|
||||
= se_mappings_init[i].base_filename;
|
||||
}
|
||||
}
|
||||
|
||||
char *
|
||||
get_sound_effect_filename(int32_t seidint, char *buf,
|
||||
size_t bufsz,
|
||||
int32_t baseflag) /* non-zero means return without
|
||||
directory or extension suffix */
|
||||
{
|
||||
static const char prefix[] = "se_", suffix[] = ".wav";
|
||||
size_t consumes = 0, baselen = 0;
|
||||
/* enum sound_effect_entries seid = (enum sound_effect_entries) seidint; */
|
||||
char *ourdir = sounddir; /* sounddir would get set in files.c */
|
||||
|
||||
if (!buf || (!ourdir && baseflag == 0))
|
||||
return (char *) 0;
|
||||
|
||||
if (!basenames_initialized) {
|
||||
initialize_semap_basenames();
|
||||
basenames_initialized = TRUE;
|
||||
}
|
||||
|
||||
if (semap_basenames[seidint])
|
||||
baselen = strlen(semap_basenames[seidint]);
|
||||
|
||||
consumes = (sizeof prefix - 1) + baselen;
|
||||
if (baseflag == 0)
|
||||
consumes += (sizeof suffix - 1) + strlen(ourdir);
|
||||
consumes += 1 + 1; /* '\0' and '/' */
|
||||
if (baselen <= 0 || consumes > bufsz)
|
||||
return (char *) 0;
|
||||
|
||||
#if 0
|
||||
if (!baseflag) {
|
||||
Strcpy(buf, ourdir);
|
||||
Strcat(buf, "/");
|
||||
}
|
||||
Strcat(buf, prefix);
|
||||
Strcat(buf, semap_basenames[seidint]);
|
||||
if (!baseflag) {
|
||||
Strcat(buf, suffix);
|
||||
}
|
||||
#else
|
||||
if (!baseflag)
|
||||
Snprintf(buf, bufsz , "%s/%s%s%s", ourdir, prefix,
|
||||
semap_basenames[seidint], suffix);
|
||||
else
|
||||
Snprintf(buf, bufsz , "%s%s", prefix, semap_basenames[seidint]);
|
||||
#endif
|
||||
return buf;
|
||||
}
|
||||
#endif /* SND_SOUNDEFFECTS_AUTOMAP */
|
||||
|
||||
/*sounds.c*/
|
||||
|
||||
@@ -31,9 +31,9 @@ BEGIN
|
||||
VALUE "FileDescription", "NetHack for Windows - TTY Interface\0"
|
||||
VALUE "FileVersion", "3.7.0\0"
|
||||
VALUE "InternalName", "NetHack\0"
|
||||
VALUE "LegalCopyright", "Copyright (C) 1985 - 2020. By Stichting Mathematisch Centrum and M. Stephenson. See license for details.\0"
|
||||
VALUE "LegalCopyright", "Copyright (C) 1985 - 2023. By Stichting Mathematisch Centrum and M. Stephenson. See license for details.\0"
|
||||
VALUE "OriginalFilename", "NetHack.exe\0"
|
||||
VALUE "PrivateBuild", "050102\0"
|
||||
VALUE "PrivateBuild", "050107\0"
|
||||
VALUE "ProductName", "NetHack\0"
|
||||
VALUE "ProductVersion", "3.7.0\0"
|
||||
END
|
||||
@@ -43,7 +43,58 @@ BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
se_squeak_A WAVE "..\sound\wav\se_squeak_A.wav"
|
||||
se_squeak_B WAVE "..\sound\wav\se_squeak_B.wav"
|
||||
se_squeak_B_flat WAVE "..\sound\wav\se_squeak_B_flat.wav"
|
||||
se_squeak_C WAVE "..\sound\wav\se_squeak_C.wav"
|
||||
se_squeak_D WAVE "..\sound\wav\se_squeak_D.wav"
|
||||
se_squeak_D_flat WAVE "..\sound\wav\se_squeak_D_flat.wav"
|
||||
se_squeak_E WAVE "..\sound\wav\se_squeak_E.wav"
|
||||
se_squeak_E_flat WAVE "..\sound\wav\se_squeak_E_flat.wav"
|
||||
se_squeak_F WAVE "..\sound\wav\se_squeak_F.wav"
|
||||
se_squeak_F_sharp WAVE "..\sound\wav\se_squeak_F_sharp.wav"
|
||||
se_squeak_G WAVE "..\sound\wav\se_squeak_G.wav"
|
||||
se_squeak_G_share WAVE "..\sound\wav\se_squeak_G_sharp.wav"
|
||||
|
||||
sound_Bell WAVE "..\sound\wav\sound_Bell.wav"
|
||||
sound_Bugle_A WAVE "..\sound\wav\sound_Bugle_A.wav"
|
||||
sound_Bugle_B WAVE "..\sound\wav\sound_Bugle_B.wav"
|
||||
sound_Bugle_C WAVE "..\sound\wav\sound_Bugle_C.wav"
|
||||
sound_Bugle_D WAVE "..\sound\wav\sound_Bugle_D.wav"
|
||||
sound_Bugle_E WAVE "..\sound\wav\sound_Bugle_E.wav"
|
||||
sound_Bugle_F WAVE "..\sound\wav\sound_Bugle_F.wav"
|
||||
sound_Bugle_G WAVE "..\sound\wav\sound_Bugle_G.wav"
|
||||
sound_Drum_Of_Earthquake WAVE "..\sound\wav\sound_Drum_Of_Earthquake.wav"
|
||||
sound_Fire_Horn WAVE "..\sound\wav\sound_Fire_Horn.wav"
|
||||
sound_Frost_Horn WAVE "..\sound\wav\sound_Frost_Horn.wav"
|
||||
sound_Leather_Drum WAVE "..\sound\wav\sound_Leather_Drum.wav"
|
||||
sound_Magic_Harp_A WAVE "..\sound\wav\sound_Magic_Harp_A.wav"
|
||||
sound_Magic_Harp_B WAVE "..\sound\wav\sound_Magic_Harp_B.wav"
|
||||
sound_Magic_Harp_C WAVE "..\sound\wav\sound_Magic_Harp_C.wav"
|
||||
sound_Magic_Harp_D WAVE "..\sound\wav\sound_Magic_Harp_D.wav"
|
||||
sound_Magic_Harp_E WAVE "..\sound\wav\sound_Magic_Harp_E.wav"
|
||||
sound_Magic_Harp_F WAVE "..\sound\wav\sound_Magic_Harp_F.wav"
|
||||
sound_Magic_Harp_G WAVE "..\sound\wav\sound_Magic_Harp_G.wav"
|
||||
sound_Tooled_Horn_A WAVE "..\sound\wav\sound_Tooled_Horn_A.wav"
|
||||
sound_Tooled_Horn_B WAVE "..\sound\wav\sound_Tooled_Horn_B.wav"
|
||||
sound_Tooled_Horn_C WAVE "..\sound\wav\sound_Tooled_Horn_C.wav"
|
||||
sound_Tooled_Horn_D WAVE "..\sound\wav\sound_Tooled_Horn_D.wav"
|
||||
sound_Tooled_Horn_E WAVE "..\sound\wav\sound_Tooled_Horn_E.wav"
|
||||
sound_Tooled_Horn_F WAVE "..\sound\wav\sound_Tooled_Horn_F.wav"
|
||||
sound_Tooled_Horn_G WAVE "..\sound\wav\sound_Tooled_Horn_G.wav"
|
||||
sound_Wooden_Flute_A WAVE "..\sound\wav\sound_Wooden_Flute_A.wav"
|
||||
sound_Wooden_Flute_B WAVE "..\sound\wav\sound_Wooden_Flute_B.wav"
|
||||
sound_Wooden_Flute_C WAVE "..\sound\wav\sound_Wooden_Flute_C.wav"
|
||||
sound_Wooden_Flute_D WAVE "..\sound\wav\sound_Wooden_Flute_D.wav"
|
||||
sound_Wooden_Flute_E WAVE "..\sound\wav\sound_Wooden_Flute_E.wav"
|
||||
sound_Wooden_Flute_F WAVE "..\sound\wav\sound_Wooden_Flute_F.wav"
|
||||
sound_Wooden_Flute_G WAVE "..\sound\wav\sound_Wooden_Flute_G.wav"
|
||||
sound_Wooden_Harp_A WAVE "..\sound\wav\sound_Wooden_Harp_A.wav"
|
||||
sound_Wooden_Harp_B WAVE "..\sound\wav\sound_Wooden_Harp_B.wav"
|
||||
sound_Wooden_Harp_C WAVE "..\sound\wav\sound_Wooden_Harp_C.wav"
|
||||
sound_Wooden_Harp_D WAVE "..\sound\wav\sound_Wooden_Harp_D.wav"
|
||||
sound_Wooden_Harp_E WAVE "..\sound\wav\sound_Wooden_Harp_E.wav"
|
||||
sound_Wooden_Harp_F WAVE "..\sound\wav\sound_Wooden_Harp_F.wav"
|
||||
sound_Wooden_Harp_G WAVE "..\sound\wav\sound_Wooden_Harp_G.wav"
|
||||
|
||||
/*console.rc*/
|
||||
|
||||
/*console.rc*/"
|
||||
|
||||
@@ -391,6 +391,60 @@ BEGIN
|
||||
IDS_APP_TITLE_SHORT "NetHack for Windows"
|
||||
END
|
||||
|
||||
se_squeak_A WAVE "..\sound\wav\se_squeak_A.wav"
|
||||
se_squeak_B WAVE "..\sound\wav\se_squeak_B.wav"
|
||||
se_squeak_B_flat WAVE "..\sound\wav\se_squeak_B_flat.wav"
|
||||
se_squeak_C WAVE "..\sound\wav\se_squeak_C.wav"
|
||||
se_squeak_D WAVE "..\sound\wav\se_squeak_D.wav"
|
||||
se_squeak_D_flat WAVE "..\sound\wav\se_squeak_D_flat.wav"
|
||||
se_squeak_E WAVE "..\sound\wav\se_squeak_E.wav"
|
||||
se_squeak_E_flat WAVE "..\sound\wav\se_squeak_E_flat.wav"
|
||||
se_squeak_F WAVE "..\sound\wav\se_squeak_F.wav"
|
||||
se_squeak_F_sharp WAVE "..\sound\wav\se_squeak_F_sharp.wav"
|
||||
se_squeak_G WAVE "..\sound\wav\se_squeak_G.wav"
|
||||
se_squeak_G_share WAVE "..\sound\wav\se_squeak_G_sharp.wav"
|
||||
|
||||
sound_Bell WAVE "..\sound\wav\sound_Bell.wav"
|
||||
sound_Bugle_A WAVE "..\sound\wav\sound_Bugle_A.wav"
|
||||
sound_Bugle_B WAVE "..\sound\wav\sound_Bugle_B.wav"
|
||||
sound_Bugle_C WAVE "..\sound\wav\sound_Bugle_C.wav"
|
||||
sound_Bugle_D WAVE "..\sound\wav\sound_Bugle_D.wav"
|
||||
sound_Bugle_E WAVE "..\sound\wav\sound_Bugle_E.wav"
|
||||
sound_Bugle_F WAVE "..\sound\wav\sound_Bugle_F.wav"
|
||||
sound_Bugle_G WAVE "..\sound\wav\sound_Bugle_G.wav"
|
||||
sound_Drum_Of_Earthquake WAVE "..\sound\wav\sound_Drum_Of_Earthquake.wav"
|
||||
sound_Fire_Horn WAVE "..\sound\wav\sound_Fire_Horn.wav"
|
||||
sound_Frost_Horn WAVE "..\sound\wav\sound_Frost_Horn.wav"
|
||||
sound_Leather_Drum WAVE "..\sound\wav\sound_Leather_Drum.wav"
|
||||
sound_Magic_Harp_A WAVE "..\sound\wav\sound_Magic_Harp_A.wav"
|
||||
sound_Magic_Harp_B WAVE "..\sound\wav\sound_Magic_Harp_B.wav"
|
||||
sound_Magic_Harp_C WAVE "..\sound\wav\sound_Magic_Harp_C.wav"
|
||||
sound_Magic_Harp_D WAVE "..\sound\wav\sound_Magic_Harp_D.wav"
|
||||
sound_Magic_Harp_E WAVE "..\sound\wav\sound_Magic_Harp_E.wav"
|
||||
sound_Magic_Harp_F WAVE "..\sound\wav\sound_Magic_Harp_F.wav"
|
||||
sound_Magic_Harp_G WAVE "..\sound\wav\sound_Magic_Harp_G.wav"
|
||||
sound_Tooled_Horn_A WAVE "..\sound\wav\sound_Tooled_Horn_A.wav"
|
||||
sound_Tooled_Horn_B WAVE "..\sound\wav\sound_Tooled_Horn_B.wav"
|
||||
sound_Tooled_Horn_C WAVE "..\sound\wav\sound_Tooled_Horn_C.wav"
|
||||
sound_Tooled_Horn_D WAVE "..\sound\wav\sound_Tooled_Horn_D.wav"
|
||||
sound_Tooled_Horn_E WAVE "..\sound\wav\sound_Tooled_Horn_E.wav"
|
||||
sound_Tooled_Horn_F WAVE "..\sound\wav\sound_Tooled_Horn_F.wav"
|
||||
sound_Tooled_Horn_G WAVE "..\sound\wav\sound_Tooled_Horn_G.wav"
|
||||
sound_Wooden_Flute_A WAVE "..\sound\wav\sound_Wooden_Flute_A.wav"
|
||||
sound_Wooden_Flute_B WAVE "..\sound\wav\sound_Wooden_Flute_B.wav"
|
||||
sound_Wooden_Flute_C WAVE "..\sound\wav\sound_Wooden_Flute_C.wav"
|
||||
sound_Wooden_Flute_D WAVE "..\sound\wav\sound_Wooden_Flute_D.wav"
|
||||
sound_Wooden_Flute_E WAVE "..\sound\wav\sound_Wooden_Flute_E.wav"
|
||||
sound_Wooden_Flute_F WAVE "..\sound\wav\sound_Wooden_Flute_F.wav"
|
||||
sound_Wooden_Flute_G WAVE "..\sound\wav\sound_Wooden_Flute_G.wav"
|
||||
sound_Wooden_Harp_A WAVE "..\sound\wav\sound_Wooden_Harp_A.wav"
|
||||
sound_Wooden_Harp_B WAVE "..\sound\wav\sound_Wooden_Harp_B.wav"
|
||||
sound_Wooden_Harp_C WAVE "..\sound\wav\sound_Wooden_Harp_C.wav"
|
||||
sound_Wooden_Harp_D WAVE "..\sound\wav\sound_Wooden_Harp_D.wav"
|
||||
sound_Wooden_Harp_E WAVE "..\sound\wav\sound_Wooden_Harp_E.wav"
|
||||
sound_Wooden_Harp_F WAVE "..\sound\wav\sound_Wooden_Harp_F.wav"
|
||||
sound_Wooden_Harp_G WAVE "..\sound\wav\sound_Wooden_Harp_G.wav"
|
||||
|
||||
#endif // English (United States) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
Reference in New Issue
Block a user