Development
Progress 70%

Brief: A team based project with another former student. Where we plan to create a publishable game in free time outside our day jobs, with room to develop upon the game with new features after release.


Software: UE4, Adobe Photoshop, Autodesk 3DS Max, Google Drive.


Platform: Steam,


Team Members:

• Me – Design and Programming.

 

 

Ideas and Planning

Through conversing over a Facebook group and we decided to create a google drive folder, where I created a editable google document where we can share and add to our ideas. We then entered a Skype call where we decided which Idea to go forward on based on key factors such as the scope the team against the complexity of the idea, and the time we need to allocate around are pre-existing jobs. 

We then decided on developing a mini-golf style game based on popular small scoped golf games like “Golf It!” and “Golf With Friends”. Due to the size of the team to make it a single-player game against AI with the possibility introduction of a server based online multiplayer game mode in the future.

We then decided on the use of gravity to help set it apart from the other mini-golf games on the platform to make it more appealing and seem less repetitive. Which led us to decide on the name Gravity Golf. While we continued to expand the idea I made a editable Design Document with titles for areas we will need to plan. I then decided I would create A io.graph for planning the gameplay loop along with listing the features the game will need.

 
Continuation of planning.

Over the next to week I began creating a io.graph planning the game-play loop, which helped me to realize we didn’t think about it before such-as dealing a issue with the possibility of a player putting their ball in another hole from a course their currently on. Along with with how to handle transitioning to the next hole if the player is struggling to reach the hole, with either a time limit or a max number of shots for each hole.

I then begun planning the Ui using Photoshop. Thinking about the screens and and functionality we will need for the menu system as well as the information the player will need while playing on the HUD. After I then started constructing google presentation slides with comments with ideas and explanations for each idea in the plans to show my teammate.

 
IO graph of game-play loop.
Google presentation slides of UI plans
Start of Development: Player Mechanics and Game-mode setup

After planning I then begun setting up a UE4 project, with a relevant folder structure for art assets and Blueprint objects with sub folder. I then setup a test scene with the world gravity turned off.

Once the test scene was setup I decided to creates Floating rock blueprint to test how the object would behave with a thruster based physics setup to create a slow rotating movement. After began creating and planning a Initialization chain using events and hollow functions for spawning and setting up future managers, ai and objects that will be created.

I then setup a basic golf ball pawn with a player controller, Where I made a mouse look and aim contral that is locked while the ball is fired by the click and pull back for power mouse click mechanic.

Single player game-mode screenshot.
Start of Development: Player Mechanics and Game-mode setup

Over the next weeks I continued work on the player mechanics by first creating a power gauge system, based on moving the mouse back and forth improving the range of force applied. I then created a scroll wheel zoom in and out function, with the ability to ability the cameras height so that the player can improve aiming.

I then decided to improve view-ability of the course by creating a manual spectator system, similar to the system used in the game Golf It. That allows the player to dispossess his/her pawn briefly and view around the map for if they are having difficulties navigating around the map.

 

Power gauge function screenshot.
Hole Manager and Hole system setup

After new years I returned to work on creating on making the Hole system, which teleport’s players to different courses around the map in order and manages when every-player has completed a hole.

For this I modified the test level to contain the player and to simulate our new level design Idea that will focus on having the player play in a indoors environment with multiple obstacles. First I created starting positions with ID’s around each room of the map which the manager controls via a array system along with array systems for the players and players that have completed the current hole. I then created a blueprint which on detection of the player in its radius reports to the manager via a dispatcher. With the manager also holding an array  for all holes as well.

After setting up the hole system I decided to work on the players HUD to test the hole manager transitioning the player to the next hole along with setting up the mini hole progression UI that will display the players opponents shots on the current hole they are on.

Next I plan to begin work on the leaderboard manager, which will work manage the players HUD, mini progress hole UI and leaderboard that will display between hole transitions to show the players performance and position on each hole.

Leadorboard Manager and widget setup

Over the course of the last fortnight I begun work in creating a dynamic leadorboard widget system, along with further developing the leadorboard manager. 

I first created a system where the leadorboard bound to a number of different dispatcher events in the Hole manager where the Ui would with the first being when the player finishes the hole, the score is then updated for the number of shots they took that hole and the leadorboard is shown briefly. 

I then worked on setting up a dynamic widget system where on initialization of the level the Game Mode blueprint will pass thought how many holes are in the level as well as how many players into the leadorboard manager. The leadornboard manger then creates the UI widgets and baseted and then creates a number of hole widgets and player widgets for each player which are then child populated into the parent widget.

Over the next three week I plan to setup AI and spawn, to test the leadorboard on correctly populating their correct number of players.

Widgets for leadorboard system screenshot. (update next time doing blog to show improvted names of widgets for better explanation)
Parent leadorboard UI widget screenshot. (update next time doing blog to show improvted names of widgets for better explanation)
Player holes widget populating the number of holes to displaly scores for screenshot code. (update next time doing blog to show improvted names of widgets for better explanation)
AI setup and Ledorboard testing

 

Over the last weeks I first worked on developing a in-world widget system for the single-player game mode, where I prototype a  number of opponents widget, with selection options that works through the game instance, so the players sections can be assessed once in any level the player has chosen to play in.

I then Prototype a basic behavioral tree with functionality which works with the Hole manager to know which hole to shoot towards along with a rotation task to aim at the desirted targets location and fire. I also created a custom wait task the picks a random float value with the maximum value being modifiable in the behavioral tree.

Before testing I first disable the AI’s and player collision by default could then be activated after the player has taken his/hers first shot. This also works with the hole transition functionality inside the Hole manager which calls dispacher message to tell ther golf ball to disable its collision after it completes each hole.

To improve work flow and testing of the leadorboard system and AI, I decided to create the pause menu to easily restart and go back to the menu.

Next week I plan to develop the AI further along with a perception system that detects if objects are blocking a straight path to its target with a improved rotation system.

Screenshot of AI behavioral tree Click to expand
AI Development and Leadorboard improvement

After prototyping the AI tree and working on the game-play loop. I then begun work on a perception system for the AI. Where I first started by reflecting on my planning where a noted it would need to review different scenarios in its balls position from the hole. Like if their is a objects blocking its path to the hole or maybe the course is within a labyrinth like corridor with turns that perception will need to judge.

To accomplish this I created another service that uses dot product to create a front field of view which if the hole is within this field of view by a certain length the ball will be shot straight towards the hole if not and their are objects blocking the ball’s path.

After working on the AI i then continued work on the breadboard system fixing a issue where the last player to enter the last hole’s score not being recorded and along with improving the arrangement and format of the text displayed.

 

Screenshot of Updated AI Tree
Project Problem Solving

After working on the AI, I then begun work on setting up the podium Ui for displaying each players performance such-as who one and came in what position based on their overall par score. 

While working on this I ran into a major issue with the engine/project, which was caused after tweaking the name of a sub folder within the UI folder within the project while it was open. This caused the engine to crash, and upon repopeing a number of Ui widget blueprints within the UI folder had missing references and missing nodes with a lot of work seemily lost in same. 

While researching similar issues on the UE4 forums, I was able to find auto saved and backup UASSET files within the projects saved folder. I then decided to delete the current version while the engine was closed and move these over which resolved the issues with the missing blueprint work.

I then decidted to redo all the Ui  widgets and work done in the current broken 1.8 version of the project and manually replicate the work in a older manually made backup version of the project (1.7). This took some time to accomplish but after everything worked successfully in the older project version.

  • then how thiese/this issues was rewsolvted with the backup scripts and autosave scripts and using a older version from my manual kept backup version of the the project
Screenshot of Updated AI Tree
Screenshot of Updated AI Tree
Screenshot of Updated AI Tree
Screenshot of backup scripts from saved backup folder used to replace and resolve the blueprint issues
Main Menu UI Development and 3D widget Development

Over the last weeks I continued development on the Main menu system by first setting up 3D in world widgets in the level for each different UI widget, which works on a FSM based using using a enumeration to switch between user widget components within the 3D widget object on initialization of each object.

I then focused development on the single-player menu 3D widget adding a canvas for the player to add and remove AI players via button press and a keyboard/Gamepad input. Along with adding a canvas that can be switched between that has additional game-play options.

I then completed work on the mini hole progress screen, by improving the layout of text and having each players score auto update each time they take a shot, while also resetting the progress screen for each player after they before they transition to a new hole.

 

Podium UI, Menu UI Development and menu save system.

Over the last two weeks I completed work on fully prototyping the Podium UI which is controlled by the game-mode and uses the player hole information passed through from the Hole manager to the game mode. Where I created a process using UE4’s map arrays to to sort and order each player based on their overall score score from each hole and and who finished before who encase two player accumulate the same score.

 

 

Screenshot Record player scores in GameMode
Screenshot of Gamemode manage game over logic order players blueprint
Screenshot of Gamemode manage game over function dealing with player that have duplicate scores.
Map Creation and Save system development

After finishing prototyping the game-play I moved on to working on the map creation system. I first setup game-mode loads in a Creation-factory manager which will be used for spawning all objects that can be selected by the player in the map creation UI menu.

I then setup a  inshilization manager which is spawned from the game-mode which with handle setting up information between diff rent game-play objects. I then created a new custom spectator pawn which receivers input from the already made single-player controller.

I then setup a 3D in-world widget components inside the spectating pawn for use with a map creation options widget and map creation spawner widget. I then setup functionality inside the player controller that allows the player to turn the Ui on and off and fly around the map area with mouse look rotation and arrow key movement.

 

 

Continuation of map creation development

After setting up the the player spectating pawn with the ability to view the creation Ui. I then continued prototyping inside the map creation widgets. By first creating a spawn categories enumerator for different types of spawn-able objects like Architecture, Props, Environmental and gamely objects that map has requirements to have before publishing, which will be conditions within the factory manager that will check whether their is at-least  one starting point tied to a finish hole object. For each category I then created a separate enumeration bp which will contain a list of spawn-able objects for that categories,  and make it easier to quickly setup the translation between the buttons in the widget and spawning functions in the factory manager blueprint.

 

Screenshot Record player scores in GameMode
Screenshot Record player scores in GameMode
Screenshot Record player scores in GameMode
Screenshot Record player scores in GameMode
Continuation of map creation UI Prototyping

After finishing prototyping the game-play I moved on to working on the map creation system. I first setup game-mode loads in a Creation-factory manager which will be used for spawning all objects that can be selected by the player in the map creation UI menu.

I then setup a  inshilization manager which is spawned from the game-mode which with handle setting up information between diff rent game-play objects. I then created a new custom spectator pawn which receivers input from the already made single-player controller.

I then setup a 3D in-world widget components inside the spectating pawn for use with a map creation options widget and map creation spawner widget. I then setup functionality inside the player controller that allows the player to turn the Ui on and off and fly around the map area with mouse look rotation and arrow key movement.

 

 

Screenshot Record player scores in GameMode
Screenshot of each UI panel change but and the individual buttons for spawning objects
map creation player object spawning and movement

After prototyping the spawning system I begun work on creating controls for the player to move and position different game objects once they have been spawned. I first developed a grid based system snapping the object to a certain amount of vector movement to each horizontal direction it will move in. i then modified the WASD movement of the pawn to switch on a Boolean to moving the current selected object.

I then created a camera follow function with the spectating pawn blueprint, which snaps to the object once spawned and follows the objects transform when the player moves the object throughout the scene. Through developing the follow system I noticed a number of issues which I  believe are due to collision which I will try to rectify over the coming weeks.

Map Creation Object movement developemnt

I continued work on the player ability to manipulate and 

-TALK ABOUT SLECTION THE OBJECT FOR EDITING / REPLACECMENT