Home Artists Posts Import Register

Content

Recently I’ve been working on my new cliff system. I’ve vaguely introduced the concept before in the Iridium Planet post, but there’s been a lot of progress since then.

The new system uses cliffs that are made of many small parts that fit together so I’m calling the parts “Clifflets”.

Vanilla cliffs are a special built-in system where the cliffs are always placed in lines. There’s very little control over the system so you can’t control where the gaps are, which areas have longer or shorter cliffs, and cliff lines can’t touch or overlap so they are always just lines. The whole system is very blocky, locked to a 4x4 grid so it can’t line up properly with other terrain features.

My new system uses many small objects that are on a 1x1 grid and are designed to overlap. Behind the scenes they’re closer to rocks, which among other things means I’m not constrained to thin lines and have much more control over their placement. The smaller part size means that the landscape formations can be much more fluid. Additionally, because parts are designed to overlap in any direction, there’s no problem having cliffs stacked on top of each other to make much taller cliffs.

For game mechanics, the current plan is for them to be destroyed with cliff explosives in most cases. The exception is the situation where the cliff is on some special tileset where you can’t build anyway, in which case the cliffs can’t be destroyed because they are only aesthetic. I may need to have slightly different rules on different planets (maybe the rock is harder) but for now that’s the general plan.

Graphics were the big area of uncertainty for the plan to move forward. The first clifflet version shown in the Iridium Planet post was just using sliced up vanilla cliff graphics. This had a number of problems:

1. The cliffs are much brighter at the top and darker at the bottom so if clifflets are stacked the stack lines are very obvious.

2. The cliff top and bottom edge lines line up a lot, which also contributes to boxy-looking formations and “banding” when stacked.

3. Now for the biggest problem: South cliffs are 3-4 tiles tall, but north cliffs are only 1-ish tile tall.

The north cliffs are essentially represented by a few exposed rocks at the top ridge and a shadow to the north to suggest height. My clifflets are roughly a 2-3 tile box regardless of orientation, so for the first tests with vanilla graphics I just duplicated the graphic to fill the space. This didn’t look good. You can see in the Iridium Planet picture, all of the north-facing cliffs basically just look like areas of gravel. At the time this was good enough because I was mainly concerned about trying out planet ideas, but I was still very aware that if I couldn't figure out a way to make north-facing graphics look reasonable then the whole concept wouldn’t work.

So what’s the problem?

The problem is the viewing angle. If the game was top-down then all the cliff directions would be the same size, but the Factorio view angle is 45 degrees. This means that cliffs facing south slope towards you and present a larger area, but cliffs facing north slope away from you and present a very thin area. For Vanilla cliffs it’s not so bad because the cliff is just a single line; it doesn’t matter if the line is thicker when facing south and thinner when facing north. For the clifflets though, the cliff is an area and clifflets need to group together to fill that area. This means that if I have a stack of cliffs facing north they can’t just be a series of disconnected lines, they need to fill a 2x2 area to blend together into a single larger cliff.

(I know at this point some people will say to just not have stacked cliffs facing north, but that’s not an option for some complicated reasons that I won’t go into.)

So the main constraint is to fill the required space in all directions, and the main hurdle to this is the fundamental nature of geometry. Pro tip: It’s usually not a good sign if you're fighting against maths.

Predictably, the new starting point is just to reuse the south version for the north but correct the lighting and curvature of features. This looked bad. Really bad, but it was a better starting point than the gravel-like stacked vanilla north graphics. After trying a lot of random things, I discovered the key is to make the north cliff face a lot more jagged and uneven than other directions. The irregularity presents a lot of opportunities for additional rock to be shown at different angles, padding out the space but still giving an overall impression of north-facing. It wasn’t that easy though. The design was very sensitive to the size of sub-rocks, the prominence of horizontal striation vs vertical cracks, the requirement of fake shadows, to many or too few highlights, and so on. Most evenings for about a month I’d paint a new layer of adjustments, gradually nudging, the result until I got to something workable. I can’t stress enough how finicky the process is and how just a few small changes can break the illusion of the direction it’s facing, break the illusion of height differences, or make it clash with all the other directions.

Finally I got the clifflets to where they are now in the main image for this post. This is a test for clifflets + tilesets in an arrangement for what will probably be part of the coal planets. 95% of the clifflets were placed by mapgen (using vanilla Nauvis elevation), everything else is hand-placed to explore new biome options.

At this point the clifflets are still hand-painted concept art, but they show that the way forward is possible. Later they will need 3d models and rendered graphics, but that is a challenge for another day.

Files

Comments

Mr.SmoothieHuman

they are looking pretty good already! im sure no matter how it comes out, people will love it :]

Gordon Lipford

Gorgeous. I had to do something like this for shorelines at one point in an isometric game I was working on and it was hell. This looks harder. :O

Andreas

This together with the official factorio vulcanus post: it'll be so awesome :D take your time!