In my tiny building game, I want your creations to exist in a world that feels alive. As a first step, I tackled ivy ๐ฟ As time passes, ivy grows on walls, bringing a bit of life with itโจ
A new system needs to interact with all the previous systems. Finding a suitable algorithm took me a few iterations ๐๐ฆ
Ivy needs to know if a wall gets changed...
... or if a wall gets erased. (either via the player's input or by the undo system)
In my first prototype, ivy was directly tied to a wall it spawned on. That had a number of issues: (a) if wall changed, its UV->WorldSpace changed too, and ivy shifted - like a texture; (b) if wall got split with the eraser, that reordered wall IDs, and was messy to deal with๐
Thus for ivy to properly react to changes, it needs to know all the nearby walls. To make that query fast, I made a spatial hash (2D grid). This also allowed ivy to grow from one wall to another, as the data structure yields the closest wall as ivy grows towards it.
With some additional intersection checks ๐คช ivy can now continue from one wall to another ๐ (thank you for giving me a primer on AABBs and segments and stuff @h3r2tic!)
Making ivy work with arches was waaaay more straightforward. I simply discard the fragments (pixels) that overlap with the arch.
I also learned not to discard vertices in vertex shaders xD that resulted in some serious cyberpunk looks ๐คฃ
I've been developing this game in my spare time. It's been a lot of fun, but - not gonna lie - tough at times๐
However, in September I'm switching to being full-time on this project ๐ค๐ Maybe I'll even finally come up with a name ๐
But! that's not all...
I'm not going to be doing it alone anymore ๐ฎ
@h3r2tic is also joining the project in September โจ๐๐คฉ I'm beyond excited!! ๐๐๐ wooooo!
I don't know about you, but I'll take a proper Summer break now: get some sun, maybe dip my feet in a lake, and just slow down for a bit๐
I'll be back in late August. Stay tuned by following the newsletter ๐ tinyurl.com/2p8u9rzp
Have a wonderfully delightful Summer! ๐
โข โข โข
Missing some Tweet in this thread? You can try to
force a refresh
Once we had a trailer (and a name!), we had something that was easy to share around. TikTok videos, Youtube mentions, articles - they all compounded in a VERY long tail for us, that lasted all the way until February!
We also had a huge discovery queue spike from Steam. I'm not exactly sure what happened there. If you correlate it with our daily wishlists from last month, you can note that we didn't get a proportional spike again. My theory is that more people were on Steam during Christmas ๐คทโโ๏ธ
When starting as indies, the scariest thought was that we'd pour thousands of hours of love & hard work into a game no one would know about.
Today, Tiny Glade is #87 top wishlisted game on Steam, having gathered 257,387 wl 3 months since the reveal.
So, uh, HOW, right?๐
๐งต๐
I'm NOT a marketing expert or anything like that๐ so I'm simply going to share what we did, to hopefully provide a useful data point for others. Maybe something here could work for you too!
Quick facts:
* Tiny Glade is our first game
* we're a small team of four (2 full-time, 2 part-time)
* we're self-publishing
* we haven't paid for any marketing.
* almost all of our wishlists came from social media (we haven't even done any festivals yet!)
[2/10] Undo is essential for this game to stay playful and relaxing: if you misclick, a cat jumps on the keyboard, or you simply change your mind, it should always be easy to go back.
I had been scheming an undo system for a while, and now was the time to roll up my sleeves ๐ช
[3/10] Undo-redo for terrain and paths was pretty straightforward. Since the interactions between systems are procedural, a lot of animation is happening for free ๐ For ex, arches appearing where paths cross walls, stones arranging along a path, or walls sticking to the ground
My genetic drawing toy project is now opensource github.com/anopara/genetiโฆ Disclaimer: the project is from when I was getting into programming, so dont have high expectations of the code hehe๐ I also added an automatically generated sampling mask [see thread 1/4]๐
The algorithm starts with uniform sampling, then a mask is created based on edges to allocate more samples around regions of high frequency. I finish it up with a custom mask created in Photoshop to annotate semantic centers of attention (such as the face, or people, etc) [2/4]
Continuing archaeology of my old hard drive ๐ง here's another project from 2017 where I was playing around with genetic algorithms. The algorithm has ~100 "tries" to arrange 20 brushstrokes after which it repeats the process, overlaying on top of the previous iteration [1/5]
With each iteration, the brushstrokes were progressively smaller (to imitate drawing finer details). For portraits, I also used a hand-painted mask that would allocate more samples in the region of face and hands [2/5]