Smoke and Sacrifice

Smoke and Sacrifice

View Stats:
GideonKain Sep 5, 2019 @ 11:22pm
What game engine powers S&S?
I found the graphics really wonderful. The 3D heightmap world with organically blending textures, the billboards sprites for trees and “props” which fade as you approach them from the rear.

I was wondering what is the underlying technology of S&S? Unreal Engine, Unity, Homegrown?
The aesthetic reminds me a little bit of techniques employed on Breath of Fire 3 for PS1.

Any information anyone has would be much appreciated.
< >
Showing 1-4 of 4 comments
If you open the installation directory, you'll see the Unity player.
GideonKain Sep 11, 2019 @ 5:50pm 
Originally posted by huminado:
If you open the installation directory, you'll see the Unity player.
Thanks! I own the game on Nintendo Switch, but this answers my question!
neil  [developer] Dec 14, 2019 @ 9:17am 
Hi GideonKain,

Sorry that it's been so very long since you posted!

Smoke & Sacrifice is indeed built on the Unity engine. The engine didn't provide much of what we need out of the box though, being a generic engine and Smoke and Sacrifice being quite a unique type of game.

So I built a lot of new technology to power S&S. The terrain itself is built from a 2k x 2k greyscale heightmap which covers the whole world. There's also a second map with colour which define the biome type of each heightmap pixel. Sub-types are also possible so you can have many different variations of swamp, for example.

As the player moves around, the heightmap is used to create 3D geometry in chunks, and the geometry behind you is removed. The geometry for the whole world is about 2 million polygons.

The enemies, obstacles, plants, bombs and so on are procedurally placed. The game uses perlin noise to generate organic looking patterns for objects, and our designers adjusted parameters to get the density and spread of objects that they liked. These use a fixed random seed, so that when you revisit an area, the objects generate in the same 'random' pattern again, so they appear in the same places they did before even though they were deleted and recreated.

For some objects, the player can have an effect on them. So you can kill creatures, pick plants etc. When the player interacts with an object, for example killing a creature, that event is stored in a database. When the player leaves and comes back, the random generation system generates the creature again as normal and the database is consulted to see if it was killed before. It if was, then the creature is removed. After a while, the data is pruned so the creature will then reappear. Because of this, you can, for example, kill all the creatures in an area and they will stay dead, even after leaving and returning, until the population recovers.

In additional to the random generation there are also custom laid out areas that a designer has created. This covers the drear camps, the recipe stones, world heart, boss battle areas etc. There are about 100 of these in the game. These are streamed in and out as you approach the area. The world database also stores any changes you may have made in these areas. So if you destroy all the manually placed barrels in the village, they stay gone even when the level is unloaded and then reloaded.

Creatures can fight and interact with other creatures over quite a wide distance. This means that sometimes you will come across a pile of resources for no apparent reason, because a creature has died there. Outside the player's view, creatures are processed less frequently, to allow for a simulation over a wide area without heavily taxing slower CPUs like on the Nintendo Switch. Even outside the simulated area creatures are simulated on a local population level.

Plants are actually simulated across the whole world. When you revisit an area, during the generation step the game looks at how long it was since you last saw a plant and makes it grown the correct amount based on how long it has been since you last saw it.

The organic blending textures between areas are a done using a custom shader that allows for a custom map that controls the blend, so that the shape of the blend between biomes can be controlled by the artist. So, for example, you can have rocks in one biome poke through the ground in another during the blend. It's quite hard to describe!

The mist effect is also a custom effect which uses the z-buffer, framebuffer distortion and a fluid simulation to make it look how it does.

There's also a ton of other tech to handle quest lines, a custom audio system, a cutscene editor, and loads of other things.

And it was all coded on my lonesome in 18 months!

I've been meaning to write a tech talk on all this for a while and have just realised that the above would be a good start on writing one, so thanks for the question!

We put a ton of work into the game and hope that player's enjoy it whether they know what's going on underneath or not!

Cheers,

- Neil




GideonKain Dec 24, 2019 @ 12:17am 


Originally posted by neil:
Hi GideonKain,

Sorry that it's been so very long since you posted!

Smoke & Sacrifice is indeed built on the Unity engine. The engine didn't provide much of what we need out of the box though, being a generic engine and Smoke and Sacrifice being quite a unique type of game.

So I built a lot of new technology to power S&S. The terrain itself is built from a 2k x 2k greyscale heightmap which covers the whole world. There's also a second map with colour which define the biome type of each heightmap pixel. Sub-types are also possible so you can have many different variations of swamp, for example.

As the player moves around, the heightmap is used to create 3D geometry in chunks, and the geometry behind you is removed. The geometry for the whole world is about 2 million polygons.

The enemies, obstacles, plants, bombs and so on are procedurally placed. The game uses perlin noise to generate organic looking patterns for objects, and our designers adjusted parameters to get the density and spread of objects that they liked. These use a fixed random seed, so that when you revisit an area, the objects generate in the same 'random' pattern again, so they appear in the same places they did before even though they were deleted and recreated.

For some objects, the player can have an effect on them. So you can kill creatures, pick plants etc. When the player interacts with an object, for example killing a creature, that event is stored in a database. When the player leaves and comes back, the random generation system generates the creature again as normal and the database is consulted to see if it was killed before. It if was, then the creature is removed. After a while, the data is pruned so the creature will then reappear. Because of this, you can, for example, kill all the creatures in an area and they will stay dead, even after leaving and returning, until the population recovers.

In additional to the random generation there are also custom laid out areas that a designer has created. This covers the drear camps, the recipe stones, world heart, boss battle areas etc. There are about 100 of these in the game. These are streamed in and out as you approach the area. The world database also stores any changes you may have made in these areas. So if you destroy all the manually placed barrels in the village, they stay gone even when the level is unloaded and then reloaded.

Creatures can fight and interact with other creatures over quite a wide distance. This means that sometimes you will come across a pile of resources for no apparent reason, because a creature has died there. Outside the player's view, creatures are processed less frequently, to allow for a simulation over a wide area without heavily taxing slower CPUs like on the Nintendo Switch. Even outside the simulated area creatures are simulated on a local population level.

Plants are actually simulated across the whole world. When you revisit an area, during the generation step the game looks at how long it was since you last saw a plant and makes it grown the correct amount based on how long it has been since you last saw it.

The organic blending textures between areas are a done using a custom shader that allows for a custom map that controls the blend, so that the shape of the blend between biomes can be controlled by the artist. So, for example, you can have rocks in one biome poke through the ground in another during the blend. It's quite hard to describe!

The mist effect is also a custom effect which uses the z-buffer, framebuffer distortion and a fluid simulation to make it look how it does.

There's also a ton of other tech to handle quest lines, a custom audio system, a cutscene editor, and loads of other things.

And it was all coded on my lonesome in 18 months!

I've been meaning to write a tech talk on all this for a while and have just realised that the above would be a good start on writing one, so thanks for the question!

We put a ton of work into the game and hope that player's enjoy it whether they know what's going on underneath or not!

Cheers,

- Neil

What an incredible reply!

Thank you so much, I loved the look and feel of S&S - the world was so organic and flowed together so nicely.

What I found most interesting was how seamless the transitions between biomes were because multiple textures faded into each other. I think I understand now how you did it based on your explanation.

The seperate database to store the "destroyed props" really shows because I noticed that items I dropped hours before would remain. I spent a lot of time planting dozens of glowferns around the wild child until the Switch started "chugging along" whenever I visited the area :D Eventually they disappeared, I assumed this was a failsafe put in for *just this sort* of eventuality.

The world you created had more object permenance than an Elder Scrolls game, which is no small feat.

I love the fact that the world NPCs are operating on your own homebrewed "A-life" system to steal a buzzword from the S.T.A.L.K.E.R. series.

I hope an S&S sequel or spiritual successor is in the works because I loved the framework that you've developed.
< >
Showing 1-4 of 4 comments
Per page: 1530 50