What I've done
-
Gameplay programming - Entire game
-
Management - Production organisation & Task tracking
-
Game design - Action phase macro design
-
Sound - SFX & Musics

What I've learned
-
Game architecture
-
Make a game on all aspect of Unity
-
Mobile game optimization
-
Tool creations
-
GitHub use for Unity
-
Handling stress about work pressure

Description
Crab'Maga is a mobile game where you manage your crab's army. Your goal is to reconquere the beach occupied by a hord of hermit crabs.
Each crab have his own behaviour, therefore its own weaknesses and strengths.
You have to use the right crabs to fight against your enemy.
We were 5 students to work on this project which lasted 5 months.
GAME ART
Lead GA & character modeling : Louise Akiko Poullain
Concept art : Léon Leclerc
3D & UI : Anaïs Lachi
GAME DESIGN
System, GD & Economics : Simon Goldgrab
GAME PROG
Gameplay & system : Quentin Roussel

Challenges
For this project we had three major challenges:
- I was the only programmer and was working on my first mobile game.
- Our group was made of 1 game designer, 3 artists and 1 programmer, therefore we didn't have an important production force.
- To be more efficient, I had to made our project more accessible to our game designer cause he wasn't confortable with Unity.

At the beginning of the production, we had to find strong solutions to face those challenges.
The solution : SCRIPTABLE OBJECTS !
There are two tools which helped us to develop Crab'Maga:
- This conference showing how to use scriptable objects other than stock of datas
> https://www.youtube.com/watch?v=raQ3iHhE_Kk
- And a user friendly tool named 'Unity Atom' to work with scriptable objects


How to make our units as modulary as possible ?
At first, I defined a useful interface to define my behaviour, here : IPassifBehaviour.

A scriptable object will implement this interface. I developed the behaviour in this. Here, it's the BasePassifEffect class which implements IPassifBehaviour.

In this way, every object can easily receive a new behaviour by reference. It works like a component system but it's more modulable and easy to use it in our scripts.
The Entity object will implement IPassifBehaviour by reference.



How the game designer can create easely a new Unit ?

Our Units are simply built, based on the Entity class which has useful gameplay function. This class can contain behaviours, controllers, and call some game events at any given moment in the game.
Units are a group of Entity and inherit of Entity. This way, Units can have a general behaviour and each Entity of an Unit have their own behaviour.
Each group is built with a scriptable object in input, thus creating a new scriptable object and defining new behaviours, allowing to create a new variation of a crab.
Only the creation of behaviour and balancing took time during the production.

An easy access to data for balancing
Each tweakable variable and behaviours are stocked in a Dictionary with an enum as key.


This structure has some defaults and some qualities:
Each behaviour needs implement an interface or abstract method to constrain a common structure between all behaviours.
It's easy to use and understand, very modulary and friendly for debugging.

Quick level creation with scriptable objects

During this production, we had to test and iterate quickly on each level. We needed to prototype quickly a new level without creating new scenes.
Each level was initialized with data contained in scriptable objects. Thus, we could easily pass data between scenes, which was useful to save quickly a data like scoring.
The game designer was independant to iterate on the level design quickly.

Best answer to attack is counter attack !

For the game I had to develop an AI for the enemies. Unfortunately, the end of production arriving quickly I had to develop an AI system as fast as possible.
My design proposition was to define AI rules tested during some moment of the action phase or during some action of the player.
Each level is composed of three IA Rules.
For better appreciation of the rules balancing, each rule would change its "ratio" value according to the player win or loss. It defines the difficulty of this rule according to the others rules associated with the level.