From b6faaf1e197e77572d11d91eea88cdcef5ad851c Mon Sep 17 00:00:00 2001
From: Arthur <spaddlewit@gmail.com>
Date: Fri, 23 Feb 2024 10:02:41 -0500
Subject: [PATCH] Support passing name of music as a parameter

---
 src/lua_baselib.c |  3 ++-
 src/s_sound.c     | 13 +++++++++++--
 src/s_sound.h     |  2 +-
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/lua_baselib.c b/src/lua_baselib.c
index b191dba62b..1125ef7f84 100644
--- a/src/lua_baselib.c
+++ b/src/lua_baselib.c
@@ -3718,7 +3718,8 @@ static int musicdef_get(lua_State *L)
 
 static int lib_sMusicInfo(lua_State *L)
 {
-	LUA_PushUserdata(L, S_MusicInfo(), META_MUSICDEF);
+	const char *music_name = lua_tolstring(L, 1, NULL);
+	LUA_PushUserdata(L, S_MusicInfo(music_name), META_MUSICDEF);
 	return 1;
 }
 
diff --git a/src/s_sound.c b/src/s_sound.c
index 0654e705f8..1a04e9ab87 100644
--- a/src/s_sound.c
+++ b/src/s_sound.c
@@ -1801,12 +1801,21 @@ UINT32 S_GetMusicLength(void)
 	return I_GetSongLength();
 }
 
-musicdef_t *S_MusicInfo(void)
+//
+// S_MusicInfo
+//
+// Returns metadata about supplied music
+// If name is NULL, returns the currently playing music (if any)
+//
+musicdef_t *S_MusicInfo(const char *name)
 {
+	if (!name)
+		name = music_name;
+
 	musicdef_t *def;
 	for (def = musicdefstart; def; def = def->next)
 	{
-		if (strcasecmp(def->name, music_name) == 0)
+		if (strcasecmp(def->name, name) == 0)
 			return def;
 	}
 
diff --git a/src/s_sound.h b/src/s_sound.h
index 909a77e081..98aebcc27c 100644
--- a/src/s_sound.h
+++ b/src/s_sound.h
@@ -221,7 +221,7 @@ boolean S_PrepareSoundTest(void);
 UINT32 S_GetMusicLength(void);
 
 // Get MUSICDEF of Music
-musicdef_t *S_MusicInfo(void);
+musicdef_t *S_MusicInfo(const char *name);
 
 // Set LoopPoint of Music
 boolean S_SetMusicLoopPoint(UINT32 looppoint);
-- 
GitLab