LD-46 - The aftermath

I learned a lot from this experience. Well, I think what I learned more is recognizing how far I've come. While the game I made wasn't perfect by any means, I found that somewhere along the way I've been developing this skill to recognize and adjust for, scope.

Last week, my work was incredibly busy. Thursday afternoon, I finished my work and had dinner. I sat down to my newly acquired Game Maker Studio. For years, I've been programming in python and pygame. I love pygame and the control I get from it. However, I had updated my python to 3.8 and pygame to 2.0. Unfortunately, I haven't been able to find a good exe library for those versions. A friend of mine told me, after the jam, that he had found one. That's great. But the day before the jam, I was looking for alternatives. I'd used godot before, which I love. For me, godot is probably the best 2d tool out there. Unfortunately, my laptop, with it's on board video and lack of video ram, tends to lock up using godot if the project gets bigger than say... the main menu.

While I could wish for a better computer, I decided to keep looking for something that would fit my limitations in this area. I revisited game maker studio 2. I had used gms once before. I fell into the trap of thinking somehow that it's not a good tool or that somehow you can't be a "real" game designer if you use it. Over time though, I started to realize that I have a number games made in gms and that there are many successful games out there that have been made in gms.

I own and enjoy "12 is better than 6", and "Heat Signature", and "Spelunky. I've marveled over games like "Blazing Chrome", "Hotline Miami", "Downwell", and "Katana Zero". Don't get me wrong. I am not trying to defend game maker studio or my decision to use it. I did, however, have to defend it to myself.

The bottom line came to this central idea. If I could make a kick ass game out of some string and a paperclip I would. It's not the tool that you use. It's how well you use it. Have the time, most people can't tell what engine something was made in and they have to look it up. So I started fiddling with it and within 24 hours, I had made "Office Escape". I submitted it to a game jam that same night and won. While it's got it's problems, it was really good for 24 hours worth of work. Something dawned on me.

Prototyping, because that's basically what we are doing here, is difficult. Getting something up and running from scratch and embracing that core concept is a difficult task. With python, even with boilerplates and working with multiple people, it takes a lot of time. I'm not saying you can't do it, you certainly can. It just takes longer. For me, why use that time for accomplishing more in less time? Maybe that's just me. Maybe I just click with this set of tools, I've fallen into a rhythm but here I am.

So I waited and Friday came around and the theme was announced. Let me say this. I love themes because they give a really nice box to work within. People keep saying think outside the box. Nah. Make my box small and let me come up with interesting ideas to meet the boxes criteria. Constraint breeds creativity. I love them. However, I hate themes. This one was announced and I just shook my head. There are some themes that pop up and I have a million ideas. I had nothing.

I got on my white board and started writing down all the things that are kept alive. People, organs, batteries, plants... the list ran on.

I had a brilliant idea. A game came to me from this list so I erased and started flushing it out. Part of my creative process is flushing the game out on paper, or in this case whiteboard, and I try to find the primary game play loop. I did. I wrote down all the bits and bobs that would be in a polished version of the game, a commercial release if you will. That's where I start. Then I cut and cut until I don't recognize it as a game and put the last piece back. Normally, I have the primary game play loop. While I could have done this game, it would have been shit. So I will work on that later and give it the time and attention it deserves, should it prove still amazing in the future.

I flushed out 2 more ideas the same way and both were scrapped. The main reason I scrapped these 3 ideas is that what I would end up with at the deadline would be crap because the list of things to do for the primary game play loop was too long and beyond the scope of two days worth of work. I realized that, by experience, by knowing my own abilities and limitations, I am able to better gauge the scope of work I can accomplish over a weekend and be honest about it.

Finally, I took a break and came back. I thought about Tower Defense games. I love TD games. The basic premise of most is protecting something or keeping it alive. I liked the idea and it fit the theme and I felt I could do it in a weekend. My issue was more that most TD games work by invaders marching along a path to the other side of the screen or to a fixed goal to hurt it or steal from it. I wanted to make it more dynamic and place more emotional investment in it.

What if, like the goblin tales of old, they were coming away to steal the children. Like the pied piper of Hamlin they would come and lead the children to an unknown fate.

I started out by first creating some place holder structures. I made simple squares with different colors for the towers. Plain green squares and brown squares for the grass and dirt road respectively.

I've always struggled with the idea that you do the game play first but you need visual feed back. So you need some kind of art before you can make the game play so you can then make the art. I have found simple shapes, simple colors, and the occasional letter or number on the icon work great for placeholder graphics when you need to tell one apart from another.

With that done, I made the spawn mechanic. Simple timer with an instance create at the end. The enemy's would be assigned to a path. I made the path they would follow. This was amazingly easy in game maker studio and didn't work at all for my purposes. I assigned them none the less.

You can very easily create an object, be it an obstacle, power up, enemy, anything and have it follow a path. Here's what I needed. I needed the enemy to follow the path. Then I needed it to see a house and see if there were children inside and then go collect a child and then return to the path and work it backwards.

Speaking from a programming standpoint, and I'm sure this is not the best answer for this, I had the enemy save the x and y when he identified the target, being a house with a baby. I told him move to the x and y of the target. Once there, if the number of children in the house is greater than zero, take one and subtract one from that number of children (the property of the village house). Now he gains attribute bkidnap. If he is not on the path and has the attribute bkidnap, his job is then to search for the path and record the nodes in an array until he gets to the closest path point. Once he has the closest path point he follows the path in reverse, heading back to the start. I had to add the path points to the front of the array as I scanned them for this to work.

I had to add in what happened to the child. I didn't want to make the child it's own object. This was a mistake I believe. It was just easier, in my head, to pass around an attribute. Villagehouse.baby = true as long as babies > 0. If enemy reaches villagehouse.x and y and villagehouse.babies > 0 then villagehouse.babies -= 1 and enemy.b_kidnap = true. Easy to pass around a variable like that. Eventually, for the baby to go back to it's home if the enemy soldier died, I had to record the house that the baby was taken from in a variable on the enemy and when it died I had to reverse the process.

I took a break, did some art. I tried to incorporate a few more features but they were clicking so I polished out the bugs that I could and uploaded it.