Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Moved game varieties from C# to XML files. Renamed Great Detective to…

… Master Detective, and added HasSpyglass game variety rule.

darcs-hash:20070625150914-79701-27a86e0abc000cf009cfba19e35efc9db5b48351.gz
  • Loading branch information...
commit 91e5e4785af3044b0e91b83fc3cb7dbc26a9c2b7 1 parent c24aebc
Andrew Arnott authored June 25, 2007
8  ClueBuddy/Card.cs
@@ -2,10 +2,12 @@
2 2
 using System.Collections.Generic;
3 3
 using System.Linq;
4 4
 using System.Text;
  5
+using System.Xml.Serialization;
5 6
 
6 7
 namespace ClueBuddy {
7 8
 	[Serializable]
8 9
 	public class Card {
  10
+		public Card() { }
9 11
 		protected Card(string name) {
10 12
 			if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name");
11 13
 			this.Name = name;
@@ -21,9 +23,10 @@ public class Card {
21 23
 		/// <summary>
22 24
 		/// The name of the weapon, place or suspect.
23 25
 		/// </summary>
  26
+		[XmlAttribute]
24 27
 		public string Name {
25 28
 			get { return name; }
26  
-			private set { name = value; }
  29
+			set { name = value; }
27 30
 		}
28 31
 
29 32
 		public override string ToString() {
@@ -32,6 +35,7 @@ public class Card {
32 35
 	}
33 36
 	[Serializable]
34 37
 	public class Weapon : Card {
  38
+		public Weapon() { }
35 39
 		public Weapon(string name) : base(name) { }
36 40
 
37 41
 		public static IEnumerable<Weapon> Generate(params string[] names) {
@@ -40,6 +44,7 @@ public class Weapon : Card {
40 44
 	}
41 45
 	[Serializable]
42 46
 	public class Place : Card {
  47
+		public Place() { }
43 48
 		public Place(string name) : base(name) { }
44 49
 
45 50
 		public static IEnumerable<Place> Generate(params string[] names) {
@@ -48,6 +53,7 @@ public class Place : Card {
48 53
 	}
49 54
 	[Serializable]
50 55
 	public class Suspect : Card {
  56
+		public Suspect() { }
51 57
 		public Suspect(string name) : base(name) { }
52 58
 
53 59
 		public static IEnumerable<Suspect> Generate(params string[] names) {
2  ClueBuddy/Game.cs
@@ -14,7 +14,7 @@ public partial class Game : INotifyPropertyChanged {
14 14
 		/// </summary>
15 15
 		/// <param name="rules">The set of rules the game will play by.</param>
16 16
 		/// <param name="cards">The cards in this game.</param>
17  
-		Game(string varietyName, GameRules rules, IEnumerable<Card> cards) {
  17
+		internal Game(string varietyName, GameRules rules, IEnumerable<Card> cards) {
18 18
 			if (string.IsNullOrEmpty(varietyName)) throw new ArgumentNullException("varietyName");
19 19
 			if (cards == null) throw new ArgumentNullException("cards");
20 20
 			if (cards.Count() == 0)
5  ClueBuddy/GameRules.cs
@@ -10,5 +10,10 @@ public struct GameRules {
10 10
 		/// Whether a player's turn ends at the first disproval resulting from a suspicion.
11 11
 		/// </summary>
12 12
 		public bool DisprovalEndsTurn;
  13
+		/// <summary>
  14
+		/// Whether the board has certain spaces that allow a player to look at a random card
  15
+		/// of another player.
  16
+		/// </summary>
  17
+		public bool HasSpyglass;
13 18
 	}
14 19
 }
102  ClueBuddy/GameVarieties.cs
@@ -2,38 +2,90 @@
2 2
 using System.Collections.Generic;
3 3
 using System.Linq;
4 4
 using System.Text;
  5
+using System.IO;
  6
+using System.Xml;
  7
+using System.Xml.Serialization;
5 8
 
6 9
 namespace ClueBuddy {
7  
-	public partial class Game {
8  
-		public static IEnumerable<Game> Varieties {
9  
-			get {
10  
-				return new Game[] { GreatDetective, Simpsons };
11  
-			}
  10
+	[XmlType(Namespace = TypeNamespace)]
  11
+	public class GameVariety {
  12
+		public const string DefaultFileExtension = "clueVariety";
  13
+		const string TypeNamespace = "http://www.nerdbank.net/clue/variety";
  14
+		static XmlSerializer getSerializer() {
  15
+			XmlSerializer serializer = new XmlSerializer(typeof(GameVariety), TypeNamespace);
  16
+			return serializer;
  17
+		}
  18
+		public static GameVariety LoadFrom(Stream stream) {
  19
+			return (GameVariety)getSerializer().Deserialize(stream);
  20
+		}
  21
+		public void Save(Stream stream) {
  22
+			getSerializer().Serialize(stream, this);
12 23
 		}
13 24
 
14  
-		public static Game GreatDetective {
15  
-			get {
16  
-				return new Game("Great Detective", new GameRules() {
17  
-									DisprovalEndsTurn = false
18  
-								}, Card.Generate(
19  
-									Suspect.Generate("Brunette", "Gray", "Green", "Mustard", "Peach", "Peacock", "Plum", "Rose", "Scarlet", "White"),
20  
-									Weapon.Generate("Knife", "Candlestick", "Horseshoe", "Lead pipe", "Poison", "Revolver", "Rope", "Wrench"),
21  
-									Place.Generate("Billiard room", "Carriage House", "Conservatory", "Courtyard", "Dining room", "Drawing room", "Fountain", "Gazebo", "Kitchen", "Library", "Studio", "Trophy room")
22  
-								)
23  
-				  );
24  
-			}
  25
+		/// <summary>
  26
+		/// Constructs a <see cref="Game"/> based on the variety described by this
  27
+		/// <see cref="GameVariety"/> instance.
  28
+		/// </summary>
  29
+		public Game Initialize() {
  30
+			return new Game(Name, Rules, cards);
  31
+		}
  32
+
  33
+		GameRules rules;
  34
+		/// <summary>
  35
+		/// The set of rules this game is playing by.
  36
+		/// </summary>
  37
+		public GameRules Rules {
  38
+			get { return rules; }
  39
+			set { rules = value; }
25 40
 		}
26  
-		public static Game Simpsons {
  41
+
  42
+		List<Weapon> weapons = new List<Weapon>();
  43
+		/// <summary>
  44
+		/// The weapon cards in the game.
  45
+		/// </summary>
  46
+		public List<Weapon> Weapons {
  47
+			get { return weapons; }
  48
+			set { weapons = value; }
  49
+		}
  50
+
  51
+		List<Suspect> suspects = new List<Suspect>();
  52
+		/// <summary>
  53
+		/// The suspect cards in the game.
  54
+		/// </summary>
  55
+		public List<Suspect> Suspects {
  56
+			get { return suspects; }
  57
+			set { suspects = value; }
  58
+		}
  59
+
  60
+		List<Place> places = new List<Place>();
  61
+		/// <summary>
  62
+		/// The place cards in the game.
  63
+		/// </summary>
  64
+		public List<Place> Places {
  65
+			get { return places; }
  66
+			set { places = value; }
  67
+		}
  68
+
  69
+		[XmlIgnore]
  70
+		IEnumerable<Card> cards {
27 71
 			get {
28  
-				return new Game("Simpsons", new GameRules() {
29  
-									DisprovalEndsTurn = true
30  
-								}, Card.Generate(
31  
-									Suspect.Generate("Green", "Mustard", "Peacock", "Plum", "Scarlet", "White"),
32  
-									Weapon.Generate("Poison donut", "Plutonium rod", "Saxophone", "Slingshot", "Necklace", "Extend-o-glove"),
33  
-									Place.Generate("Simpson house", "Frying dutchman", "Androids dungeon", "Burns manor", "Krusty loo studios", "Barneys Bowl o rama", "Kwik e mart", "Nuclear power plant", "Springfield retirement castle")
34  
-								)
35  
-				);
  72
+				foreach (var card in Suspects) {
  73
+					yield return card;
  74
+				}
  75
+				foreach (var card in Weapons) {
  76
+					yield return card;
  77
+				}
  78
+				foreach (var card in Places) {
  79
+					yield return card;
  80
+				}
36 81
 			}
37 82
 		}
  83
+
  84
+		string name;
  85
+		[XmlAttribute]
  86
+		public string Name {
  87
+			get { return name; }
  88
+			set { name = value; }
  89
+		}
38 90
 	}
39 91
 }
36  ClueBuddyConsole/Program.cs
@@ -14,8 +14,9 @@ class Program {
14 14
 		int cardColumnWidth = 10;
15 15
 		int playerColumnWidth = 10;
16 16
 		static ConsoleColor questionColor = ConsoleColor.Yellow;
17  
-		OpenFileDialog openDialog = new OpenFileDialog();
18  
-		SaveFileDialog saveDialog = new SaveFileDialog();
  17
+		OpenFileDialog openVarietyDialog = new OpenFileDialog();
  18
+		OpenFileDialog openGameDialog = new OpenFileDialog();
  19
+		SaveFileDialog saveGameDialog = new SaveFileDialog();
19 20
 
20 21
 		Game game;
21 22
 		/// <summary>
@@ -28,8 +29,13 @@ class Program {
28 29
 		Player suggestingPlayer;
29 30
 
30 31
 		public Program() {
31  
-			setupFileDialog(openDialog);
32  
-			setupFileDialog(saveDialog);
  32
+			setupGameFileDialog(openGameDialog);
  33
+			setupGameFileDialog(saveGameDialog);
  34
+
  35
+			openVarietyDialog.DefaultExt = GameVariety.DefaultFileExtension;
  36
+			openVarietyDialog.Filter = string.Format("Clue Varieties (*.{0})|*.{0}|All files (*.*)|*.*", GameVariety.DefaultFileExtension);
  37
+			openVarietyDialog.FilterIndex = 0;
  38
+			openVarietyDialog.Title = "Choose which game variety to load";
33 39
 		}
34 40
 
35 41
 		[STAThread]
@@ -114,6 +120,7 @@ class Program {
114 120
 							break;
115 121
 						case 'N':
116 122
 							chooseGame();
  123
+							if (game == null) break;
117 124
 							setupPlayers();
118 125
 							game.Start();
119 126
 							learnOwnHand();
@@ -143,10 +150,10 @@ class Program {
143 150
 		}
144 151
 
145 152
 		bool? saveGame() {
146  
-			bool? result = saveDialog.ShowDialog();
  153
+			bool? result = saveGameDialog.ShowDialog();
147 154
 			if (result.HasValue && result.Value) {
148 155
 				IFormatter formatter = new BinaryFormatter();
149  
-				using (Stream s = saveDialog.OpenFile()) {
  156
+				using (Stream s = saveGameDialog.OpenFile()) {
150 157
 					formatter.Serialize(s, game);
151 158
 					formatter.Serialize(s, interactivePlayer.Name);
152 159
 				}
@@ -155,26 +162,31 @@ class Program {
155 162
 		}
156 163
 
157 164
 		bool? loadGame() {
158  
-			bool? result = openDialog.ShowDialog();
  165
+			bool? result = openGameDialog.ShowDialog();
159 166
 			if (result.HasValue && result.Value) {
160 167
 				IFormatter formatter = new BinaryFormatter();
161  
-				using (Stream s = openDialog.OpenFile()) {
  168
+				using (Stream s = openGameDialog.OpenFile()) {
162 169
 					game = (Game)formatter.Deserialize(s);
163 170
 					interactivePlayer = game.Players.First(p => p.Name.Equals(formatter.Deserialize(s)));
164 171
 				}
165  
-				saveDialog.FileName = openDialog.FileName;
  172
+				saveGameDialog.FileName = openGameDialog.FileName;
166 173
 			}
167 174
 			return result;
168 175
 		}
169 176
 
170  
-		void setupFileDialog(FileDialog dlg) {
  177
+		void setupGameFileDialog(FileDialog dlg) {
171 178
 			dlg.DefaultExt = "clueBuddy";
172 179
 			dlg.Filter = "ClueBuddy games (*.clueBuddy)|*.clueBuddy|All Files|*.*";
173 180
 			dlg.FilterIndex = 0;
174 181
 		}
175 182
 
176 183
 		void chooseGame() {
177  
-			game = choose("Which game variety are you starting?", false, v => v.VarietyName, Game.Varieties.ToArray());
  184
+			bool? result = openVarietyDialog.ShowDialog();
  185
+			if (!result.HasValue || !result.Value) return;
  186
+			using (Stream s = openVarietyDialog.OpenFile()) {
  187
+				game = GameVariety.LoadFrom(s).Initialize();
  188
+				Console.WriteLine("Starting {0}...", game.VarietyName);
  189
+			}
178 190
 		}
179 191
 
180 192
 		void setupPlayers() {
@@ -208,7 +220,7 @@ class Program {
208 220
 			suggestingPlayer = choosePlayer("Whose turn is it?", true, true);
209 221
 			if (suggestingPlayer == null) return;
210 222
 			try {
211  
-				if (suggestingPlayer == interactivePlayer) {
  223
+				if (suggestingPlayer == interactivePlayer && game.Rules.HasSpyglass) {
212 224
 					while (true) {
213 225
 						var turnMenu = new Dictionary<char, string>();
214 226
 						turnMenu.Add('S', "Make a suggestion");
8  ClueBuddyGui/ClueBuddyGui.csproj
@@ -115,6 +115,14 @@
115 115
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
116 116
       <SubType>Designer</SubType>
117 117
     </EmbeddedResource>
  118
+    <Content Include="..\Master Detective.clueVariety">
  119
+      <Link>Master Detective.clueVariety</Link>
  120
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  121
+    </Content>
  122
+    <Content Include="..\Simpsons.clueVariety">
  123
+      <Link>Simpsons.clueVariety</Link>
  124
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  125
+    </Content>
118 126
     <None Include="Properties\Settings.settings">
119 127
       <Generator>SettingsSingleFileGenerator</Generator>
120 128
       <LastGenOutput>Settings.Designer.cs</LastGenOutput>
8  ClueBuddyGui/Main.xaml.cs
@@ -13,6 +13,10 @@
13 13
 using System.Windows.Media.Imaging;
14 14
 using System.Windows.Navigation;
15 15
 using ClueBuddy;
  16
+using Microsoft.Win32;
  17
+using System.Runtime.Serialization;
  18
+using System.Runtime.Serialization.Formatters.Binary;
  19
+using System.IO;
16 20
 
17 21
 namespace ClueBuddyGui {
18 22
 	/// <summary>
@@ -25,7 +29,9 @@ public partial class Main : Window {
25 29
 		public Main() {
26 30
 			InitializeComponent();
27 31
 
28  
-			game = Game.GreatDetective;
  32
+			using (Stream s = new FileStream("Master Detective.clueVariety", FileMode.Open)) {
  33
+				game = GameVariety.LoadFrom(s).Initialize();
  34
+			}
29 35
 			game.Players.Add(new Player("Andrew"));
30 36
 			game.Players.Add(new Player("Cheryl"));
31 37
 			game.Players.Add(new Player("Jeff"));
4  ClueBuddyTest/FullGameTest.cs
@@ -71,7 +71,7 @@ public class FullGameTest : TestBase {
71 71
 
72 72
 		[TestMethod]
73 73
 		public void Wrigleys() {
74  
-			game = Game.Simpsons;
  74
+			game = Simpsons;
75 75
 			game.AutoAnalysis = false;
76 76
 
77 77
 			Player andrew, cheryl, jeff, julia;
@@ -172,7 +172,7 @@ public class FullGameTest : TestBase {
172 172
 
173 173
 		[TestMethod]
174 174
 		public void Webbs() {
175  
-			game = Game.GreatDetective;
  175
+			game = MasterDetective;
176 176
 			game.AutoAnalysis = false; // speeds up test if we call Analyze just once.
177 177
 
178 178
 			Player andrew, cheryl, rebecca, dan, table;
14  ClueBuddyTest/GameTest.cs
@@ -14,14 +14,14 @@ public class GameTest : TestBase {
14 14
 		[TestMethod]
15 15
 		[ExpectedException(typeof(InvalidOperationException))]
16 16
 		public void StartWithNoPlayersTest() {
17  
-			Game g = Game.GreatDetective;
  17
+			Game g = MasterDetective;
18 18
 			g.Start();
19 19
 		}
20 20
 
21 21
 		[TestMethod]
22 22
 		[ExpectedException(typeof(InvalidOperationException))]
23 23
 		public void StartWithPlayersWithoutHandSizesTest() {
24  
-			Game g = Game.GreatDetective;
  24
+			Game g = MasterDetective;
25 25
 			g.Players.AddRange(players);
26 26
 			g.Start();
27 27
 		}
@@ -29,7 +29,7 @@ public class GameTest : TestBase {
29 29
 		[TestMethod]
30 30
 		[ExpectedException(typeof(InvalidOperationException))]
31 31
 		public void StartWithoutHandSizesAppropriatelySized() {
32  
-			Game g = Game.GreatDetective;
  32
+			Game g = MasterDetective;
33 33
 			g.Players.AddRange(players);
34 34
 			g.AssignApproximatePlayerHandSizes();
35 35
 			Debug.Assert(players[0].CardsHeldCount > 1);
@@ -59,7 +59,7 @@ public class GameTest : TestBase {
59 59
 
60 60
 		[TestMethod]
61 61
 		public void CluesTest() {
62  
-			Game newGame = Game.GreatDetective;
  62
+			Game newGame = MasterDetective;
63 63
 			Assert.IsNull(newGame.Clues);
64 64
 		}
65 65
 
@@ -102,19 +102,19 @@ public class GameTest : TestBase {
102 102
 
103 103
 		[TestMethod]
104 104
 		public void CaseFileTest() {
105  
-			Game g = Game.GreatDetective;
  105
+			Game g = MasterDetective;
106 106
 			Assert.IsNull(g.CaseFile);
107 107
 		}
108 108
 
109 109
 		[TestMethod]
110 110
 		[ExpectedException(typeof(InvalidOperationException))]
111 111
 		public void AssignApproximatePlayerHandSizesBeforeAddingPlayersTest() {
112  
-			Game.GreatDetective.AssignApproximatePlayerHandSizes();
  112
+			MasterDetective.AssignApproximatePlayerHandSizes();
113 113
 		}
114 114
 
115 115
 		[TestMethod]
116 116
 		public void AssignApproximatePlayerHandSizesTest() {
117  
-			Game g = Game.GreatDetective;
  117
+			Game g = MasterDetective;
118 118
 			g.Players.AddRange(players);
119 119
 			g.AssignApproximatePlayerHandSizes();
120 120
 			// Make sure that all cards (except 3 for the Case File) are distributed as evenly as possible.
16  ClueBuddyTest/TestBase.cs
@@ -4,6 +4,7 @@
4 4
 using System.Linq;
5 5
 using Microsoft.VisualStudio.TestTools.UnitTesting;
6 6
 using ClueBuddy;
  7
+using System.IO;
7 8
 
8 9
 namespace ClueBuddyTest {
9 10
 	static partial class Extensions {
@@ -61,6 +62,19 @@ public class TestBase {
61 62
 
62 63
 		protected Player[] players;
63 64
 
  65
+		Game loadGameVariety(string name) {
  66
+			string fileName = Path.Combine(TestContext.TestDeploymentDir, name + "." + GameVariety.DefaultFileExtension);
  67
+			using (Stream s = new FileStream(fileName, FileMode.Open)) {
  68
+				return GameVariety.LoadFrom(s).Initialize();
  69
+			}
  70
+		}
  71
+		protected Game MasterDetective {
  72
+			get { return loadGameVariety("Master Detective"); }
  73
+		}
  74
+		protected Game Simpsons {
  75
+			get { return loadGameVariety("Simpsons"); }
  76
+		}
  77
+
64 78
 		protected virtual Game StartPresetGame() {
65 79
 			Game g = PreparePresetGame();
66 80
 			g.Start();
@@ -68,7 +82,7 @@ public class TestBase {
68 82
 		}
69 83
 
70 84
 		protected virtual Game PreparePresetGame() {
71  
-			Game g = Game.GreatDetective;
  85
+			Game g = MasterDetective;
72 86
 			g.Players.AddRange(players);
73 87
 			g.AssignApproximatePlayerHandSizes();
74 88
 			return g;
4  LocalTestRun.testrunconfig
@@ -6,6 +6,10 @@
6 6
       <CodeCoverageItem binaryFile="ClueBuddy\bin\Debug\ClueBuddy.dll" pdbFile="ClueBuddy\bin\Debug\ClueBuddy.pdb" instrumentInPlace="true" />
7 7
     </Regular>
8 8
   </CodeCoverage>
  9
+  <Deployment>
  10
+    <DeploymentItem filename="Simpsons.clueVariety" />
  11
+    <DeploymentItem filename="Master Detective.clueVariety" />
  12
+  </Deployment>
9 13
   <TestTypeSpecific>
10 14
     <WebTestRunConfiguration testTypeId="4e7599fa-5ecb-43e9-a887-cd63cf72d207">
11 15
       <Browser name="Internet Explorer 7.0">
43  Master Detective.clueVariety
... ...
@@ -0,0 +1,43 @@
  1
+<?xml version="1.0"?>
  2
+<GameVariety xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="Master Detective" xmlns="http://www.nerdbank.net/clue/variety">
  3
+  <Rules>
  4
+    <DisprovalEndsTurn>false</DisprovalEndsTurn>
  5
+    <HasSpyglass>true</HasSpyglass>
  6
+  </Rules>
  7
+  <Weapons>
  8
+    <Weapon Name="Knife" />
  9
+    <Weapon Name="Candlestick" />
  10
+    <Weapon Name="Horseshoe" />
  11
+    <Weapon Name="Lead pipe" />
  12
+    <Weapon Name="Poison" />
  13
+    <Weapon Name="Revolver" />
  14
+    <Weapon Name="Rope" />
  15
+    <Weapon Name="Wrench" />
  16
+  </Weapons>
  17
+  <Suspects>
  18
+    <Suspect Name="Brunette" />
  19
+    <Suspect Name="Gray" />
  20
+    <Suspect Name="Green" />
  21
+    <Suspect Name="Mustard" />
  22
+    <Suspect Name="Peach" />
  23
+    <Suspect Name="Peacock" />
  24
+    <Suspect Name="Plum" />
  25
+    <Suspect Name="Rose" />
  26
+    <Suspect Name="Scarlet" />
  27
+    <Suspect Name="White" />
  28
+  </Suspects>
  29
+  <Places>
  30
+    <Place Name="Billiard room" />
  31
+    <Place Name="Carriage House" />
  32
+    <Place Name="Conservatory" />
  33
+    <Place Name="Courtyard" />
  34
+    <Place Name="Dining room" />
  35
+    <Place Name="Drawing room" />
  36
+    <Place Name="Fountain" />
  37
+    <Place Name="Gazebo" />
  38
+    <Place Name="Kitchen" />
  39
+    <Place Name="Library" />
  40
+    <Place Name="Studio" />
  41
+    <Place Name="Trophy room" />
  42
+  </Places>
  43
+</GameVariety>
34  Simpsons.clueVariety
... ...
@@ -0,0 +1,34 @@
  1
+<?xml version="1.0"?>
  2
+<GameVariety xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="Simpsons" xmlns="http://www.nerdbank.net/clue/variety">
  3
+  <Rules>
  4
+    <DisprovalEndsTurn>true</DisprovalEndsTurn>
  5
+    <HasSpyglass>false</HasSpyglass>
  6
+  </Rules>
  7
+  <Weapons>
  8
+    <Weapon Name="Poison donut" />
  9
+    <Weapon Name="Plutonium rod" />
  10
+    <Weapon Name="Saxophone" />
  11
+    <Weapon Name="Slingshot" />
  12
+    <Weapon Name="Necklace" />
  13
+    <Weapon Name="Extend-o-glove" />
  14
+  </Weapons>
  15
+  <Suspects>
  16
+    <Suspect Name="Green" />
  17
+    <Suspect Name="Mustard" />
  18
+    <Suspect Name="Peacock" />
  19
+    <Suspect Name="Plum" />
  20
+    <Suspect Name="Scarlet" />
  21
+    <Suspect Name="White" />
  22
+  </Suspects>
  23
+  <Places>
  24
+    <Place Name="Simpson house" />
  25
+    <Place Name="Frying dutchman" />
  26
+    <Place Name="Androids dungeon" />
  27
+    <Place Name="Burns manor" />
  28
+    <Place Name="Krusty loo studios" />
  29
+    <Place Name="Barneys Bowl o rama" />
  30
+    <Place Name="Kwik e mart" />
  31
+    <Place Name="Nuclear power plant" />
  32
+    <Place Name="Springfield retirement castle" />
  33
+  </Places>
  34
+</GameVariety>

0 notes on commit 91e5e47

Please sign in to comment.
Something went wrong with that request. Please try again.