Anastasia Opara Profile picture
May 28 โ€ข 10 tweets โ€ข 4 min read
This month I finally convinced myself to tackle the undo-redo system since it was becoming a premonition of a technical debt๐Ÿ‘€

And of course I decided to make it animated. How hard can it be, right!? ๐Ÿ˜‚ [1/10]

#screenshotsaturday #indiegamedev #rustlang ๐Ÿฆ€ #procgen #bevyengine
[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
[4/10] The clip above is undoing-redoing a single terrain edit, and the one below is undoing-redoing a single path stroke.
[5/10] Undo for walls, however, turned into one of the most intricate bits of software engineering I've ever had to do ๐Ÿ˜… A single eraser stroke can have many possible outcomes - a wall is split multiple times, erased from different sides, deleted, or any combination of those.
[6/10] I ended up writing a compiler for these events into a smaller number of lower-level operations that can be sanely maintained and replayed ๐Ÿค“

Now, if you split a wall when erasing, undo will play the expected merging animation ๐Ÿ™Œ No new specific case handling required!
[7/10] Originally, I wasn't even planning to add animations ๐Ÿ˜ฎ This month was only about undo-redo. But mid-way through, I realized that if I "just" added animations, I could extend undo-redo into a replay system, letting you watch your build recreated from scratch ๐Ÿคฉ
[8/10] Being a huge fan of time lapses made by the Sims community, and the time lapse feature in Procreate, I felt that it would resonate with the vibe of my game โœจ

Et voilร ! I can now replay this small "Thank you" scene, hehe ๐Ÿ˜Š
[9/10] Aaand that's all for the May update~ thank you for reading!

And huge big mountainous thank you @h3r2tic for feedback, brainstorms and being my editor for this post ๐Ÿค—๐Ÿ™‡โ€โ™€๏ธ๐Ÿ’–
[10/10] PS: if you'd like to receive these updates in your mailbox, I have a newsletter ๐Ÿ’Œtinyurl.com/2p8u9rzp

๐Ÿค” I should probably put this link somewhere in my bio so I don't need to keep linking it every time ๐Ÿ˜…

โ€ข โ€ข โ€ข

Missing some Tweet in this thread? You can try to force a refresh
ใ€€

Keep Current with Anastasia Opara

Anastasia Opara Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @anastasiaopara

Jun 5, 2020
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]
More examples [3/4]
Read 5 tweets
May 2, 2020
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]
here are just some more examples ๐Ÿ™ƒ [3/5]
Read 6 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(