<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>ZLG - Animated</title><link href="https://zlg.space/" rel="alternate"/><link href="https://zlg.space/feeds/t/animated.atom.xml" rel="self"/><id>https://zlg.space/</id><updated>2026-09-06T00:00:00-07:00</updated><entry><title>ZLG's MaloDance Emote</title><link href="https://zlg.space/c/work/zlgs-malodance-emote.html" rel="alternate"/><published>2026-08-03T00:00:00-07:00</published><updated>2026-09-06T00:00:00-07:00</updated><author><name>ZLG</name></author><id>tag:zlg.space,2026-08-03:/c/work/zlgs-malodance-emote.html</id><summary type="html">&lt;p&gt;&lt;img alt="A silly man dancing with his arms back and 
forth" src="https://zlg.space/images/zlg_emote-malo-dance.png"/&gt;&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img alt="A silly man dancing with his arms back and 
forth" src="https://zlg.space/images/zlg_emote-malo-dance.png"&gt;&lt;/p&gt;


&lt;p&gt;My community unlocked this emote during &lt;a href="https://zlg.space/c/work/zlgs-subathon-2026.html"&gt;Subathon 2026&lt;/a&gt;! I 
leaned on the skills I learned from the last year or so of pixel art practice 
and commissions to take on two birds with one stone.&lt;/p&gt;
&lt;h2&gt;Bird One: Community Satisfaction&lt;/h2&gt;
&lt;p&gt;It's quite simple, really. Despite my Twitch stream having a good number of
emotes, they're just kinda silly and general in their usage. I needed some that
were purpose-built. This emote's job is explicitly &lt;em&gt;dancing and vibing&lt;/em&gt;. It can
be used for hype moments or good music during stream.&lt;/p&gt;
&lt;p&gt;The Malo Mart dance from &lt;em&gt;Zelda: Twilight Princess&lt;/em&gt; is a classic goofball
routine that is just the right kind of weird. It was the right choice, everyone
was in favor.&lt;/p&gt;
&lt;h2&gt;Bird Two: Testing my Skill&lt;/h2&gt;
&lt;p&gt;The second prong of this project was to really put my skills to the test. I 
thought to myself, "Twitch allows emotes up to 60 frames. What can I do that 
needs that many frames?" That thought was left to percolate while I figured out 
how the emote would be made.&lt;/p&gt;
&lt;p&gt;There are many characters I could've chosen to do the dance, but I chose the
most obvious from &lt;em&gt;Twilight Princess&lt;/em&gt;: the stuck-up shopkeeper in Hyrule Castle
Town. He looks down on Link for looking shabby, but is eventually forced to
dance as he serves you later in the game, after Malo purchases the shop. The
irony is rich. One of my favorite scenarios in the &lt;em&gt;Zelda&lt;/em&gt; series.&lt;/p&gt;
&lt;p&gt;What better way to pay homage to Zelda with another 2-for-1, though? &lt;em&gt;The Minish 
Cap&lt;/em&gt; had a great art style for its format. Despite that game's sprites being 
larger than the 28×28 constraints I work with for Twitch emotes, I found a way 
to put the Malo Mart guy into those dimensions! The torso had to be shortened a 
little to do it, but I'm largely pleased with the result.&lt;/p&gt;
&lt;p&gt;I was aiming for the &lt;em&gt;Minish Cap&lt;/em&gt; style due to its focus on outlines with a hue 
to them. The pastels often used in that game were inspirational to some degree, 
but the Malo Mart guy's outfit used quite a number of varied hues that were hard 
to capture in such a small sprite. I like the style for its ability to convey 
shape and color together with smart selective outlining. In the end, my piece 
deviates from Capcom's style, but if you look closely I think you can see its 
influence.&lt;/p&gt;
&lt;h2&gt;Production&lt;/h2&gt;
&lt;p&gt;Building it was harder than you'd think. Making the face was fairly 
straight-forward, as were the hands. Getting the motion correct in the legs 
(very minimal in &lt;em&gt;Twilight Princess&lt;/em&gt;, actually!) and the sway in the arms was 
quite trying. Once I got one side correct, I did essentially mirror it for the 
return trip, with some modifications to ensure it looks correct.&lt;/p&gt;
&lt;p&gt;One of the best parts of pixel art is its re-usability. I try to build my pieces 
out of smaller, reusable pieces where I can, because even &lt;em&gt;re&lt;/em&gt;building them 
isn't so bad, if you have the pieces you built it with. ProMotionNG makes that 
simple by letting me turn any selection into a brush, to store in any &lt;code&gt;.pmp&lt;/code&gt; 
file, or in its global brush storage. It's an essential part of my workflow now.&lt;/p&gt;
&lt;p&gt;It's also the original purpose of pixel art: reusable game assets. So, this
guy's hands and arms were copied and mirrored a little to shorten production,
because the most challenging was yet to come...&lt;/p&gt;
&lt;p&gt;The Malo Mart guy has a rotating horn on his cap. To make this look good, the 
horn should do a full rotation during the animation, so it loops correctly and 
is seamless. Doing this in 60 frames is quite a challenge!&lt;/p&gt;
&lt;p&gt;First, I divided the task into smaller, more manageable segments. I chopped
it in half, &lt;em&gt;twice&lt;/em&gt;, which gave me 15 frames per "quadrant" of the horn's
rotation. If I could produce a 15-frame animation that looks like a smooth
quarter-turn, then I should be able to keep whatever pixel steps I used, 
establish some key frames, and make a smooth, consistent animation.&lt;/p&gt;
&lt;p&gt;That task took quite a while! The emote sat there, unfinished, for at least a
month or two. Rendering a shiny, rotating horn in pixel art isn't easy. But
eventually, I gathered the gumption to grind it out, do the work, and refine
every last pixel. And damn, look at it! It's one of the smoothest animations
I've ever done. The rotating horn is still pleasant to watch, even after
obsessing over the final version for two or three days before I released it.&lt;/p&gt;
&lt;p&gt;It wouldn't have happened without my awesome subscribers! Thanks a lot to &lt;strong&gt;the 
REAL Game Z&lt;/strong&gt;!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This is an emote that you can use on Twitch when you subscribe to &lt;a href="https://twitch.tv/zlg_creates"&gt;my 
channel&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category term="Work"/><category term="Emotes"/><category term="Pixel Art"/><category term="Animated"/></entry><entry><title>Shwack's Creeper Explosion</title><link href="https://zlg.space/c/work/shwacks-creeper-explosion.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>ZLG</name></author><id>tag:zlg.space,2026-06-26:/c/work/shwacks-creeper-explosion.html</id><summary type="html">&lt;p&gt;&lt;img alt="a Minecraft creeper slowly enlarging before exploding into 
smoke" src="https://zlg.space/images/shwack_creeper.png"/&gt;&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img alt="a Minecraft creeper slowly enlarging before exploding into 
smoke" src="https://zlg.space/images/shwack_creeper.png"&gt;&lt;/p&gt;


&lt;p&gt;My client approached me one day, asking "hey do you think you could do a 
Minecraft Creeper exploding?" At first blush, I thought "Well, it's already kind 
of pixel art, how hard could it be?" Well, it's a bit more complex than that, 
but I was essentially correct! My rendition is a little more saturated, and has 
less moss on it.&lt;/p&gt;
&lt;p&gt;The big detail to get right in this piece is the smaller bits of smoke. I wanted
them to look and feel close to the original game, complete with the multiple
shades and going in multiple directions. The creeper itself simply expands a
little while blinking before the big BOOM happens, just like it does in-game.
I used multiples of the same animation to follow up the big blast, and then
scatter tiny smoke pieces at the end.&lt;/p&gt;
&lt;p&gt;We were both very happy with the result, and his community enjoyed it as well! 
The smoothness I think is what stands out the most with this one.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;To see this emote in action, &lt;a href="https://twitch.tv/shwackgaming91"&gt;visit my client's
stream&lt;/a&gt;!&lt;/em&gt;&lt;/p&gt;</content><category term="Work"/><category term="Animated"/><category term="Emotes"/><category term="Commissions"/><category term="Pixel Art"/></entry><entry><title>Kay's Darth Kissing</title><link href="https://zlg.space/c/work/kays-darth-kissing.html" rel="alternate"/><published>2026-05-21T00:00:00-07:00</published><updated>2026-05-21T00:00:00-07:00</updated><author><name>ZLG</name></author><id>tag:zlg.space,2026-05-21:/c/work/kays-darth-kissing.html</id><summary type="html">&lt;p&gt;&lt;img alt="A pixel version of Darth Vader blowing a kiss to the 
viewer" src="https://zlg.space/images/kay_darth-kissy.png"/&gt;&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img alt="A pixel version of Darth Vader blowing a kiss to the 
viewer" src="https://zlg.space/images/kay_darth-kissy.png"&gt;&lt;/p&gt;


&lt;p&gt;My client requested an emote for her stream that was Vader-themed and showing 
affection. I didn't have much to go on, but immediately had an idea. The 
reference showed Vader holding his hand out with hearts, and my first instinct 
was to focus on the heart, since Vader's helmet doesn't exactly scream "I'm 
lovey dovey".&lt;/p&gt;
&lt;p&gt;The animation consists of Vader blowing a kiss with his hand, while a heart
comes out and throbs as it floats upward. The heart's animation came out really
well, and conveys the juxtaposition of Vader's imposing helmet and a silly
heart. Another job completed!&lt;/p&gt;
&lt;p&gt;This piece tested my ability to work with a monochromatic, complex shape that's 
shiny. It came out pretty solid, but I didn't quite capture the shininess I was 
hoping for.&lt;/p&gt;
&lt;p&gt;My client's community enjoyed it when they went Affiliate and had emotes ready 
to go!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;To see this emote in action, &lt;a href="https://twitch.tv/adhdiskay"&gt;visit my client's
stream&lt;/a&gt;!&lt;/em&gt;&lt;/p&gt;</content><category term="Work"/><category term="Commissions"/><category term="Animated"/><category term="Emotes"/><category term="Pixel Art"/></entry><entry><title>ZLG's Bonfire Emote</title><link href="https://zlg.space/c/work/zlgs-bonfire-emote.html" rel="alternate"/><published>2026-05-14T00:00:00-07:00</published><updated>2026-09-06T00:00:00-07:00</updated><author><name>ZLG</name></author><id>tag:zlg.space,2026-05-14:/c/work/zlgs-bonfire-emote.html</id><summary type="html">&lt;p&gt;&lt;img alt="A glowing sword in a smoldering bonfire" src="https://zlg.space/images/zlg_emote-bonfire.png"/&gt;&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img alt="A glowing sword in a smoldering bonfire" src="https://zlg.space/images/zlg_emote-bonfire.png"&gt;&lt;/p&gt;


&lt;p&gt;After knocking out an &lt;a href="https://zlg.space/c/work/hb-sleepy-ham.html"&gt;emote&lt;/a&gt; so quickly for HatBastion and his crew,
I had &lt;em&gt;Dark Souls&lt;/em&gt; on the mind and was looking for an opportunity to try out
palette cycling in an animation. The first inspiration was the central figure of
the games: the bonfire. It's on the loading screen, it's your respite against
the Hollows, and it could serve as a break or rest time emote for the stream. I
thought it was a great idea, so work began!&lt;/p&gt;
&lt;h2&gt;About Palette Cycling&lt;/h2&gt;
&lt;p&gt;"What is palette cycling?" one might ask. It's a technique where the pixels
in an image don't change, but the assigned colors &lt;em&gt;do&lt;/em&gt;. In older games, the
graphics use what's called an &lt;strong&gt;indexed palette&lt;/strong&gt;, where colors are stored in a
table of numbers, and the image is represented by those color indexes instead.
This reduces the space needed to store image data. When you do palette cycling,
you're re-assigning the color indexes so that the image displays different
colors, usually in a sequence of some kind. It's the animated form of a palette
swap!&lt;/p&gt;
&lt;p&gt;There are two ways to do this that are most obvious: the first is the
&lt;em&gt;repeating&lt;/em&gt; palette cycle. That's used in titles like &lt;em&gt;Super Mario World 2:
Yoshi's Island&lt;/em&gt;, some of the &lt;em&gt;Mega Man&lt;/em&gt; games, and more, usually to give
the water and lava their dynamic feel, or to make energy weapon shots look
otherworldly. The ramp cycles through its colors, and returns to the first
color, which is usually much brighter/darker and a different hue.&lt;/p&gt;
&lt;p&gt;The second palette cycling type is the &lt;em&gt;mirrored&lt;/em&gt;, i.e. it ramps up, and then 
back down. This gives the colors a glowing, embery feel. Lots of lighting, and 
some weapon effects use this property, but it's usually used in places like 
animated tiles to reduce the number of tile updates. It was more present in 
older games where there was limited space to create a complicated engine &lt;em&gt;or&lt;/em&gt; 
enough assets to achieve the look designers were going for.&lt;/p&gt;
&lt;h2&gt;Production&lt;/h2&gt;
&lt;p&gt;I used the &lt;em&gt;mirrored&lt;/em&gt; palette cycling technique to build the bonfire emote. I
started with a ramp from the deep red to the bright yellow and white, built the
emote at its darkest, and then fiddled with the palette in ProMotionNG until it
felt like it was a proper palette cycle that gave it the same glow the bonfire
has on the loading screen in &lt;em&gt;Dark Souls&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;It's important that whatever image editing tool you have allows you to grab an
entire selection of colors and re-assign their indexes live, so you can plan
your art better. While I use &lt;abbr title="GNU Image Manipulation Program"&gt;GIMP&lt;/abbr&gt; for digital drawing, it's ill-suited for
fine-tuned pixel or palette manipulation despite having extensive &lt;em&gt;other&lt;/em&gt; image
editing capabilities. ProMotionNG and GraphicsGale can do this sort of palette
cycling with ease.&lt;/p&gt;
&lt;p&gt;Something I added that other artists might not is two different cycle durations,
so it isn't a uniform animation. One is slightly slower than the other, so it
gives it more of a dynamic feel. I would have added a third speed to it, but I
had trouble getting three variations that didn't feel same-y. I think two is a
good compromise.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This is an emote that you can use on Twitch when you subscribe to &lt;a href="https://twitch.tv/zlg_creates"&gt;my 
channel&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category term="Work"/><category term="Animated"/><category term="Emotes"/><category term="Pixel Art"/></entry><entry><title>HatBastion's Sleepy Hamster</title><link href="https://zlg.space/c/work/hb-sleepy-ham.html" rel="alternate"/><published>2026-05-06T00:00:00-07:00</published><updated>2026-05-14T00:00:00-07:00</updated><author><name>ZLG</name></author><id>tag:zlg.space,2026-05-06:/c/work/hb-sleepy-ham.html</id><summary type="html">&lt;p&gt;&lt;img alt="A hamster sleeping with a bubble coming from his nose" src="https://zlg.space/images/hb_sleepy-ham.png"/&gt;&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img alt="A hamster sleeping with a bubble coming from his nose" src="https://zlg.space/images/hb_sleepy-ham.png"&gt;&lt;/p&gt;


&lt;p&gt;My client approached me looking to make a fun, reusable emote to signify 
sleepiness. Their community is big on cute, fluffy animals, and a sleepy hamster 
was the perfect way to go! Before details got sorted out, I had a sketch of the 
idea ready.&lt;/p&gt;
&lt;p&gt;We spent some time deciding on a good pose for him. Midway through, the ears 
ended up looking "like mushrooms", which I thought was an amusing way to convey 
what was going on, but I understood and we straightened it out quickly!&lt;/p&gt;
&lt;p&gt;In the animation, our hamster boy sighs, a bubble expands quickly, and it
(somewhat slower) deflates in time for another breath. It was satisfying to work 
on something easy to animate and expressive!&lt;/p&gt;
&lt;p&gt;In the end, my client and their mod team had no critiques at all and it was a
hit in the community! Another awesome piece to bring fun to the screen!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Production of this emote was broadcast live on Twitch, with my client's 
permission.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This asset was originally animated, and I lack an easy way to watermark it in
that form. Thus, only a static thumbnail for now. To see it in action, &lt;a href="https://twitch.tv/HatBastion"&gt;visit my
client's stream&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category term="Work"/><category term="Commissions"/><category term="Pixel Art"/><category term="Animated"/><category term="Emotes"/></entry><entry><title>ZLG's MarcusBOOM Emote</title><link href="https://zlg.space/c/work/zlgs-marcusboom-emote.html" rel="alternate"/><published>2026-04-20T00:00:00-07:00</published><updated>2026-09-06T00:00:00-07:00</updated><author><name>ZLG</name></author><id>tag:zlg.space,2026-04-20:/c/work/zlgs-marcusboom-emote.html</id><summary type="html">&lt;p&gt;&lt;img alt="Marcus looking at, aiming and firing a gun at the 
viewer" src="https://zlg.space/images/zlg_emote-marcus-boom.png"/&gt;&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img alt="Marcus looking at, aiming and firing a gun at the 
viewer" src="https://zlg.space/images/zlg_emote-marcus-boom.png"&gt;&lt;/p&gt;


&lt;blockquote&gt;
&lt;p&gt;Robert... I am Leon Kennedy. &lt;em&gt;BOOM&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The full details of this piece are hard to remember, but it mostly boiled down 
to how much I and fellow Twitch peeps enjoy the roflgator memes, so I tried my 
hand at making him pixel style. It came out pretty decent!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This is an emote that you can use on Twitch when you subscribe to &lt;a href="https://twitch.tv/zlg_creates"&gt;my 
channel&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category term="Work"/><category term="Animated"/><category term="Emotes"/><category term="Pixel Art"/></entry><entry><title>HatBastion's Godzilla Holding a Heart</title><link href="https://zlg.space/c/work/hb-godzilla-heart.html" rel="alternate"/><published>2025-10-26T00:00:00-07:00</published><updated>2025-10-26T00:00:00-07:00</updated><author><name>ZLG</name></author><id>tag:zlg.space,2025-10-26:/c/work/hb-godzilla-heart.html</id><summary type="html">&lt;p&gt;&lt;img alt="A cutesy interpretation of Godzilla, holding a heart" src="https://zlg.space/images/hb_godzilla-heart.png"/&gt;&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img alt="A cutesy interpretation of Godzilla, holding a heart" src="https://zlg.space/images/hb_godzilla-heart.png"&gt;&lt;/p&gt;


&lt;p&gt;This little guy was a lot of fun to put together! My client was looking for a 
cute, chubby Godzilla holding a heart for their community to use. I loved the 
idea, and after we pulled together some references and agreed on a few colors, I 
started pixel-pushing.&lt;/p&gt;
&lt;p&gt;A few iterations were all it took to settle on lizard boi's head shape, tail 
arrangement, how he's holding the heart, and so on. The hardest part of this 
piece was figuring out the best way to dither it, to suggest the texture of his 
scaly skin. That's super hard at this resolution, so I opted to shade the 
dithering itself, once a good pattern was established. It's a rarely-used 
technique due to how hard it is to get forms correct, but it worked here.&lt;/p&gt;
&lt;p&gt;The way he blinks and opens his mouth also brought a lot of personality to the
emote, without a whole lot of rework! Since we ran out of vertical pixels to get
a really big &lt;em&gt;RAWR&lt;/em&gt;, I went with turning his head back a little bit, and shaded
the teeth pixels in-place to give the illusion of depth in limited space.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This asset was originally animated, and I lack an easy way to watermark it in
that form. Thus, only a static thumbnail for now. To see it in action, &lt;a href="https://twitch.tv/HatBastion"&gt;visit my
client's stream&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category term="Work"/><category term="Commissions"/><category term="Pixel Art"/><category term="Animated"/><category term="Emotes"/></entry><entry><title>ZLG's Nugget Emote</title><link href="https://zlg.space/c/work/zlg-emote-nugget.html" rel="alternate"/><published>2025-09-24T00:00:00-07:00</published><updated>2025-09-24T00:00:00-07:00</updated><author><name>ZLG</name></author><id>tag:zlg.space,2025-09-24:/c/work/zlg-emote-nugget.html</id><summary type="html">&lt;p&gt;&lt;img alt="A pixelated image of a chicken nugget in honey mustard" src="https://zlg.space/images/zlg_emote-nugget.png"/&gt;&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img alt="A pixelated image of a chicken nugget in honey mustard" src="https://zlg.space/images/zlg_emote-nugget.png"&gt;&lt;/p&gt;


&lt;p&gt;This was one of the "unhinged" emotes that my community wanted, as part of a 
channel subscription goal. It all started when I was messing around in 
ProMotionNG on stream, and made something vaguely chicken nugget shaped.&lt;/p&gt;
&lt;p&gt;It evolved into quite a funny sight: it dunks itself into a little vat of honey
mustard, and wiggles around as it makes a face that could only be described as,
uh, &lt;em&gt;sensual&lt;/em&gt;, before being lifted out of the vat. If that sounds kinda weird,
then I accomplished my job as artist.&lt;/p&gt;
&lt;p&gt;The little particles of honey mustard were &lt;em&gt;so&lt;/em&gt; satisfying to put together and 
animate correctly. I was laughing nearly the whole time!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This is an emote that you can use on Twitch when you subscribe to &lt;a href="https://twitch.tv/zlg_creates"&gt;my 
channel&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category term="Work"/><category term="Emotes"/><category term="Pixel Art"/><category term="Animated"/></entry><entry><title>ZLG's Zelda II-themed Stream Layout</title><link href="https://zlg.space/c/work/zlg-z2-layout.html" rel="alternate"/><published>2025-08-09T00:00:00-07:00</published><updated>2025-08-18T00:00:00-07:00</updated><author><name>ZLG</name></author><id>tag:zlg.space,2025-08-09:/c/work/zlg-z2-layout.html</id><summary type="html">&lt;p&gt;&lt;a href="https://zlg.space/images/zlg_z2-layout-clean.png"&gt;&lt;img alt="A stream layout inspired by Zelda 2: Adventure of Link" src="https://zlg.space/images/thumbs/zlg_z2-layout-clean_thumb.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://zlg.space/images/zlg_z2-layout-with-source.png"&gt;&lt;img alt="A stream layout inspired by Zelda 2: Adventure of 
Link, with source" src="https://zlg.space/images/thumbs/zlg_z2-layout-with-source_thumb.png"/&gt;&lt;/a&gt;&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;a href="https://zlg.space/images/zlg_z2-layout-clean.png"&gt;&lt;img alt="A stream layout inspired by Zelda 2: Adventure of Link" src="https://zlg.space/images/thumbs/zlg_z2-layout-clean_thumb.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://zlg.space/images/zlg_z2-layout-with-source.png"&gt;&lt;img alt="A stream layout inspired by Zelda 2: Adventure of 
Link, with source" src="https://zlg.space/images/thumbs/zlg_z2-layout-with-source_thumb.png"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;When I received &lt;em&gt;ProMotionNG&lt;/em&gt; as a gift, the first thing I wanted to explore was 
its &lt;em&gt;color bit-depth&lt;/em&gt; and &lt;em&gt;tiling&lt;/em&gt; capabilities. I was trying to come up with 
something new to do for my stream, and the first thing that came to mind was a 
new layout. I wanted to use a game that you don't see represented often in 
stream layouts, but was a good showcase of the game's flavor and what I 
personally like about it as a game.&lt;/p&gt;
&lt;p&gt;I settled on &lt;em&gt;Zelda II: The Adventure of Link&lt;/em&gt;. It's a "black sheep" within its
own series, but it is still a good game and concept under the layers of jank
and general lack of budget put into the game. I have always wanted Nintendo
to come back to this game and give it a proper re-imagining, while remaining
more-or-less faithful to the original. They'd done this before with &lt;em&gt;Metroid:
Zero Mission&lt;/em&gt; and &lt;em&gt;Samus Returns&lt;/em&gt;, oddly both from the same franchise. Why
shouldn't &lt;em&gt;Zelda II&lt;/em&gt; get a modern Metroidvania re-imagining? But I digress.&lt;/p&gt;
&lt;p&gt;To some extent, this layout was an experiment, of sorts. I went into this 
project wanting the answer to a few questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is ProMotionNG something I can lean on for professional work?&lt;/li&gt;
&lt;li&gt;Can I leverage my prior Javascript and PICO-8 knowledge to animate in a 
  browser source?&lt;/li&gt;
&lt;li&gt;Can I produce layouts that are fun and legible?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Planning&lt;/h2&gt;
&lt;p&gt;Before I began any brainstorming, I wanted to break down what a stream layout 
really &lt;em&gt;is&lt;/em&gt; and what it typically consists of. This is a broad question to ask, 
because everyone's stream is a little different. Some people do anonymous follow 
acknowledgement, others want to shower the follower in attention and welcome 
them. Some streamers want to show chat on screen, some don't. You get the idea. 
But, to build a layout, you need to account for these differences in 
preferences, and make things in a composable or movable way.&lt;/p&gt;
&lt;p&gt;I started with a sort of template or blueprint for myself, aligned to a 16x16 
grid. The core elements my layout takes into account are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Logo&lt;/li&gt;
&lt;li&gt;Stream Title&lt;/li&gt;
&lt;li&gt;Video Capture (i.e. "the content")&lt;/li&gt;
&lt;li&gt;Webcam/VTuber&lt;/li&gt;
&lt;li&gt;Reactiv Fugi or other VC participant overlay&lt;/li&gt;
&lt;li&gt;Stream Goals&lt;/li&gt;
&lt;li&gt;Accolades (last subscriber, follower, bit contributor)&lt;/li&gt;
&lt;li&gt;Chat Box&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From the beginning, I knew I wanted a sort of "town" along the top, the 
curtained area in the top right, and some representation of every dungeon's 
tileset, on the way down to Thunderbird. I also wanted contrast in the layout 
instead of all blue sky, red caves, or darkness.&lt;/p&gt;
&lt;p&gt;In the bottom right is where miscellaneous widgets and other things go, so I 
used that area as level design experimentation, and settled on an underwater 
ruin -- something that wasn't actually in &lt;em&gt;Zelda II&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;Building&lt;/h2&gt;
&lt;p&gt;ProMotionNG has support for tilesheets, which you can use to build scenes in the 
editor, much like you would in an actual video game. It takes some finagling 
with modes, but it's doable.&lt;/p&gt;
&lt;p&gt;It was hard for me to keep track of layers when I was building. One idea would 
lead me down the road to another layer, and I'd come back to another task and 
screw it up. I was still gaining familiarity with the tool, though, so that's to 
be expected.&lt;/p&gt;
&lt;p&gt;Along the bottom, I gave myself space for the accolades; essentially just
acknowledging the last people who contributed to the channel in some way. Some
people really like to see their username in these fields, because it gives them
a sense of contribution and belonging. I like to promote this, so I wanted each
accolade to have its own theme and NPC association. I set up browser sources
with both StreamElements and Firebot for the usernames, so some tweaking of
fonts and coordinates was necessary.&lt;/p&gt;
&lt;p&gt;The lavafall was sort of a cop-out, because there wasn't much room to do 
something impactful. It wasn't going to lead anywhere, and it's in the space 
that would be covered when a 16:9 source is visible. So, I made a drop-off with 
the tiles the game had, and set up a sort of platform that maybe people would be 
flung into. I mean, there's a giant hole near the King's Tomb, so it's not 
unlikely for there to be holes all over the place! Hah!&lt;/p&gt;
&lt;p&gt;Along the left side, I wanted to have one floor per dungeon style, and culminate 
in a room containing the Thunderbird and the last piece of the Triforce. On each 
floor, I wanted the dungeon's primary item, and a notable enemy from that 
dungeon that would be easy enough to program its animation in Javascript.&lt;/p&gt;
&lt;h2&gt;Animating&lt;/h2&gt;
&lt;p&gt;Animating tiny pixel art on a giant 1080p canvas &lt;em&gt;can&lt;/em&gt; be done with some crazy,
giant GIF or other format, but realistically you should be taking the tiny
graphics and doing things with them to animate. &lt;em&gt;Why?&lt;/em&gt; It's easier to change if 
you mess something up, generally, and it can make parts of your workflow 
repeatable on other assets. Reusability is a virtue in asset production!&lt;/p&gt;
&lt;p&gt;In an OBS environment, that means either hooking graphics up to plugins, or
a browser source. I wanted something easy to use &lt;em&gt;and&lt;/em&gt; share, for example
if I made stream layouts for other people in the future. That calls for a
browser source. Plugins are nice, but they can change between versions, their
compatibility with OBS versions can change over time, and sometimes their
developers lose interest in maintaining it or are pushed away from development
because of some sort of drama. This makes a self-contained browser source
a longer lasting artifact to use -- at least for animations -- and I can
reasonably guide someone on extracting it somewhere and adding it to their OBS
scene.&lt;/p&gt;
&lt;h3&gt;Coding&lt;/h3&gt;
&lt;p&gt;For starters, &lt;strong&gt;I do not like Javascript&lt;/strong&gt;. It's the jankiest language I've
ever used, and that's saying something because &lt;em&gt;I also know PHP&lt;/em&gt;. Dealing with
differences between Firefox and &lt;abbr title="Chromium Embedded Framework"&gt;CEF&lt;/abbr&gt; was also a pain in the ass. That said,
the &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; API isn't the worst thing I've seen. I chose that because the
built-in animations API is for the curve-based presets that are also used by
CSS. I had odd results when I tried to "just use the Animations API" like
current advice indicates. When you're doing pixel-level manipulations or trying
to re-create movement from a video game, you need to &lt;em&gt;build the animation like a
video game&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;So, that's what I did. There's a function you can hook into that's tied to the
refresh rate of the canvas element. That's effectively &lt;em&gt;a frame&lt;/em&gt;, so I used that
as my primary loop event, and built each animated entity as a simple object
containing a few fields like &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt;, &lt;code&gt;current_frame&lt;/code&gt;, and so on. This is
close to game development with PICO-8, since Javascript objects and Lua tables
are similar. From there, all animation would simply occur in each object's
&lt;code&gt;update()&lt;/code&gt; method, and track state internally. No more image editing from here,
it was all "update this sprite at this time" or "wait this many frames, and do
this" in varying forms.&lt;/p&gt;
&lt;p&gt;Flying or floating objects were harder to implement, partly due to unfamiliarity 
with sin() and cos() on an intuitive level. Some day I'll be able to abstract it 
in my head, but for now it was a lot of tweaking before I got something that 
resembled the original behavior. The Thunderbird in particular took a lot of 
iteration before I felt it was more than a static oval path.&lt;/p&gt;
&lt;h2&gt;Result&lt;/h2&gt;
&lt;p&gt;I'm largely happy with the result! It was a great learning experience, too.
There's a lot of animation on the screen, the colors are bright, it's just solid
for classic 4:3 gaming. It's not suited for every game, however, so I paired it
with a transluscent Color Source so I can darken the scene for darker content.
It retains the same look while giving it a "lights off" feel.&lt;/p&gt;
&lt;p&gt;The answer to all three of my questions was "Yes," for what it's worth. :)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;DISCLAIMER: The original game tiles belong to Nintendo Co., Ltd. The only
ownership expressed here is over the layout design itself and the code used to 
animate sprites.&lt;/em&gt;&lt;/p&gt;</content><category term="Work"/><category term="Stream Layout"/><category term="Pixel Art"/><category term="Animated"/></entry><entry><title>Tamago_Bento's Tamagomaki-san and Tamagomaki-neko</title><link href="https://zlg.space/c/work/tb-tamago-cat.html" rel="alternate"/><published>2024-12-15T00:00:00-08:00</published><updated>2025-08-07T00:00:00-07:00</updated><author><name>ZLG</name></author><id>tag:zlg.space,2024-12-15:/c/work/tb-tamago-cat.html</id><summary type="html">&lt;p&gt;&lt;img alt="a pixelated tamago-maki with cute 
eyes" src="https://zlg.space/images/tb_emote-tamago-san.png"/&gt; &lt;img alt="a pixelated tamago-maki 
cat" src="https://zlg.space/images/tb_emote-tamago-cat.png"/&gt;&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img alt="a pixelated tamago-maki with cute 
eyes" src="https://zlg.space/images/tb_emote-tamago-san.png"&gt; &lt;img alt="a pixelated tamago-maki 
cat" src="https://zlg.space/images/tb_emote-tamago-cat.png"&gt;&lt;/p&gt;


&lt;p&gt;After a while of streaming, my partner wanted to support me by visiting the 
stream and participating in chat when she could. My community warmed up to her 
immediately, and encouraged her to get an avatar, broadcast herself, and so on.&lt;/p&gt;
&lt;p&gt;Since my partner likes Japanese folklore and cuisine, a tamago-maki was the
perfect object to make a mascot of. This is also a very Japanese thing to do;
just look at the imagery used for all sorts of things from PSAs to warning
labels. There's a &lt;em&gt;kawaii&lt;/em&gt; flavor to things.&lt;/p&gt;
&lt;p&gt;In the &lt;em&gt;kawaii&lt;/em&gt; spirit, I gave cute pink cheeks to the sushi, and in other
versions, it has a mouth. She later came back and asked me for a cat, which I
happily obliged and animated for her. My community enjoyed this quite a bit,
too!&lt;/p&gt;
&lt;p&gt;The weird textures like rice, seaweed, or shaped egg, made these emotes fun
projects that tested my skills. We usually shorten it to &lt;em&gt;tamago-san&lt;/em&gt; and 
&lt;em&gt;tamago-cat&lt;/em&gt; when talking about them, because it's usually clear it is in 
fact, sushi, and not just an egg. :)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;You can enjoy both of these emotes on Twitch by subscribing to &lt;a href="https://twitch.tv/tamago_bento"&gt;Tamago_Bento's 
channel&lt;/a&gt;. They are only available on my channel 
for a limited time.&lt;/em&gt;&lt;/p&gt;</content><category term="Work"/><category term="Pixel Art"/><category term="Emotes"/><category term="Animated"/></entry></feed>