Index: code/gamesnd/gamesnd.cpp
===================================================================
--- code/gamesnd/gamesnd.cpp	(revision 9143)
+++ code/gamesnd/gamesnd.cpp	(working copy)
@@ -99,7 +99,33 @@
 	Assert( Snds_iface.size() <= INT_MAX );
 	Assert( Snds_iface.size() == Snds_iface_handle.size() );
 	
-	return gamesnd_lookup_name(name, Snds_iface);
+	int index = gamesnd_lookup_name(name, Snds_iface);
+
+	if (index < 0)
+	{
+		int i = 0;
+		for(SCP_vector<game_snd>::iterator snd = Snds_iface.begin(); snd != Snds_iface.end(); ++snd)
+		{
+			char *p = strrchr( snd->filename, '.' );
+			if(p == NULL)
+			{
+				if(!stricmp(snd->filename, name))
+				{
+					index = i;
+					break;
+				}
+			}
+			else if(!strnicmp(snd->filename, name, p-snd->filename))
+			{
+				index = i;
+				break;
+			}
+
+			i++;
+		}
+	}
+
+	return index;
 }
 
 int gamesnd_get_by_tbl_index(int index)
Index: code/menuui/mainhallmenu.cpp
===================================================================
--- code/menuui/mainhallmenu.cpp	(revision 9143)
+++ code/menuui/mainhallmenu.cpp	(working copy)
@@ -1200,8 +1200,14 @@
 							snd_stop(Main_hall->misc_anim_special_sounds.at(idx).at(s_idx));
 						}
 
-						// play the sound
-						snd_play(&Snds_iface[Main_hall->misc_anim_special_sounds.at(idx).at(s_idx)],Main_hall->misc_anim_sound_pan.at(idx));
+						int sound = Main_hall->misc_anim_special_sounds.at(idx).at(s_idx);
+
+						// Check if the sound is valid
+						if (sound >= 0)
+						{
+							// play the sound
+							snd_play(&Snds_iface[sound],Main_hall->misc_anim_sound_pan.at(idx));
+						}
 						break;
 					}
 				}
@@ -1331,8 +1337,14 @@
 		if (Main_hall_door_sound_handles.at(region) != -1) {
 			snd_stop(Main_hall_door_sound_handles.at(region));
 		}
-		Main_hall_door_sound_handles.at(region) = snd_play(&Snds_iface[Main_hall->door_sounds.at(region).at(1)], Main_hall->door_sound_pan.at(region));
 
+		int sound = Main_hall->door_sounds.at(region).at(1);
+
+		if (sound >= 0)
+		{
+			Main_hall_door_sound_handles.at(region) = snd_play(&Snds_iface[sound], Main_hall->door_sound_pan.at(region));
+		}
+
 		//TODO: track current frame
 		snd_set_pos(Main_hall_door_sound_handles.at(region), &Snds_iface[SND_MAIN_HALL_DOOR_CLOSE], 
 			(float)((Main_hall_door_anim.at(region).keyframe) ? Main_hall_door_anim.at(region).keyframe : 
@@ -1369,8 +1381,14 @@
 	if (Main_hall_door_sound_handles.at(region) != -1) {
 		snd_stop(Main_hall_door_sound_handles.at(region));
 	}
-	Main_hall_door_sound_handles.at(region) = snd_play(&Snds_iface[Main_hall->door_sounds.at(region).at(0)],Main_hall->door_sound_pan.at(region));
 
+	int sound = Main_hall->door_sounds.at(region).at(0);
+
+	if (sound >= 0)
+	{
+		Main_hall_door_sound_handles.at(region) = snd_play(&Snds_iface[sound],Main_hall->door_sound_pan.at(region));
+	}
+
 	// start the sound playing at the right spot relative to the completion of the animation
 	if ( (Main_hall_door_anim.at(region).num_frames > 0) && (Main_hall_door_anim.at(region).current_frame != -1) ) {
 		snd_set_pos(Main_hall_door_sound_handles.at(region),&Snds_iface[SND_MAIN_HALL_DOOR_OPEN], 
@@ -1458,11 +1476,17 @@
 
 		// if the timestamp has popped, play a sound
 		if ( (Main_hall_next_intercom_sound_stamp != -1) && (timestamp_elapsed(Main_hall_next_intercom_sound_stamp)) ) {
-			// play the sound
-			Main_hall_intercom_sound_handle = snd_play(&Snds_iface.at(Main_hall->intercom_sounds.at(Main_hall_next_intercom_sound)));			
+			int sound = Main_hall->intercom_sounds.at(Main_hall_next_intercom_sound);
+			
+			// Check if the sound is valid
+			if (sound >= 0)
+			{
+				// play the sound
+				Main_hall_intercom_sound_handle = snd_play(&Snds_iface.at(sound));			
 
-			// unset the timestamp
-			Main_hall_next_intercom_sound_stamp = -1;
+				// unset the timestamp
+				Main_hall_next_intercom_sound_stamp = -1;
+			}
 		}
 	}
 	// if the sound is playing
