Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

 
Advanced search

1347361 Posts in 61882 Topics- by 53530 Members - Latest Member: KAJed

September 19, 2018, 07:40:48 AM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsHexagon Falls - A puzzle game about water, erosion, and growth
Pages: [1] 2
Print
Author Topic: Hexagon Falls - A puzzle game about water, erosion, and growth  (Read 2934 times)
SparseGameDev
Level 0
**



View Profile WWW
« on: January 24, 2018, 01:49:53 PM »

Hexagon Falls is an isometric tile-based puzzle game about erosion.

The objective is to spread vegetation to sunlit tiles so that flowers can grow. This is done by eroding tiles that are next to water, directing the water so that the vegetation can spread around it.

The game is early in development, but most of the base functionality is there (basic water physics, vegetation spreading, level progression). I've created a handful of levels so far that show the potential of complexity of puzzles. I am trying to design the game such that no on-screen direction is required and the player can experiment and figure out the mechanics on their own; I've done a bit of player testing and so far this seems to be working well.





I have a few ideas for different mechanics and tile types that I will introduce gradually throughout the game, but for the most part I am trying to keep things simple; explore a small number of mechanics deeply and build on the player's previously gained knowledge.

I'm not totally set on the name yet, so I'm sort of considering "Hexagon Falls" to be a working title for now.

This is a solo project, and I'm starting this devlog in order to share my work with the community and to keep myself motivated. I will try to update it at least once a week.
« Last Edit: July 10, 2018, 12:32:44 PM by SparseGameDev » Logged

sidbarnhoorn
Level 2
**


View Profile WWW
« Reply #1 on: January 25, 2018, 06:12:54 AM »

Looks interesting! I like the visuals, colors, lighting. Good luck with the development! Smiley
Logged

Siddhartha Barnhoorn
--------------------
Award winning composer

Composed music for the games Antichamber, Out There, The Stanley Parable, Planet Alpha...

Website:
http://www.sidbarnhoorn.com
Bandcamp:
https://siddharthabarnhoorn.bandcamp.com
Twitter:
https://twitter.com/SidBarnhoorn
Schmolt
Level 0
*



View Profile
« Reply #2 on: January 25, 2018, 06:17:37 AM »

Love the look of this!
Logged
Mochnant
Level 0
**



View Profile
« Reply #3 on: January 25, 2018, 08:11:20 AM »

I like the look as well, and the gameplay sounds interesting.
Logged
SparseGameDev
Level 0
**



View Profile WWW
« Reply #4 on: February 13, 2018, 07:45:46 AM »

Thanks! Glad to hear you all like the look of the game. Originally the flat shaded look was just to get something working quickly, but after tweaking the line rendering and adding post-processing and shadows I'm liking the style.

Update 1

When playtesting, one piece of common feedback I've received is that it would be nice to have a visual indicator of which tiles can currently be eroded. This would also help if playing with a touchscreen, where you can't hover over a tile to see if it's highlighted.

Rather than an out-of-world solution, like outlining or highlighting the tiles, I figured the best way to do this would be to give some visual indicator of "wetness", since it's always the tiles around water that can be eroded. These also happen to be the tiles that vegetation can spread between, so it should help in learning the rules of the game and how everything behaves.
I wrote a custom shader for the tiles so I can have more control over their appearance (previously I was using Unity's default shaders for solid objects in the game). I added a wetness parameter, and separate colors for when the material is dry or wet so I can fade between them when the tile's wetness changes.



This works really well for the vegetation, as it can be yellowish when dried out and a deeper green when wet. Unfortunately I couldn't get a good result this way for the rock tiles. Either it was too subtle so as to be unnoticeable in a lot of situations, or it was too dark and didn't contrast enough with the sides of the columns. Maybe if the side of the column where it can be eroded down to was discolored as well this could work better; I might explore that in the future.

For now I've settled on having a small puddle form in the middle of rock tiles that are wet. As a bonus I can now use this same type of animation for when any tile is emptied of water, rather than just having the water fade into the ground.
You can see these same kinds of puddles in real life on columnar basaslt columns like in the Giant's Causeway so I thought it was appropriate, but still not totally sure if I will keep it like this as it does break the minimal look a bit. After playing with it a while it definitely does help with the user experience.
Here's what it looks like:



Now that I have the concept of tiles being "wet" or "dry", I decided to change it so that if you've grown a flower on a tile and the tile becomes dry, the flower dies. All sunny tiles need flowers in order to complete a puzzle, so this gives me another mechanic I can use to make more complex levels.



Keep in mind that the flower art and animations are somewhat placeholder; I'm hoping to replace them with 3D models with proper growth/death animations later, or maybe even procedurally generate them so each one can be different.
That's it for now! I'm currently playing around with fullscreen gradient color overlays to make things look more visually interesting and add contrast, so that's probably what the next update will be about.
Logged

SparseGameDev
Level 0
**



View Profile WWW
« Reply #5 on: February 17, 2018, 12:22:17 PM »

Update 2

I've been playing aound with the colour grading. Previously I was using the build-in colour grading in the Unity Post-Processing stack to set YRGB curves for colour grading. I used this to add some blue into the shadows (to give the impression of some slight atmospheric haze) and to increase contrast a bit. However, I felt things still looked a bit flat, and darkening the shadows any more made the lighting seem a bit too harsh as it's supposed to be partially cloudy.

What I've settled on now is a gradient overlay with a burn blend mode, which makes things look hazier at the top and higher contrast towards the bottom of the screen. I did this by modifying the built-in mask Vignette effect -- now rather than multiplying a chosen colour based on the value in the vignette texture, I can define two colours which it will lerp between according to the vignette texture value, and use the lerped colour to do a "color burn" effect. The formula for that is 1 - (1 - destColor) / burnColor. I found this looks nicest in gamma colour space rather than linear, so I had to convert to gamma before doing the calculation and then back to linear space after -- as far as I can tell there's no easy way to apply the effect after Unity performs the linear -> gamma conversion for display, but it works. Here's a comparison of the different Colour Gradings:





I'm pretty happy with the results, it definitely is adding some depth and contrast to the scene. Another nice thing is that I should be able to change the colours on level transisions as you play through the game, to get some visual variety and achieve different moods. That's it for now!
Logged

SparseGameDev
Level 0
**



View Profile WWW
« Reply #6 on: February 27, 2018, 03:52:09 PM »

Update 3

I've been working on improving the look of the water in the game, and the first step to nicer water is improving the way it moves. Previously, each tile just had a static mesh that would be raised up to the water level of that tile. Now I'm dynamically changing the meshes at runtime so you can see the water deform and flow from tile to tile:



I'm using a similar technique to render the downward flow in waterfalls, which I think turned out really nicely:



Technical explanation

The underlying simulation hasn't changed much -- most of the information used to manipulate the meshes already existed in the simulation data. When water flows into an empty tile, there's a delay of several frames between it leaving one tile and appearing in the other. Each tile has 6 ring buffers, one for each neighbour, that track the flow coming in from that neighbour for the next few frames.

In order to show the flow from tile to tile, I can move each vertex in a tile's water mesh (pictured below) up and down by sampling the cumulative flow in each of the ring buffers up to a certain frame in the future. The number of frames to look ahead in each buffer depends on the vertex's distance from the respective neighbour tile. Then, to connect the meshes between tiles I take the minimum height where two vertices overlap.



The waterfalls work in a similar way -- each tile has six ring buffers representing waterfall flow, and the number of frames water will remain in a waterfall is based on the distance to the tile below with a constant acceleration (gravity).

The mesh for waterfalls looks like this:



Notice how the vertices are further apart as you go down the mesh. Each vertex is positioned where the water should be on a given frame based on gravity. So to show the water flowing downwards, I can sample the flow in the waterfall buffer for each vertex's corresponding frame, and move the vertex in and out accordingly. This works because the water material is designed to fade out as it approaches a surface, so if there's no flow the water will appear transparent. I found it looks nicer if the vertices are spaced 2 frames apart and blend 2 samples from the ring buffer, as it smooths out some weirdness with the simulation.

Next I am going to play around with adding some texture and movement to the surface of the water (ripples?) before getting back to working on mechanics and building levels. Really, that should be the priority but I enjoy working on the visuals too much!
Logged

Pineapple
Level 10
*****


~♪


View Profile WWW
« Reply #7 on: February 28, 2018, 03:07:36 AM »

The mechanics are really clever, and is quite pleasant to look at. I look forward to playing this!
Logged
SparseGameDev
Level 0
**



View Profile WWW
« Reply #8 on: March 02, 2018, 12:56:41 PM »

The mechanics are really clever, and is quite pleasant to look at. I look forward to playing this!
Thank you! I'm glad you like the mechanics. I did some playtesting with a friend yesterday and there were a couple things that came up where they didn't understand how a mechanic worked so had trouble with some early puzzles. But usually for these things I can think of a better way to teach it, and my goal is to not have to resort to text instructions. I think the key is first introducing each element in a very simple level where they can easily figure it out after one or two tries and it's very obvious what's happening.

Update 4
I've been working further on ripple/foam effects for the water and I'm really happy with the results:




To achieve this effect, I'm sampling a moving ripple texture for each of the 6 hex directions and blending them together based on the flow into that tile. After a tile recieves flow, I also make some ripples come off the walls as if they are bouncing. And the texture moves down the waterfalls according to gravity as well, which gives a foam/whitewater look. I'm also doing some refraction based on the ripple textures. All in all, this adds a lot of movement to the water and makes it more enjoyable to watch it flow over things.

I'm going to move away from the visuals for now and focus on mechanics and creating levels -- after playtesting yesterday I want to try teaching some things in different ways and smooth out the learning curve a bit. I also want to create some more complex puzzles and try out some new mechanics.
Logged

SparseGameDev
Level 0
**



View Profile WWW
« Reply #9 on: March 13, 2018, 08:21:18 PM »

Update 5

I've mostly been working on level design the past little while and trying to get the game in a state where I feel comfortable showing it to people.

I have started playing around with a new mechanic though: the dirt tile. While rock tile can only be eroded if they are <= 1 tile-height up from the water, dirt tiles are softer and can be eroded no matter how tall they are, as long as they are next to water:



You can also see a new tile selection effect I've been working on in the gif above.

The other unique property of dirt tiles is that vegetation can spread up and down the sides, rather than just along the top to same-level tiles:



These two mechanics go well together because the "wetness" effect can still be used to represent both erodable tiles and tiles which vegetation can spread to. I tried out having it so "wetness" would spread to an entire connected group of dirt tiles, which was interesting in that it changed the way vegetation spreads, but it broke the wet=erodable visual queue and made which tiles are interactable less clear to the player. I think the rules I settled on may result in more interesting puzzles anyway.

Another mechanic I've been working on is having a continuous flow of water coming into a level. The roadblock currently is that I don't have a good way to calculate if the water simulation has stabilized and it's time to move onto the vegetation spreading / interaction phases. Once I find a solution, I can start incorporating that mechanic in the puzzles as well. I think the combination of the continuous flow and dirt pillars could be interesting.

I'm currently in Chicago getting ready for Train Jam and then GDC so the devlog may be dormant for a bit. If you're at GDC come say hi!
Logged

Husenica
Level 0
**


View Profile
« Reply #10 on: March 13, 2018, 10:28:23 PM »

Very relaxing visuals. Keep it up Hand Thumbs Up Right
Logged
SparseGameDev
Level 0
**



View Profile WWW
« Reply #11 on: April 08, 2018, 10:25:43 AM »

Very relaxing visuals. Keep it up Hand Thumbs Up Right
Thank you! It's always good to hear words of encouragement Smiley

Update 6

I had a great time at Train Jam and GDC! I got to work with an awesome team, make a cool jam game, meet lots of great people and see some excellent talks. I also got the chance to talk to a bunch of people about Hexagon Falls, demo it and get some nice feedback.

One common thing I heard was "Apple would like this, this should be on iOS", and even though the mobile space terrifies me I think they're right. So after GDC I started working on getting the game working on phones.  I've started redesigning the puzzles so they fit into a vertical section of the screen that can be used for portrait mode (having the game in landscape would make the tiles way too small to press on a phone). For the most part, the puzzles either already fit or can be changed/compacted to make it work so it's not too much of a compromise.

Hoewever, the biggest challenges to getting the game running well on mobile are technical. I've been using the Unity post-processing stack, including bloom and screen-space ambient occlusion (SSAO), which is way too heavy for mobile.

My first step has been to ditch SSAO and replace it a per-vertex solution. I'm now dynamically generating the meshes for the hex pillars, and calculating their ambient occlusion values for each vertex, based on neighbouring tiles. For the sides of the columns I'm only subdividing them in the areas where the ambient occlusion changes. Compared to SSAO, this is basically free performance-wise, because I only need to re-generate nearby meshes on click, and read vertex colour in the shader.

You can see the results below -- I think it actually looks better than the SSAO!



Since GDC I've been travelling around by train and working on the game whenever I get the chance. While I was in Portland I hiked to some waterfalls and streams along the Columbia River Gorge and recorded some sounds:



Above you can see the lower Latourel falls, which have some columnar basalt formations. These kinds of hexagonal-like formations can be seen all over the world and were a big inspiration for the look of the game, but this was my first time seeing any in person!

I haven't started implementing sounds in the game yet, but now I have something to start with when I do!

The next steps on my to-do list are to remove the water shader's dependance on the camera's DepthNormals texture, move as many calculations as I can from pixel to vertex shaders, and find mobile-friendly solutions to soft shadows and bloom that can give me visually similar results to what I have now.
« Last Edit: April 08, 2018, 10:44:02 AM by SparseGameDev » Logged

Fuzzy Branch
Level 0
***



View Profile WWW
« Reply #12 on: April 09, 2018, 09:12:14 AM »

I'm a little late to the party but been meaning to comment on this.

I like the water flow animation! You're getting a good feel with a simple approach which is always nice, and it fits the minimalist style of the rest of the visuals.

Seconding the sentiment for supporting mobile -- it really looks like it would 'fit' on that platform (you even already had a vertical composition that would lend itself to phones better than widescreen 16:9 aspect).
However, I wouldn't put all your eggs in that basket since from what I hear, unless you can get featured on the store or have a huge marketing budget, the app store can be brutal, especially if it's not free-to-play with ads.

Good solution with vertex data for baked AO -- I love using vertex data for things -- flexible, relatively cheap, and time-tested!

And great idea with recording your own audio, it's probably something I should be doing as well -- Is it relatively inexpensive to get a basic recording setup like you have there?

[final note a bit off-topic:  I'm actually in the Portland area now - the forests and vegetation around here are awesome, glad you got to check out the gorge (hopefully that area wasn't too affected by the big fire about 6 months ago)]
Logged

Zorg
Level 9
****



View Profile
« Reply #13 on: April 09, 2018, 09:38:30 AM »

I like the mechanics. I'm curious if you can keep the purity of the visual design while adding some decoration here and there to make it more appealing. Good luck finding the right balance! Following. Smiley
Logged
SparseGameDev
Level 0
**



View Profile WWW
« Reply #14 on: April 09, 2018, 09:46:38 AM »

However, I wouldn't put all your eggs in that basket since from what I hear, unless you can get featured on the store or have a huge marketing budget, the app store can be brutal, especially if it's not free-to-play with ads.
Yeah, this is what I've heard as well. I will try to get Apple's attention (or if I end up getting a publisher they could), but I'm also planning to launch on other platforms in case that doesn't pan out.

[final note a bit off-topic:  I'm actually in the Portland area now - the forests and vegetation around here are awesome, glad you got to check out the gorge (hopefully that area wasn't too affected by the big fire about 6 months ago)]
It was beautiful! Most of the trails at the gorge are still closed due to the fire, but Latourel and Bridal Veil falls are open.
Logged

SparseGameDev
Level 0
**



View Profile WWW
« Reply #15 on: April 09, 2018, 09:49:27 AM »

I like the mechanics. I'm curious if you can keep the purity of the visual design while adding some decoration here and there to make it more appealing. Good luck finding the right balance! Following. Smiley

Thanks! Later on I will explore maybe adding a little bit of texture. As it stands the dry vegetation can be a bit hard to see for colorblind people, so maybe a few tufts of grass would help. I'm planning to add some stuff to the background as well that gradually comes into view as you progress, have the palette shift as you go down, and make each flower unique/interesting.
Logged

Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #16 on: April 09, 2018, 10:54:35 AM »

Love the visuals of this, and the puzzles are looking interesting too. Good luck and looking forward to more info Smiley
Logged

SparseGameDev
Level 0
**



View Profile WWW
« Reply #17 on: April 30, 2018, 07:55:46 PM »

Love the visuals of this, and the puzzles are looking interesting too. Good luck and looking forward to more info Smiley

Thanks Ishi!

Update 7

I've been working on a basic website with a mailing list signup: http://hexagonfalls.com/

Graphic design isn't really my strong suit but I've done a bit in the past. I do like the logo I came up with after a lot of iterations.



In other news, the game is running on Android and looking fine!





I've spent the past couple weeks rewriting/optimizing rendering stuff and getting it working on mobile.

Water



The water shader depends on reading the scene's depth to determine the color of the water and the intensity of refraction. Previously I was relying on Unity's built in DepthNormalsTexture, but this is way too expensive for mobile. The built in depth only texture was out as well since it seems to behave differently on different platforms, and the water needs to write depth  which screws things up.

My solution is to render the depth for the hex pillars to a separate render texture. I'm using a normal RGB colour texture and packing it into two channels as I ran into some incompatibilities between platforms with the other formats I tried. The texture only needs to change when you click on something, so I'm rendering it only when necessary and re-using it across frames.

I also added in a per-pixel variation to the water depth based on the animated ripples. This gives a slight wavy effect at water edges instead of it just being a straight line.

Shadows

To get soft shadows working on mobile, I switched from Unity's built in shadows to a plugin, Next-Gen Soft-Shadows. It's more tweakable and gives good results for the super soft partially cloudy look I want.

Again, rendering the shadows every frame is too intense for mobile. The shadows only need to change when you click, so I'm writing them out to the blue channel on my depth texture and re-using the result across frames. Below you can see what the texture looks like -- the green stripes are a side effect of packing the depth into two colour channels.



Bloom

I was relying on the Unity post-processing stack for Bloom and this was not really designed for mobile so I ripped it out of the project. To get something more performant I started with the FastMobileBloom plugin as a base and modified it to get it looking close to the bloom I had before. Rather than subtracting a threshold from each colour channel which made things looked weird and oversaturated, I'm scaling the brightness on a smooth curve based on the max of the RGB channels. I'm using three downscale/blur passes, saving the result from each and then combining them together to get a nice bloom that has sharp-ish highlights that progressively spread out in a large blur. You can see the three textures and the combined result below -- the blockiness isn't apparent in-game.



Next I will be working on the transition between levels. That's all for now!


« Last Edit: May 04, 2018, 07:42:45 AM by SparseGameDev » Logged

SparseGameDev
Level 0
**



View Profile WWW
« Reply #18 on: June 18, 2018, 05:01:09 PM »

Update 8

Things have been a bit slow lately hence the lack of updates -- I've rewritten a lot of the water simulation code and was stuck on some technical problems for a while.

The water simulation has always been done tile-to-tile -- each tile has a water level and every frame a portion of that water can flow to a neighboring tile. This worked pretty well, but since it's never 100% of the water leaving a tile, there were always fractional amounts of water remaining up above when water flows off a cliff. Previously my solution was to have a threshold below which we would consider the tile to be empty, even if there was a little water left, but this created a lot of edge cases so I was always tweaking the threshold, and in some cases you would need to wait too long for the water to flow down.

Now I'm using a more analytical approach -- I still do the tile-to-tile water simulation, but I also do a first step where I find all connected water groups, and figure out if it needs to drain (no incoming water source, and able to flow down). If so, a constant amount is drained from the entire group of tiles at once. So now, it will drain completely within a reasonable time and I don't need to use thresholds to determine if a tile has water.

I also had a problem with the method I was using to determine the simulation had stabilized and should be interactable by the player. Again due to the fractional tile-to-tile flow, there would always be some small changes in water level from frame to frame, so I would use a threshold and if the change was less than that, the simulation was said to be stabilized. Again, this created edge cases and the timing would sometimes feel too long. Now, I do some more in depth calculations to see if there are still empty tiles that the water will flow to, and once there aren't the simulation is stable. Things feel quite a lot more snappy now!

After the changes to the water simulation, I was finally able to get a new mechanic working: constant water flows.



I like how it looks, and I want to use it to add a new visual and gameplay element as you get further down the mountain, but I'm struggling a bit with how the exact rules of interaciton, and with making interesting puzzles. Also, since the water is always flowing, it's a bit less satisfying to erode a tile because you don't get the still>flowing>still feedback. I need to play around more with this mechanic to see if it works.

I've also been experimenting with the touch controls. In the current build of the game, rather than just pressing a tile to erode it you swipe down. This feels more like you're physically interacting with the game world, and as a bonus your finger is more likely to be out of the way so you can see the results of your actions better. It's also harder to hit the wrong tile by accident. The only downside is that it requires more movement from your hand and so can be a bit more awkward. I'm still not 100% sure about it but I think I prefer it this way, maybe with an option to switch to presses:





I've been spending a lot of time thinking about new mechanics, so my next step will be to prototype some of those and try to make puzzles with them.
Logged

AlexVsCoding
Level 5
*****


Enthusiasm at dangerous levels.


View Profile WWW
« Reply #19 on: June 19, 2018, 02:11:56 AM »

This looks profoundly interesting, very excited to see how it comes along.
Logged

Pages: [1] 2
Print
Jump to:  

Theme orange-lt created by panic