Engine: Unity
Platform: PC
Team Size: 6
Development Duration: Jan 2021 - Ongoing
Role in Team: Lead Programmer, Technical Artist, Team Lead
Engine: Unity
Platform: PC
Team Size: 6
Development Duration: Jan 2021 - Ongoing
Role in Team: Lead Programmer, Technical Artist, Team Lead
Ameowzing Tales is a 3D action adventure platformer game with an emphasis on exploration and social simulation systems. The player takes control of Chonky, the main character for the game, on his journey to rescue his friend Rune Knight from the Mjurk. The game propels Chonky through multiple different realms over the course of the game where he has constant run-ins with the main villain of the game, and meets other companion characters that join him in his journey.
Ameowzing Tales is a commercial project currently under development by Reclaim Studio. The project initially started as a student project titled "Chonky", created for android. The project garnered enough attention with the university (UOW Malaysia KDU) that they urged us to continue developing it and to commercialize it.
Main menu showcasing the foliage, water, and butterfly shaders
First iteration of the game's opening sequence
I have 3 primary roles in the development of Ameowzing Tales:
The team lead, where I handled the vision and direction of the game, and task delegation.
The lead programmer, where I handled the high level designs of the game's systems, the architecture of the core game systems and how they all connect together. I work with the other programmers in fleshing out these designs and getting them implemented.
The technical artist, where I worked closely with the artist in identifying the art direction of the game, whether or not something can be achieved, and identifying the tools and workflows needed to achieve it. My role is to research then attempt a proof of concept of the technique/tool/workflow to see if it can achieve the required results. I also work on the VFX elements in the game, create the necessary shaders, and work on materials using Substance designer.
Prototype of the game's combat showcasing the ability system
The game uses a custom kinematic character controller for Chonky. The controller is capable of handling gravity, basic movement with correct collisions, and proper slope detection. All of this is done without using Unity's rigidbody component.
Chonky's ability system allows him to perform special moves that are based on the character's current state. This allows for contextual moves/abilities that can only be activated while Chonky is in a specific state and with the correct input, and allows for specific combos. The system uses a state machine pattern as its foundation. The system also gives the flexibility to add new abilities without having to modify existing abilities.
Ameowzing Tales is made up of large explorable levels called 'Realms'. Each realm can be broken down to multiple regions. Due to the large size of each Realm, a level streaming system is required in order to manage the loading/unloading of assets.
The level streaming system used in Ameowzing Tales allows for specific sections of the level to be loaded in the editor for easier editing. Inside the game, chunks of the level are loaded in/loaded out based on the player's distance to the area.
A showcase of the level streaming editor tool allowing specific sections of the level to be loaded in
Showcase of the the NPC displaying the correct dialogue, and dialogue options based on the game's current state
The game will feature multiple NPCs roaming the realms that players can run into. Each of these NPCs have their own unique dialogue depending on the current game state.
A system was developed to manage which line of dialogue should an NPC say at a given time depending on the current state of the game(narrative, level, player). The system manages the location the NPC should be at, what dialogue should be played when interacted it, what dialogue options are available for the player, etc.
One of my biggest task was in figuring out how should our foliage be done, what the workflow for that would look like, what sorts of shaders are needed, etc.
Ameowzing Tales initially had a completely different art direction, where the foliage was much thicker and noisier. For example, the old bushes used many quads covering a base mesh with a specific shape, and the normals of all the quads are then adjusted to conform to the normals of base mesh to ensure smoother lighting. A leaf texture is then applied to each quad. Depending on the leaf textures used, the bush can be used in any environment. A UV distortion shader is used to give the effect of the leafs rustling.
Alongside the bushes, which can be used as just bushes or used for the trees, other types of foliage such as flowers, grass were also used. Flowers were simply a flower texture set on a simple mesh made up of 3 quads, and used vertex animation through a shader to have it sway. The grass in the game is generated in the editor, using a grass painter tool. The painter tool defines the points where grass should be generated and then passes this data as a mesh to the shader. The shader then takes this data and generates the grass blades in the geometry shader.
Ameowzing Tales visual direction then shifted as the artists felt that the current visuals wasn't the best fit for the game. The new direction is more simplified, stylized, cartoony, and vibrant. During this phase, my main role was to figure out what the new workflow would be like in creating the levels (new workflow for terrain creation, textures), and the new workflow for the foliage (bushes, trees, etc), and also to create the materials in Substance Designer to be used in Substance Painter.
Showcase of the game's visual direction pre and post the visual update
Materials created for the foliage /terrain for the visual update
Showcase of the Bridge creator editor tool
One of the realms in the game requires a lot of bridges to connect multiple areas of the level together, each with different gap length, height differences, and occupy different spaces. If an artist were to create each bridge by hand, it would become a lot of work very quickly.
In order to simplify the process, a bridge creator editor tool was created. The tool is able to procedurally generate a bridge mesh based on a spline (that can be controlled and adjusted) and a bunch of other properties, such as number of planks, the dimensions of the planks, etc. The tool also generates a simplified mesh of the bridge to be used as the collision mesh. To tool also allows artist to insert their own unique mesh for the planks and post.
Rivers are a common feature for each realm, and due to their nature of needing to conform to the terrain, a simple river spline tool was created to quickly generate the mesh for the river and apply the river shader to it. The tool uses a bezier curve, allowing the user to move the control points to change the curvature of the river. The tool also allows the user to change the resolution and the width of the generated river mesh.
Showcase of the river editor tool
Part of my role as technical artist was to also research and implement ways to achieve various in game visual effects. Most of these effects required special shaders, meshes and textures. Blender was used to create the meshes, while Substance Designer was used to create the textures. Certain shaders were done using Unity's shader graph and others through Unity's shaderlab and cg/hlsl.