Category Archives: Game Development

Coding For Gamers: Learn to Code Features From Your Favorite Games

Before I became a programmer I loved to play games. I played games for many years before I even knew the most basic concepts about coding. However these days I see that people are trying to introduce their kids to programming and looking for ways to make programming concepts more approachable. I think that using existing games people love is a great way to do just that. That is why I wanted to start this new coding for gamers blog series.

Skip to: Part 1 | Part 2

How to Build the Hunger Bar in The Long Dark

If you are reading this you might already have at least some interest in The Long Dark, and may have played it. But I will briefly explain the game just in case. The Long Dark came out on Steam several years ago and had a beta release that was primarily a survival simulator. The game takes place in the Canadian far north where a mysterious phenomenon has caused all of the power to stop working.

In the original simulator, your goal was essentially to survive as long as possible by staying hydrated, nourished, rested, and avoiding freezing to death. You could choose between different environments to try your luck in, some which have a range of man made shelters and some which have nothing but a few caves dotting a barren landscape teeming with aggressive wildlife.

An example of some aggressive wildlife. You can see the health meters at the bottom left

By releasing a minimum playable version of their game early, The Long Dark developers gave players something to continually look forward to and give valuable feedback on as they added more features to create something truly spectacular. Now the game has a fully fleshed out story mode with multiple seasons and difficulties in addition to special challenges. Whether you’re developing a game or an application for a startup, the idea of slowly adding on features and polish over the course of time is the most logical and sustainable way to build a good product. It goes to show that when you learn to code with games like The Long Dark, you might be surprised by how many lessons will transfer over from games to other types of development.

It goes to show that when you learn to code with games like The Long Dark, you might be surprised by how many lessons will transfer over from games to other types of development. Examining games from a developers perspective and extracting a feature to recreate can also help you get into video game coding, so it’s a win win.

While its good to talk about strategy and general practices like building off of something small, I want to get into actual coding in this post. After all you can’t learn to code with games unless you actually write some code! In particular, I want to show you how we can take a feature from a game like The Long Dark and try to replicate it with Javascript code. I suggest starting with something simple, like a hunger meter. We could define a variable like fullness.

let fullness = 100;

Why fullness and not hunger? Certainly nothing is stopping you from calling the variable whatever you want, but in my mind it is easier to call it fullness because then I can set it to 100 and know that means “completely full.” Whereas if I used hunger, I might be confused. Does 100 mean 100 percent hungry? Hunger doesn’t make as much sense to measure by percentage as fullness.

In The Long Dark, you get hungrier the longer you don’t eat. That means we need something to measure time. Since it’s a video game, time also goes by a lot faster than in real life. So let’s say every 30 seconds translate into 1 hour. We could use a Javascript function like setInterval that would get called every time 30 seconds have passed. You can read more about the function and test it out here. Note the double slashes in the code below indicate comments.

let fullness = 100;
 
setInterval(function(){ 
   fullness = fullness - 5; //subtract fullness by 5 percent
   console.log("logging fullness", fullness);
}, 30000); // 1000 is 1 second (in milliseconds) 

By assigning fullness the value of itself minus 5, I am essentially decreasing fullness by 5 percent. Then I am logging out the new fullness value to the console, so I can confirm that my function is working. Having to wait 30 seconds to confirm my function is working can be a little bit annoying, so you can reduce the number of milliseconds to 1000 temporarily for testing purposes.

If you’re using a coding editor in the browser such as Codepen (I’ll be including a Codepen link a little further down) the console can be opened up by clicking on the “console” button in the bottom left corner of the editor

So now we have a fullness value that decreases over time, but what about eating? In The Long Dark you can eat all sorts of things. If you scavenge you can find canned beans, peaches, even dog food (ew) to eat. Or you can go fishing or hunting. Each type of food has a different number of calories which affect how much your fullness meter gets filled.

For now, let’s just create four foods. A granola bar, some canned beans, a pound of deer flesh, and a rainbow trout. Let’s say 200, 450, 800, and 150 calories respectively.

const trout = 150; //use const to declare a variable when you never change the value of the variable
const deer = 800;
const granola_bar = 200;
const beans = 450;

Now you might be thinking we have a problem, and you would be right. If we are counting our fullness as a percentage and our food in calories, how will we add them together? Looks like we will have to make some changes to our existing code, after all. The average man needs to eat about 2,500 calories per day. For the sake of simplicity, let’s say that is the number that constitutes 100% fullness.

const maxCalories = 2500; // maximum calories you can eat
let currentCalories = 2500; //calories you need to eat per day
let fullness = 100; // still keeping percentage for display purposes
const trout = 150;
const deer = 800;
const granola_bar = 200;
const beans = 450;
 
setInterval(function(){ 
   currentCalories = currentCalories - 60; //subtract fullness by 60 because we burn 60 calories per hour while sitting
   fullness = (currentCalories/maxCalories) * 100 //calculate fullness percentage
   console.log("logging fullness", fullness);
}, 30000); // 1000 is 1 second (in milliseconds) 

Above you can see I’ve added two new variables, maxCalories and currentCalories, which make it very easy to do our math in setInterval to calculate the fullness percentage. Just divide currentCalories by maxCalories and multiply by 100. We also are subtracting 60 calories every 30 seconds because that is how many calories we burn per hour when we are sitting. Now we are ready to add an eatFood function. This one should be very simple. Just updating currentCalories, right?

eatFood(food) {
   currentCalories = currentCalories + food;
}

At first glance this would seem to be enough, but ultimately we will want to display the fullness data and update it every time currentCalories changes. In that case, it makes sense to create a function for updating fullness as well, to avoid rewriting the math multiple times. Let’s take a look at the whole thing again (minus the variables).

setInterval(function(){ 
   currentCalories = currentCalories - 60; //subtract fullness by 60 because we burn 60 calories per hour while sitting
   updateFullness()
}, 30000); // 1000 is 1 second (in milliseconds) 

updateFullness() {
     fullness = (currentCalories/maxCalories) * 100 //calculate fullness percentage
    console.log("logging fullness", fullness);
}

eatFood(food) {
   currentCalories = currentCalories + food;
   updateFullness();
}

I moved the console.log message into the updateFullness function so that you can see what happens to fullness when you eat food. In my Codepen example, I have buttons that the user can click to eat the different kinds of food, but since I am sticking to Javascript for this tutorial there is another way you can call the function in the code for now.

Just like we called updateFullness inside the setInterval and eatFood functions, you can call eatFood by typing eatFood() and just adding whichever food you want to eat inside the parenthesis. That means eatFood(beans) would pass the beans variable into function.

If you throw in a couple of eatFood() functions at the top of your code, you will notice that your log statements will become problematic. This is because we don’t have anything checking for fullness being greater than 100 percent. We can fix this by adding an if statement inside the updateFullness function.

We don’t want this to happen, since you cannot be more than 100% full
updateFullness() {
    if( (currentCalories/maxCalories) * 100 <= 100) {
        fullness = (currentCalories/maxCalories) * 100
    } else {
        fullness = 100;
    }
    console.log("logging fullness", fullness);
}

This if statement will make it so that fullness gets updated to 100 if eating the additional calories would make fullness exceed 100 percent. Otherwise, the same calculation will be performed as usual. In my Codepen example, I also introduced a death state where if your fullness gets to 0 you can no longer eat food and your status displays as dead. The logic for that is very simple, just checking if fullness is 0 and then setting a variable dead to true. Then inside the eatFood function you add another if statement preventing currentCalories being added unless dead is false.

Another thing you will notice in Codepen is additional if statements for judging what to display for the current hunger status as well as for what color the health bar is. I’ve essentially added a simple GUI for users to interact with. If you want to add this functionality, check out these resources for creating a progress bar and buttons . The only additional Javascript that I am using is document.getElementById and changing the style and innerHTML of the selected element. You can read about that here and here.

A screenshot of my Codepen example

There is a lot more you can do from here. You could create a hydration meter using some of the same code we already have. You could get closer to replicating the functionality from The Long Dark by adding a general health bar that begins to go down only when your hunger becomes very low. That would be more realistic since you obviously don’t immediately die when you didn’t eat 1 days worth of calories. I encourage you to explore what you can build on top of this code and can’t wait to see what you make! Hopefully this has helped give you some encouragement.

How to Build the Rune Gate Puzzle in Hellblade: Senua’s Sacrifice

Hellblade: Senua’s Sacrifice is one of the most harrowing journeys into a mentally ill person’s mind that I have ever seen in a video game. If you haven’t played it, I highly recommend checking it out. You don’t even have to worry about getting addicted because the game has a concrete beginning, middle, and end. One of the unique aspects of Hellblade is a mini puzzle game that involves finding a shape in nature that matches a shape carved into the various runes in the world.

I decided to recreate a simple version of this mini puzzle game with Javascript in Glitch. You can look at it right away here or give it a shot yourself first. In this Javascript game tutorial we will be using HTML5 Canvas and vanilla Javascript, no fancy framework. We will load a background image of some trees and the user will control a triangle shape on top of it and try to find where the same shape can be found among the trees. When they hover the triangle shape in the right spot that matches up where the trees form that shape, the triangle will change color. You could use a more complex shape, but I wanted to keep it simple by using a triangle for this tutorial.

Thankfully the HTML is very simple, just two things we need to do. First we need to do is create a canvas element with <canvas> and give it width, height, and an id as shown below. The width and height should be roughly the size of our image. We will use the id to identify the canvas in Javascript. The entire game will pretty much happen within this canvas, which allows for advanced graphics manipulation that you cannot do with other HTML elements.

The picture we are using for this exercise

Second we need to add our tree background image so our canvas can access the image data. However I will also add a hidden class because otherwise we will see our image twice, since it’s going to appear inside our canvas. We want to give our image an id as well, since the canvas also needs to access it. I called it “trees” because well, its an image of trees. The below code will go inside your <body> tags.

<img id="trees" class="hidden" src="https://cdn.glitch.com/eb083ff0-5e3b-41d0-be19-711a1dcd89f5%2FDSC0063-1024x680.jpg?v=1589402686658"/>
canvas width="800" height="600" style="border:1px solid #d3d3d3;" id="canvas"></canvas>
<script>Our Javascript will go here, or in a .js file if you prefer </script> 

Then in order to make your image be hidden, you will want to add this inside your <head> tags.

<style>
.hidden {
  display: none;
}
</style>

Worry not, even though the image is hidden our magical canvas will still be able to access the data to display it in all its beauty. Wonderful! Now our HTML file is set and we can focus on the Javascript. The first step is to identify our canvas and get the context, which is what lets us run functions to actually change what is displaying.

let context;
let img;
let canvas;

window.onload = function() {
  canvas = document.getElementById("canvas");
  context = canvas.getContext("2d");
  img = document.getElementById("trees");
  context.drawImage(img, 0, 0);
};

I’m declaring the image, canvas, and context variables at the top because we are going to need to access them throughout the code. Having a window.onload makes sure that we don’t try to fetch the canvas before it is loaded into our browser. In the first line of the function, we are getting our canvas, which we need in order to get our context. Then we are getting our image and drawing it to the canvas with context.drawImage. This function takes our image, and then the x and y coordinates (which start from 0 at the top left corner, so in this case our image will take up the whole canvas). If our context was in 3d space instead of 2d, we would also add a third value for our z index, the perspective plane.

So what’s next? Let’s think a little about what we data we need in order for this to work. So far all we have is our tree background image in a canvas. We want there to be a shape that the user can move around on top of the image. While allowing the user to drag the shape around would be nice, the easiest option is to just make the shape follow the user’s mouse around.

In order to do that, we will need to get the coordinates of the users mouse. This is actually the trickiest part, because canvas is not very sophisticated with the data it provides by default. We have to do some math to account for the location of the canvas on the window. The function below will do that for you.

function getPosition(el) {
  var xPosition = 0;
  var yPosition = 0;
 
  while (el) {
    xPosition += (el.offsetLeft - el.scrollLeft + el.clientLeft);
    yPosition += (el.offsetTop - el.scrollTop + el.clientTop);
    el = el.offsetParent;
  }
  return {
    x: xPosition,
    y: yPosition
  };
} 

This function accepts the canvas element and returns the x and y coordinates of the canvas in relation to the browser window. We will call this function inside window.onload to get our canvas position, which will then be used to get an accurate mouse position. Don’t worry too much if you don’t understand all of it. If we were using another framework such as P5js this extra math wouldn’t be necessary at all.

The important part is next. We are going to add what’s called an event listener, which is a function that will get called every time the window detects a user interaction. We can define what user interaction we are listening for. In this case it will be moving the mouse. While we’re at it let’s also call our getPosition function to get our canvas position and add our mouse coordinate variables to the top, since we will need to access them soon.

let context;
let mouseX = 0;
let mouseY = 0;
let canvasPos;
let img;
let canvas;

window.onload = function() {
  canvas = document.getElementById("canvas");
  canvasPos = getPosition(canvas); // getting our canvas position 
  context = canvas.getContext("2d");
  img = document.getElementById("trees");
  context.drawImage(img, 0, 0);
  canvas.addEventListener("mousemove", setMousePosition, false);
//the line above is listening for when the user moves their mouse, and will call the function "setMousePosition" 
};

Olay so now we have an event listener but this code will not run because the function setMousePosition doesn’t exist yet. That is where most of the magic is going to happen. We will need to redraw our shape every time the mouse moves. We will also need to check if the shape is in the spot where it matches the pattern, so we can tell the user they have found it! You can add this function below window.onload.

function setMousePosition(e) {
  mouseX = e.clientX - canvasPos.x;
  mouseY = e.clientY - canvasPos.y;
}

The above code will get us the current coordinates of the users mouse on the canvas. We are passing in e which stands for the element that is being passed into the function, in this case our canvas element. The subtraction is happening to account for the offset of the canvas position on the browser window, as mentioned earlier. Now we can actually draw our shape!

function setMousePosition(e) { 
  mouseX = e.clientX - canvasPos.x;
  mouseY = e.clientY - canvasPos.y;

  context.beginPath(); // tell canvas you want to begin drawing lines
 
  context.moveTo(mouseX, mouseY); // move where the cursor starts the line 
  context.lineTo(mouseX - 25, mouseY + 125); // draw first line
  context.lineTo(mouseX + 25, mouseY + 125); // draw second line
  
  context.fillStyle = "#FF6A6A"; //set the color
  context.fill(); //fill shape with color
}

As you can probably tell from my comments on the code above , there are several steps to drawing a shape. First we have to tell the canvas we want to draw lines with context.beginPath and then we need to move our cursor. Since we want our triangle to follow the mouse, we move our cursor to the same coordinates.

I want my triangle to be a bit elongated, so when I define the end coordinates of my first line I want them to be just a little bit to the left (-25) and farther down (+125). To keep my mouse centered to the top of my triangle, I set my other line coordinates to be the same amount, but in the other direction on the x coordinate (+25). The final line goes back to our original coordinates, so you don’t need any additional code to complete the triangle shape. Now we can set the fill style to the hexadecimal code for a sort of salmon-y color. You have to call the fill function in order for that color to actually be applied to your shape.

That’s not right….

We’re getting close but if you run the code now you might see something is a little strange! Instead of having a triangle that follows our mouse we seem to be painting the canvas. That is because the canvas is constantly drawing more triangles every time we move our mouse and the canvas isn’t getting cleared. Luckily clearing the canvas is pretty easy.

function setMousePosition(e) {
  mouseX = e.clientX - canvasPos.x;
  mouseY = e.clientY - canvasPos.y;

// add the lines below
 
  context.clearRect(0, 0, canvas.width, canvas.height); //clearing canvas
  context.drawImage(img, 10, 10); //drawing our image again since that got cleared out
 
  context.beginPath();
 
    context.moveTo(mouseX, mouseY);
    context.lineTo(mouseX - 25, mouseY + 125);
    context.lineTo(mouseX + 25, mouseY + 125);
  
  context.fillStyle = "#FF6A6A";
  context.fill();
  
}

The clearRect function takes four values, x and y coordinates which define the upper left corner of the rectangle, as well as a height and width. If we provided something smaller than the canvas height and width only a portion of our canvas would get cleared, but we want to clear all of it. Of course this clears our image as well so we need to draw that back to the canvas again. This all needs to happen before we draw our triangle or it will get covered up by our image.

Now you should have a lovely little elongated salmon triangle floating around on top of our forest image, following our mouse obediently. There is only one thing left to do. We need to give the user some indication when they have “discovered” the pattern. There are a lot of fancy things that could be done here. We could display some text to tell the user they have found the pattern. We could add some fancy animation like in the actual Hellblade game. But for the sake of brevity and to give you freedom to experiment with canvas on your own, lets just change the color of our triangle. This code will be added to the bottom of our setMousePosition function.

if(mouseX > 625 && mouseX < 630) {
    if(mouseY > 10 && mouseY < 20) {
      context.fillStyle = #a117f2";
      context.fill();
    }
  }

Here we are checking our mouseX and mouseY coordinates to see if they match with the coordinates where we know our shape is in the image. You may notice there is a range of 5 pixels in both the x and y coordinates, because it is actually quite difficult to get your mouse on 1 or 2 specific pixels.

I took the liberty of figuring out the coordinates for the image in our tutorial, but if you want to do this with a different image or a different shape you will need to add some console.log statements to your mouseX and mouseY so you can gauge where the shape should change colors. I’m changing the color to a simple purple, though you can obviously change it to whatever color you choose. Check out my version on Glitch here.

Thats it! Hopefully you feel like you are one step closer to mastering Javascript. Now you can plug in any image and see if your friends can figure out if they can find the pattern. It’s obviously not too difficult with the shape and image I provided, but it can certainly be made more difficult with a larger image or a more unusual shape. I recommend checking out the following tutorials if you are interested in expanding your knowledge of drawing shapes and images with the canvas element:

Drawing Shapes

https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes

Transform + Text

https://eloquentjavascript.net/17_canvas.html

Build a Drawing App

http://www.williammalone.com/articles/create-html5-canvas-javascript-drawing-app/

Working with Video

If you enjoyed this article, consider following me on Twitter @nadyaprimak or if you need more tips on breaking into the tech industry, you can read my book “Foot in the Door”.

What it Means to be a Creative Coder

Programmers rarely agree on whether or not coding is a creative profession. My interest in coding always stemmed from what I could create with the code. Seeing an interesting visual result from my efforts is usually the most satisfying part. Most programmers are less concerned with how their app looks and more concerned with the functionality. Usually, as long as the app works the way it is supposed to, most programmers are satisfied.

Of course that is an overly simplified model. Programmers often care about how the code is written, whether it is reusable and easy to understand for other programmers. One could argue that deciding on which tools to use and how to organize the different parts of the code involve creativity as well. Creativity is a broad term and I’m not here to make a commentary about whether or not programming is creative. This post is rather about people who identify with the term creative coder. Namely, folks who got into coding because they are interested in how they can express themselves creatively with technology.

A beautiful procedural artwork made with Processing by Pierre Marzin. View the original and code here.

There are a lot of good examples of creative coders in some of my other blog posts, here and here. Nathalie Lawhead is one of my personal favorite creative coders. Their work lies at the intersection between games and interactive art. They draws a lot of their inspiration from old flash games and early net art. Games like What Remains of Edith Finch, which are sometimes called “walking simulators” by the gamer community for being primarily focused on storytelling can also fall into the category of creative coding.

Then there are folks who make all kind of interesting art with code on communities like Codepen. From unique loading screens to animated menus to scrolling backgrounds, these are also inherently creative. It’s hard to make a list of every kind creative coding out there because technology is constantly evolving. Tools like Processing and OpenFrameworks allow for especially dynamic and immersive art to be created, from moving and morphing fractals to particles replicating the flocking of birds or cell division, the sky is the limit for what kind of art creative coders can make.

I am a lot more passionate about programming when I am working on something like a game or interactive art project versus enterprise software. Tackling technical challenges can be fun occasionally but I am much more interested in the act of creation and the product I am creating. I am especially excited if the product I am making involves other creative aspects.

The house that you explore in the game What Remains of Edith Finch.

I think that is what differentiates creative coders from other types. What made them interested in coding was not the technical challenges or the logic puzzles but the excitement of creating something that is immersive and captivating. Creative coders may or may not be software engineers in their day job. Some are front end developers, fewer are back end developers. For me UI developer was especially attractive as a day job because it merges design and development. Even in these jobs, though, as I write about in another post, sometimes there is not as much creative expression as one might hope for.

That is the other thing that distinguishes creative coders. They always have that powerful longing for creative expression. Creative coders might also enjoy other things like drawing or music or writing. Personally I enjoy all of these things, and didn’t do any programming of my own for many years. Technically, I did tinker with web development in middle school but my first object-oriented programming code wasn’t written until college.

An astonishingly detailed artwork made purely with CSS by Ben Evans. View the original and code here.

Some creative coders have never even worked for a corporation in their lives. For instance, there are artists who started collaborating with technologists years into their career and discovered a new passion they didn’t know existed. They might have learned to code in their 30’s and used it to create generative art or experimental experiences. Frameworks like Processing have made coding a lot more approachable even for artists and folks who have traditionally felt ostracized from the world of code.

Unfortunately, being a creative coder can put you in a weird limbo between the world of programmers and the world of artists. I felt this very acutely in my career, as someone who graduated with a Visual Arts degree and then began working as a software developer.

Abstract art made with Processing by Takawo. See the original and code here.

On the programming side, there is still a lot of gatekeeping, especially at the corporate level that makes creative coders feel unwelcome and unwanted. Programming interviews are often designed to test your knowledge of algorithms that are typically taught in computer science classes. Unfortunately, since creative coders often come from non traditional backgrounds the chances that they are familiar with these algorithms is pretty small.

There are also negative stereotypes among some programmers about creative folks specifically that will put them at a disadvantage as well. Some programmers out there believe that you are either a logical person or a creative person, basically concluding if you are good at art you cannot write code and vice versa. Obviously, this is ridiculous, but those who believe it can be hard to persuade.

Particle generation made with Open Frameworks by Julian Vidal.

Sadly, these gatekeepers sometimes succeed in convincing people and so some of them never even try to experiment with coding. These same gatekeepers are usually also the kind that make it harder for folks minorities in tech to have their accomplishments recognized. Usually this means if you’re a minority and identify as a creative coder, the path to recognition and respect can be even steeper.

As if it wasn’t bad enough that gatekeepers in the programming world tend to look down on creative coders, there is a similar issue for these coders being recognized by the art community. First of all, the percentage of galleries that showcase generative art, immersive experiences, or experimental games is still very low compared to the galleries that showcase works of painting or sculpture. The few galleries that do, like Artechouse, can be extremely particular about who they choose to showcase. To be chosen for exhibition is akin to winning the lottery, probably even more difficult than landing a programming job at Google or Facebook.

One of the Miami exhibits at Artechouse from their Instagram page.

If you identify as a creative coder, you might be feeling a bit depressed after reading all of this. The thing is that regardless of how much gatekeeping or frustration creative coders face, they make some of the coolest projects on the internet. Once you make that first hypnotic generative art piece or that game that you’ve had in your head since you were 10, you won’t feel the same afterward. Ultimately, if you are a creative coder you know it’s so much fun that you would be doing it regardless.

Cover image by Masaki Yamabe


If you enjoyed this article, consider following me on Twitter @nadyaprimak or if you need more tips on breaking into the tech industry, you can read my book “Foot in the Door”.

Think 100 Days of Code is the Ultimate Challenge? Think Again.

A popular challenge that beginner programmers participate in is called 100 Days of Code. Although I never participated in it myself, I see countless tweets with screenshots and progress reports of people sharing bits of apps they made. 100 Days of Code is a great way to keep people in the programmer mindset. It gets them familiar with what it is like to code every day. Still, I wonder if it is the best approach for everyone.  For them, One Game a Month could be a great alternative.

I’m here to propose another approach, one that is gaining popularity in some game development communities. It’s called the One Game a Month challenge. Unlike the 100 Days of Code challenge, its designed to be undertaken for an entire year. Unlike the 100 Days of Code Challenge, One Game a Month allows you to take your time. Not necessarily write code every single day. 

I know what some of you might be thinking. Well, there are a lot of other components that go into a game — you have to make art, and audio, and design decisions. That is naturally all true. Although, I would argue that adding this creative element to your coding adventures actually makes the whole thing a lot more fun. Especially if you’re a creative coder like me. But I don’t want to land a job as a game developer. I want to work at a hip startup disrupting [insert industry here]. I get that too.. but here is the kicker. I am a self taught programmer, and the majority of my portfolio consisted of – you guessed it- games. 

There’s something that gets skipped over a lot when people talk about breaking into the software industry. It’s not necessarily about what type of product you show off. It’s about the coding language you use to make the product. And whether that language is one used by the startup you are applying to. It is very much possible to develop games with Javascript, and Javascript is also one of the most in demand languages. 

Although the original one game a month challenge ended, more people have picked up the mantle to continue the hashtag on Twitter.

So back to my earlier point. One Game a Month gives you a challenge that you can work on more steadily. It also conjures (hopefully) more excitement than making another Reddit or Craiglist clone. There are even communities built around specific game platforms such as Pico-8, which are very generous with sharing their code and resources. Although Pico-8 runs on Lua, it bears a lot of similiarities to Python. Lua still teaches you the important data structures and logic that you need to know to become a programmer. 

I can imagine some of you might still be skeptical. Maybe you want to see some real examples of games that were made with Javascript. I can understand if you’re not yet willing to buy into this “one game a month” thing. Here’s some different games that you can check out, starting from the easiest to the hardest to code:

Alien Attack: This game is good for getting your feet wet with Javascript, and isn’t too complicated. You have to guess the X and Y coordinates of an alien in order to shoot them. The blog post shows all the code involved in making the game.

https://stuyhsdesign.wordpress.com/2019/04/02/alien-attack-game-complete__trashed/

Sliding Tile Game: This game has a lot more Javascript, but is still fairly straightforward in terms of the logic. It’s a game where you have to get 8 tiles that are are scrambled back in the right order. But there is only one empty slot where you can move the tiles at any time. This blog post is extremely thorough in walking you through the game mechanics and how to figure out the winning state.

https://solathecoder.hashnode.dev/build-an-8-puzzle-game-with-pure-javascript-ck0s0k2bs000phjs1relpwc2l

Bunny Defender: Unlike the previous two games, Bunny Defender requires using a Javascript game engine called Phaser. Getting comfortable with a Javascript game engine will make it easier to learn Jframeworks like React or Angular. So, it is a great step forward. It is a mobile game where you have to destroy asteroids trying to destroy a planet of bunny rabbits. You can find some examples of code for this game on Github, but the original tutorial to make the game was on Lynda.com.

https://www.lynda.com/Phaser-tutorials/HTML5-Game-Development-Phaser/163641-2.html

2048 : 2048 is another puzzle game where you use the arrow keys to move all of the pieces on the board in that direction. There are many examples of this game coded with different frameworks like Vue and React. Here are a variety of links below:

Vue: https://github.com/es-repo/vue-exps/tree/master/game2048

React: https://codepen.io/jeffleu/pen/JRzyPZ

Multiplayer Battleship: This is a really advanced game that uses Angular and Typescript. I haven’t used this tutorial myself, but it seems comprehensive and a great fun way to get comfortable with a modern Javascript framework.

https://pusher.com/tutorials/game-angular

If you enjoyed this article, consider following me on Twitter @nadyaprimak or if you need more tips on breaking into the tech industry, you can read my book “Foot in the Door”.

Making Games to Learn Programming with Pico-8

There are a lot of reasons to start making games to learn programming. Games are fun. They are the epitome of creative coding. Unlike to-do apps, games are something you are excited to show to your friend because it is something they will engage with. There is a misconception among some developers that games are difficult to code, and unapproachable to beginner developers. It’s also a great first language in coding for gamers.

I didn’t really get excited about learning to code until I started making games. As a creative coder, games have always been by far the most interesting to me. It’s quite possible I never would have become a software engineer if game development wasn’t one of the applications. As a kid games like Rayman, Zelda, and Donkey Kong filled me with excitement. I remember a feeling of joy when I finished a level or beat a boss that I wanted to shout it from the rooftops. With Pico-8, you will programming simple games, but some of them might remind you of those games from your childhood.

The fact that I have the skills to build games like that myself as an adult fills me with pride. That is because I know the kid I was before would have looked at the adult me with awe. Of course some days I forget about that when I am struggling with a frustrating bug. But at the end of the day it is the main reason I do what I do. We all have an inner child who we want to satisfy, after all.

It is possible today to learn all of the major programming concepts through making games. Although I did not do that myself, I think it would have made my experience much more engaging. My first real foray into programming was in college where I took a few programming classes, and some days it was a real drag.

Pico-8: The Perfect Platform

A year ago a friend showed me a game engine called Pico-8 for making minimalist pixel art games. I initially rolled my eyes at it, because I thought myself sophisticated making games in Unity. I thought that making games with Pico-8 was like advertising to the world that you don’t know what you are doing. Now I couldn’t disagree more.

Every Game is a Pico-8 Tutorial

The first thing that is amazing about Pico-8 is the community. Every one is passionate about learning and sharing, and many members of the community make their own Pico-8 tutorial (s). There is such an incredibly giving and supportive network of folks who participate in the forums. They are also active on Twitter and Discord and beyond. In fact, some users even post Pico-8 code snippets as tweets!

The pico-8 forums are a goldmine

Many software developers believe in open source and sharing their code on GitHub. But in the game development world it’s not so easy to get access to raw code. The AAA world obviously has every line of code concealed behind 10 page NDA agreements. Indie game developers tend to be cautious and perhaps paranoid about people stealing their game.

Thankfully, on Pico-8 that could not be farther from the truth. Every game uploaded to the website allows you to view the code right in the browser, right below the game window. You can copy and paste it right into your own game, no strings attached. That is another reason that makes Pico-8 an exceptionally good option for making games to learn programming.

Simple Coding Language

Pico-8 runs on an easy to understand programming language called Lua. If you’re looking for a Pico-8 tutorial, there are plenty to choose from. In many ways it resembles Python and doesn’t require and pesky semicolons or parentheses all over the place. It reads a lot more like English than a lot of other programming languages do.

Pico-8 also has limitations on the complexity of the logic in the game, which it counts with “tokens.” This forces people to simplify their games and keep the scope reasonable. That is great for beginning programmers. It helps to avoid temptation to code something the long way instead of looking for a solution with fewer lines of code.

Documentation and Tutorials

Programming languages, frameworks, and API’s live and die by their documentation. The quality of the documentation often goes hand in hand with the quality of the community. Since I already wrote about the community, you can probably guess what I will say next.

Just one of the many fanzines you can get on itch.io

I bought a zine on itch.io which breaks down Pico-8 into its different parts. From explaining the user interface walking you through steps to build basic games, it covers a lot of ground. It’s the type of documentation which is not only thorough, but very beginner friendly.

Great Games

You might have similar thoughts to mine when you glance at your first few games on the Pico-8 platform. Certainly they aren’t going to blow you away with their graphics the way that some Unreal Engine games do. But believe it or not, there are some real gems and even best seller games that were made with Pico-8.

The most notable example is Celeste, a critically acclaimed platformer where the original prototype was built with Pico-8 in just four days. Beginning programmers should not expect to make a bestselling game. But it is encouraging to know Pico-8 is a platform where that is possible.

If you enjoyed this article, consider following me on Twitter @nadyaprimak or if you need more tips on breaking into the tech industry, you can read my book “Foot in the Door”.

My Indie Hacker Year In Review

This past year was a big one for me. I got motivated about starting my own business, and making a name for myself as a creative woman coder and indie hacker. This blog was one of the accomplishments from this year. I had to take a few months off to write my book. This year was in many ways the most productive one I’ve had in my career. So let me summarize my indie hacker year in review:

  • Published a book about my journey getting into software development
  • Got that book to #1 most downloaded spot in 3 categories during KDP Select free promotions
  • Started an email list and grew it to 300 subscribers
  • Switched from front end to full stack developer
  • Showed my game at a public event in my city
  • Was waitlisted to show my game at a much larger public event (Super MAGfest)
  • Learned about React, Redux, NodeJS, MySQL, Microservices, Typescript, ES6, and Cypress
  • Grew my Twitter following by 300 users (in the last 2 months!) after letting my account stagnate for several years
  • Had three blog posts featured on the front page of Hackernoon

One of my proudest accomplishments of the year

I didn’t start 2019 with a concrete list of goals. All I knew was that I wanted to do something that involved both being creative and coding. But I can say for sure I did not expect to accomplish this much a year ago. I was feeling the entrepreneurial itch and I knew I wanted to create and sell something. That was pretty much it. I knew that in order for something to sell successfully, I would need some kind of platform.

Blog

That was where my blog came into play. The thing is, I blogged before and always ran into the same problem. My blog wasn’t niche enough, at least that was what other people kept telling me.

It wasn’t until I read a book about multi-passionate people and how they can be true to themselves. I decided launching a blog might be a possibility after all. I realized that I was interested in game development, web development, creative expression, and indie hacking. I thought I could merge all of those interests into a creative coding blog.

Originally the blog was called “Multimedia Minds” and it wasn’t connected to my personal website. Over time I became dissatisfied with the title and thought that merging it with my website made more sense. I already branded myself as a combination of UI and game development, though I think creative coder is much easier to understand and doesn’t involve having to explain to myriad of skills involved in being a UI developer.

Later on I realized could use my blog as a funnel to interest people in my book. Thus far I had written a wide range of posts I thought I ought to focus more for a while on the tech industry. Then my blog would rank higher for programming related content. So for a few months now I’ve been blogging about different cultural aspects about working as a programmer. From attitudes about work-life balance to how engineers get promoted and what kind of problems programmers can face in the workplace.

Book

I wish I had created more hype and setup a preorder page for my book before I released my book. Despite some of my mistakes I’m still satisfied with the progress I made. I’ve learned a lot about Amazon ranking and keywords, as well as how to run giveaways to drum up more interest. I posted my book to a lot of directories that share free books. I was running promotions where I would give my book away for a limited time. That helped with getting downloads. Now I’m very happy to see my book on the first page of results for my focus keyword.

I started growing my e-mail list as part of my planning ahead for when I was going to sell a product. For the first few weeks I actually grew it the most by giving my book away for free. That was, before I enrolled it in the KDP Select program. It helped to get my e-mail list started but after a few weeks interest seemed to dwindle. I wondered if it made more sense to try to sell my book. It’s pretty funny to think that if I hadn’t made that jump I would never have know how successful my book could be. Looking back on that decision really puts things in perspective for me.

Expanding Reach

Twitter was a good place that I knew could work as a funnel for my book as well as a way to extend my reach. I had a Twitter account for years, but it never really took off and I decided to reinvestigate why that might be. I decided to try out two services that I discovered through Product Hunt. They help to schedule tweets in advance by creating content libraries that can cycle through different types of content that you want to share. This has been a lifesaver for me, because its hard to be constantly active on a platform that updates so quickly. The other tool focuses on following people. It chooses people to follow based on the hashtags that they use and the type of content they write about. I don’t expect to use that tool forever, but it’s connected me with a lot of cool new people. It has broken me out of the rut that my Twitter account was in for so long.

My post about UI Developers on Hackernoon’s homepage

I realized that I could get also more reach on my posts if I shared them on other coding related websites. Initially I contributed to Code like a Girl, but later I got ambitious and decided to submit some articles to Hackernoon. Not only did they accept my posts, but they actually featured several of them on the home page. This was really a big boost for me. I no longer doubt my writing skills or that I have something worthwhile to say. So that’s probably one of the biggest wins I had in 2019.

Game Development

That was a lot of talk about my book and my blog. Obviously writing is a big part of my life, but as a multi-passionate person it is far from the only part. The year in game development was not as productive as some of my past years in terms of actually making games. But it was by far the most productive in terms of finding my game developer community. Actually showing my games to real people and getting connected. After years of fear I take the risk and submit my game to some local events. The first one was at a library in my city. It filled me with so much energy and joy. I showed a game that I had worked on by myself, that had very little exposure. People really responded to it and were impressed that I made it by myself, which meant the world to me.

Super Magfest is a huge convention that I love to attend

The next step was to submit my game to bigger events. The biggest event in my area is called Super MAGfest (Music and Games Festival). I figured if my game was accepted to the indie showcase there, I could really feel like a professional. Unfortunately, it was not accepted BUT it was waitlisted which was still a big motivator for me. Especially because the games I submitted were not ones I had toiled over for years. In fact, the one that was waitlisted had taken me less time than the other one I submitted (which was rejected outright).

Day Job

There is still one area of my life I haven’t covered, which is my actual day job. I hope one day to be a full time indie hacker making interesting apps or games for people to enjoy. There is still a lot I’m learning from the startup where I’m currently working. This startup trains everyone as a full stack developer, so I am learning a lot about back end technologies that I did not know. It’s exciting because it fills that gap in my knowledge and means I can really become a one woman development team. It is also a little bit overwhelming considering all the other things I have been working on this year.

So that was a really long post. I wasn’t intending for my indie hacker year in review to be this long but when I started thinking about everything that happened this year, its not surprising. I was going to also write about my goals for 2020 in this post. But considering the length it is already, I think it’s best that I save it for next week. Overall I’m pretty happy with what I have accomplished, and I think I took some really important steps toward actually becoming an entrepreneur. Selling my first product, gaining traction on my blog, and building a social media following are all steps that I feel I have taken. That being said, I know there is still a long road ahead. As a quick preview: building my email list, finding my tribe, and creating a community are all goals I have.

If you enjoyed this article, consider following me on Twitter @nadyaprimak or if you need more tips on breaking into the tech industry, you can read my book “Foot in the Door”.

How I Shared My Project with the Indie Game Community

Last weekend I checked another item off my bucket list: sharing a game at a local development event. The event was District Arcade in Silver Spring, Maryland, and the game was one I talked about in a previous post: Grand Canyon Adventure. It has convinced me that if you are a game developer, you can share your work with the indie game community by submitting your game to local events.

The submission process was easy enough: just fill out a google form with links to some screenshots, a brief explanation of the game, and of course a way to actually download and play the game. So why hadn’t I done it sooner? I had made at least a dozen games, if not more, but I had never taken even the first step to show my game in front of actual human beings.

I think the reason I avoided showing my game was the same reason many of us avoid doing things that involve putting our work out there. We fear rejection, we fear being made a fool of in public, and we fear that we will be faced with terrible truth. That we will never reach our dream. I taught myself to code by making games, but I never had a full time job as a game developer so I didn’t really believe in myself. I identified as a creative coder more than an indie game developer.

There is a choice each of us makes regarding our dreams. We either keep our them in a glass cage and never touch or tamper with it, and admire it like a beautiful statue from afar. Or we take the dream in our hands and carry it with us every day, no matter what dangers it might face out there.

I don’t want to wax too much poetic in here, but I can say I am glad that I took that dream in my hands. Even though I feared the worst, sharing my game at a public event actually turned out a lot better than I could have hoped. But first, let’s talk about the experience itself.

When my game was accepted I was both excited and nervous. I was excited that my game was accepted, but nervous because of all the what if’s in my head. What if nobody played my game? Making things worse, I couldn’t present my VR bowling game because there wasn’t enough space. Which meant I would have to present my other game: an educational one. I didn’t imagine many people wanted to use their brains on the weekend. Especially when there were plenty of mindless games available to play. Finally I was a female indie solo game developer, and I didn’t have any banners or stickers. With no swag to hand out could I still impress our visitors?

The first kid who sat down to play my game ran away blushing when he got his first question (my game includes a quiz about erosion) wrong. That didn’t bode well. Then more people started filtering in, and slowly things started getting better. I arrived at the event around 11 AM and barely had time to blink before it was 2 PM. People of all ages checked out my game, from teenagers to kids to adults and even some elderly folks.

I was taken aback by how respectful everyone was. Also how impressed they were when I mentioned that I made the game myself. When I shared my game online it was a completely difference experience. Under the mask of anonymity people had no fear of criticizing my games and providing very unhelpful negative feedback.

Of course there was still some negative feedback. But with the number of people coming through I could easily filter out the useful from the useless. If I heard the same negative feedback several times I knew it was probably something I should fix. Unlike the negative feedback I received online, the negative feedback in person was not nearly as demotivating. It was just a drop in the bucket compared to the positive. Feedback was also delivered in a much more constructive manner.

Since sharing my game at my local indie game community event I feel much more motivated and confident about my work. I’ve realized game development is a type of creative coding, so I’m not writing myself off anymore. I made connections with other developers. Now I feel like there is an actual community out there that cares about what I am doing. Those of us developers making games on our own really need this. We don’t have a lot of people to share our stuff with. Submitting our games to the local indie game community is the best thing we can possibly do.

I hope you take my advice and submit your game to a local event! If you’re wondering where to start finding local game showcases and events, start by checking out your local chapter of IGDA or searching meetups.com. If you want to read more about the game I featured at the event, there is an older post I wrote on the subject here.

If you enjoyed this article, consider following me on Twitter @nadyaprimak or if you need more tips on breaking into the tech industry, you can read my book “Foot in the Door”.

Being a programmer vs a game developer. How much money is passion worth?

A week or so ago there was a thread on Twitter that caught my eye. It was a tweet asking people what they would pick: a job making 50K per year that they love or a job making 100K that they hate? Working for money versus passion is often the central question many people face in their career.

It was interesting to see the range of responses. I was expecting it to be a pretty mixed bag, but from scrolling through for a while a lot of people said they would choose making 50K per year at the job they love.

Maybe because I am jaded, or maybe because I live in a big city where programmer salaries start at 80K and the average 1 bedroom apartment costs 2K, but I was surprised at how enthusiastically and unflinchingly people said they would choose the 50K option.

As I mentioned in my last post, I started a new job recently. When I am in this state of transition, I always find myself considering my choices up until now in my career. Especially whether I am still happy with the path I am going down.

Usually what I end up wondering about the most is if I made the right choice avoiding game developer positions. Granted, even if I had applied to them, there was no guarantee I would get them. But I often didn’t even look very hard. It felt like I was almost deliberately denying my dream. Picking the cold and calculating approach to my career that made me feel like something akin to a career grinch. To be fair, I have been making games in my free time (which I talk about here and here), but it is not the same.

One reason I felt like I had to sacrifice my creative dreams was because I was born to immigrant parents who fought tooth and nail for everything they got in the United States. My mom especially ingrained in me a belief that money was really hard to get, and that pursuing my passion might leave me penniless and starving on a street corner.

Following your passion was risky business, and taking risks was dangerous (it didn’t help that I was an only child). To those of you who don’t have immigrant parents (or siblings) this might seem a bit extreme. Thing is, they were born in Soviet Russia where clementines were considered a spectacular Christmas gift. So a little bit of imagination is required.

I did see some that shared my cautious attitude about pursuing my passion in the twitter thread.

https://twitter.com/oscargodson/status/1174503654809731072

So did all these tweets change my mind about whether I made the right decision? Is there an answer to which one wins over in the working for money versus passion debate. Was I right to choose web development instead of game development? I wish I could offer a yes or no answer. Unfortunately, as some people also pointed out in their responses, the question is rarely so black and white. My greatest fear about taking a game development job was that I could end up taking a pay cut and also hating my job.

I wrote about what it is like for women in the game development industry in another post. From sexism to harassment, and even rape, there is a frightening amount of horrors women in the game industry experience. Naturally, I feared facing these same kind of experiences myself. To make things worse, if I didn’t like my game development job and then tried to go back to web development? I might never make the money I was making before.

To be clear, I always was seeking out creative coding opportunities, but those types of jobs were tricky to find and game development felt like the most creative option by a long shot. In my head, a game development job would be the dream. But in reality who knows what it would be really like? It’s hard to say whether a job will be one you love or hate until some time has passed. It’s also hard not to chase your dream when you’ve been raised your whole life to do that exact thing. My parents tried to implant a practical attitude. But I still got the same treatment at school as any other millennial. Teachers encouraged me to dream big and never give up. So naturally, it’s still hard to let go of the idea of being a game developer.

I am certain this is not a dilemma I face alone. Many people go into programming as a career from lower paying fields. I met a woman once at a meetup who wanted to get into coding because she was burnt out as a social service worker. I also have a friend who was a professional artist and became a programmer so they didn’t have to worry about paying their bills. There are many others like her who work in rewarding but taxing jobs that eventually become intolerable. Did they love the job when they started out and begin to hate it later? Maybe they didn’t realize how unpleasant the job might become until later. Or they told themselves they loved helping people, and that helping people should be their passion.

At the end of this post, it seems I don’t really have an answer to the question in my title. It’s almost impossible to put a dollar sign on passion. Not just because thats a good quote to put on an inspirational poster. It’s hard because our imagination is not the same as reality. A job involves more than just doing something you are passionate about. It involves coworkers you may or may not get along with. Benefits that may or may not be good, among other things. Bosses who may or may not see where you’re coming from. And you won’t know all of those things until you take that risk. For now I’ve taken the safer road and worked as a creative coder in my free time, but perhaps in the future I will change my mind.

Would you take the 50K job you love or the 100K job you hate? What does working for money versus passion mean to you as a tech worker? Feel free to leave a comment with your thoughts! I also highly recommend checking out the original thread on Twitter, or join in the discussion yourself.

If you enjoyed this article, consider following me on Twitter @nadyaprimak or if you need more tips on breaking into the tech industry, you can read my book “Foot in the Door”.

What Happens to Women in the Game Industry

In light of the reports of sexual assault from game developers Nathalie Lawhead, Zoรซ Quinn, and Adelaide Gardner at the hands of male industry legends this week, I felt like I needed to make this post. I’m not going to be the first or the last person writing about this topic. But their stories and their bravery in sharing them despite risk to their careers should be spread as widely as possible. I have been very interested in being one of the women in the game industry for years, as you can probably tell by some of my other posts (here, here, and here). Yet the fear of what goes on there kept me from making a serious effort to break in.

Nathalie Lawhead was the first to release her story. She published a long account on her personal blog that included screenshots from emails as evidence. The extremely abusive treatment (unpaid labor, gaslighting, extreme crunch, humiliation) she experienced at the hands of Vancouver based game company combined with the sexual assault and harassment from Skyrim composer Jeremy Soule (who used his connections to make her experience at the company as horrible as possible) had me reeling. I can hardly begin to imagine the pain and suffering Nathalie went through. The way she described it made my entire body ache with compassion.

Nathalie Lawhead is the creator of Tetrageddon games

It is not news for those who pay attention that the game industry is toxic. There is a movement for game developers to unionize because of game corporation’s frequent layoffs, tendency to underpay, and mistreatment of workers. Game journalists publish accounts detailing how many companies resort to long periods of crunch to complete a project. During crunch, companies expect developers to pull all-nighters, skip meals, and generally work till they drop. There are no tangible statistics that I know of tracking how many game developers literally drop from burn out. But, if they exist, I am certain they are extremely disturbing trends.

The thing is, women and men share the burden of overwork in the game industry. It is a horrible standard, but there is an even uglier side that women experience. Riot Games has been under fire for years for its sexist culture. There have been abhorrent reports of sexual harassment, almost farcical in their extremity. “One woman saw an e-mail thread about what it would be like to ‘penetrate her,’ in which a colleague added that sheโ€™d be a good target to sleep with and not call again. Another said a colleague once informed her, apparently as a compliment, that she was on a list getting passed around by senior leaders detailing who theyโ€™d sleep with. “

Riot is the company behind the mega successful massively multiplayer game League of Legends

Game companies like Riot have been getting away with this disturbing bro culture for years because of their extremely popular game League of Legends. Riot and many other AAA companies also has raving fans known to pile on to anyone who criticizes the company or their game. Plenty of game developers have lived in fear of these fans. This is because they often aggressively demand changes to the game whenever it doesn’t fit with their expectations. This leads to women in the game industry to live in fear of speaking up about sexism. Angry fans have gone so far as to release developers personal information, or engage in prolonged online harassment of their targets.

Then you have the game industry legends. Criticizing a game company can bring down the wrath of hundreds of fans. Criticizing a legend can be even more dangerous. These are the darlings of the industry, deeply respected with more connections than most game developers can dream of. They have the power to make or break the career of an up and coming developer. It’s no wonder that Lawhead lived in fear for years of speaking up about what happened. She knew how immense the backlash could be. Even though she has won many awards for her fantastic work, as a woman and an indie dev she knew her name did not carry the same weight as that of Jeremy Soule.

Jeremy Soule also did the music for Oblivion and Morrowind.

The closest I ever got to working for a game company was when I went to a a IGDA talk. The CEO discussed his game and said he was searching for more developers. I spoke with him and told him about my Unity experience. He invited me to come to another event a week later. It was at that other event that I witnessed him blatantly touch another woman’s chest under the guise that he saw a hair there. I remember the shock and sinking feeling in my chest when this happened. It occurred to me that this was likely going to be the behavior I would witness (and maybe have done to me) on a regular basis if I worked for him. I had witnessed sexism in tech many times. Yet this was on another level from what I had seen previously, and crossed the line into sexual harassment.

You might be wondering what I’m trying to get at in this piece. I guess it’s nothing that hasn’t been said before, but until I see change I feel like it will just have to keep being said. Over and over and over again. No aspect of how women are treated in the game industry is OK. What happened to me is a pale ghost in comparison to what happened to women like Nathalie, Zoรซ, and Adelaide. Yet I have seen and read enough to believe that what they say is true. My heart goes out to all of them, and to all of the other women in the game industry who have experienced sexual abuse in the game industry. More of them are coming out of the woodwork with their stories even as I write this. None of them deserve to suffer like this.

If you agree with what I’ve written here, consider following me on twitter @nadyaprimak. I post updates about my blog, coding projects, and creative work. I also write a fair amount about the tech and game industries. If you’re interested in delving deeper into what its like specifically for women in gaming, I recommend checking out this book.

Recovering From Creative Burnout

It might surprise some people reading this, because I’ve been publishing these blog posts every week for a month or two now, but I have been recovering from creative burnout for quite some time. Part of this is because of my last game development experience I wrote about in my last post, Navigating Your First Game Development Contract. Part of it is because it’s difficult in the saturated social media world to receive feedback for your creative endeavors. Yet another part is our human tendency to compare our work to other creatives who might be more successful than ourselves.

None of the reasons listed above are more valid or more justifiable than others. The worst thing you can do for yourself when you are recovering from creative burnout, is to beat yourself about it. Not only will that fail to get you out of a slump, it will actually make you feel significantly worse and may even lead to depression. In fact, it might seem illogical but the first thing I recommend doing is accepting that it is okay to be in a slump. We are all human beings, and human beings are not perfect. Therefore, you can not expect yourself to go through life never experiencing any creative slumps. They happen to many of us, and we can overcome them.

One of the first things I noticed about my slump was that starting a new project felt like a completely overwhelming task. My energy reserves felt depleted, probably because I used most of them up on my last project. As creative people we are using our right brain constantly and it can get worn out, like a muscle. This is especially true if you just finished tackling a large project. So, have a little sympathy for yourself. I’ve found that when I’m feeling down it helps a lot to practice loving kindness meditation. It may seem like a small step, but it’s important to gain some of that confidence back. Believe you are worth comfort and respect. That starts with loving yourself!

What can you do once you are feeling a little bit better? I suggest starting with small things. Projects that you can share with friends and loved ones to gain back a bit of that validation and start feeling good about yourself again. If you’re a painter, that might mean making miniature landscape paintings on tiny canvases. If you’re a musician, maybe you remix an old track or hit up an old friend for a collaboration. Writer? Maybe you write some flash fiction. Game developer? You might look up game jams on itch.io that have strict limitations on time and complexity.

This self care wheel includes lots of ways to practice loving kindness towards yourself.

The point is to take baby steps toward getting back into your full creative practice. Have patience with yourself. It might require a number of small projects, and you might even have to revisit the first step of practicing loving kindness and compassion for yourself if one of these small projects doesn’t work out the way you hoped or you feel some resistance. If you are burnt out, you should focus on having compassion for yourself and practicing loving kindness.

It is likely that if these small projects feel exhausting or give you no sense of accomplishment, then you experiencing severe creative burnout That doesn’t mean you are broken. It just means you need to give yourself a little bit more time recovering. Focus on rest and relaxation before picking up your creative practice again. Don’t force yourself to work on something creative if it doesn’t give you any sense of joy or excitement.

Another important thing: whether you are burnt out or just in a slump, reduce your time on social media. This goes especially in terms of following successful creatives. Even if think we are just admiring another creatives work, subconsciously we still compare ourselves and feeling worse. If you know you have that kind of masochistic streak, you can temporarily delete some of the social media off your phone. That way you don’t end up mindlessly browsing and feeling worse without even realizing it.

The “do everything” mindset is what often leads to burnout. That is why baby steps are so essential.

Finally, remind yourself that motivation is good, but it doesn’t necessarily come before action. In fact, more often than not, motivation and action are closely linked, and action actually comes first. With the case of creative projects, oftentimes we begin making something, then we become more motivated by our progress, and the cycle repeats itself. So don’t be surprised if your first small project feels a little bit tedious at first, that is normal!

There is a ton more I could say on this subject. Recovering from creative burnout ties into our general mental health and there are tons of discussions around that topic online. However I want to provide practical advice so you can get started quickly. Feel free to comment where you are at in your slump recovery journey, and I will try to offer my best advice. You can also tweet at me @nadyaprimak. Good luck with your recovery journey!

Pitfalls in Working with a Game Publisher

There are thousands of indie game developers all over the world who make games. But, only a fraction of those developers have any experience working with a game publisher. I was one of those developers when I saw an opportunity to work for a start up that published educational games. I submitted my game portfolio to the company and was accepted shortly after. It was a super exciting moment. I couldn’t wait to start working with a game publisher on a legitimate platform.

Unfortunately, my experience working with the company was less than ideal. Perhaps there were some warnings early on, but I did not know what signs to look for. Also, the company seemed eager to share information with me about how to complete the project successfully. They set up a video call with me and e-mailed me the PowerPoint that illustrated the requirements needed. They immediately gave me access to the platform where other developers submitted their games so I could get some inspiration for what game I should make.

I immediately noticed many of the games submitted through the platform were very simple. This made sense, because there was a requirement to complete the game in three months. Still, I felt pretty confident I could make a game that was more interesting. There was a clear incentive for making the games more engaging. Developers were paid by the percentage of users who play their game.

What I didn’t realize, and what wasn’t made clear to me, is that the game I built had to work seamlessly on an internet browser on older iPads. This was the reason that the games I saw on the education platform were so basic. Unfortunately, during my on-boarding the technical aspects of just how simple my game needed to be were not discussed. I had no idea that I could not have a three dimensional game where you could move a character around an environment with arrow keys because the iPads running Chrome could not handle rendering at that frame rate.

It can be difficult to export a game to an iPad or the web by itself, but both at the same time? VERY DIFFICULT

It was a huge blow to my motivation and excitement about game development when the testers reviewed my game. They said that it was unplayable on the required platforms. It was also a shock because I had been using the testing platform provided by the company many times. Before I submitted the game I played through it on the testing platform religiously. It seemed very counter-intuitive for the company to provide a testing framework if “passing” the test didn’t actually mean it would run on the final system.

I attempted to re-factor my game by reducing the complexity. For starters, compressing the graphics and simplifying the 3D models in the environment. After another round of testing I realized that there was no way my game would work within a web browser on an iPad without making huge changes. I had only a few weeks left at this point.

Some of you may be wondering why I didn’t create a build of the game and run it on an iPad myself. The problem was that the game had to connect to the companies proprietary API’s, and those API’s were only designed to run on the companies domain where the testing platform was. To make matters worse, their API also didn’t run on an iPad — only a computer.

https://www.youtube.com/watch?v=NRVqZ58EcP8&feature=youtu.be
A brief video preview of my game, Grand Canyon Adventure.

In retrospect, I can’t help but wonder if the company was trying to take advantage of eager indie developers. The kind who are too new to know how to distinguish a sketchy arrangement from a legitimate one. I was one of those developers, who trusted that the information I needed to succeed would be provided to me. Maybe it was disorganization and mismanagement on the part of the company that made the technical requirements unclear. Regardless, the result was the same.

I wanted to share this story because I’m sure there are other indie developers out there looking for contracts to prove their capacity and get their work seen by more people. It’s an admirable goal, and far be it from me to discourage any indies from doing that. However, its important to be aware that many companies take advantage of indies eagerness to get professional experience. I wish I had done more research and asked more questions before diving into making the game. Hopefully this post will help those of you reading to be aware of some of the pitfalls. Especially in cases where you are working with a publisher that has very specific rules about the types of games that they accept.

It was not a lack of motivation or excitement about making the game on my part. I read through the rules, visited the forums, and took time to explore the platform the company used. Sadly, I had pretty much completed the game before I learned it would not be publishable on the platform..

Spending three months on a game that ended up not returning any profit is bad enough. Whats worse is the bad taste is still there an entire year later. I can only imagine how much worse it would have been if I signed a contract for a year. I know this has happened to other developers. It is my sincere belief that the industry needs to do a whole lot better. Especially in terms of making the technical limitations transparent, without taking advantage of indie developers passion.

My itch.io page for Grand Canyon Adventure

Even though my game didn’t get accepted while working with the game publisher, I decided to publish my game publicly on itch.io instead. After all, it is a shame to work on something and have it sit unseen on my hard drive. It’s an educational game for middle school students where you navigate a boat through the rapids of the grand canyon. You earn points by collecting gems and answering questions about erosion.

Are you an indie developer? Have you had any bad experiences working with a game publisher, on educational games or otherwise? I would love to hear from you in the comments.

Thanks for reading and feel free to follow me on Twitter @nadyaprimak where I talk more about game development, art, technology, and more.