Galaxy Control
High-immersion VR keystone project for the Udacity VR nanodegree.
The game was implemented with Unity 2017.4.18f1, SteamVR, and SteamAudio for the HTC Vive headset.
Other resources:
- Astar Pathfinding Project 4.2.4
- HeyBlairGames Planet Texture Generator
- Skybox Volume 2 (these got a lot of praise from the reviewers! :)

Galaxy Control videos
Videos produced for the submission of the project, as required by the project rubrik.
- Video URL for playthrough: https://youtu.be/FMo7jKglHck
- Video URL for project achievements: https://youtu.be/_LlcCLSPcw4
Pre-production ideas
Play starts from intro screen where the user can see help on the controls and selects the size of the galaxy to play in.
The user control the activities of planets in their domain, starting from the home world, initially closest to the player. The planets in play will have a pre-determined formation or are created procedurally, like in Civilization.
Resource management
The user controls production in their planets and directs the output ships to where he wants them. This part of the game is similar to another game I played earlier, which I am now unfortunately unable to find a link to.
Scope reduction: initially production happens automatically without user being able to affect it
Addional sliders for the user, setting for the whole galaxy or per planet:
- research -- over time the player's vehicles become more powerful, having much better odds at destroying the opponents ships
- this may be made to affect only new ships
- ships can be distinguished from each and from older ones by color changes, design, size
Planets can differ and have different resources, making some planets more valuable than others, including emergent properties, such as location in the midst of a factions planets with ready access all over.
Scope reduction: resources and research and advanced galaxy sliders will come at a later time
Ship fuel realism
Not all planets can send ships everywhere, the ships have a maximum distance they can travel. The ships will also not teleport, they need to move as they were physical ships. They cannot exceed maximum distance even when changing location "on their own".
Winning condition
When the other side(s) is wiped out, the game is won.
Adversarial AI
There is an AI, but it will probably be very basic for this project at this point, as I do not have much time (two weeks at most). The AI will basically maximize production of its ships.
Production values
The game should look beautiful (I'm planning of using Procedural Planets asset, which generates beautiful planets on the fly). Sound effects will be minimalistic, but being near the space battles should be indicated somehow (radio chatter? explosions?). Also being near different types of planets can have different audio: for example, sounds of sea for earth-like planets, crackling volcanoes for fire worlds, eerie ambient science fiction sound for gas giants.
Scoping reduction: planet audio left for later
Scoping reduction: will add procedural planets to next revision
Going too close to the planets will break immersion due to clipping etc, so teleport zones should be thought out.
Not observed to be a problem in user testing, left out for now
User interaction
Being near enough a planet could select it for being an originator for ships, as well as pop up any UI.
Scoping and user testing change: Planets will be selected explicitly with controller

Game AI
- are any of my planets (in control for a relatively long time) under attack?
- are any new planets under attack?
- (if aggressive: are there easy enemy planets nearby?)
- if have surplus ships, invade to an empty sector.
Scoping change: AI takes nearest unoccupied planets first and attacks nearest.
Achievement targets
Fundamentals
Scale
The player should feel like a giant moving between the planets and observing the fairly tiny ships in comparison.
Animation
Planets will rotate, moons will orbit, ships will move.
Lighting
This should be fairly easy to add. There should be both baked and realtime lighting in each scene.
Locomotion
Teleporting.
Physics
Cutscene? Adding some dynamic scenery to the scene should make this fairly simple to add, like an asteroid field. Destroyed ships might break up into pieces.
Orbital speed simulation. The higher the orbit, the slower the ship, and vice versa.
Video player
My wife would probably love the chance to showcase her acting ability as the falling leader of the opposing empire.
Empathy
Player can be made to empathize with the losing AI opponent (seen in the video).
Scope reduction: this particular video was not shot yet
Completeness
Gamification
This should come fairly naturally, as the player is playing a game to win the computer (or human) opponent.
Diegetic UI
The UI should be fairly natural and not require buttons or panels with lots of text to handle.
Scope reduction: because of time constraints, needed to settle to menu panels for now
Alternative storyline
When the player is about the achieve victory by attacking to the last world owned by the opponent, the user will be represented with a choice of going forward with the genocide or sparing the opponent and leaving them with the last world.
If the game had more than one opponent, diplomacy could be used to create alternatives, to ally or to attack.
Scope reduction: not done
AI
This is a requirement to allow playing the game in any real sense.
3D Modeling
I'm planning to include at least one custom built ship model.
Photogrammetry
This would be nice to try out, if I have time. Eclipse boardgame has ships I could use as a base for this for example -- although usage in a real game would not be ok because of copyrights, for this exercise it should not be a problem.
Scope reduction: dropped
Challenges
User testing
I strive to get good user testing coverage for the game and game mechanics early on.
Compute shader
It would be nice to implement one.
Scope reduction: dropped
Implementation
Pathfinding
Instead of rolling my own, I will use a free version of A* Pathfinding Project
Tenets of the AI
Attack planets near fleets first, then farther away. Does not care too much about opponent fleet strengths. Fairly stupid at this point.
Pathfinding works great with the A* library.
Audio requirements
In the project rubrik, the requirement for at least 3 spatial audio clips is indicated.
Following I'm planning to implement:
- planet selection (score reduction: not done)
- acknowledgement of fleet movement
- blaster fire
- ship destruction
- (video audio)
User testing
Daniela, 1st playable proto
User testing with the first playable prototype. There are practically no feedbacks to users actions, nor are there sounds or anything like that.


The interactions are incomplete and feedback is missing in places where it should be, but try to manage. You cannot do anything wrong.
Q: Describe the size of the place, what would you say your size was?
the plane feels 10 m aside, the balls are like large, like a cubic meter.
Q: What do you think you should do?
The cubes or planets probably are for something.
Q: Experiment with the controls and try to get your ships to move around to get a feel of the situation. Are you able to move around easily?
I can teleport in the blue plane by using the controls (was not instructed).
Q: Experiment with the controls and try to get your ships to move to an adjacent planet. Did you manage to do so?
Because there are no feedbacks, it was rather hard at first, but she got there in the end :) (idea: add a "wrist computer" with the directions)
Q: Was there anything in particular that you did not like about the experience or that stood out in the wrong way?
Planets could have names, the large planet felt somehow more important.
The game area feels very small and confined, we're in space the should be more room to maneuver!
Q: Was there anything that you especially liked?
The space background is very nice! (Sigh)
Actions:
- starting screen with selection of play area sizes
- some instructions for the ui (done)
- a hand-mounted display for the user to get help and see the videos (done)
- allow dismissing video as well (done)
- show possible directions when highlighting a planet with more translucent arrows
- player should have more control over how many ships leave (makes it easier to win, as well)
- name of the planet and planet details, like production speed can be shown in the hand-mounted display (HaMD)
- end screen with number of planets, time spent, max enemy planets, max own ships, max enemy ships
- high score list? (time used in scenario)
- perhaps allow transfer of individual ships?
User testing, session 2


Janne
Trigger controller was found easily.
Movie during the scene distracts from the game start.
Video could use transcribing. Video could also be a separate a screen, maybe run it after starting the game in the intro scene.
Q: Describe the size of the place, what would you say your size was?
The balls are not surely detectible as planets, there is no visible terrain. Some terrain around the planets would help a lot.
Q: What do you think you should do?
I do not know which side I am playing at.
Teleporting controls found.
Q: Experiment with the controls and try to get your ships to move around to get a feel of the situation. Are you able to move around easily?
Teleporting came naturally.
Q: Experiment with the controls and try to get your ships to move to an adjacent planet. Did you manage to do so?
Player couldn't move his ships and lost before managing to move ships to other planets.
Q: Was there anything in particular that you did not like about the experience or that stood out in the wrong way?
Feedback about ship movements would help.
Feedback from ship sending, and help in the sending of them; show how many ships are being sent and allow a confirmation.
Usually these days games direct more about what to do next, feedback about partial actions is important and commonplace in these days.
Q: Was there anything that you especially liked?
There is a very nice feeling of being in the space.
Has a feeling of a real VR game.
Sami
Movie during the scene distracts from the game start.
Trigger controller was found easily. Controller help was found easily.
Q: Describe the size of the place, what would you say your size was?
There are planets!
Q: What do you think you should do?
Blue team would more naturally be the player.
Q: Experiment with the controls and try to get your ships to move around to get a feel of the situation. Are you able to move around easily?
(yes after accidentally using it)
Q: Experiment with the controls and try to get your ships to move to an adjacent planet. Did you manage to do so?
Yes, after getting the instructions.
Q: Was there anything in particular that you did not like about the experience or that stood out in the wrong way?
Not enough feedback from the combat.
The fleets are hard to see which planets they are orbiting.
Glasses pressed a bit, but not too big a deal.
Not clear whether the movement directions were one-time or permanent.
if there were more planets within range of the origin planets, it would be great to see the ship range as a sphere.
Q: Was there anything that you especially liked?
Gloves were nice :) (steamvr builtins... :/)
Nice background (sigh :))
Actions:
- either move starting video to intro screen or pause game during the intro movie (done)
- make the selection of planets modal, so that first selected planet stays highlighted. (done)
- make activation beam and selection separate trigger actions for confirmation. (done)
- switch faction colors (also change player glove color) (done)
- add textures to planets (done)
- make the ships orbit closer to the planets (done)
One way to make the player side clear is to allow the player select the faction color in the start, which would make it explicit. Probably out of scope for now.
Jaani
Had problems using the grip selection, otherwise ok.
Future actions:
- try selection with toggling with just the ray. Unfortunately, no time to implement it yet.
- combat feedback needs work (no time so far :( )
- more realistic fleet movements
- more levels
- implement with procedural planets