diff --git a/src/s_sound.c b/src/s_sound.c index d3f9f5472..f099fee2d 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -1368,16 +1368,18 @@ struct cursongcredit cursongcredit; // Currently displayed song credit info // musicdef_t *S_FindMusicDef(const char *name) { - musicdef_t *def = musicdefstart; + UINT32 hash = quickncasehash (name, 6); + musicdef_t *def; - while (def) + for (def = musicdefstart; def; def = def->next) { - if (!stricmp(def->name, name)) - { - return def; - } + if (hash != def->hash) + continue; - def = def->next; + if (stricmp(def->name, name)) + continue; + + return def; } return NULL; @@ -1439,6 +1441,7 @@ ReadMusicDefFields STRBUFCPY(def->name, value); strlwr(def->name); + def->hash = quickncasehash (def->name, 6); def->volume = DEFAULT_MUSICDEF_VOLUME; def->next = musicdefstart; diff --git a/src/s_sound.h b/src/s_sound.h index 15c1445a3..270517ca1 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -178,6 +178,7 @@ boolean S_SpeedMusic(float speed); struct musicdef_t { char name[7]; + UINT32 hash; char *title; char *author; char *source;