Earlier in 2018, Simpsons Trivia was built for the Sega Master System. Now, we would like to employ similar techniques to re-write the game in XNA / MonoGame and scale out across multiple game clients accordingly. Let's check it out!
Outline
Create solution in Visual Studio and build the entire game using XNA. Write all game code in an external library to be consumed by multiple thin clients for all destination platforms. Add any experimental clients.
Alias | Name | Development | Framework | Description | Source Code |
XNA | Windows Game | Visual Studio 2010 | XNA 4.0 | Game server | Download |
WP7 | Windows Phone 7 | Visual Studio 2010 | XNA 4.0 | Game client | Download |
WIN | Windows Project | Visual Studio 2015 | MonoGame 3.6 | Game client | Download |
AND | Android Project | Visual Studio 2017 | MonoGame 3.4 | Game client | Download |
IOS | iOS Project | Visual Studio 2017 | MonoGame 3.5 | Game client | Download |
WP8 | Windows Phone 8 | Visual Studio 2015 | MonoGame 3.6 | Game client | Experimental |
MAC | Cross Platform Desktop | Visual Studio 2017 | MonoGame 3.6 | Game client | Experimental |
UWP | Windows Universal Project | Visual Studio 2017 | MonoGame 3.6 | Game client | Experimental |
IMPORTANT
Now that Microsoft integrates iOS templates into Visual Studio all clients can be developed on Windows PC. Mac computer is still required for iOS and Mac deployments, however.
Implementation
Create top level SimpsonsTrivia node in Subversion SVN. Add 1x sub-node for the XNA solution and multiple sub-nodes, one sub-node for each destination client such as WinPhone7 [WP7], Windows PC, Android + iOS.
Alias | Path | URL |
XNA | C:\SVN\SimpsonsTrivia\SimpsonsTrivia.XNA | http://build/svn/SimpsonsTrivia/SimpsonsTrivia.XNA |
WP7 | C:\SVN\SimpsonsTrivia\SimpsonsTrivia.WP7 | http://build/svn/SimpsonsTrivia/SimpsonsTrivia.WP7 |
WIN | C:\SVN\SimpsonsTrivia\SimpsonsTrivia.WIN | http://build/svn/SimpsonsTrivia/SimpsonsTrivia.WIN |
AND | C:\SVN\SimpsonsTrivia\SimpsonsTrivia.AND | http://build/svn/SimpsonsTrivia/SimpsonsTrivia.AND |
IOS | C:\SVN\SimpsonsTrivia\SimpsonsTrivia.IOS | http://build/svn/SimpsonsTrivia/SimpsonsTrivia.IOS |
XNA Game Server
Launch Visual Studio 2010. Create blank solution. Add the following 4x new C#/.NET projects to solution:
Project | Type | Description |
SimpsonsTrivia.XNA | XNA 4.0 Game | Entry point + game built content |
SimpsonsTrivia.XNA.Library | XNA 4.0 Game Library | Generic game library for all clients |
SimpsonsTrivia.XNA.SystemTests | Windows Class Library | Uses for game library system tests |
SimpsonsTrivia.XNA.UnitTests | Windows Class Library | Uses for game library unit tests |
Checklist
Here is a quick checklist of tasks to complete first including Delete the default C#/.NET file, Update project properties profile to use "Reach" and Rename the default namepsace to WindowsGame. Add the packages:
packages
|
|
|
|
|
|
|
|
|
IMPORTANT
Create directory symbolic link using mklink to XNA Content folder to run system tests [and on build server]
Start | run | cmd
mklink /D C:\SimpsonsTrivia.XNA.Content C:\SVN\SimpsonsTrivia\SimpsonsTrivia.XNA\SimpsonsTrivia.XNA\SimpsonsTrivia.XNA\bin\x86\Debug\ // BaseSsytemTests.cs protected const String CONTENT_ROOT = @"C:\SimpsonsTrivia.XNA.Content\";
Manually edit system and unit test projects in Notepad and add following XML to mitigate MSIL warning:
<PropertyGroup> <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch> </PropertyGroup>
ALL Game Clients
Refer to initial table and launch Visual Studio to create multiple thin client projects. SVN externals used to link XNA library to all destination platforms [below] such as WinPhone7 [WP7], Windows PC, Android + iOS.
SVN Externals
Employ SVN Externals to avoid copy + paste programming for Common and Master code and content Data.
At the start of a project, there won't be any SVN Externals setup by default. Verify from Command prompt:
Alias | Folder |
WP7 | cd C:\SVN\SimpsonsTrivia\SimpsonsTrivia.WP7\SimpsonsTrivia.WP7 |
WIN | cd C:\SVN\SimpsonsTrivia\SimpsonsTrivia.WIN\SimpsonsTrivia.WIN |
AND | cd C:\SVN\SimpsonsTrivia\SimpsonsTrivia.AND\SimpsonsTrivia.AND |
IOS | cd C:\SVN\SimpsonsTrivia\SimpsonsTrivia.IOS\SimpsonsTrivia.IOS |
empty
SimpsonsTrivia.XNA
Scale game built content including all text file Data as shared across multiple thin clients via SVN Externals:
DATA
Path | C:\SVN\SimpsonsTrivia\SimpsonsTrivia.XNA\SimpsonsTrivia.XNA\SimpsonsTrivia.XNAContent\Data |
URL | H://svn/SimpsonsTrivia/SimpsonsTrivia.XNA/SimpsonsTrivia.XNA/SimpsonsTrivia.XNAContent/Data |
Launch Windows Explorer | Navigate to following [parent] folder:
Alias | ||
WP7 | Folder : C:\SVN\SimpsonsTrivia\SimpsonsTrivia.WP7\SimpsonsTrivia.WP7
Action : Right click "SimpsonsTrivia.WP7Content" folder |
|
WIN | Folder : C:\SVN\SimpsonsTrivia\SimpsonsTrivia.WIN\SimpsonsTrivia.WIN
Action : Right click "Content" folder |
|
AND | Folder : C:\SVN\SimpsonsTrivia\SimpsonsTrivia.AND\SimpsonsTrivia.AND\Assets
Action : Right click "Content" folder |
|
IOS | Folder : C:\SVN\SimpsonsTrivia\SimpsonsTrivia.IOS\SimpsonsTrivia.IOS
Action : Right click "Content" folder |
|
Tortoise SVN | Properties | New... | Externals
In popup window click New button:
Local path: | Data |
URL: | http://build/svn/SimpsonsTrivia/SimpsonsTrivia.XNA/SimpsonsTrivia.XNA/SimpsonsTrivia.XNAContent/Data |
Start | run | cmd. Type svn propget -R svn:externals
. - http://build/svn/SimpsonsTrivia/SimpsonsTrivia.XNA/SimpsonsTrivia.XNA/SimpsonsTrivia.XNAContent/Data
Windows Explorer | Navigate to [parent] folder as before. Tortoise SVN | Check for modifications | Commit
Finally, right click C:\SVN\SimpsonsTrivia | SVN Update. Data folder available to include in ALL clients.
SimpsonsTrivia.XNA.Library
Scale all Common game code and logic + Master engine code across multiple thin clients via SVN Externals:
COMMON
Path | C:\SVN\SimpsonsTrivia\SimpsonsTrivia.XNA\SimpsonsTrivia.XNA.Library\Common | Common game |
URL | H://svn/SimpsonsTrivia/SimpsonsTrivia.XNA/SimpsonsTrivia.XNA.Library/Common | code and logic. |
Launch Windows Explorer | Navigate to following [parent] folder:
Alias | ||
WP7 | Folder : C:\SVN\SimpsonsTrivia\SimpsonsTrivia.WP7\SimpsonsTrivia.WP7
Action : Right click "SimpsonsTrivia.WP7" folder |
|
WIN | Folder : C:\SVN\SimpsonsTrivia\SimpsonsTrivia.WIN
Action : Right click "SimpsonsTrivia.WIN" folder |
|
AND | Folder : C:\SVN\SimpsonsTrivia\SimpsonsTrivia.AND
Action : Right click "SimpsonsTrivia.AND" folder |
|
IOS | Folder : C:\SVN\SimpsonsTrivia\SimpsonsTrivia.IOS
Action : Right click "SimpsonsTrivia.IOS" folder |
|
Tortoise SVN | Properties | New... | Externals
In popup window click New button:
Local path: | Common |
URL: | http://build/svn/SimpsonsTrivia/SimpsonsTrivia.XNA/SimpsonsTrivia.XNA.Library/Common |
Start | run | cmd. Type svn propget -R svn:externals
. - http://build/svn/SimpsonsTrivia/SimpsonsTrivia.XNA/SimpsonsTrivia.XNA.Library/Common Common
Windows Explorer | Navigate to [parent] folder as before. Tortoise SVN | Check for modifications | Commit
Finally, right click C:\SVN\SimpsonsTrivia | SVN Update. Common folder available to include in ALL clients.
MASTER
Path | C:\SVN\SimpsonsTrivia\SimpsonsTrivia.XNA\SimpsonsTrivia.XNA.Library\Master | Master game |
URL | H://svn/SimpsonsTrivia/SimpsonsTrivia.XNA/SimpsonsTrivia.XNA.Library/Master | engine code. |
Launch Windows Explorer | Navigate to following [parent] folder:
Alias | ||
WP7 | Folder : C:\SVN\SimpsonsTrivia\SimpsonsTrivia.WP7\SimpsonsTrivia.WP7
Action : Right click "SimpsonsTrivia.WP7" folder |
|
WIN | Folder : C:\SVN\SimpsonsTrivia\SimpsonsTrivia.WIN
Action : Right click "SimpsonsTrivia.WIN" folder |
|
AND | Folder : C:\SVN\SimpsonsTrivia\SimpsonsTrivia.AND
Action : Right click "SimpsonsTrivia.AND" folder |
|
IOS | Folder : C:\SVN\SimpsonsTrivia\SimpsonsTrivia.IOS
Action : Right click "SimpsonsTrivia.IOS" folder |
|
Tortoise SVN | Properties | New... | Externals
In popup window click New button:
Local path: | Master |
URL: | http://build/svn/SimpsonsTrivia/SimpsonsTrivia.XNA/SimpsonsTrivia.XNA.Library/Master |
Start | run | cmd. Type svn propget -R svn:externals
. - http://build/svn/SimpsonsTrivia/SimpsonsTrivia.XNA/SimpsonsTrivia.XNA.Library/Master Master
Windows Explorer | Navigate to [parent] folder as before. Tortoise SVN | Check for modifications | Commit
Finally, right click C:\SVN\SimpsonsTrivia | SVN Update. Master folder available to include in ALL clients.
Summary
To summarize, there will most likely become a point where it is difficult / impossible to install XNA 4.0 plus required Visual Studio 2010 pre-requisite onto Windows PC. Especially if / when Windows 7 is deprecated.
Therefore, it seems sensible to upgrade to Windows 10 : transfer these skills to integrate MonoGame 3.6 on Visual Studio 2015 as new baseline. After this, Android and iOS ports can resume using Visual Studio 2017.
Consequently, the next posts will document just that; starting with Windows port then to Android and iOS J