Index: ttd.c
===================================================================
--- ttd.c	(revision 2191)
+++ ttd.c	(working copy)
@@ -66,6 +66,7 @@
  * caused by the user, i.e. missing files or fatal configuration errors.
  * Post-0.4.0 since Celestar doesn't want this in SVN before. --pasky */
 
+// Show OS Error Box and exit OpenTTD
 void CDECL error(const char *s, ...) {
 	va_list va;
 	char buf[512];
@@ -81,6 +82,17 @@
 	exit(1);
 }
 
+// Show OS Error Box but don't exit OpenTTD
+void CDECL warn(const char *s, ...) {
+	va_list va;
+	char buf[512];
+	va_start(va, s);
+	vsprintf(buf, s, va);
+	va_end(va);
+
+	ShowOSErrorBox(buf);
+}
+
 void CDECL ShowInfoF(const char *str, ...)
 {
 	va_list va;
@@ -273,8 +285,21 @@
 	if (*var != NULL) ((const HalCommonDriver*)*var)->stop();
 	*var = NULL;
 	drv = dd->drv;
-	if ((err=((const HalCommonDriver*)drv)->start(parms)) != NULL)
-		error("Unable to load driver %s(%s). The error was: %s\n", dd->name, dd->longname, err);
+	if ((err=((const HalCommonDriver*)drv)->start(parms)) != NULL) {
+		char buf[512];
+		bool fatal = true;
+
+		if ((strcmp(dc->name, "sound") == 0) || (strcmp(dc->name, "music")) == 0) fatal = false; // sound & music are non fatal
+		snprintf(buf, lengthof(buf), "Unable to load %s driver %s(%s). The error was: %s\n", dc->name, dd->name, dd->longname, err);
+		if (fatal) {
+			error(buf);
+		} else {
+			char buf2[100];
+			snprintf(buf2, lengthof(buf2), "Non-Fatal Error, continuing anyway! (Try using -%c null)", dc->name[0]);
+			strcat(buf, buf2);
+			warn(buf);
+		}
+	}
 	*var = drv;
 }
 

