Author Archives: Jake

Menu work

This week in development on Iridescence I’ve been focusing on menus, settings, and save data. Here’s what I’ve implemented as feedback when the player tries to open a level that hasn’t been unlocked yet. The animation is inspired by WordPress’ login window, and I think it’s pretty clear what’s going on.

Rotatable Graphiclists

Here’s a quick gif demonstrating a new feature I’m working on in #Punk, my C# port of Flashpunk.

rotate

Pictured: Two images (rectangle and circle), a Nineslice, and a Tilemap.

Since C# + SFML is so much more powerful than Flash, we can do some pretty cool things that weren’t previously possible. Rotatable Graphiclists are something I’ve wanted for a while, and they’re pretty close to being ready!

1GAM 2013: Postmortem

2013 is over and, thanks to OneGameAMonth, I managed to finish 12 games over the course of the year. I wanted to talk about each one a little bit.

January — Must’ve been rats!

rats_arcadeJanuary’s game was the result of my participation in the Global Game Jam, working with Chris Logsdon and Paul Ouellette (with voice work by Mike Elser). It was a lot of fun to make despite not entirely fitting the jam theme, and its a lot of fun to play thanks to its overall silliness. I’m really happy with how well it turned out given the limited amount of time and relative complexity of the systems we were working with.

Here’s my full post on this game.

February — Humphrey’s Tiny Adventure: Remastered

htar

I’m still very happy with Humphrey. For the small amount of time I put into it, it’s one of the more polished games I’ve finished and I enjoyed figuring out ways to convey the story without any words. Despite my love for open-ended systems-driven gameplay, point-and-click adventures will always have a special place in my heart due to their role in my childhood, and I’m glad I was able to make one even as minimal as this.

Here’s my full post on this game.

March — No Other Home

dsjChris and I made No Other Home for NASA’s “Dark side of the jam” event that we attended at NHTI. It was pretty ambitious and we ended up taking a bit longer than the initial 48 hours to finish it.

Looking back on it there are a bunch of things I would change to make the gameplay feel better, but overall it’s pretty solid and I love the way the solar system looks.

April — Vanguard Charge

vcVanguard Charge was born from a combination of my frustration with the limitations of Mass Effect’s Vanguard abilities and inspiration from the results of TIGSource’s “Bootleg demake” game jam. The goal was to capture one specific element from a well-known game and present it in a way that feels like a cheap knockoff product. I only spent a few days making this and there’s admittedly not a lot going on, but it’s fun to play and that’s what matters.

May — Bit Cave

bc

Another game jam entry with Chris, this time to celebrate the revival of the Flashpunk forums. I love the atmosphere in this game. The tension between exploring further and staying alive can actually get pretty high, and the caves are unpredictable enough that even I still get lost despite having designed the system that creates them.

 

June — Gunbuilding

gb

Gunbuilding’s caption on my 1GAM profile reads “The worst misnomer of all time”, and that’s no exaggeration. As a game it’s an abject failure. The gameplay is simplistic, the visuals are terrible, and there’s no way to win or indeed any reason to keep playing. The only redeeming quality this game has is that it allowed me to put my C# port of Flashpunk through its paces and fix a ton of bugs.

Here’s my full post on this game.

July — Slide

slide_arcade

I’ve written a lot about Slide elsewhere, so I won’t go into depth about it here. This was a fun game to make because I had to think backwards in order to create puzzles, which gave me a newfound respect for mystery authors and other puzzle game designers. It was received very positively in its initial state and I’m currently expanding it for a commercial release on mobile and desktop platforms.

 

August — MicroRL

mrlMicroRL is another experiment without much in the way of gameplay. I wanted to take the ASCII aesthetic of classic roguelikes and try to make a minimalist game that felt good to play. Since the systems involved were so limited, I had to use some sneaky tricks to create situations that weren’t explicitly allowed, like having friendly monsters that healed you by dealing negative damage. Overall it’s not especially worth playing, but I’m pleased with the way it turned out.

September — SlangVN

svn

My final pure experiment of the year (yes, that is a screenshot on the left). SlangVN was a testbed for my experimental scripting language Slang, in the form of a minimalist Visual Novel engine. Technically I guess I would call this a success since the purpose was only ever to test the expressiveness of the language, but the result isn’t a game by any stretch of the imagination. The script is pretty nice though.

October/November — Color/Shift demo

csd

Part of my strategy for hitting as many platforms as possible with Iridescence (formerly Color/Shift, formerly Slide) was porting it to the Haxe programming language. This release marked the point where the port contained all the features from the original game and could make use of all the same content. I spent part of the second month porting the game to Linux, which (thanks to Haxe’s cross-platform magic) was almost entirely painless.

December — The Heroes’ Tourney (beta)

thtThe Heroes’ Tourney started in yet another game jam and has gone on to become a serious project that I’m still working on along with the other guys on my team, as well as some new talent. So far everyone we’ve shown it to has had a blast playing and we think we might be on to something good. The official website is under construction here.

 

Wrapping up…

It’s been fun participating in 1GAM, and I’m really happy with some of the games that came out of it. Looking back on it, though, I wish I hadn’t followed along so rigidly. Some of the months would have been better spent concentrating on more serious projects instead of stressing about meeting the deadline, and I felt more pressure to polish up my experimental projects to submit them where I probably would have abandoned them earlier otherwise.

In 2014 I’m going to participate more casually, following the revised rules which encourage working on fewer projects for extended periods of time. I’ve got a promising solo project and a great team project to occupy my time for the next few months. We’ll see where it goes from there.

Glide update: From()

I made a small addition to Glide, my tweening library for C#. You can now specify starting positions for the variables you’re tweening, useful for when you need to change a variable instantly and then tween back to the default value. I use this when I’m making things flash for alerts or other important things for the player to notice.

Obviously you could just set the values manually before telling them to tween, but this is a nice shortcut if you’re setting a lot of them at once.

You can download Glide here.

Reddit Secret Santa 2013

For the uninitiated, Redditgifts is an unofficial extension to the Reddit community. Every year, thousands of strangers send each other gifts as part of a holiday tradition called Reddit Secret Santa. This was my first year participating. Just like everyone else, I got linked to two other users; one to send a gift to, and one to receive from.

I’m generally a terrible procrastinator, but I got my gift wrapped and sent before the deadline hit. It’s a really cool feeling to send a present to somebody you’ve never met, and I was waiting eagerly to hear news of the gift that was coming for me.

Unfortunately, Christmas came and went with no sign of my Santa. I was pretty bummed out. On the website, I confirmed that I hadn’t gotten a gift and made my peace with it.

A few days later, I got this in my email:

stanley

“Who could this be?” I thought. “I don’t have any friends with that name.”

I scrolled down a little further.

Your Secret Santa (Rematch Edition!),
Hi there! This is just a little warm-up present to keep you tied over while I come up with goodies for the main event! Cheers!

The main event? Not necessary. The warm fuzzy feeling I got from opening this email more than made up for the disappointing results of the main exchange.

Then yesterday I got something in the mail.

WP_20140115_001

If you can see past the censors, it’s a box approximately the size of my bedroom. The controller is for scale. It’s the biggest thing I had nearby when this first came in.

WP_20140115_004

Beneath the brown paper was another layer of wrapping. To heighten the anticipation, no doubt.

WP_20140115_005

On top of everything was an envelope…

WP_20140115_006

…with a wax seal on the back. Oh my goodness this is too cool for words.

WP_20140115_007

Look at all this stuff!

WP_20140115_010

An awesome Doctor Who stocking! I think I’m in for a few jealous siblings. It contained enough candy to last me until next Christmas.

WP_20140115_011

A magnetic whiteboard and some custom magnets featuring some of my favorite things.
Clockwise from top right: Snoo the Reddit alien, Adam Jensen from Deus Ex: Human Revolution, my name in fuþorc, the Mark from Dishonored, and Ezio from Assassin’s Creed.
And dry erase colored pencils! Why have I never heard of these before?

WP_20140115_012

The “Family Fun night care package”, consisting of a movie I’d never heard of, a game that we somehow don’t own, and enough popcorn for the whole crew. I’ll be putting these to good use for sure.

WP_20140115_014

A beautiful Hobbit-themed Moleskine journal and the tools required to use it.

WP_20140115_024

And last but not least, a snuggly scarf crafted by Mrs. Claus herself. I’ve never had a scarf before and I was missing out.

Wow.

My expectations were completely blown away. I’m having trouble articulating just how special this felt. Thank you, Santa, from the bottom of my heart.

Haxe macros are amazing

Here’s a neat trick I discovered today while working on Iridescence.

Haxe has native macros that are very different from those found in C; rather than using a separate pre-processing language, Haxe macros are simply snippets of Haxe code that are run at compile time instead of run time.

In native builds, Iridescence populates its soundtrack dynamically by searching for all song files in the /assets/music folder. On more restrictive platforms like Flash, all assets have to be known at compile time so they can be embedded in the SWF, which meant I needed to create a list of files manually and update it whenever I added a new song. I wrote this little macro to iterate through the music folder at compile time and build a list of song files automatically.

Beta release – The Heroes’ Tourney

There comes a point in the life of every creative person where you create something that feels like the culmination of your craft. It’s your magnum opus, and you’ll never make anything better.

The Heroes’ Tourney felt that way for me. It’s a “couch multiplayer” game for 2-4 players in which you try to punch your friends off of platforms or into environmental hazards.

tourney_arcade

It started in a 24 hour game jam held by SNHU, a college here in New Hampshire. Chris, Mike, and I had decided to make a local multiplayer game and had the basic groundwork up and running. At some point around 12 hours in, Chris and I woke Mike up with our laughter over the absurdity of a certain bug with the physics, and we decided to build the rest of the game around that. The rest is history.

The 24 hour deadline rolled around and our game was a smash hit, despite being nowhere near finished. About a week later, we all met up again at a game jam at NHTI and somehow decided to continue work on THT instead of creating a new game from scratch. This new version included a powerup system that added a whole new dynamic to the gameplay. We had a mini tournament during the wrap up session and it was incredibly rewarding to see other people laughing and taunting each other while they played.

I’ve done some more work on the game since then and we still plan to work on it in the future, but I think it’s finally ready to be thrust out into the world to see how it fares. You can download it here. Make sure to read the readme, and yes, controllers really are required.

PS:

Here are some action shots from our post-thanksgiving dinner tournament.

And here’s my little sister playing against my cousin’s girlfriend.

Color/Shift input woes

When I released the Color/Shift demo, one of the main issues that were being reported was that dragging the pawns around was really difficult. This confused me as I had spent a lot of time painstakingly tweaking the controls so that sliding pieces felt natural and responsive, but it was obvious by watching people play that there was something seriously wrong. I made some changes to try to make it better, but the result was still pretty bad. The pawns would slide around loosely in any direction they wanted until crossing a grid line, at which point they would snap to an axis and move along it, It didn’t feel good, and it introduced all kinds of new problems including the possibility of phasing through objects or traveling in two directions at once. Worst of all, it still didn’t address the issue entirely.

Dwm 2013-11-11 10-21-38-83

Yuck. :(

I let it be and moved on to other things, planning to come back to fix it later. There was probably a little bit of hubris involved, if I’m being completely honest with myself; if I didn’t have a problem controlling the game, other people shouldn’t either, right?

A few days after leaving the issue behind, I was working on my laptop (most of Color/Shift’s development has been done on my desktop computer) and suddenly started having the same problem as my testers. Pawns were moving sideways when I wanted to move up, and sometimes they wouldn’t even move visibly before smacking into a wall to either side. What was going on?

As best as I can figure, the input issues had to do with the sensitivity of the mouse being used for control. My desktop has a high DPI gaming mouse with the sensitivity cranked way up, and my wireless mouse and laptop trackpad are much less precise. Armed with this new information, I set about making things right.

angle0

Here’s a visualization of the way I’m handling input now. When the user presses the mouse button, the pawn remembers where the pointer was when it was pressed. In the image above, it’s right in the center of the piece.

At this point, no dragging is actually done yet. The mouse must move 7px in any direction before the pawn will move at all; this is represented by the circle cutout at the center of the transparent fans.

When the mouse has moved far enough from its original position, its angle to that position is checked. If the angle is within 30° of an axial direction, the pawn is then allowed to move on that axis. If not, no movements are made.

angle1

The angle is relative to the mouse click position, so it’s possible to start the drag by clicking anywhere.,

I still need to stress-test this to make sure it works for everyone, but it feels much better with all of my mouse devices and I have yet to move a piece in a direction I didn’t intend since improving this mechanic. Feedback is important! Listen to your testers!