Legend Of the Outlaw Mage
A third-person 3D action adventure game where you play as a magical cowboy in the old west. Battle it out with various enemies using crazy and imaginative spells
Role
Generalist + UI Programmer
Technology
Unreal Engine
Team Size
19
(5 programmers)
Development Time
~6 months (540 hrs)
Contents
Roles and Responsibilities
-
Generalist: Throughout development I was responsible for a variety of features including gameplay, tools, game saving/loading and other miscellaneous tasks
- UI: Towards the latter half of development I became responsible for many UI elements including the development of the entire player inventory menu
Inventory Menu
We wanted the inventory menu to be simple to use and streamlined because the player would interact with it the most. Our initial design had multiple sub-menus which were later scrapped for simplicity and quality-of-life.
Challenges during development
-
How to convey which spells are regular spells and which spells are ultimate spells. We ended us using significantly different icons for the two as well as using a different border in the spell icons
-
How to scroll through spells using a controller and allowing easy navigation between equipped and inventory spells for swapping. We decided to use pages to solve this problem and treat all buttons on screen as navigable from the current button
Menu navigation and spell swapping
Inventory Menu snapshot
Event graph for inventory menu
Juicy Gameplay
Our pillars during development were that the game had to be really stylish and the player should feel really powerful. This lead to many features and mechanics being added to the game that made the game feel stylish and juicy.
Cinematic for Ultimate Spell and the "Perfect Dodge"
We wanted the moments when the player cast their ultimate spell and when they dodge an attack at the perfect time to feel cool and fun. For those moments, we added a cinematic zoom in/out effect.
Damage Numbers
As the game progressed, we wanted players to feel like they were getting stronger over time. To achieve this, we spawned numbers in the world that showed the amount of damage done and the numbers would increase as the spells became more powerful.
Cinematic camera movements
For dialogue interactions, instead of using a cut-scene, we thought it was look more stylish if the camera moved in the world and focused on points of interest. We implemented a system such that when the player triggered a dialogue event then the player camera itself would pan over to the point of interest.
Cinematic for ultimate spell
Cinematic for perfect dodge
Spell doing 50 damage
Spell doing 15 damage
Cinematic to highlight the campfire
Cinematic for the starting narrative
Mesh Generation Tool
Our development had only three level designers including the lead designer which hindered the speed at which we could create levels. We decided to create a mesh generating tool for the environment and speed up the level design process. The tool creates the mesh for the boundary of the play area using a spline as a reference.
Perlin Noise
We decided to use perlin noise in our mesh generation to create interesting and natural-looking walls. We would create rectangular meshes and join them together to create the boundary and then use noise to warp the mesh to a more canyon-like shape.
Mesh generation using a noise value of 500 (in-game value)
Mesh generation using a noise value of 2000
Function that generates the vertexes for the wall mesh
Function that displaces a vertex using perlin noise (written by the SD lead)
Retrospectives
What went well
-
We worked together as a team and successfully shipped a game on steam
-
The team culture was comfortable and everyone got to contribute to the game design
-
We re-used a lot of assets from the beginning of development and sped up our development time
-
The project was scoped accurately and adjusted according to time and resources
What went wrong
-
Initial lack of communication between teams led to mismatched conventions and caused problems towards the end
-
Controller-support for menus was left towards the end which consumed a lot of development time
What I learned
-
Regular playtests even in the initial stages of development helped iterate and improve the game and let everyone have a voice
-
Create a unified UI framework for basic items like buttons, images, etc early on
-
Take breaks. A daily break for 15 minutes can rejuvenate the team and increase productivity