I made my first game!
I’m pleased to announce that I finished making my first game, Horror Block Breaker. The coding, level design, artwork and playtesting are finished. All that remains is securing permission to use certain soundtracks for the levels which is easy to implement. Now that the journey is nearly complete and I can almost share the project with my fellow subscribers, I thought I’d take a moment to reflect and talk about what I learned in the process.
If you haven’t guessed from my blog posts, I’ve always wanted to make games and eventually go pro. At the advice of game developers I look up to, I enrolled in a course on Udemy.com teaching how to design games in Unity using C#. (I know it sounds like a bad pun, but bear with me). After learning how to make an Arkanoid mini-game, I decided to take the next step and expand on what I learned. What I thought would take a week ended up taking several months since I had to learn different coding mechanisms and how to draw pixel art. I never had any professional training in art or coding so everything I wanted to implement I had to teach myself on the fly. After a long four months of trying to make a small game while writing an E-book, I finally finished the game.
Admittedly it’s not ground-breaking, but it’s a step in the right direction. While making this project I’ve learned a few things that I thought might be helpful to people wanting to make video games. As you read this keep in mind that I’ve never had professional training and my advanced degree was in Japanese literature and translation, so I’m the last person who should be making something, but I did it! And if I did it, that means anyone can do it.
10 Lessons I learned while making a game
1. You must make everything and take responsibility for implementing your ideas.
If you ever made a mod or a game using a map editor or world builder such as what you find in Age of Empires, or Warcraft 3, you were spoiled. The beauty of those level designers is that the images and sprites have mainly been provided for you so you can instantly start placing units on a map and feel as though you’ve accomplished something within minutes. When it comes to Unity, you have to make every aspect from button presses, user interface, background images, the level editor itself, sounds, special effects, music, and gravity. It takes a lot of work, but once you’ve accomplished building the editor inside Unity and getting your prefabs all taken care of with a sprite canvas, you’re ready to hit the road. By the end of it, you’ll get this immense feeling of accomplishment.
2. Making a game by yourself can be very time consuming if you don’t have a plan or lack certain skills.
How many levels are there? How many different objects will be added? Do those objects need a sprite or image attached to them? How long do you want the game to be? How will the player interact with objects? What is the build order and how the player will get from the start screen of your game to the credits? What kind of scripts will you need to make? Do those scripts need adjustments?
Asking these questions and getting organized with how many levels you want, what you want to exist and identifying the components you need to code can really help. When I was designing Horror Block Breaker, I made a checklist of assets (monster sprites for the balls and paddles, scripts, game objects, and music) I planned to incorporate in the game and designed them one at a time.
Overall everything turned out to work well until I needed to learn how to code a life system, a timer, and other assets to make my game different from what I learned in the Udemy course. Learning how to draw and makeup for my lack of skills also took time. You can bring outside help, but that will likely cost money. Since this was a fun project I wanted to make for my YouTube subscribers and myself, I decided to make everything except the music due to the theme of the game.
3. Make a Minimum Viable Product (MVP) and share it with people to get some feedback.
While I only made a few videos on my project, getting feedback from my YouTube subscribers really helped since they were honest. They told me whether or not the game was original, if the art was good or bad, and what they wanted to see changed. In the beginning I had an idea for the game, but wasn’t sure what people thought about it, so I asked my audience on YouTube for their thoughts based on showing them a level. I received nothing but positive feedback and went from there. If you have any sort of online audience, definitely get their feedback.
4. When starting out, keep your game design projects small.
Start smaller….Smaller than you think. I mean like 1 or 2 levels small if you’re a beginner when it comes to coding and art. I’ll be honest when I say that although my game only takes about 30 minutes to complete, I bit off more than I could chew for my first attempt. In my goal of trying to make my game unique with different shaped paddles, blood effects, monster-themed sprite balls, a life system, and a timer, I was jumping all over the place in my Udemy course. I was learning, but it was aspects of game design that were meant for the very end of the course. When I did learn it, I felt lost, confused, and out of place. Learning from my mistake, I plan to my next game much smaller and will focus on executing certain game mechanics well.
5. 1 hour of gameplay = about 100 hours’ worth of work.
I’ve heard this expression from developers many times. After struggling to make a basic arkanoid clone with unique aspects, I can say with confidence they were right. I worked on my game for about two hours per day sometimes more, and although my game is about 30 minutes in length, it took around 200 hours+ of work. This was because I had to design sprites, teach myself how to draw pixel art, research coding and make guesses outside of my course work. It also didn’t help that Unity’s game development documents weren’t complete, causing me to search in the depths of the internet for an answer regarding two lines of code.
6. No matter how good your code may seem, sometimes it just won’t work.
Originally, I had this idea of adding a game timer that would make a player score based on how quickly players would beat a level or die in the game. To accompany this, I also wanted to make a life system where players would gain a life after beating each level. After scouring the internet for documents and video tutorials, everything seemed to be going okay, but for some reason the clock would jump ahead between 20 – 45 seconds when you beat a level and your life counter would multiply by two! After a week of fiddling around not knowing or understanding what I was learning, and not progressing at all towards a finished product, I disposed of the timer and score system. I think that eventually I’ll get good enough to make those kinds of changes, but for now I’m pleased with where the game is at.
7. You have to be willing to let go.
Remember that time when you were working on something and you never felt satisfied with it? Maybe it was a term paper, a project, a piece of art, or a fun hobby where you’ll always find something you wish you could add to make your project better. But at some point you just have to let go. Had I kept my game smaller in scope by reducing the levels in half and not adding any form of a life system, the game would’ve been finished in two months instead of four.
8. Finding a social balance when you make games is important.
Making a game requires you sitting in front of a computer screen for hours on end and it can be lonely. It’s really helpful to have a social outlet, particularly an active one to get you recharged and to just escape from your dorm room, apartment, or house. Thankfully I had my frisbee group, board game group, and friends I could spend time with. Make sure you are getting exercise and social interaction.
9. There is no sole method to solve a problem or implement an idea in your game.
When I was trying to get my ball to position on the paddle when the player lost a life, I found what was close to 10 different ways of accomplishing the same thing. In this sense, coding can be compared to a spoken language where there are multiple ways to communicate a particular point across. In the end it is just a matter of preference. Some ways are easier and others are more difficult.
10. Remember to have fun!
At the end of the day, no matter how frustrated you become or how long it takes to implement something, you need to have fun making your game. When I got stuck working on a gravity glitch, I started fiddling around with different paddle shapes and 2D colliders. That fun little distraction gave me the idea of making unique paddles in each level. You never know when a spur of the moment experiment could lead to a new game mechanic.
I hope this article brought some insight for people wanting to make their first game whether its as a hobby or perhaps a professional app that makes money.
Horror Block Breaker Update Video #2
I feel like I’m slowly getting back to normal after recovering from moving and just being sick. So I took it easy this week and focused on artwork for Horror Block Breaker. I’m still working on a couple of the sprites for paddles and balls such as Freddy’s glove, but progress is good. While I can’t show everything since it’d spoil the game, I’ve shown a couple of sprites and a new weapon in this video update below.
Learning to Draw
Today’s post will likely be short, since I don’t want to reveal too much about the game. What I can say though is that the artwork is coming along well. At this rate I should have some cool things to show on this Tuesday’s Game Dev video update and perhaps even one of the new levels if I feel it’s ready. I also discovered some additional tweaks to add for the Jason level. Such as blood to the machete, and a brighter background so players can see the black blocks easier.
One of the main issues I’ve come across is distinguishing between two characters because they both have similar facial features. I’m not going to reveal them, but I think you’ll see why once the final version of the game is done. While I don’t think the full version of the game will be done by this Tuesday, I think I can get it ready to have my friends and family test it by next week. Below is the before and after shots of the Scream-themed ball I was working on. I tried to get a general outline of what I wanted to use and then I focused on angling the mask to match the film. Since I’m only using two colors, it didn’t take too long to create, but I’m proud of how the second version came out.
To improve my art skills I’ve joined some online pixel art courses, so hopefully the art will improve in the next games I make.
Looking forward to Tuesday!
I finally feel like the game is going places with regards to progress. Today I launched my first video update for game development on my YouTube channel and I hope to make it a weekly post. One of the major things I need to work on in general is just being consistent with uploading when it comes to YouTube. So while I work on the more advanced videos, I can post a quick game dev update. This video features a first draft of one of the levels in my game: Horror Block Breaker. Check it out below at the bottom of this post!
Goals for the game next week:
- fix the broken ball code so the ball doesn’t get caught in a boring loop (where it bounces from side to side)
- finish the sprites for the paddles and if possible the balls as well
- finish the rough outline of the remaining levels
- Incorporate feedback from the comments in the video below
- start incorporating sound effects into the game
- add cracks in the blocks to show they’ve been hit (2-hit blocks and 3-hit blocks)
- add blood spurts when blocks are destroyed
Long term goals (week after next, but I understand they could take longer):
- arrange for 8-bit music to play in each level (I have content creators in mind to ask for permission to use their music for this project. We’ll see what happens).
- get the game uploaded on game bucket and itch.io.
Learning little by little: Sprite Sheets
I felt like I didn’t accomplish enough yesterday to warrant a blog post on my progress, but today was great. I finally figured how to make my own sprite sheets using an art application and then transfer it into Unity and edit it futher in detail. Sprite sheets are a collection of images that show how a particular item, character or object in a game has changed. For example you might have a door that is closed, slightly open, and completely open. Three stages of a door represented by three different images. Sprite sheets can be useful for setting still images on your level or if you wanted to make a quick animation. I’m taking a Udemy course to help me get the fundamentals of Unity and I’m enjoying it, but as I saw yesterday, sometimes progress can be slow.
Yesterday I was trying to import multiple sprites at a time into Unity… I struggled. This was a real struggle fest in that my images would appear in Unity, but for some reason Unity believed my collection of images was one big image. I didn’t realize it until I watched my class lecture multiple times. Apparently the distance between my sprites designated by transparent space wasn’t large enough for Unity to register multiple images. Once I figured out how to add any type of sprite from my sprite sheet into a game, I realized I could save so much time. Now something that took more than an hour to understand, will now just take me 10 minutes. The sprite sheet below will show you what I mean by having transparent space between images in your sprite sheet. If the transparent space isn’t big enough, Unity will think you’re inserting a large picture. Note: These images do not represent the final product for my first game, they were just used for a test run to understand the concept. These are bricks that show damage over time. I am not using these in my final game since I borrowed the top sprite from my course for practice. The bottom three images were created by me.
As I keep proceeding with game development, I know I will encounter more road blocks along the way, but I’ll keep on trucking. This Tuesday I’m hoping to show off a draft one of my levels for the game with a completed Jason brick model that reacts to hits. Let’s see if I can pull it off.
The road ahead is like a marathon
Today’s post while short, might be interesting to you if you’re wondering about the bread and butter behind an Arkanoid game, collisions. I’ve been a little sick today so I mainly focused on playing my game in its current state and coming up with a laundry list of things to add. Some of these items possibly include: powerups, moving blocks, blocks that change tone or image after they have been hit, music, and sound effects etc. There is only so much you can do with an Arkanoid game / clone, and yet to me it feels like a mountain. I’ll be honest I’m taking courses and looking at guides to help me with the foundation of building my first mini game. Although I’m shooting for a small size, seeing what I have to learn to accomplish all of this, move on to the next game, and eventually get enough skills so I can one day in the future make a game to sell is a little overwhelming. A comparison might be, an extremely overweight person who is trying to train for a marathon and complete it in qualifying or record time, even though they have never run a 3k race before in their life.
So to keep up my spirits and move on, I celebrate the small victories. No matter how trivial, no matter how long it took to do one thing, like get the blocks to destroy on collision. Or yesterday’s problem: struggling for an hour wondering why your sprites weren’t rendering properly and coming out in different shades whenever you played it. The answer was because the depth or Z-Depth of the sprites and my background was the same, so my background image would impact which sprites would change color whenever I moved them. (Do’h!)
Collisions Make an Arkanoid
Today’s small victory was finally implementing the code to break the blocks in my game. The code looks like this inside my brick sprite and i’ll explain it as best I can. Keep in mind this is only a small piece of a much larger part of code, so some parts are missing.
void Start ( )
timesHit = 0;
void CollisionEnter2D (Collision2D col)
if (timesHit >= maxHits)
So you might be wondering what is this mumbo jumbo above. This is likely the most important code in Arkanoid that really makes the game. It is located in my brick script attached all bricks I insert in the game. We have the start function where we have an integer called timesHit that is set to 0. Next we have another method or function titled CollisionEnter2D. This is where the game senses that a collision has taken place between two objects.
In the method CollisionEnter2D you have an argument called Collision2D and a variable called col (not the most important in what I’m explaining, so don’t worry about it). Inside the method you have the integer timesHit increasing by 1 every time a collision is detected. Then we have an if statement where when the #of timesHit is greater than or equal to maxHits another integer, the object will destroy itself. The gameObject being the current sprite containing the brick script.
What’s cool about this code?
What’s nice about this code is that it will apply to all objects you’ve included in your game that contain this script. So instead of editing each individual object’s code, I just have to edit the script and it is applied to all objects that share the script. Pretty cool!
Building a Giant Jason
Today was a challenging but fun day since I got to build giant monsters for Horror Block Breaker. I know. The name is cheesy, and it needs to change. I’m still coming up with a name, so hopefully I can write it proudly here on the blog.
When it comes to Arkanoid, most versions have blocks of about the same size in each level. The challenge this poses for building my Jason level is that Jason’s mask has several details. For example, eye slits, tiny mouth holes, red markings, and discoloring (depending on the film). Thankfully Unity allows me to change the size of a block individually when I place it on the game space. Though time consuming, I can adjust each block until I get a relatively close shape resembling Jason’s mask.
The picture below is my first attempt at making Jason inside the Friday The 13th level. Arranging the blocks was difficult, but by placing the black and red blocks first and then the white, I was able to get an okay start. What’s cool about Unity is that it reminds me of a lot of features you’d see in a picture editor like Gimp, Photoshop, or PicMonkey. You have the option to put your sprites in layers so if you want to have objects overlapping each other, it’s pretty easy. The layers feature allowed me to place the longer white blocks in the background of the red and black so I’d have better control with the outline without covering the red and black blocks from view. I plan to decrease the size of the mask by around 30-50% and add a body and a weapon.
A Simple Explanation of Colliders in Unity
Colliders are a component in Unity that are attached to game objects in order to have collisions for 2D games (possibly 3D as well, though I’ve yet to make a 3D game). For example let’s look at the classic game Asteroids. You’re flying around in your little spacecraft (triangle-shaped) and suddenly an asteroid hits you and you blow up into several pieces. In order for that to happen, there needed to be a collider placed around your ship and a collider around the asteroid. The colliders sense when a collision takes place through their physics and rigid bodies. The game objects then react according to the settings you’ve selected for gravity, velocity, or even a special script you may have written via code.
Usefulness of Colliders in Horror Block Breaker
What’s useful about colliders is their different shapes such as circles, squares, and other polygons. You could use a collider to directly cover your sprite or perhaps establish an invisible perimeter in your game. For Horror Block Breaker I use three colliders to establish the boundary of my game and some special colliders for the machete. Strange however was how the colliders on the machete became a combination of triangles. It reminded me of the time I tried the Oculus Rift in Japan. The triangles created a perimeter which represented the boundary for the VR game I was playing. But depending on your object, a direct collider may not be the best option. Direct colliders can cause errors and sometimes impact performance of the game (at least in Game Maker Studio). So far I’ve enjoyed using colliders in my game, but we’ll see what happens.
For my next post I’m going to try and write some code and explain it so I can better solidify my understanding of C# and maybe show you something interesting and new things in game development.
See you all tomorrow everyone!
100-day Game Dev Blogging Challenge
Hello Internet! Today marks the first day of my 100-day Game Dev Blogging Challenge. I was inspired to do this after watching the recent Friday The 13th panel at PAX West on “How to Market a Game and Run Your Own Kickstarter. After giving it some thought, I realized I can improve when it comes to posting and sharing my progress instead of being secretive about it.
What are the goals for this challenge? I’d like to post daily updates (shoot for 100 and push on) on what I’ve accomplished on my game development journey and develop good posting habits. In the process, I will provide some games for people to enjoy who are reading my blog and following me on YouTube and various social media platforms.
So far I’ve made a couple of text games which have provided me some fundamentals on how to use Unity. I chose Unity over Unreal due to the community in Boston surrounding the game engine. I’ve also had several opportunities to take on consulting work if I were proficient in using and teaching the engine. I would love to one day become certified in Unity and be able to teach it to various companies, schools, and organizations. I’ll be honest, I’m still a beginner and have a long ladder to climb. But I figure what better way to level up than by posting my progress, challenges, and some cool games hopefully you will enjoy. If I get good enough where I can maybe try to sell a product in the future, maybe I can do this full time for a living. That’s the dream!
Enter Horror Block Breaker
I’ve made some text games to help familiarize myself with Unity, but the first game I’ve making with the hopes of showing to the world and getting feedback is a free challenge version of “Arkanoid” or “Block Breaker.” For those who may not know, Arkanoid is a classic game where you launch a ball towards a bunch of blocks and try to destroy the blocks by hitting the ball back. To make my version of the game unique and cater to horror fans, I’m changing the paddle and the formation of the blocks.
Crazy Paddles and Horrific Block Formations
Your typical Arkanoid paddle consists of a block and maybe two right angle triangles to help bounce the ball to the sides. To add a little more personality, I decided to alter the paddle for each level by making it into a weapon or item found in a particular horror film. For example the Friday The 13th level has a bloody machete for the paddle and Nightmare on Elm Street has Freddy’s hat for a paddle.
Since I’m using a particular item instead of a traditional square, I can experiment with Unity’s colliders so the ball might go slightly to the right or curve when you hit the handle of the machete and veer off in a different direction if you hit the angled blade. The trick to win in this game is not simply move the paddle and hit the block, but understand how each paddle works after using it and perhaps dying once or twice.
The second way I’m making this game unique, but also a bit more of a challenge is to arrange the blocks in a particular shape. On the Friday The 13th level you’ll have to destroy a full bodied Jason in block form or a large hockey mask. Each level will have a different paddle and a different arrangement of blocks resembling some semblance to a horror icon. I’ve got three levels in progress, but if you have a suggestion for a film I should try to add, let me know in the comments.
For my next entry I’ll discuss colliders and talk about what I’ve accomplished on the second day. Thanks for reading and ‘Stay Mad!’