Posts Tagged ‘heartbreak’

Heartbreak Postmortem

Posted by
Sunday, December 1st, 2013 10:15 pm

Well, v0.1 is complete, anyway. Considering how much stuff I had in mind when I began this LD which didn’t come to fruition, I hesitate to call it a full-fledged 1.0, but it’s working, and (as far as I can tell) stable.

I’m pleased with the final result, overall. It could definitely use some polishing and expanding, but for two and a half days spent making what is essentially my first non-2600 game? It could certainly have been worse!

My only real disappointment is that I don’t know how to dynamically make the game fit across multiple mobile device screens. The linked version is sized for a Droid RAZR HD, since that’s the phone I’ve got. Once I figure out how to make a version that scales automatically for different phone resolutions, I’ll make sure to post it. Until then, give the Windows version a shot if you don’t have a RAZR. Controls are mouse clicks and drags, since it’s the same control scheme as the tapping/flicking gestures of the mobile version.

Heartbreak's Title Screen

Heartbreak’s Title Screen

Submission Page
Windows Download
Android Download

For those curious, you can play the original game, made for the 2013 Game Jam in Unity3D, here, and my remake for the Atari 2600 (included in a compilation ROM of other small games I made) here. The latter will need an emulator such as Stella.

This has been an excellent learning experience. I’m going to enjoy a little break, but then I hope to keep working on learning more to improve what I can do, whether with programming, art design, or sound design, since there is serious room for improvement in all of them.

Day 1/3 Conclusion

Posted by
Friday, November 29th, 2013 11:08 pm

Well, I think that it’s gone well so far. Using the template posted earlier, I built base sprites for each row of blocks, then created a script for creating and setting up individual blocks and a script to churn out full rows. Much like the original game(s), I hope that this version will do a decent job of teaching intuitively through level progression.

Also, the heart changes colors and has a simple beating animation (just scaling down for a frame).

Tomorrow, I’ll be adding the ball and controls. If I have time (which I expect I will), I’ll also add in all the core levels and the score counter. There should be at least 12 levels, each of which will introduce something new (an additional color or another row), plus a few different random mixtures for infinite play beyond that.

Here is a screenshot of where I’m at so far, with all the blocks being randomized into place. Seeing how it looks, I’m definitely going to have to figure out something different visually. I was shooting for something cleaner, but it just looks drab in the end, plus the blocks don’t fit together particularly well, so I will have to rethink that. Maybe a pixel-y art style will be back on the table, since it’s relatively simple to accomplish, but would add some visual grit and variety, if done well, so everything wouldn’t seem so bland.

Heartbreak v3, with randomized blocks


Time for a break, then bed.

My First Game – Then and Now

Posted by
Friday, November 29th, 2013 3:24 pm

Last journal post until I actually make some progress, I swear!

After making a long post about my choice in game engines and then another explaining where my original game concept came from, I’m going to, finally, explain the history of my first game’s development. In brief, I hope.

Heartbreak version 1: Unity 3D for Windows

Original Heartbreak game, made in Unity3D

As you can probably see, the game is very flawed. One major issue was with the controls, which were tied to the mouse, so moving the mouse left and right caused the ring to spin. Hitting left mouse button would fire the balls from the central heart. On top of that, the game itself is bugged. At the eleventh hour, we discovered a bug on the fourth or fifth level that would cause the score to reset to 0 after the player had progressed to the following level. Finally, at the time I made a big deal out of “elegance of design”, which I saw as every part of a game coming together to compliment everything else.

Don’t get me wrong–elegance of design is a good thing, but I may have taken it a bit too far by creating a menu system that you could literally “lose” at (by accidentally selecting the exit button), in the interest of turning even the menu screen into a gameplay tutorial. I think I had seen one too many episodes of Sequelitis.

After the 2013 Game Jam, I was excited to try my hand at game programming, since I’d been only the lead designer for the original Heartbreak. I wanted to learn the craft of programming for myself, in the interest of being more self-sufficient. To that end, I decided to start as “simple” as possible and got into programming for the Atari 2600. Yes, the real Atari 2600.

If it’s a bit debatable whether or not I technically “made” Heartbreak version 1, since I was really just directing a Unity 3D programmer in what to do, I consider my actual first game to be my first remake of Heartbreak for the Atari 2600. I used the homebrew tool Visual Batari Basic, which, when combined with Batari Basic, gave me a convenient and simple IDE with many helpful sprite and sound design tools, plus the ability to code in BASIC and use a pre-made kernel, rather than coding everything directly in 6502 Assembly. I was extremely grateful for that.

Heartbreak version 2: Visual Batari Basic for Atari 2600

Prototype Heartbreak game, made in Visual Batari Basic for the Atari 2600

It took me a couple months to actually make Heartbreak for the 2600, since I was learning along the way and frequently had to go back and reprogram bits of code here and there as I discovered more efficient ways to organize the game logic. Keep in mind this was all done for a system with a 1.19Mhz processor and 128 bytes (yes, individual bytes) of memory (only 26 bytes of which were available to me in Batari Basic, since the kernel I used consumed the rest of it to write the playfield to the screen).

In the end, it was again thanks to a more experienced programmer, who generously wrote a custom kernel for me, that Heartbreak was able to function well on the 2600. Normally, using Batari Basic’s standard kernel, only a single playfield color can be displayed on-screen per playfield pixel (those big, rectangular blocks), but the programmer managed to work around that limitation with some clever 6502 Assembly wizardry that I still don’t fully comprehend.

From the custom kernel as a framework, I was able to build the finished game. Some months later, I revisited my old code and cleaned it up, organizing everything into neat, clean functions that you can view here. I’m rather proud of how tidy and efficient it all is (relatively, keeping in mind that this is BASIC with 6502 Assembly calls in it, all programmed in non-object oriented in a language that relies on spaghetti code). The game itself only uses about 1000 out of ~3000 CPU cycles that are available with this particular kernel, and the game itself is under 4 kilobytes. And, yes, it works on a real Atari 2600. If you’d like to try for yourself, I included Heartbreak, with a few other small games I developed for the Atari 2600, in a 32k compilation ROM (along with an updated version of my previous LD, Ping) that you can get here (you’ll need an emulator such as Stella to run it, unless you have a real 2600 with a Harmony cartridge), and you can see the finished version of the game below.

There have been a number of gameplay changes since the Unity3D and earlier 2600 versions.

Heartbreak version 3: GameMaker for Mobile

Originally, the player had to hit a button (joystick fire on the 2600, spacebar or left mouse on Windows) to fire a new ball from the heart. The ball would take on the color of the heart and it had to either match the block’s primary color or be one of the primary colors that made up the block’s color, or else the player would lose a life (indicated by the size of the central heart). Hitting a wrong block three times meant game over, but the player’s heart would be brought back up to full size after every stage.

Once I’d finished the basic game on the 2600, I was seeking to program in alternative gameplay modes, since alternate modes were a thing with many 2600 games. One of those modes included a bouncing ball, so rather than the player having to spawn each ball (which would fire from the heart and then disappear once it had stricken a block), the player only had to press the fire button when they wanted to transfer the heart’s current color to the ball. This meant a lot less button mashing, and it was far more satisfying to just control the blocks to catch the ball as it bounced. This ended up being the only game mode in later versions.

With the block colors, I’d always intended the game to start with simple primaries–Red, Yellow, and Blue, and work up to secondaries–Orange, Green, and Purple–and finally to White and Black. White blocks would give you a heart back, but black would take away a heart if they were struck and had to be avoided, which was particularly challenging in the 2600 version, because the background is solid black as well.

However, this lead to the game becoming progressively easier, since an orange block could be broken by either a red or a yellow ball, a green with yellow or blue, and a purple with red or blue. Obviously, a game should get more challenging over time, not less. I fixed this in the 2600 version by having the ball remove a color from the block’s color, leaving the remaining colors in its wake. For instance, if a red ball hits an orange block, it bounces off and leaves a yellow block behind, which must then be broken by a yellow ball. And if the orange block was hit by a yellow ball, it would bounce off leaving the block red. Yellow blocks would need to be hit by all three primary colors before they would disappear.

Overall, I’m very pleased with how the game itself plays as of the final 2600 version, but a few things had to be sacrificed in the move to the 2600’s limited hardware.

For one, the ball will only bounce at a few pre-determined angles, as letting it bounce freely would result in the ball always getting lost, particularly since the blocks aren’t of uniform shape and they don’t fully encircle the central heart.

Additionally, there was no way to add multiple concentric circles to the game, so it always operates on a single ring. I would very much like the game to have up to three or four rings at a time, as in the original Unity3D version.

Finally, I always intended the game to be a musical arcade game, but having background music wasn’t feasible with the 4 kilobyte size limit of the 2600’s ROM. I would like to bring a musical quality back into the game, with the heartbeat matching the tempo of the current soundtrack, rather than set to a steady, heart-beating sound effect.

On top of all that, I’d also like to bring the game to a mobile setting, which I think would fit the gameplay very well, being a sort of casual game that works best in just a few moments played at a time. This would, of course, mean reconsidering the control scheme. I would like a simple swipe gesture to allow the ring to spin, perhaps with a simple tap used to set the ball’s current color to the color displayed by the heart.

On the other hand, I may modify that mechanic so that the heart does not change colors on its own, but instead must be tapped by the player in order to change the ball’s color. Or maybe the heart and ball always share the same color and, rather than tapping at the right moment to get the right color on the ball, the player would need to tap the heart to swap between its colors? We’ll see.

While I’m at it, I’d like to update the game’s visual style, maybe moving away from the direct pixel-art look into something a bit cleaner. And, who knows–if I find the time, maybe I’ll try implementing some kind of power-up system, similar to Arkanoid. I may have an idea of how it could work.

Now it’s (finally) time to get to started!

A Story of Hearbreak

Posted by
Friday, November 29th, 2013 1:34 pm

As mentioned in my previous journal entry, I will be remaking my first game, Heartbreak. It’s a bit of a strange tale, however, since Heartbreak wasn’t originally “made” by me at all, at least in the sense of programming. It was my baby design-wise and in the limited capacity of “art,” but I relied on another programmer to do all the actual creation. Still, I think that it will count fine for the sake of this mini-Dare. It’s either that, or Ping.

The game was originally made for the 2013 Game Jam (the same one that produced Surgeon Simulator 2013). It was my first time ever attempting to make a game, and I was nervous of the possibility of having no ideas. There were about 200 students packed into a lecture hall (which very much surprised me, as our university isn’t particularly large) when we were all given the theme for the Game Jam: the sound of a beating heart. We broke off into 15-20 person groups and went into separate classrooms to brainstorm.

This was my first experience with brainstorming, and I loved it. There were dozens of great ideas thrown around, my contribution being an idea for a point and click adventure game set inside a dystopian, film-noir crumbling city that was located in someone’s body, with a large, pulsating heart looming in the background. It was supposed to be a story about survival and dealing with impeding death, etc. Not a very good idea for a 3-day game jam.

Then, someone in our brainstorming group suggested a game consisting of a number of arcade-style mini-games. Although I cannot guess why, for some reason Heartbreak–a mix-up of the classic arcade game Breakout where the player controls the blocks instead of a ball, with the blocks arranged in a circle around a beating heart that serves as the player’s life counter–sprung immediately to mind. I abandoned the over-complicated concept of a point-and-click adventure game and clung to this new concept.

When we returned to the lecture hall and game creators began separating to work on individual games, I found myself almost working alone, since my concept of an arcade game about moving colorful blocks around a heart sprite didn’t quite grab attention in the same way that some of the other concepts did, but I managed to hook a couple people who claimed to be experienced with programming in GameMaker. With that, we all broke up again into different classrooms to begin constructing the games we’d gone with. My group was, by far, the smallest, with most groups having 6 to 10 people on a team, and I with just 3.

The two programmers set to work surfing the Internet and half-heartedly (forgive the pun) looking up tutorials while I fiddled with some sprite art and designed the game in my head. That’s how most of the first evening was spent–simply thinking while I worked. By the next day, after a short sleep and a lot of fitful half-awakedness, the game, simple as it was, was fully-formed in my mind.

The only remaining problem was that the two programmers claimed that the concept couldn’t be done in GameMaker (something I intend to prove wrong during this mini-LD), and so our little team was stalled for a few hours until a very nice and quite talented Unity3D programmer stepped in to join our group and get us on the right track. Said programmer made the game in Unity entirely on his own, with me hovering over his shoulder like a fussy mother, directing every aspect of the game’s design.

To cut an already too-long story short, our little four-person team (the two GM programmers were delegated to sound work, which meant searching Newgrounds for some music tracks and finding a few arcade-like sound effects) ended up winning “best designed game” for the Game Jam at our university, as well as “most popular” among all those students at our university who participated. A humble honor that was all thanks to the nice programmer who stepped in to make the game for me. It fired off a brand new interest in game development that I’d not really had before, and I’m still waiting to see exactly how far it will take me.

[cache: storing page]