zanzlanz

Game developer and music producer!



At this point, my posts are a very condensed way to get to know what I do and have done, so please browse!



In general, I make all sorts of games and music and other creative stuff!



Btw, wetclap.com :]


I took a short break from gamedev to release a music video in time for Halloween!
It's my third SpongeBob remix, celebrating 1,000,000 YouTube views on my last one.

I admit, I spent more time on the video than the music, haha! So I wanted to document a couple of the challenges I tackled - someone must witness my struggles, right?

I had 4 biscuits

This scene was a fun challenge. Compare the final shot (left) to the source material (right):

Still from the video showing a character running on a pathway.
Same scene, but the background is in motion within a circle vignette, and the character stays center frame.

Basically, I wanted the background without the vignette... but it's moving.

So, I used motion tracking to get the speed of the background each frame, then offset the scene by that amount to stabilize the motion:
Instead of the background moving, the background is still, and the character is moving. The vignette follows the character

Then I used an onion-skin technique ("echo") to overlay all of the frames on top of each other. Huzzah, I gained a full background! Then I could do whatever I wanted with the foreground, like add another character:
Same scene with no vignette, with multiple characters in the foreground.

Rotoscoping

Speaking of characters... I rotoscoped pretty much every one of them! Rotoscoping is cropping out the elements in the scene, frame by frame. It's inCREdibly tedious, I tell you.

SpongeBob selected and separated from the background.
The Flying Dutchman removed from the background, with the background also masked out in black and white.

Rotoscoping everything allowed me to layer text behind elements, fade backgrounds, outline characters, and more. I basically treated each scene like a thumbnail in this way!

Text placed between The Flying Dutchman and the background, with the parts overlapping the ghost appearing translucent.
Patrick is separated from the background, has an outline, and has lyrics emerging from his mouth.
An island with the sky replaced with fire and text.

Rigging

The last challenge I'll mention is that of creating a controllable rig of Patrick. The music gets a bit unhinged for a bit, and I wanted to represent that with Patrick's movements.

Here's how I did it:

  1. First I rotoscoped and separated Patrick from the background.
  2. Then I painted (by hand) the region behind Patrick, so we can see what's behind him.
  3. After, I separated Patrick's arms from his body, making sure to fill in the occluded areas.
  4. I then deformed Patrick's layers to the music, and linked deformation meshes to his arms to help connect stuff up more naturally.
    Example of how Patrick's rig worked: a slider controls Patrick's forward and backward movement.

Where've I been? What's next??

Hi by the way! I sure have been quiet. I lurk though! I've just been working extremely hard to finish an update to my game "Mine Blocks." I'm excited for that, but also I've endless stuff lined up after that I'm dying to get to as well.

Happy Halloween! :)



(The Thanator scene from that movie is one of my all-time favorite cinema experiences!)

This is my most ambitious pixel art yet (or any art, for that matter)! I learned a TON making it; I spent about a month on it, conquering so many new textures and techniques throughout. See my process below:

Process gif of the creation of the art over the course of like 25 stills

I even made a mini art as a way to practice leaves. Two of these leaves made it in the final image - if you figure out which ones, you can take one leaf and one gem. Only one; save some for the rest! Pixel art of 9 leaves fanned around a pile of gems.



Happy New Year, Cohost!

I just made a brand new version of my "Wave Function Collapse"-inspired algorithm.

My previous version was basically this:

Loop through all the blank pixels of the bigger image. The goal is to find a pixel that's super confident it knows which color it should be, simply by it comparing its surroundings to a small input image. Resolve that one pixel. Then do the whole thing again to find the next most confident pixel.

Well someone reached out to me about it a couple days ago, inspiring me to take another stab at the problem. This new approach is the same concept, except ALL pixels guess which color they should be, all at once. Then it iterates a few times over to gradually get clearer and clearer.

If that wasn't quite clear, here's an analogy 🦎:

It's like a grid of a million chameleons, where each one is trying to blend in with its nearby friends in order to best mimic the input image.

The big bonus of doing all pixels at once is I could easily implement it on ShaderToy, so it can run in your browser :O! Check it out:

It should be butter smooth on desktop - but sadly not so much on mobile.

If you're curious, you can make your own by editing my array of pixels in Buffer A. Just make sure to update the width and height in the Common script. I'd really love to see what patterns and variants you guys come up with!

With the proper adjustments, I can see this technique being usable for procedural map generation or texture synthesis. But in its current state, at least in my examples, maybe it's a little silly looking still ^^ What do you think?



And I call it ✨ Zanzlanz's Collector's Bundle ✨!

After I ported 11 of my games to my game engine (see yesterday's post), I decided to make a launcher to keep track of all 100 achievements!

I just wanted to make this post to highlight some fun parts of making the project:

I got paid in Oreo Cookies

In one of the trailers I made, I joked that you could buy it with Oreo Cookies (@1m19s):

And -- maybe I could have predicted -- a friend of mine actually shipped me this package in exchange for some keys of the game. I was absolutely beaming about it for hours!

4 packages of Oreo products presented on a wood table.

I devoured the cookies and rained itch keys upon his inbox.

Coincidentally, there are exactly 100 achievements

I still can't get over the fact that when I counted up all the achievements for all 11 games, it came out to be exactly 100 achievements. I sat there confused and recounted 3 more times before I was convinced the numbers added up perfectly.

But all of the achievements came from the original medals I set up on Newgrounds.com!

A gif showing the scroll behavior of the list of all 100 achievements.

Getting all 100 achievements is a big feat, which is why one of the rewards for winning is the ability to hijack my Twitter with an automated tweet about your win. A few people got close, but they stalled out at 90%, so anyone can still be of the first 10 winners.

The trophy is my marketing team 🏆

The trophy is just a dozen stretched cubes I manually entered in with code. There's a larger version of the mesh masked out underneath to add the black outline.

All things considered, doing the "branding" for this project really just meant I slapped the trophy asset on everything and anything :)

A promotional image of the 3D trophy and the text '11 games, 100 achievements.'
Just a spinning trophy with a starburst background.

The launcher is secretly a 3D scene

At first I was going to arrange it like a DVD scene selection menu, if you remember those days. But then I settled pretty quickly on a flat grid instead. It still makes use of 3D through a neat interactive effect.

A grid of 11 game thumbnails, each slightly downscaled and rotated inward.
A tight grid of 11 game thumbnails, each pivoting elastically when the cursor passes over them.

The way this is achieved is by using a perfect 90 degree field of view and setting the elements at exactly the correct scale and distance from the camera.

The 3D effect may play a part in the win sequence too.

Link

It would be weird to not link the bundle after writing a whole post about it! But better yet: all 11 games are totally free in your browser. Just, you wouldn't get the opportunity to take over my Twitter if you win :)

A promotional image featuring a screenshot of the bundle.