Marty McGuire

Recent Posts

Tue Sep 16
🔁 Reposted https://victorwynne.com/stop-scapegoating/

Stellar Scrapm'n is hauling on the Playdate

Last weekend, I joined forces with my buddy Hunter to make a game for PlayJam 8, a game jam for the adorable yellow Playdate game console.

Introducing: Stellar Scrapm'n! Descend into debt as you ascend to the stars in a clunky little hauling ship. Crank to steer through rocky caverns in search of valuable junk you can sell to pay off a little bit of that financial liability at a time. Also: robots will shoot at you, pew pew, watch out!

Graphic design is my passion.

If you're so inclined, we'd be grateful if you checked it out! You can check out our jam entry to download, rate, and review.

If you have a Playdate, you can sideload the game. If you don't have a Playdate, you can still check it out by grabbing the Playdate dev kit and using the Playdate Simulator!

The review period is open until September 22nd. Check out the other submissions, too! There's slightly more than a dozen little games to check out.

Thanks for reading. You may also enjoy Hunter's post about the game / jam. Feel free to eject at this point because what comes next is-

Something like a dev log

A skippable cutscene for context

Hunter and I are both computer science boys with web business jobs. We don't write much code that looks like game code day to day, but we do enjoy dabbling in "the game dev". Hunter has done some pretty impressive projects in Unity in the past, I enjoy working through Godot tutorial content to keep up with that community, and we are both drawn to the rinky-dink little Playdate console with its retro-aesthetics, thoughtful constraints, and inviting dev tools and documentation.

Before we knew about Playjam, Hunter had been building up a Metroidvania game, inspired by working through SquidGod's YouTube tutorials for working with the Playdate. I recognized a lot of the fundamentals from working through a similar Godot course from Heart Gamedev. Neither of us had done a lot with Lua, but the Playdate API and docs offer a lot of structure for folks coming in with experience working with other languages.

When PlayJam 8 came across our radar, it seemed like the perfect opportunity to work on something together, sharpen our skills, and have fun making a thing. So, we cleared our calendars and set our expectations for success. How hard could it be? (This is foreshadowing.)

It starts with a theme

PlayJam8 kicked off on Friday with the announcement of the theme: ascending. Hunter and I (along with my producer, Amy) brainstormed a lot of potential concepts. Being nerds, we thought a lot about space and our nostalgia for retro games about space.

This is when Hunter introduced me to Space Shuttle Project for the Nintendo Entertainment System.

We did not make a "shot for shot remake" of Space Shuttle Project. You are free to imagine what it would be like!

We were more interested in making a game where you are in space, rather than getting to space. Unfortunately once one is in space, the concept of "ascending" becomes murky as references like "up" and "down" become negotiable. Another thing that is negotiable is money and getting to space is expensive. Hunter was reminded of Hardspace: Shipbreaker where, good news, you've got a cool space job but, oh no bad news, you're in crippling debt and the exchange rate for your hard labor will not fix that. Maybe you can ascend to financial freedom??

This sounded like a fun kernel of an idea, but of course we needed something simpler to implement. I was reminded of one of my favorite childhood games, Solar Jetman: Hunt for the Golden Warpship. This old ad for the game, in my opinion, does not explain the gameplay very well, but the vibes are incredible:

A vaguely game-shaped collection of mechanics

Based on our inspirations, we planned more-or-less these features:

  • A little ship that can navigate by rotating 360 degrees and using a thruster. "Space-like" in that there is no drag - objects in motion stay in motion.
  • Navigating cavernous rocky spaces which can damage you if you bump into them.
  • Goodies to pick up and carry.
  • A base where you can drop off goodies for points / money / upgrades.
  • Obstacles and enemies to interfere with your fetching.
  • Weapons to destroy obstacles and enemies.
  • Multiple levels to progress through as you strip each environment of resources.
  • Interstitials for story.

Friggin' tools

Here are some things that we used:

Struggles

We had a lot of quick wins early on, but stubbed our toes many times. I'm tired, so this won't be hour-by-hour or day-by-day. Feel free to skip this unless you are future me (or Hunter)!

A recurring theme for me personally: I often knew the concepts for what I wanted to accomplish but had little or no practice directly with the tools, like LDtk and Aseprite. Climbing multiple learning curves during a crunch is stressful!

It's a little tricky to get curvy "cavernous" shapes with 2D tilemaps, but it's not too bad. What is bad is the feeling you get when the Playdate's native "axis-aligned rectangles only" physics system goes haywire every time your ship touches terrain. We reined in a lot of the chaos, but there are still plenty of places where a wall tile's bounding box doesn't line up with the actual pixels, making it look like your ship has suddenly stopped for no reason, or like you're embedded in the rock.

I went down a lot of rabbit holes for the physics issues, including evaluating alternate physics engines (which usually require building C extensions and wholly separate level-creation tooling) and adding a layer to take over to see if there was "really" a collision when the Playdate says there was. We simply ran out of time on this.

The other major toe-stubber was our choice to bring in, but not commit to, the Noble Engine.

The built-in concepts of Scenes that you can move between, with Noble taking care of transitions and lifecycle management, sounded like a great way to separate out concerns. Our focus started on the GameScene, which holds the level and player and enemies and collectibles and- you know, gameplay.

Unfortunately, we did not test our understanding of how Noble manages multiple scenes until very late. It turned out we were making sprites that Noble could not clean up on transition, loading things before Noble was ready, expecting things to be cached that Noble was throwing away, and more. A mess!

After finding this out so late, my instinct was to cut our losses and drop features like a title screen and different levels, which would have let us focus on building the game as if Noble's scene management stuff wasn't there. Unfortunately, I ignored that instinct and spent a lot of time moving code around, chasing down references, touching many parts of the project, breaking-and-fixing, finally getting things barely-working. The result is that we got our title screen, but we didn't have time to add any actual interstitials or extra levels. So... the menu basically serves no purpose, haha! Bonus: I accidentally left in a debug option in the player controls so you can bounce yourself to the title screen and back again and resume with everything exactly where you left it. And by "exactly where you left it" I mean it reveals some object cleanup bugs that we missed, as all enemies, collectibles, and even fired bullets suddenly return from the void! 😂

This was a triumph

I tend to focus on the negative, but this whole thing was pretty fun and we learned a lot! To ask "what would I do differently?" would be foolish - time only moves in one direction - I am grateful for the experiences and will carry this learning into the future.

Hunter and I both want to keep filling in the holes in the project, and (eventually) release something that feels like a complete game experience. I think that rules!

I look forward to becoming more fluent with the tools that were new to me! Theory is not the same as practice, and I could use more practice. Particularly the meta-practice of doing things that I am not already "good" at. Practice at being bad at something and struggling to get better.

Hell yeah!

Wed Sep 10

“Happy” March 2020, 2020. Year 5½ of “two weeks to flatten the curve”. 🫠

I was able to get the updated COVID-19 booster, today. Nice to see some systems are working.

Sat Sep 6

🗓️ The Level Up

📆 Add to Calendar: iCal | Google Calendar

The Level Up is an indie improv showcase. Join us as we watch amazing New York indie improv talents gain XP on the Magnet stage, unlock new achievements, and reach new milestones. Or do comedy.

Come support Michael as he dons his hosting-duties cap for three exciting indie teams!

  • No Fomo
  • Terrible Blessing
  • Ventson

I’ll be playing in with Michael and the rest of the Level Up!

Looking forward to it! And to seeing you there!! (Yes, you. Come on out!!!)

Saturday September 6th, 2025 @ 10:30pm
Magnet Theater
254 West 29th St (btwn 7th and 8th Ave.)
New York City, NY 10001
Tickets $10: https://magnettheater.com/show/tickets/59956/

Thu Sep 4

Our shop does not have a public restroom for customers, so we ask for your understanding! Yes, yes!

Wed Sep 3
☑ RSVP'd to an event https://events.indieweb.org/2025/11/indiewebcamp-berlin-oNMvxRpOvfEs
post
TBD Berlin Germany
IndieWebCamp Berlin
I'm going!

It’s been a while! Excited to return to IndieWebCamp, in Berlin, no less!

🔖 Bookmarked https://anthonymoser.github.io/writing/ai/haterdom/2025/08/26/i-am-an-ai-hater.html

“I became a hater by doing precisely those things AI cannot do: reading and understanding human language; thinking and reasoning about ideas; considering the meaning of my words and their context; loving people, making art, living in my body with its flaws and feelings and life. AI cannot be a hater, because AI does not feel, or know, or care. Only humans can be haters. I celebrate my humanity.”

Tue Sep 2

Of course we try to forget some of our most painful memories, but there’s always one lurking.

Mon Sep 1

Whaddaya mean I’m not excited enough? It’s my day off, OK?

Fri Aug 29
🔖 Bookmarked https://zephnet.biz/posts/phillyhwc1recap/
Thu Aug 28

It’s been real nice chatting with ya, kiddo! That’s the best part about camping… Makin’ new friends!

Wed Aug 27

It felt so real. Wargh! I just lived the trauma all over again!

Tue Aug 26
🔁 Reposted https://blog.stephaniestimac.com/posts/2025/08/social-media-detox/

See, I have a bit of a problem with letting other people define me. I’ve really gotta work on that…

Mon Aug 25

I’ve really got to stop taking my work with me on vacation…

Sun Aug 24

Show me a creature who does not enjoy a breath of fresh air, and I will show you a stinky fish, yes?

Fri Aug 22

Now is Pavé’s personal time. Please! No autographs. …Forgive Pavé. He is tired.

Thu Aug 21

For some reason, there’s a new “suddenly trip and fall down” mechanic in Animal Crossing New Leaf tonight.

Wed Aug 20

I’m probably more comfortable with turnips than I am with people!

Tue Aug 19

Look, the sleigh is great, but it doesn’t exactly run on unleaded. This is my daily driver!

Mon Aug 18

Does my hair look all right, maaan? I like to look good when I fly my freak flag, you know?

Sun Aug 17

There’s still plenty more to come, so please enjoy them until your body just can’t stand the fun!

Sat Aug 16

Most people have to earn their sea legs, but mine are already attached! It’s land legs that elude me.

Fri Aug 15

The profit margin on our clothing is so low, no matter how hard I work, it feels like I get nowhere!

Thu Aug 14

I’ll let you in on a little secret, OK? THE SUIT IS TAKING OVER MY MIND.

Wed Aug 13

Hey, I can’t be a terrifying symbol of doom, darkness, and despair 365 days a year, you know?

Tue Aug 12

It is done. Done like the past. Tomorrow is here!

Sun Aug 3

Machine Knitting Continues

Heck yeah, I’m retro-posting. Hello from the future!

It’s August 3rd, 2025 and time for more machine knitting!

A two-story white brick building with arched windows on a sunny day. A street sign in the foreground indicates this is the corner of Whitwell Place and Carroll St.
A nice clear morning at Brooklyn's Textile Art Center
Knitting machine on a steel stand next to a small white stool in a workshop with a worn wooden floor.
Hello, old friend

I started the day practicing some of the techniques from day one of the class.

Practicing some naive increasing and a bad rescue of a dropped stitch.

I have forgotten the first technique Elaine taught us for the day, but it let us work in a second yarn by hand as each row is knit. Seems like maybe a cool way to work in wires or conductive thread??

Chunky black yarn with sparkles in it laid across a bed of machine knitting needles.
This chunky yarn! Pull half the needles forward and lay it across them. This also requires enabling the brush wheels on the knitting carriage (not shown).
The effect is subtle on the "knit" side (left photo), which is generally the outside. The bulk of the worked-in yarn remains on the "purl" side (right photo).

Next up, we learned about putting working needles in hold, aka short-rowing, which allows you to “grow” sections of the knitting by adding rows just to one section, while other parts of the work stay put.

Next it was time for two-color patterned knitting with fair isle, powered by punch cards!

I grabbed this floral pattern. The arrow shows you which way it goes in the machine. Once it's fed halfway, you use plastic clips to join the start and end, forming a loop so the pattern repeats!

The knitting carriage needs several adjustments to begin following the punch card pattern.

Start with the carriage to the left, turn the knob to 'KC', and knit one row in your main color from left-to-right. This will set the needles for the first row of the pattern.
With the needles set and the carriage on the right, Press the 'MC' button and add the contrast yarn.

Then… knit a bunch of rows! Here’s a little video.

My hand moving the carriage back and forth. The carriage clatters as it moves needs. The punch card reader clicks and advances as each row is finished.

When you’re done patterning, you can snip the contrast yarn, turn the carriage back knob back to ‘NL’ and disable the ‘MC’ button, then proceed knitting in your main yarn color as normal.

Fair isle knitting creates "floats" on the back (purl) side, which is what faces us while we knit. Seen from the correct (knit) side, the pattern is revealed! Also, it looks like I dropped a stitch at some point and produced a little snag here. Oh well!

After a lunch break, we spent most of the rest of the time practicing what we’d learned so far. Near the end, Elaine taught a few important techniques that you do off the machine.

The diagram shows one way to make a "gauge swatch", which is required to find out how many stitches and rows produce an inch of finished knitting. On the right is an example of mattress stitching, used to join the edges of knit pieces together.

Note to self, or anyone who wants to book some studio time to do some machine knitting at the TAC:

There's a cabinet for the knitting machine accessories and here are some context clues for finding them!

And that was the end of the class! I learned so much, but mostly that I have so much yet to learn.

Knitting machine tucked away with transparent plastic protective cover.
Goodbye, new friend.

Besides the big swatch of worked-in yarn, here’s the rest of my swatches for the day!

Several knit swatches on a countertop, held flat with coasters.
What a haul!

From top-to-bottom, left-to-right:

  • Blue swatch with yellow short-rowed triangle sections.
  • Blue and red swatch partially mattress-stitched into a tube, with several lace holes.
  • Long blue and yellow swatch with practice sections of short-rowing and lace, as well as a long section of floral fair isle pattern. The end of the piece is ragged from a failed bind-off.
  • Fair isle swatch with blue-on-purple.
  • Fair isle swatch with purple-on-blue.
  • Long purple swatch with sections of blue.
  • Blue-on-yellow fair isle swatch.
  • Yellow-on-blue fair isle swatch.
  • Short blue-on-yellow fair isle swatch with two ragged edges: one from removing the swatch without binding off, and one (I think) because I had a "weird" number of stitches compared with the pattern, leading to some edge stitches being dropped.

Will I continue my machine knitting journey?? Stick around to find out! Subscribe in your favorite feed reader, and so on, and so forth!

Sat Aug 2

Happy HTML Day (I'm machine knitting Edition)

Happy HTML Day!

I'm taking a two-day machine knitting workshop intensive, so I did not have the energy to join the folks at the Valentino Jr. Park meetup.

Instead I am writing this post (in HTML) while watching along to Jenn Schiffer's "HTML Day From Home (hdfh)" stream.

The workshop is Machine Knitting 101, from Brooklyn's Textile Arts Center's line of Machine Knitting classes and workshops. Today, our instructor Elaine walked us through some of the basics.

  • The parts of the machine (Brother KH-840s. Punch card reading cuties from the 1970s!)
  • Choosing yarn
  • Threading the machine with tension
  • Casting on with "e-loops", comb and weights
  • Knitting rows, managing weights
  • Moving stitches horizontally and vertically, making holes and ladders
  • Blending colors and swapping colors
  • Increasing and decreasing the number of stitches not-at-the-edge
  • Casting off (the hardest thing we covered, probably)

We bought a knitting machine, a Brother KH-930e, back in, checks notes, =chokes= like 2011 or 2012?? Enticed by Becky Stern's post on on hacking the KH-930e. As it turns out, the electronics hacking was NOT the difficult part of working with one of these machines! After some rounds of buying replacement parts and maintenance, we got a couple of little projects out of it, but found it challenging enough to work with that we stopped messing with it. But, we still have it, and I'm excited to try again!

Here's a photo of the workshop syllabus, as well as some of my debris from today's workshop.

A gray countertop covered in messy machine knit samples of purple and green yarn

From top to bottom, left-to-right:

  • A long run of purple and green blocks, with a mix of clean color changes (where you cut one yarn and start antoher) and blending (where you knit with two yarns at once!). This run also includes a "flap" where I used vertical stitch movement to "close up" a small block of green.
  • A long run of purple yarn with holes and "wrinkles". These are tests of moving stitches horizontally (holes) and vertically (wrinkles).
  • An unraveling run with one block each of purple and green. A failed attempt at casting off.
  • A small unraveling block of purple. A failed attempt at casting off.
  • An unraveling run with two blocks of purple divided by a small block of green. A failed attempt at casting off.
  • A non-unraveling block of purple. My one success at casting off!
  • An unraveling block of purple. A failed attempt at casting off.
  • A run with a large green block and a large tapering purple block. Practice at increasing and decreasing stitches. I decreased down to one stitch lol.
  • A small unraveling block of green. A failed attempt at casting off.
Update from the future: here are some more photos from the day!

Thank you for reading. I hope to post more knitting projects. I hope to read your HTML Day creations!

'til next time!

Wed Jul 30

Retro Dot Cards Season One

Game Boy Advance, e-Reader, and a pack of cards. These photos don't really convey the excitement of the moment, haha.

Had a blast with Retro Dot Cards Series One for the Nintendo e-Reader from retrodotcards.com, created by Matt Greer.

That's right, new games printed on playing cards that can be scanned with a device from ~2002 using your Game Boy Advance or GameCube with Game Boy Player.

I think it's so cool that a dev community exists for these obscure devices, and that Matt has taken it so far as to write a bunch of games, produce them as cards, have them printed and packaged professionally, and sell them.

I have a nicely refurbished Game Boy Advance, but did not have an e-Reader at the time I learned of these, so I took to the e-Bay to find one. It actually took a while, and I had to pay more, to find an English version, as the original Japanese versions are more common. While you can buy Retro Dot Cards that work on any version of the reader (English, Japanese, or English-on-Japanese), if you plan to play other retro cards be aware that you need to match their language and region to your device or they won't work.

The cards and packaging from Retro Dot Cards were high quality and quirky. I enjoyed shuffling through them the first time. I cared less for trying to nicely fan them all out for a photo, above, because I wanted to get to playing them!

Each game (or app) is loaded with one to four "swipes" of a card. For example, Solitaire is a single card that you load by scanning one side, rotating the card 180 degrees, and scanning the other side. Exo Attack comes on two cards, for a total of four swipes through the reader.

The classics, like Solitaire, e-Snake, and Bomb Hunter (minesweeper) are minimalist, but well-made, colorful, and snappy to play. Exo Attack is a shoot-em-up with just one thing to shoot - the same boss with different behaviors - but it's also something of a provocation, with some quirky ship choices available. Speaking of quirky provocations: Franny Answers is like a combo Magic 8-ball and Tamagotchi with a cute and mysterious (or temperamental, or both) dog.

Some other absolute highlights include Scavenger Hunt (an achievements-based meta game!?), Exo Attack's code-based online leaderboards, and the old school instruction booklet online for each game.

The whole thing feels a bit like an invitation, too. To understand more about this old hardware, of course, but maybe also to make more things. Lurking in the footer of the Retro Dot Cards site is a Tools page with many e-Reader resources, including common sprites and backgrounds already present on the e-Reader that you can use in your own games and apps. Matt has also released the source code for e-Reader Solitaire, licensed MIT, and if that's not an invite I don't know what is.