Astral Tides

Astral Tides

Astral Tides is a game made in 10 weeks as a part time project for the 2016 edition of the Ubisoft Montreal Game Lab Competition. The objective of the contest was to create a game with the theme ‘Ocean’. Furthermore, we were required to have 2 systems and 3 mechanics that interact with each other, as well as physics, AI, checkpoints and at least 10 minutes of gameplay.

The game won Best Art Direction and the most nominations among all the games (6 out of 8 categories):

  • Best Prototype
  • Best Game Design
  • Best Quality of the "3Cs" (Camera, Control, Character)
  • Best User Experience
  • Best Creativity and Integration of the Theme
  • Best Art Direction

Astral Tides is a third-person contemplative adventure game in which you play as Qilak, the celestial guardian, who comes down to earth to retrieve stars fallen from constellations. In Qilak’s wolf shape, you have the ability to howl at the moon to control the water tides.

The particularity of the game is that everything (especially the water) is physics based, which creates interesting and emergent gameplay. The buoyancy is simulated by real water physics calculations in order to make the blocks float naturally, the currents apply lateral forces on the blocks and Qilak also uses forces when pushing/pulling them.


  • Unreal Engine 4
  • Visual Studio (C++)
  • Perforce

Features I implemented:

  • Water Physics
  • CCC (Camera, Character, Controls)
  • Push And Pull Mechanics
  • Game Loop
  • Level Streaming
  • Interactive Main Menu
  • HUD Integration
  • Build Automation

Water Physics

The biggest challenge I faced was undoubtedly the water physics. At the beginning, I thought we could fake the water physics to suit our needs - especially since this was supposed to be only a prototype - but I quickly realized having the game entirely physics based would contribute so much to the immersion, beauty, emergence and puzzle design of the game. This was especially a challenge since we had only 10 weeks (part-time) to make a playable prototype, and I had many other tasks to complete in addition to that system.

The first "harder" part was calculating the submerged volume on any cuboid, no matter its orientation. To make a long story short, I solved that problem by dividing the submerged polyhedron by a set of tetrahedrons, whose volumes are pretty simple to calculate with integrals. This gave us our first "buoyancy" prototype, but it was far from perfect since we were adding the forces at the center of gravity of the whole cuboid instead of the center of the submerged section, which created no buoyancy torque. Therefore, our slanted cuboids would remain slanted, which is not what we wanted.

The second part of this problem was finding the center of buoyancy of that same cuboid, no matter its orientation, in order to simulate the real world buoyancy. Since the first part of the problem had already been solved, this was a relatively easy task because all we had to do was finding the individual centers of gravity of our tetrahedrons and add them together to get the center of gravity of the submerged polyhedron.

Nevertheless, this was a nice challenge to undertake in the scope of that competition, and the comments we received about the tides system were all very positive.