Week 1 Done!

Alrighty! I got a bit distracted from my quest to make an MVP this week. Instead, I made a lot of tech and UI changes that I’m pretty proud of! Here’s a .gif of the current gameplay and graphics.

*The Staff of Lewis* Week 1 Overview GIF

Even though I didn’t hit my goal of having a working MVP this week, here’s what I did accomplish:

  1. I tweaked draw positions and bounding boxes to have offset for easier mental modeling of position (x,y,z position is now located at the “feet” of the sprite instead of at the top-left pixel).
  2. I got coin collecting working! It doesn’t do anything besides make a sound effect and delete the coin currently though. Still need to implement player scores.
  3. The depth-sorting I’m using to get those sweet, sweet 2.5D graphics needed some love. It was confusing when things were stacked and now it’s more understandable!
  4. Textboxes are sexier now because of a typing sound effect and hand-drawn pixel portraits.
  5. I’m working on making the skelly enemy smarter. It’s still buggy, but now the enemy runs to a spot near the player and then throws his bone. Previously, the skelly would just run straight to the player’s coordinates which wasn’t very interesting or challenging.
  6. I got a shader working for sprite outlines which means I don’t have to draw the outlines by hand anymore. The shader outlines are only clean if it’s a 1px outline though. I’d like to make it a bit smarter and maybe make it resize texture quads on the fly so I don’t have to manually pad my sprites with transparent pixels.
  7. Finally, I added a level countdown timer. You can see it in the GIF posted above (although it probably shouldn’t count down time when the textbox is visible). While a timer isn’t strictly required for the first MVP, I figure a timer is probably needed for the second MVP.

I hit a few challenges this week that I’m still working through.

  1. I’m using a library called push to decrease the resolution of my game from LÖVE’s default resolution. For some reason, push isn’t scaling things drawn with love.graphics.circle(...) or love.graphics.ellipse(...) which results in odd pixel size consistency problems. I couldn’t figure out what was going on by myself so I created a GitHub issue. Hopefully I get a response back in the near future. With it being the Thanksgiving holiday, I don’t expect anything in the next few days.
  2. Sticking with the pixel size theme, I’ve discovered that pixel fonts are a bit tricky to work with. I may end up having to go the route of using a LÖVE image font instead of a .ttf file to get things just right for the final product. I’ll fiddle with that in the next few weeks.
  3. I went on a bit of a journey with GIF capture. I’ve done a lot of work with PICO-8 which has a really nice GIF capture feature (just press F9 while your game is running and a GIF of the current gameplay is created). I tried implementing a similar functionality in LÖVE but didn’t quite succeed. There was too much CPU usage during GIF capture and the final GIF had color artifacts because of a color palette limitation and my MacBook’s retina display. I ripped that code out and I’m instead gonna use Gifox because it has great control of final image compression and colors. Definitely worth the $5 unlock price.

Here’s what I wanna do in the next week!

  1. Get punching working. Ideally, I’d like to have punching mechanics and some preliminary animations for the punches/combos. I’m hoping that with the engine/physics system I have in place it’ll be relatively easy.
  2. Get a full level working with a final score screen.
  3. Make co-op controls work.
  4. Make health bars for enemies and players.

We’ll see how that goes!

I read a blog post today from @perplamps that’s given me some more motivation to share my progress on a more regular basis. My new plan is to post GIFs to Twitter every couple days to track progress on The Staff of Lewis.

As a final sidenote, I’ve started using Visual Studio Code to write these posts and it’s pretty darn amazing. I’m scared that it’s gonna lure me away from nvim because somehow it’s faster than the command line…