Tribal Isle is a self-funded Sport-RPG prototype for the PSP we (Fresh3d) developped between 2006 and 2009.
How it all started
Sometimes, there are projects that are real gems but for some reason, they never see the light of day. To me, Tribal Isle is one of them.
After the development of Mountain Bike Adrenaline in 2006, we started porting our engine to the PSP (as well as the PS3). At the time, our company was expanding and we thought it might be a good idea to spend some of our available ressources on creating a new IP, one that would be our property.
So we first started to play with the idea of doing a cavern sports game, much like the Sone Ball game we had done on our arcade hardware in the 90s. We thought the PSP would be a perfect fit for an arena sport game because of its incredibly large 16/9 aspect ratio screen.
The PSP was such a wonderful little machine. The first of Sony handheld sported some impressive features, not too dissimilar from its livingroom relative, the PS2.
I did some early sketches for the games characters, but quickly I though my character concepts weren't good enough and we hired two character artists, JYL and Luc Foccroulle to work on more defined concepts. The guideline was this, to create tribes that would be the transposition in the caveman age of modern social groups, such as Rasta, Gothics, Metro...and so on. In each tribe there would be 4 class of characters, a slim and fit girl, a small and fat guy, a large and strong men, and a slim and fit boy.
We decided to focus on two tribes first, and provide more tribes as DLC. DLC was something really new a the time, and I thought it would be a nice fit for the game if designed with DLC in mind from the very start. I started working with internship students on designing two arenas for the game. One would be in a cave, home of the Maggots, the Gothics tribe, the other would be in a plain, home of the Mojitos, the Rasta tribe.
Above: Luc's concepts for the 'Mojitos', the rasta tribe
Left: Luc's concept for the Grassy Plain, home of the Mojitos
As the concept was evolving, we slowly moved away from the original and simple sport arena game that was Stone Ball, and started depicting a complete universe with a story and a large region that would be totally explorable. Christophe Bauvir helped me working on the design.
From a sport game, Tribal Isle was slowly transforming into a Sport RPG game, a unique genre that was unheard of, as far as I know. The ultimate idea was to replace traditionnal RPG combat phases with local cavemen sport events and challenges.
Luc worked on providing a couple concept arts for the arenas as well that turned out to be pretty identical in-game.
Two games in one
An other innovation was the game would entirely be playable twice.
The player would choose his tribe first, and then a completely different adventure would deploy depending on the chosen tribe. As we planned two tribes for the initial release, I wrote two different stories and sets of challenges and started working on dialogs for the two adventures.
I wrote two ambiant musics, and had planned to create two slightly modified versions of the world, with different sets of playable objects. For instance in the Rasta world, a bone lying on the ground would not be collectable, because it had no interest for the player, but in the Gothic world, the bone could be collected to become a weapon.
Right: Luc's concept for the Skull Cave, home of the gothic tribe, the Maggots
Based on the original concepts, we asked a few junior artists to work on character modeling and texturing. They did well on providing the basig shapes and textures but at some point I took over and did slight modeling and UVs modification, and a complete texture repaint on all characters.
I used Maya integrated 3d painter as UVs were highly optimized and textures were split into 128x128 textures for cache optimization and they couldn't be painted in Photoshop. That was before 3d coat obviously and I never went back to 2D painting since :)
Left: wip re-paint on the rasta girl. The yellow legs show the original texture.
Right: each 128x128 texture was reduced to 4bits using indexed color (palette)
Below: character modeling and texturing pipeline, from concept to final
Skinning and animation was going to be a challenge on the PSP, especially as we were targetting 60 fps with complex environments and up to 8 characters on screen.
We made a lot of R&D on character setup, rigging and animation, but at some point, Francois (rigging and animation) and Stephane (programming) came up with a light-weight solution that was both flexible and efficient. The rig would allow stretch and squash animation as well as facial expression. To lower the number of bones to a strict minimum, and avoid slow matrix hierarchy traversal we used bones translation a lot.
Facial expression was done through UVs animation over an expression sheet. Francois created a tool in Maya to quickly set keyframes to define expressions. When writing game dialogues, we could insert special control characters to trigger specific facial expressions.
During the RPG phase, the player would explore a large world. We had to develop streaming technologies for the PSP as the world would not fit as a single piece in memory. Whe main world was created in Maya and was about 50% complete when the game was put on halt.
It was made of unique geometry and tileable textures. As the PSP was not capable of addressing multiple textures in the same pass, I decided not to do any blending and create a texture tile set that included transition textures.
Textures were made cache friendly and were all 128x128 pixels and 4bits/pixels (16 color palette).
Except ground tiles that were made in Photoshop, all environment textures were painted inside Maya using the embeded 3d painting tool.
Right: About 50% of the exploration map was already in place when development stopped
Lighting was pre-computed with Mental Ray and baked into vertex color, a common technique at the time. The relatively high vertices density allowed for some nice low frequency direct lighting and light bounces.
I came up with various techniques to create a vibrant and detailed world on the limited hardware while keeping the frame rate at 60 fps.
Large static shadows for instances were built into the geometry by cutting and hand-painting vertex color, while small detail shadows used a library of small decal meshes that I placed at key places.
Left: Explicit shadows using generic decals
During the sport challenges phases, the game would switch to an arena view. We had 2 arenas planned for release and both of them were 100% complete. One was home to the Rasta tribe, a colorful plain at the heart of a lush valley. The other arena was home to the Ghotic tribe and was situated in a cave on the flank of an active volcano. The arenas were created with great help from Fabian Kaiser (Grassy Plain) and Ulrick Wery (Skull Cave).
Below: actual PSP screenshots from the game's two arenas
The fixed hardware pipeline of the PSP was completely supported by our engine and every parameter was exposed to Maya. That enabled me to create some very interesting effects such as a fake specular highlight over the entire environments or the much appreciated normal mapped environment reflected water effect. You can read a detailed explanation on how I set up the water effect on my blog here.
The flexibility and low-level access of the engine allowed for some really advanced effects for the PSP. Full screen AA was implemented by rendering the frame buffer at 512x384 pixels and then downsampling to the native 480x272 screen.
On top of that was temporal antialiasing by shifting the camera half a pixel in diagonal each other frame. The resampling was done using strips of polygons that had the exact same size as the cache. During the copy process, some effects could be applied such as vertex color, alpha for motion blur or even UV modifications to create distoritions.
For example the fire heat distortion was created by rendering a second set of particles in a small buffer, with each particle containing offset information in U and V directions. The frame buffer copy process would use that buffer as an offset modifier for UVs, hence creating the distortion during copy.
Right: Heat distortion was implemented using UV offsets during screen copy
I wrote four musics for the game. Some were abandonned while still being work in progress but I think they are in an audible state. My friend Francois Debue provided the guitar samples he played on his Gibson. Here are two of them:
Yann Robert: Engine / Gameplay programming
Stephane Menardais: Animation engine, Gameplay programming
Gregory Leblond: Engine programming
Franck Sauer: Art / Technical art / Game design / Music
Christophe Bauvir: Additionnal game design
Francois De Bue: Rigging / Animation
Luc Foccroulle: Concept art, character concepts
JYL (Jean-Yves Leclercq): Additional character concepts
Additional art: Fabian Kaiser, Ulrick Wery, Amaury Scheen, Brice Vandemoortele