Orbital Obliterators

EXPAND . FIGHT . CONQUER

Conducting Research

Conducting research is what helped me reach my major goals on time and without too much hassle and stress. The best thing about research is that you get to explore other peoples mishaps and errors whilst preventing them from happening to yourself. – Tom Day, 2015

For those that need reminding or those of whom who have just clicked onto this article, the contents below are relevant to the game “Orbital Obliterators“, and the process taken to make said game.


Introduction

Due to the massive nature of the project and its overall scope, its important to conduct research into what best to make by looking at implementation technologies & existing and similar products. This is a great way to find other people that have striven to do the same as you. Finding these products and people is important to shield yourself from making already well known mistakes and errors when it comes round to your implementation.

Implementation Technologies

Due to the scope of the project being so large it was thought best to choose an implementation technology that the developer was already relatively fluent at, this would save time and thus allow for the larger scope. With this in mind, the implementation technologies used had to fall under a primary criteria of being programmable in C#, using Microsoft Visual Studio (Microsoft, 2015). This created 3 possible candidates shown below.

Implementation Technology Support Comments
Windows Presentation Foundation (Microsoft, 2015) Supported under all Windows Operating systems Integrated with XAML to create a hands on visual development approach, with familiar to HTML/JavaScript approach to customization of user controls
Microsoft XNA (Microsoft, 2015) Support issues with Windows 8 RT and “Metro” System No longer being developed since January 2013 by Microsoft, and will slowly depreciate as new technologies emerge. Inclusion of “Game State” objects makes differentiating between different states of the game easy. Made for game creation.
Windows Forms (Microsoft, 2015) Maintenance mode support. Now in Maintenance mode, only bugs will be fixed, and no further development will occur. Although not an immediate hindrance, it puts into question future proofing of the development.

Support is a major issue with Microsoft XNA, as the project aims to be as future proofed as possible, as there is little point developing something that is not going to work for very long. XNA is built to make games with, which is a factor that must be considered against the other two technologies. Windows Forms is a simple implementation primarily designed to be used to create form based applications where as Windows Presentation Foundation is shown to incorporate more than just that. With Windows Forms being put into maintenance mode, and XNA not being supported so well on Windows 8+ platforms, it seems to be a justified reason to pick Windows Presentation Foundation as the implementation technology to be used in this project.

Saving States

It will be necessary for the game to be able to save states so that it can be loaded back up and continued from where the user had left off. This can most likely be achieved using an XML (World Wide Web Consortium (W3C), 2013) approach.

The Presentation Framework (Microsoft, 2015) has built in functionality that supports the creation, export & import of XML files, which is a contributing factor towards the choice to implement this technology. Alongside its compatibility, XML has a high level of code readability as well as relative ease of editing, allowing the potential manipulation of save states to achieve loaded states that would otherwise take hours to naturally generate via game play. Below is a conceptual demonstration is shown for how this may look.

<?xml version="1.0" encoding="utf-8"?>
<Save GameID="2015_5_1271416" Date="07/05/2015" Time="01:05">
  <GameSettings WorldOffScreen="False" CurrentTurn="3" TotalPlayers="1" Size="Medium_38x21" ObjectCount="7" NodeCount="80" CurrentPlayer="1" BarbarianLevel="2" BarbarianEnabled="True" BarbarianMoney="0">
    <AdvancedSettings AS_0="True" AS_1="True" />
  </GameSettings>
  <Ships>
    <Ship Type="Barbarian_Refuge" Owner="11">
      <Coordinates X="20" Y="21" />
      <Stats Life="100" Hull_Density="250" Capacity="500" FieldsPerGo="0" Sight="3" Offensive_Strength="500" Rank="3" Tier="0" Crit_Damage="50" />
    </Ship>
    <Ship Type="Reaper" Owner="1">
      <Coordinates X="6" Y="6" />
      <Stats Life="100" Hull_Density="250" Capacity="400" FieldsPerGo="4" Sight="3" Offensive_Strength="310" Rank="2" Tier="2" Crit_Damage="50" />
    </Ship>
  </Ships>
  <Wars>
    <War Duration="0">
      <Declarers Participant_0="2" />
      <Defendants Participant_0="1" />
    </War>
  </Wars>
  <Players>
    <Player Type="CityState" Player_Number="2" AI_ID="9" Playername="Dawnika" Money="7481">
      <HWCoordinates X="10" Y="8" />
      <PUI_1PPs />
      <Reputations>
        <R_0 ReputationPoints="0" Increment="0" RestingPoint="0">
          <CityStateOffenses />
        </R_0>
      </Reputations>
    </Player>
    <Player Type="CityState" Player_Number="3" AI_ID="7" Playername="The Últrehk Empire" Money="15764">
      <HWCoordinates X="18" Y="8" />
      <PUI_1PPs />
      <Reputations>
        <R_0 ReputationPoints="0" Increment="0" RestingPoint="0">
          <CityStateOffenses />
        </R_0>
      </Reputations>
    </Player>
  </Players>
  <Nodes>
    <Node Type="Home_World" Part="Single" PartCollection="351" Owner="1" Occupier="1" CurrentProduction="Reconnaissance" ProductionTurnsLeft="183" ProductionRate="183" ProductionProgress="2" TaxTurn="0" TaxInterval="0" RarietyBrush="#FF8A2BE2" RarietyDescription="Epic" IsOnScreen="True">
      <Coordinates X="1" Y="1" />
      <Position X="-1900" Y="-1050" />
      <MPosition X="-296" Y="-162" />
      <Stats Criticals="2.5" Defensive_Bonus="2.5" Discipline="0" Fleets="1" Initiative="5" Luck="5" Crit_Damage="50" Offensive_Bonus="0" Base_Offense="500" Base_Defense="500" Wealth="100" Salvagers="0" Local_Salvagers="0" Local_Discipline="0" Life="100" Points="5" Sight="2" />
      <Faiths />
      <PUIs PUI_0="Interplanetary_Radar" PUI_1="Adopt_Imperialism" PUI_2="Drill_Systems" PUI_3="Trade_Centres" PUI_4="Gene_Mutation" PUI_5="Unlock_Sentinel" PUI_6="Unlock_Reaper" />
    </Node>
    <Node Type="Space" Part="Single" PartCollection="351" Owner="1" Occupier="0" ProductionTurnsLeft="0" ProductionRate="0" ProductionProgress="0" TaxTurn="0" TaxInterval="0" RarietyBrush="#FF808080" RarietyDescription="" IsOnScreen="True">
      <Coordinates X="2" Y="1" />
      <Position X="-1800" Y="-1050" />
      <MPosition X="-280" Y="-162" />
      <Stats Criticals="0" Defensive_Bonus="5" Discipline="0" Fleets="0" Initiative="0" Luck="0" Crit_Damage="50" Offensive_Bonus="5" Base_Offense="300" Base_Defense="300" Wealth="0" Salvagers="0" Local_Salvagers="0" Local_Discipline="0" Life="100" Points="1" Sight="0" />
      <Faiths />
      <PUIs />
    </Node>
  </Nodes>
</Save>

XAML & XML

The Presentation Foundation (Microsoft, 2015) uses XAML (Microsoft, 2015) to graphically design user controls as well as dynamically edit them whilst the code is running. It is important to note however that it isn’t actually the XAML doing the work in the background. On compile, the program translates all of the XAML into C#, using automatically generated files.

XAML is extremely powerful in this way as it is truly a visual programming paradigm, every property edited in Visual Studio can be easily read and reviewed on the graphical layout designer. This makes the programming of the GUI much easier to keep track of, which further compliments the original choice to implement a WPF solution.

Most of the controls withing a WPF application make the use of the ‘x:Name’ property which assigns the control a name that can be hooked from the C# interaction logic. This method can be used throughout the project to allow dynamically changing objects and visual within the project.

As discussed in the previous section, XML (World Wide Web Consortium (W3C), 2013) was chosen to save the game state, this can be implemented using the XMLWriter & XMLReader libraries build into the .NET framework. Fortunately the inclusion of XAML in WPF means that by the time the development process reaches the stage that the save game state and XML generation logic will be needed, I’ll already be knowledgeable in the syntax of XML due to the similarities between XML and XAML.

GUI Considerations

Before the design process of the GUI can begin, a number of disciplines need to be adopted to ensure that no time is wasted in the project development cycle. The GUI design is a cornerstone to the project goals and cannot be rushed, therefore it’s important to take the time to consider relevant GUI design good practices before the design stage. For example when designed graphic menus the principles outlined by Brown & Cunningham are of great relevance in this project.

‘Be sure your graphic menu items are easily selectable by the system’s graphic devices’ (Brown & Cunningham, 1989)

This can be achieved using Fitts’ Law as outlined again by Brown & Cunningham:

 C + K log^2(D/S + 0.5)

‘Where D is the distance to the items location, S is the size of the object, and C and K are constants thus location time increases for larger movements or smaller targets; small objects can slow down the selection process considerably.’ (Brown & Cunningham, 1989)

The primary focus from this principle is that of using large buttons, making less strings of menu bars and making more use of ‘click to do’ functions rather than endless menu after menu. These considerations must be taken into account when designing the GUI to ensure that a game is created that does conflict with differing platforms such as touch tablet and desktop usage.

In Civilization V (2KGames Inc., 2011) there is actually a special launcher page which allows the user to choose between ‘Windows 8 touch optimized’ mode and normal, the differences between the two are purely the size and scale of the GUI buttons and objects to make it easier for a touch experience, and this is a possible component that could be included in this game.


Further Reading

Contained in the ePortfolio on this site are multiple articles outlining how this project was made and some of the research techniques and planning that went into the project as a whole. Below are a few honorable mentions:

Picture1 Project Planning

The critical part of a project by far is never the coding although we all want it to be. Planning a project with a good methodology is the key when it comes to success. Read More…

Picture3Carrying out a Study

Its important to look into what kind of game you’re really making… That way you can insure that you’re putting in the right level of cool when developing. Read More…

Picture5Game Statistics System

To keep a player entertained when creating a game that will intentionally last a long time, you need a robust system of content to keep them enthralled right up to the moment. Read More…

Picture2Inside the World Engine

The universe is a vast empty space of unimaginable possibility, this games most defining moment has to be its attempt to capture a little of that magic with the World Engine. Read More…

Picture6Creating the AI Decision System

To combat players not having any real friends they need someone to play against, the design and process to implement an AI decision system was the result of this problem. Read More…

Picture1332Building the Game Engine

Perhaps the most complex and challenging of the whole system, the main… system! The Game Engine forms the integral glue that holds and manages all the data. Read More…

<< Previous Article | Back | Next Article >>

References

2KGames Inc., 2011. Civilization V Manual. [Online]
Available at: http://www.2kgames.com/manual/civ5/civmanual_us.php
[Accessed 20 January 2015].

Brown, J. R. & Cunningham, S., 1989. Programming The User Interface Princples and Examples. In: Programming The User Interface Princples and Examples. New York: John Wiley & Sons, pp. 52-59.

Microsoft, 2015. Visual Studio | MSDN. [Online]
Available at: https://msdn.microsoft.com/en-us/vstudio/
[Accessed 21 January 2015].

Microsoft, 2015. Windows Forms. [Online]
Available at: https://msdn.microsoft.com/en-us/library/dd30h2yb(v=vs.110).aspx
[Accessed 21 January 2015].

Microsoft, 2015. Windows Presentation Foundation. [Online]
Available at: https://msdn.microsoft.com/en-us/library/ms754130(v=vs.110).aspx
[Accessed 21 January 2015].

Microsoft, 2015. XAML Syntax In Detail. [Online]
Available at: https://msdn.microsoft.com/en-us/library/ms788723%28v=vs.110%29.aspx
[Accessed 18 February 2015].

Microsoft, 2015. XNA Game Studio 4.0 Refresh. [Online]
Available at: https://msdn.microsoft.com/en-us/library/bb200104.aspx
[Accessed 21 January 2015].

World Wide Web Consortium (W3C), 2013. Extensible Markup Language (XML) 1.0 (Fifth Edition). [Online]
Available at: http://www.w3.org/TR/REC-xml/
[Accessed 12 February 2015].