Reed Does Stuff Logo

Stufflog 001 β€” Week One


why

I am doing a lot of stuff, but I am not finishing a lot of stuff. I don't usually share things that aren't finished, but that may make it seem like I'm not doing anything (to you, and to me).

I am almost constantly running around like a cracked squirrel, following the direction of the most exciting smell. I want to record my journeys on all of these branches, even if none of them bear fruit.

🐿️🍊

what

πŸ•ΉοΈ games

Most of my time has been spent trying to make a prototype for a 1–4 player online co-op multiplayer game. I've had so much fun in the last few years with games like this:

And looking to the past, so many of my favorite games also fit this format:

Also, there's a bunch of things I've wanted to learn for a while now:

I'm using this project to learn about all of these things at once (TASTE THE SYNERGY). ECS is one of the most exciting. I recently found this amazing Stack Overflow answer describing the difference between ECS and a typical object-oriented approach. When I saw this, it finally clicked in my brain. Here's a snippet:

With an OOP architecture, you usually end up with code which if unrolled to a purely procedural style would look like this:


for each entity
    if entity can move
        move(entity)
    switch entity attacking type
        when shooter
            shoot(entity)
        when melee
            meleeAttack(entity)
        when nothing
            doNothing(entity)  
    if entity has health
        checkIfDead(entity)

While with an ECS architecture, the resulting logic would look more like this:

for each entity which can move
    move(entity)
for each entity which can shoot
    shoot(entity)
for each entity which can meleeAttack
    meleeAttack(entity)
for each entity which has health
    checkIfDead(entity)

This really blew my mind 🀯, because I've gotten stuck in giant spaghetti messes like the first code block, with no clue how to resolve them. With experience, you can absolutely use either of these methods to great effect. But when you're learning, it's easy to get stuck doing things in a really inefficient way, and not even know it.

This pattern is great for any sort of common behavior you want to apply to all kinds of game objects. It might be less clear how to reuse logic with the OOP approach because you have to choose which class the behavior should live in, deal with inheritance, etc.

Back to the prototype... Here's what I have so far:

  1. Draw two shapes on the screen
  2. Move the shapes around with keyboard keys
    • πŸŸ₯ with W A S D
    • πŸ”΅ with ↑ ← ↓ β†’
  3. Fetch your Steam friends list (woohoo!)

Two shapes moving

Next steps: Control a shape from one computer, and see it move on another. I think that'll be super exciting and give me a lot of juice.

πŸ–ŒοΈ art

HEAT

I was rewatching HEAT, which is just so incredibly good, and paused on a frame I loved. It has so many different Korean typefaces, and the colors and lighting are delicious. Apologies about the small size... I'm getting that figured out.

HEAT reference

I started recreating it in Procreate, tracing a few rough sketch lines so I don't get too far off with the placement of things. For this piece, I'm much more concerned with learning about colors, lighting, and reflections. I've never painted anything quite like it, so I want to understand it. I'm color-picking right from the reference and then blocking in areas. Doing this makes you realize how different perceived and actual color are (If I tried to guess any of these colors, I'd be totally wrong).

Also, it is so fascinating how you can start to get a sense of the reflections even though it's still in such an early state. I'm excited to see how this turns out.

HEAT WIP

Le Poisson Steve

TikTok is currently being swarmed by one of its all-time loveliest trends: A tiny french song about an orange fish who goes by Steve, and has arms and legs. People have been interpreting this in so many different ways, whether it's animation, woodworking, or yarn. It reminds me of the adult swim trend from way back. It's just a perfect format for someone to jump off from.

Shoutout to tomo for the song, and vigz for the animation on the original video that exploded and started this beautiful frenzy.

For my take, I wanted to try pixel art. I was thinking about a carousel that pans right to left as the song plays, showing words to match up with the song. I just have some rough ideas down for this so far, but I think it'll be fun.

Le Poisson Steve WIP

πŸ•ΈοΈ open source

I did almost nothing here, but I'm still proud of it: A tiny docs change to make the Rust By Example docs a bit less confusing.

from

// Iterate over `v` in `vec` while enumerating the iteration
// count in `count `.
for (count, v) in vec.iter().enumerate() {
    // For every element except the first, add a comma.
    // Use the ? operator to return on errors.
    if count != 0 { write!(f, ", ")?; }
    write!(f, "{}", v)?;
}

to

// Iterate over `v` in `vec` while enumerating the iteration
// index in `index `.
for (index, v) in vec.iter().enumerate() {
    // For every element except the first, add a comma.
    // Use the ? operator to return on errors.
    if index != 0 { write!(f, ", ")?; }
    write!(f, "{}", v)?;
}

πŸ₯½ vision

Oh, I'm also working on a secret cool demo thing for the Vision Pro. It's a small prototype that I think could be pretty sweet. It involves:

  1. Fetching a bunch of things from a specific company's public GraphQL API
  2. Visualizing those things as objects on a flat surface in front of you
  3. Interacting with them and letting them collide with each other and obey gravity

I don't have anything to show here quite yet, but I've made great progress on both parts. I've never actually used GraphQL, despite hearing about it for years, and it's really interesting!

Oh, and one awesome thing about Vision Pro + Reality Composer Pro, is that it uses ECS! That means I can tie together all these different interests into one project. I've visited Apple HQ for a couple Vision Pro labs and talked to some of the engineers that worked on Reality Composer Pro / Vision Pro β€” they really knocked it out of the park.

how

result

Nothing finished, but much done.

I'm really happy with how it went. I hope I can reduce the overhead for making blog posts so I can spend less time on this, and more time on stuff. Half of Week Two (so far) has been spent making this blog.

These probably won't come out every week, but I'll do my best to catalog any future doing of stuff. Back to the cave!

✌️