| 
					
				 | 
			
			
				@@ -333,7 +333,7 @@ func DeckColorMenu() door.Menu { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"GREEN":   door.ColorText("BRI GREEN ON BLUE"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"MAGENTA": door.ColorText("BRI MAGENTA ON BLUE"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"WHITE":   door.ColorText("BRI WHITE ON BLUE"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		"ALL":     door.ColorText("WHITE ON BLUE")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"ALL":     door.ColorText("BRI WHITE ON BLUE")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	selectMap := map[string]string{"BLUE": door.ColorText("BRI BLUE ON BLACK"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"BROWN":   door.ColorText("BROWN ON BLACK"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"RED":     door.ColorText("BRI RED ON BLACK"), 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -341,7 +341,7 @@ func DeckColorMenu() door.Menu { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"GREEN":   door.ColorText("BRI GREEN ON BLACK"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"MAGENTA": door.ColorText("BRI MAGENTA ON BLACK"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"WHITE":   door.ColorText("BRI WHITE ON BLACK"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		"ALL":     door.ColorText("WHITE ON BLACK")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"ALL":     door.ColorText("BRI WHITE ON BLACK")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	m.SelectedR = MakeColorsRender(door.ColorText("BOLD CYAN"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		door.ColorText("BOLD BLUE"), 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -384,6 +384,7 @@ func DisplaySettings(d *door.Door) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if key[0] == '_' { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		key = strings.Replace(key, "_", " ", -1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		l = door.Line{Text: fmt.Sprintf("%20s : %*s", key, -(W - 23), value), RenderF: renderF} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		panel.Lines = append(panel.Lines, l) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -422,6 +423,68 @@ func Configure(d *door.Door, db *DBData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func Help() door.Panel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	W := 60 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	center_x := (door.Width - W) / 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	center_y := (door.Height - 16) / 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	help := door.Panel{X: center_x, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Y:           center_y, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Width:       W, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Style:       door.DOUBLE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		BorderColor: door.ColorText("BOLD YELLOW ON BLUE")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	help.Lines = append(help.Lines, door.Line{Text: fmt.Sprintf("%*s", -W, "Help"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		DefaultColor: door.ColorText("BOLD CYAN ON BLUE")}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	help.Lines = append(help.Lines, help.Spacer()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	copyright := fmt.Sprintf("Space-Ace (C) 2022 Red Green Software") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	help.Lines = append(help.Lines, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		door.Line{Text: fmt.Sprintf("%*s", -W, copyright), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			DefaultColor: door.ColorText("BOLD WHITE ON BLUE")}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for _, text := range []string{"", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"Use Left/Right arrow keys, or 4/6 keys to move marker.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"The marker wraps around the sides of the screen.", "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"Select card to play with Space or 5.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"A card can play if it is higher or lower in rank by 1.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"Enter draws another card.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"Example: A Jack could play either a Ten or a Queen.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"Example: A King could play either an Ace or a Queen.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"The more cards in your streak, the more points earn.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		help.Lines = append(help.Lines, door.Line{Text: fmt.Sprintf("%*s", -W, text)}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return help 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func About() door.Panel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	W := 60 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	center_x := (door.Width - W) / 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	center_y := (door.Height - 16) / 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	about := door.Panel{X: center_x, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Y:           center_y, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Width:       W, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Style:       door.SINGLE_DOUBLE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		BorderColor: door.ColorText("BOLD YELLOW ON BLUE"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	about.Lines = append(about.Lines, door.Line{Text: fmt.Sprintf("%*s", -W, "About This Door"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		DefaultColor: door.ColorText("BOLD CYAN ON BLUE")}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	about.Lines = append(about.Lines, about.Spacer()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	copyright := fmt.Sprintf("Space-Ace (C) 2022 Red Green Software") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	about.Lines = append(about.Lines, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		door.Line{Text: fmt.Sprintf("%*s", -W, copyright), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			DefaultColor: door.ColorText("BOLD WHITE ON BLUE")}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for _, text := range []string{"", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"This door was written by Bugz.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"It is written in Go, understands CP437 and unicode, adapts", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"to screen sizes, uses door32.sys, and runs on Linux and", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"Windows."} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		about.Lines = append(about.Lines, door.Line{Text: fmt.Sprintf("%*s", -W, text)}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return about 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func main() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	var message string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -480,10 +543,10 @@ func main() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		SaveConfig(config_filename, Config) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	s := StarField{} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	s.Regenerate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	starfield := StarField{} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	starfield.Regenerate(rng) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	s.Display(&d) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	starfield.Display(&d) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	d.Write(door.Goto(1, 1) + door.Reset) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// Get the last call value (if they have called before) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -522,7 +585,7 @@ func main() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	for choice >= 0 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		d.Write(door.Clrscr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		s.Display(&d) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		starfield.Display(&d) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		choice = mainmenu.Choose(&d) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if choice < 0 { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -542,9 +605,13 @@ func main() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			Configure(&d, &db) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		case 'H': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// Help 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			h := Help() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			d.Write(door.Clrscr + h.Output() + door.Reset + door.CRNL) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			press_a_key(&d) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		case 'A': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// About 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			a := About() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			d.Write(door.Clrscr + a.Output() + door.Reset + door.CRNL) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			press_a_key(&d) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		case 'Q': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			choice = -1 
			 |