Mathias FONTMARTY

Chameleon Indie Dev & Technical Artist

Here you can find a few games I've created. Some are commercial ones, some are old personal projects, some have playable demos. I've made everything on my own, except the sound design raw materials.

If you're curious about technical stuff, you might want to check out my dev blog or have a look at the tutorials

A Thief's Melody 3D cartoon adventure/stealth
Slide Multi animal racing
The Child Spirit Game jam runner
World of Ninjas Hardcore minimalist stealth
Fur Garden Coop for kids
Treasure hunters Multi dogfight
Arkanoïd Old classic remake
Ouranos Endless shoot-them-up

A Thief's Melody

Download & Links

A playable demo containing the whole chapter 1 is available on the official website.

Description

"A Thief's Melody" is my current game project. It's a 3D cartoon adventure/stealth game with a contemplative atmosphere, somewhere between "Zelda" and "Beyond Good and Evil", for Windows, Linux and MacOS. It was greenlit on Steam in May 2015. Currently, the game provides ~8h of gameplay on 5 chapters.

The 2015 trailer of the game. Graphics have been upgraded since then, but this gives an idea of the gameplay/world.

I've been working on this game since 2012, creating everything from A to Z. It's my biggest personal project. During the creation process, I worked on many features, a few of which are described here below.


A few screens from the game

Development

Development is made with Unity in C#. Some features went through many iterations and different stages of prototyping, test and integration. I worked on the following:

Here below I list a few technical points of the development.

Vegetation

I wrote many shaders during this project, and many went through several evolutions (optimisation, upgrade, ...). A shader on which I spent quite some time is the vegetation shader, which features the following:


The vegetation shader used for palm tree and grass renderings.

Terrain with procedural mapping

The texture mapping of complex terrains (with holes, arches, tunnels, ...) can quickly become difficult to set up, even more when the geometry is modified on each gameplay iteration. That's why I set up a shader handling the texture mapping with this kind of terrain, providing enough parameters to keep some artistic control on the final rendering:


An example of an automatically textured terrain with complex geometry

Semi procedural foam

The world of the game is a huge ocean, and I wanted to easily author seashores even if the islands went through many iterations. So I set up a semi procedural foam approach to avoid having to handle hand made UV mapping each time. See the corresponding tutorial for technical details.


Semi procedural foam in action.

Level editor

For the level creation, I chose to use Blender over Unity. Blender is not really a level editor, but it offers the direct modelling and texturing of environments and objects. Furthermore, it's very efficient for level prototyping. Then, I had to develop a tool to convert Blender files into levels/scenes in Unity. I tackled various problems during the import:


A level created in Blender and the same level imported/converted in Unity.

The level editor also includes a detail generator system (eg for grass, leaves, rocks...). It uses vertex color in specific meshes to generate prefabs, adds variations to them (size, rotation, normals, ...), automatically snaps them on underneath surfaces, and batches everything for performance. See the corresponding tutorial for technical details.

Artwork

Every environment, character and object in the game is modeled in Blender. The texture in hand-painted in Krita, GIMP, Inkscape or Blender. I chose a naive, cartoon, and colored art-direction style.


A few examples of 3D models and hand-painted textures.
Creation of an explosive plant with Blender & Krita.
Creation of a wooden crate with Blender & Krita.

Animation

Key-frame animation

Character and object animations are made in Blender. The main character currently has 40 animations, and enemies have 20. I use a classical method with key frames. The biggest difficulty is to create loopable animations, with continuity in position, orientation, and their respective derivatives. For the complex animations of characters and animals, I used references.


Rigging of an eagle and animation of the main character.

Procedural animation

Boss animations are partly made in Blender and partly procedural. Indeed, most of the bosses are huge and their bone hierarchy (dragon spine, tentacles, fists/arms) often aim at the character. Thus, their positions have to be modified in real time to adapt to the avatar position. Some movements are built by dynamically mixing several parametric equations to create some kind of movement variety.


Bosses with procedural animation.

Optimization

As the project is advancing, each level contains more and more objects, and the game starts to lag. Hence, I had to make a few optimization passes, namely:

Sounds & Musics

The sound design is made of free sounds that I mix together and modify with a few classical processing effects (normalisation, equalisation, fading, pitch, ...).

For the musics, I used 2 DAW MIDI softwares: LMMS (Linux Multi Media Studio) and Ardour. I mixed soundfonts, synthesizers, and virtual instruments via VST plugins. I learned drums when I was younger so I understood rhythm creation quite quickly, but I had a harder time with music theory, harmony, ...


Creation of a song in Linux Multi Media Studio.


A (work in progress) boss theme.

Slide

Download & Links

 

You can download the demo for free on Itch.io.

You can also check the official website.

Description

Slide is my first commercial project. It's a local multi player racing game with cute animals. The game was born as a small mini game for "A Thief's Melody", but it grew quite well and I decided to make it a spin-off standalone. My goal with this project was to create a "small game" that I could finish and sell within 1 year. So I could finally gain experience in marketing and business.


The 2020 trailer of the game.


A few screens from the game.

Development

The game is made with Unity in C#. I used many assets I already had from "A Thief's Melody", especially textures, but I also created a few original ones.

AI

One of the most challenging part was handling the AI: indeed, I wanted 3D tracks with looping and upside down segments, shortcuts, wide open areas and tunnels. The AI is based on a steering behaviour around a precomputed path. The path is authored by hand, and embeds hints about boost zones, shortcuts branching, and track width. Each AI has a different skill level and might react to or ignore the different hints.
I also wanted to have fair-playing AI (ie no cheated acceleration to get back to the player). So I authored the "perfect" precomputed path very carefully, in order for the AI to be very strong. Then I degraded its behaviour based on the player ranking, difficulty, randomness, ...


A debug view of the track logical representation.

Ranking

The ranking computation was also a tough task. It relies on ordered mandatory checkpoints to pass of course, but also on some smart/distorted reprojection of each player position on the canonical path. On top of that, I must also take into account shortcuts by having some kind of normalized segment lengths to make significant comparisons for ranking.

Sound

A big problem to solve in local multiplayer splitscreen games, is the sound management.
Indeed, because there are many cameras, we hear sounds from many places at the same time. Then, how to handle 3D sounds when one camera is on one side of an audio source, and another one is on the other side? This problem is quite complex to solve perfectly, and I was limited by the Unity framework that accepts only one audio listener. So I chose to make all sounds pure 2D. However, I added a fading system depending on the distance to the nearest camera to suggest some 3D happening. And in solo mode, I coded an automatic panning system depending on the world positions of the sound sources and the camera orientation. This mimics real 3D sounds and that's OK for this little project.

Treasure hunters

Description

Treasure Hunters is a multiplayer 3D cartoon dog fight game.


A few screens from the game.

Development

The game is made with Unity in C#. I wanted to create a colorful plane game, with some kind of "Porco Rosso" vibes. The graphics are placeholders here, I really focused on multi player inputs with this project. Just like my other projects, I wanted to convey some freedom feeling, that's why I chose to have "loopable" arenas where there is no edge (if you get away, then you actually go back to the other side of the map). I had to use some rendering tricks to display many tiles/copies of the scene around the player without actually duplicating the geometry.

At the moment, this prototype is playable and the core gameplay seems to work well, but it's still very basic. I plan to polish it more.

AI

The AI is coded from scratch. It's based on a 3D steering behavior coupled with local obstacle avoidance. I also added some pseudo 3D navmesh to have some kind of logical environment representation (to take into account tunnels for example). I improved the basic aiming by introducing player movement anticipation so that the AI won't shoot at the player, but at the position where the player should be when the bullet hits him/her. That made the game quite unplayable... So I added a bit of randomness to the AI behavior to make them more acceptable.

Network

At some point, I wanted people to be able to play with their phone or tablet if there weren't enough gamepads available, so I added a network layer. It was quite functional, but a bit laggy. I didn't implement any of the usual lag compensation and movement prediction tricks, but I guess I should do in a near future...

World of Ninjas

Download

Info

World of Ninjas is a hardcore stealth game that I created in 2 weeks, when I was tired of working on "A Thief Melody". In each level, your goal is to get 1 or more swords and get out in one piece. All environments can be destroyed, and guards are very reactive.

The game is made with Unity in C# and allowed me to work on 2 main points:


A few screens from the game.

Level editor

The game has 10 levels, but anyone can add some with Paint or any simple painting program. Indeed, every level is saved as a PNG file with a precise color code for each gameplay element.


Simple level map (left) and the corresponding generated level (right)

The Child Spirit

Download

       

Description

The Child Spirit is a game I created in 25 hours for the Ludum Dare, a video game creation contest with a very short development time. The theme was "Growing, two buttons control". Here, you play as a fox gathering forest animals to make the Great Spirit come back.

The game is made with Unity in C# and I wanted to work mainly on the atmosphere, despite the very short time available.


A few pictures from the game.

Fur garden

Description

Fur garden is a super simple game that I initially made to play with my daughter (aged 4). I wanted super simple controls (only directions), and the possibility to play solo or in co-op with cute animals (these are always popular amongst kids).


A few pictures from the game.

Development

Fur Garden is developed in C# with Unity. Level design is done in Blender.

Arkanoïd

Download & Links

 

You can download the demo for free on the official Itch.io page.

Description

Here is one of my first "complete" games: the very classical Arkanoid! It's a simple block breaker. I tried to copy the 10 first levels of the original one (from memory... I played it on MO5 25 years ago! (Yes, I was already a nerd at 8...). I first coded it in highschool in 1999 using Delphi & DirectX. Then, I reworked on it later switching to C++ and OpenGL. I made the graphics in 3DS Max and GIMP at that time.


Some screens from the game.

Like for "World of Ninjas", levels can be added or modified because they are stored as simple Bitmaps files.


Bitmap level (left) and in game level (right).

Ouranos

Download

 

For the install, you have to download and unzip the compressed ZIP file. For windows, just launch "ouranos.exe" and for linux, "ouranos". You may have to install GLUT on linux.

Description

Ouranos is a very classical shoot-them-up. It's endless, so you can play as long as you want. It's quite an old project, I started it in 2001. For the technical part, like Arkanoïd, it was started with Delphi/DirectX, then switched to C++/OpenGL and GLUT. I made the graphics with 3DStudio at that time.


Some screens from the game.