shithub: battleship

Download patch

ref: 811630a877af97cceba4f43a16eb3fbd9ed99242
parent: dbfc9b6d9bc6aa9f337eadc21d0d6dfbdbc3e3d7
author: rodri <[email protected]>
date: Wed Oct 11 07:48:55 EDT 2023

allow the user to disable sound. only spawn a new window when debugging.

--- a/bts.c
+++ b/bts.c
@@ -74,6 +74,7 @@
 };
 
 int debug;
+int silent;
 
 Cursor patrolcursor = {
 	{0, 0},
@@ -244,9 +245,11 @@
 	game.state = Waiting0;
 	conclusion.s = nil;
 	csetcursor(mctl, nil);
-	stopaudio(conclusion.snd);
-	conclusion.snd = nil;
-	playaudio(playlist[SBG0]);
+	if(!silent){
+		stopaudio(conclusion.snd);
+		conclusion.snd = nil;
+		playaudio(playlist[SBG0]);
+	}
 }
 
 Point
@@ -639,7 +642,8 @@
 		if(!ptinrect(mc->xy, alienboard.bbox))
 			break;
 
-		playaudio(playlist[SCANNON]);
+		if(!silent)
+			playaudio(playlist[SCANNON]);
 		cell = toboard(&alienboard, mc->xy);
 		cell2coords(buf, sizeof buf, cell);
 		if(gettile(&alienboard, cell) == Twater){
@@ -821,10 +825,11 @@
 
 	conclusion.c = pal[PCGreen];
 	conclusion.s = s;
-	conclusion.snd = playlist[SVICTORY];
-
-	stopaudio(playlist[SBG2]);
-	playaudio(conclusion.snd);
+	if(!silent){
+		conclusion.snd = playlist[SVICTORY];
+		stopaudio(playlist[SBG2]);
+		playaudio(conclusion.snd);
+	}
 }
 
 void
@@ -834,10 +839,11 @@
 
 	conclusion.c = pal[PCRed];
 	conclusion.s = s;
-	conclusion.snd = playlist[SDEFEAT];
-
-	stopaudio(playlist[SBG2]);
-	playaudio(conclusion.snd);
+	if(!silent){
+		conclusion.snd = playlist[SDEFEAT];
+		stopaudio(playlist[SBG2]);
+		playaudio(conclusion.snd);
+	}
 }
 
 void
@@ -851,10 +857,11 @@
 	snprint(s, sizeof s, "%s WON", winner);
 	conclusion.c = pal[PCGreen];
 	conclusion.s = s;
-	conclusion.snd = playlist[SVICTORY];
-
-	stopaudio(playlist[SBG2]);
-	playaudio(conclusion.snd);
+	if(!silent){
+		conclusion.snd = playlist[SVICTORY];
+		stopaudio(playlist[SBG2]);
+		playaudio(conclusion.snd);
+	}
 }
 
 void
@@ -904,8 +911,10 @@
 			match.bl[0] = &localboard;
 			match.bl[1] = &alienboard;
 			game.state = Watching;
-			stopaudio(playlist[SBG0]);
-			playaudio(playlist[SBG2]);
+			if(!silent){
+				stopaudio(playlist[SBG0]);
+				playaudio(playlist[SBG2]);
+			}
 		}
 		break;
 	case Ready:
@@ -912,8 +921,10 @@
 		if(ct->index == CMlayout){
 			game.state = Outlaying;
 			curship = &armada[0];
-			stopaudio(playlist[SBG0]);
-			playaudio(playlist[SBG2]);
+			if(!silent){
+				stopaudio(playlist[SBG0]);
+				playaudio(playlist[SBG2]);
+			}
 		}else if(ct->index == CMoid)
 			snprint(oid, sizeof oid, "%s", cb->f[1]);
 		break;
@@ -955,7 +966,8 @@
 		}else if(ct->index == CMwehit)
 			settile(&alienboard, lastshot, Thit);
 		else if(ct->index == CMwemiss){
-			playaudio(playlist[SWATER]);
+			if(!silent)
+				playaudio(playlist[SWATER]);
 			settile(&alienboard, lastshot, Tmiss);
 		}
 		break;
@@ -1047,7 +1059,7 @@
 void
 usage(void)
 {
-	fprint(2, "usage: %s [-da] addr\n", argv0);
+	fprint(2, "usage: %s [-dsa] addr\n", argv0);
 	threadexitsall("usage");
 }
 
@@ -1066,6 +1078,9 @@
 	case 'd':
 		debug++;
 		break;
+	case 's':
+		silent++;
+		break;
 	case 'a':
 		game.mode = GMPvAI;
 		break;
@@ -1075,7 +1090,7 @@
 		usage();
 
 	snprint(winspec, sizeof winspec, "-dx %d -dy %d", SCRW, SCRH);
-	if(newwindow(winspec) < 0)
+	if(debug && newwindow(winspec) < 0)
 		sysfatal("newwindow: %r");
 	if(initdraw(nil, deffont, "bts") < 0)
 		sysfatal("initdraw: %r");
@@ -1086,6 +1101,7 @@
 
 	display->locking = 1;
 	unlockdisplay(display);
+	resize();
 
 	mctl = mc;
 	if((user = getenv("user")) == nil)
@@ -1092,7 +1108,7 @@
 		user = getuser();
 	snprint(uid, sizeof uid, "%s", user);
 
-	screenb = eallocimage(display, rectsubpt(screen->r, screen->r.min), screen->chan, 0, DNofill);
+	screenb = eallocimage(display, Rect(0,0,SCRW,SCRH), screen->chan, 0, DNofill);
 	worldrf.p = Pt2(0,0,1);
 	worldrf.bx = Vec2(1,0);
 	worldrf.by = Vec2(0,1);
@@ -1108,8 +1124,10 @@
 	matches = newmenulist(14*font->height, "ongoing matches");
 	game.state = Waiting0;
 
-	initsfx();
-	proccreate(soundproc, nil, mainstacksize);
+	if(!silent){
+		initsfx();
+		proccreate(soundproc, nil, mainstacksize);
+	}
 
 	addr = netmkaddr(argv[0], "tcp", "3047");
 	if(debug)
--- a/menulist.c
+++ b/menulist.c
@@ -106,6 +106,7 @@
 	return selected;
 }
 
+/* TODO draw the menu in its own Window */
 static void
 menulist_draw(Menulist *ml, Image *dst)
 {