[2] Hexus Nexus - Serious Games Project
In the Serious Games module as part of my degree in my final year of University, I was tasked with creating a Serious Game with a focus of ‘Entrepreneurship Education’. My aim was to focus on the Teamworking sub-competency, to create a game where team members worked together to beat a scenario. In my attempt, I was able to create a 4-player Unity prototype that had generated scenarios based on a seed and developed my own localisation method for making the game support multiple languages.
Game Description
I took inspiration from games that featured co-op puzzles such as the mobile title ‘Spaceteam’ and from previous experiences had, including an instance in Gears of War 2 where two players would navigate through a Research Facility, needing to disable turrets to enable the other place to proceed. Hexus Nexus was structured as a 4-player co-op who would each play across 4 separate devices. Primarily this would be a desktop computer but in later testing, the game was also playable on Android. Each would complete a challenge, where all four answers would unlock a new round - with a total of 4 rounds. Beating all the rounds would complete the game. The game features no aspect of an individual being able to be ‘better’ than the rest or be able to race ahead, as all sessions must complete their challenge to proceed, or all fail. This would encourage team members to assist each other to ensure victory. I was able to drive this by implementing verification steps that would require all players to be at the same stage before all would be able to proceed. This was done by:
Having the answer to the player’s question requiring another answer/number from another player
Limited attempts to prevent one player brute-forcing potential answers to gain an advantage and circumvent the purpose of the game
A timer that would prevent a player starting too soon due to their session finishing earlier - as one player failing prevents the remainder from proceeding
Screenshots of the game better illustrating the points above are found at the end of the post.
Unity And Game Mechanics
I created the game in Unity. Each player would run a session simultaneously with the other players and be connected not with networking, but a code that would generate a unique game and run on a timer. I made this decision as the environment that the game would be played in, such as a school or college, might not permit the linking between computers. The gameplay was entirely user-interface based, an approach that would be kinder on the sort of hardware you would find in such environments. Using Mouse and Keyboard as an input as opposed to a gamepad would also be a benefit in this environment due to their abundance and familiarity with the target audience.
Game Generation
Using a 6 number integer, generated at random by Player 1 and inputted by players 2, 3 and 4 (thus preventing a game starting due to P1 needing to give the number), I was able to generate each scenario based on a seed returned by inputting the generated number into Unity’s Random system.
UnityEngine.Random.InitState(GameNumber); SeedNumber = UnityEngine.Random.value; SeedWholeNumber = ((int)(SeedNumber * 10000000)).ToString(); for (int i = SeedWholeNumber.Length; SeedWholeNumber.Length < 8; i++) { SeedWholeNumber += "0"; }
Inputting the number into ‘UnityEngine.Random.InitState’ will generate the same subsequent numbers each and every time - allowing games to sync without networking. With this, I was able to generate verification keys and answers based on the given result, and take parts of the number and add/subtract to give different potential answers, further generating a random game for the players. With this in mind, I made the generated number by Player 1 6 numbers to prevent the player from getting the same game. There were also plans to have a list of saved numbers from games already played to prevent games on numbers generated to be played in their entirety.
Localisation
The project also had an added focus (should anyone taking the module have dared to attempt it) of implementing a system of localisation. In my attempt to incorporate the feature, I found that, at the time, I was not able to find an already existing method that would allow for seamless additions of new languages at run-time and in the future. This would have meant that at the conclusion of any development, the game would have been locked to any languages the game had. As such, I looked to develop my own method that would allow for adding extra languages to the game in the future without needing the source code or re-building the game.
The first challenge was being able to have the file outside of Unity. With the .csv file compiled with the game, it makes it unchangeable. Preventing further languages from being added without rebuilding the game. As such, the game would be built and the created .csv file would be placed within the directory of the game to be read on launch. This, therefore, allowed the file to be changed without recompiling the game.
The second challenge faced was converting the .csv file into a usable format in-game. This was done by inputting the CSV file into a string array, then taking the chosen language and putting it into a List. From there, I would take each indexed item and place it onto the text objects in-game. Should the player chose another language, the list would be remade and the objects re-populated.
Future Potential
Whereupon the completion of this module earlier in my final year, I was able to allocate time to my other coursework pieces. Were I to return to Hexus Nexus and improve it, I would do the following:
Increase the number of rounds the players will play. This including designing other types of challenges for the players to complete.
Add the options to play with 2 or 3 players as opposed to just 4. Increasing the scenarios the game could be utilised.
Implement the options to change the degree of difficulty to allow players of different ages to be able to play.
Game Screenshots
Below I have added screenshots of the waves and the final (statistics) screen of Hexus Nexus: