Blob Blame History Raw
diff -up ballbuster-1.0/main.cpp.orig ballbuster-1.0/main.cpp
--- ballbuster-1.0/main.cpp.orig	2016-02-15 15:15:20.781925176 +0100
+++ ballbuster-1.0/main.cpp	2016-02-15 15:15:33.738986682 +0100
@@ -61,7 +60,11 @@ testy::testy()
 	catchbluestart = catchredstart = CL_System::get_time();
 	fireball = blaster = stageover = transitionout = died = dying = false;
 	deathstart= 0;
-	fullscreen= true;
+	fullscreen= false;
+	fullscreen_width = -1;
+	fullscreen_height = -1;
+	windowed_width = 800;
+	windowed_height = 600;
 
 	transitionspeed= 0;
 	transdelay= 100; transstart= 0;
@@ -109,6 +112,29 @@ int testy::main(int argc, char **argv)
 //	try {
 		// initialization, looks like they need to be nested
 	unsigned int timer = CL_System::get_time();
+	int width;
+	int height;
+
+	for (int i = 1; i < argc; i++) {
+		if (strcmp(argv[i], "-windowsize") == 0 && ++i < argc &&
+		    sscanf(argv[i], "%dx%d", &windowed_width,
+					     &windowed_height) == 2)
+			;
+		else if (strcmp(argv[i], "-fullscreensize") == 0 && ++i < argc
+		         && sscanf(argv[i], "%dx%d", &fullscreen_width,
+						     &fullscreen_height) == 2)
+			;
+		else if (strcmp(argv[i], "-fullscreen") == 0)
+			fullscreen = true;
+#ifdef _DEBUG
+		else if (strcmp(argv[i], "-debug") == 0)
+			debugger = true;
+#endif
+		else {
+			printf("Usage: ballbuster [-windowsize XXXxYYY] [-fullscreensize XXXxYYY] [-fullscreen]\n");
+			return 1;
+		}
+	}
 
 	srand(timer);
 
@@ -119,17 +145,27 @@ int testy::main(int argc, char **argv)
 	CL_SetupVorbis::init();
 	CL_SoundOutput output(44100);
 
-	bool fulls = true;
-
-#ifdef _DEBUG
-	if (argc > 1)
-		if (strcmp(argv[1], "-debug") == 0) debugger = true;
-#endif
 	if (debugger)
-		fulls = false;
+		fullscreen = false;
+
+	if (fullscreen_height == -1) {
+		std::vector<CL_DisplayMode> &modes =
+			CL_DisplayMode::get_display_modes();
+		if (modes.size() > 0) {
+			CL_Size size = modes[0].get_resolution();
+			fullscreen_width = size.width;
+			fullscreen_height = size.height;
+			} else {
+			fullscreen_width = 800;
+			fullscreen_height = 600;
+			}
+		}
 
 	// now it gets fun, set up the display mode
-	CL_DisplayWindow mywindow("Ball: Buster", 800, 600, fulls, false);
+	width = fullscreen ? fullscreen_width : windowed_width;
+	height = fullscreen ? fullscreen_height : windowed_height;
+	CL_DisplayWindow mywindow("Ball: Buster", width, height, fullscreen, false);
+	CL_Display::set_scale(width / 800.0, height / 600.0);
 
 	displayFormat = &mywindow.get_buffer(0);
 
@@ -1146,14 +1182,14 @@ void testy::mouseRelease(const CL_InputE
 			}
 		if(mousex > 100-20 && mousex < 500 && mousey > 190 && mousey < 220) {
 			if(fullscreen) { 
+				CL_Display::set_size(windowed_width, windowed_height);
 				CL_Display::set_windowed(); fullscreen= false;
-				CL_Display::set_size(800, 600);
-				return;
-				}
-			if(!fullscreen) { 
-				CL_Display::set_fullscreen(800, 600, 32); fullscreen= true; 
-				return;
+				} else {
+				CL_Display::set_fullscreen(fullscreen_width, fullscreen_height, 32); fullscreen= true;
 				}
+			CL_Display::set_scale(CL_Display::get_width() / 800.0,
+					      CL_Display::get_height() / 600.0);
+			return;
 			}
 		if(mousex > 100-20 && mousex < 500 && mousey > 220 && mousey < 250) {
 			bgscroll= bgscroll ? false : true;
diff -up ballbuster-1.0/main.h~ ballbuster-1.0/main.h
--- ballbuster-1.0/main.h~	2016-02-15 15:40:30.000000000 +0100
+++ ballbuster-1.0/main.h	2016-02-15 15:41:34.336494247 +0100
@@ -222,6 +222,10 @@ private:
 	char brush;
 	string editormode;
 	bool fullscreen;
+	int fullscreen_width;
+	int fullscreen_height;
+	int windowed_width;
+	int windowed_height;
 
 	string runEditor();
 	void loadEditor();