#gamedev Reflection and Insight

Lately, I've been working on things in game development that are more difficult and frustrating than anything else I've ever worked on.....probably ever. It has literally brought me to tears at times. These unfamiliar feelings that come along with venturing into difficult and confusing new territory have had me thinking a lot outside of game development.

I don't know that these things will help you out when you're in troubling times, but the perspective has helped me to not stress out quite as much.

Making a Game is Like Filling a Fish Bowl with Marbles

marble1.jpg

It's difficult to not think about the desired end result when working on game development and measuring progress. This can be a detrimental outlook. Games are made up of lots of little pieces and take a long time to make. Judging a work in progress by a final product is not fair to the creator. Instead, think of the game for what it is, a bunch of small pieces that eventually come together to create a cohesive whole. Filling the bowl will show progress and that's what matters.

Think Like a Flashlight, not Like a Light Bulb

lightbulb-m2m_091813.jpg

It's easy to get overwhelmed when working on a complex problem. Sometimes, trying to take a step back to assess the big picture can be daunting.

It is wise to narrow focus when working on complex tasks. Think of just how small you can shrink the problem. Write the smallest versions of the problems down one by one and work on them one at a time. Thinking, "This menu is broken" is probably too broad and will be difficult to troubleshoot. This is thinking like the light of a light bulb. The light shines in all directions, is unfocused, and doesn't allow you to see the details. Writing down the most precise version of a small problem related to the aforementioned broken menu can lead to less mental stress and more overall progress. This is thinking like a flashlight; A small and focused light that is used specifically to illuminate a certain area. The light is brighter and will allow you to see more details.

flashlight.jpg

Feeling dumb or incapable of doing certain things sucks. Feeling overwhelmed sucks. It's all part of the process of making something great. 

It's alright to feel lost.
Sometimes, you need to give your brain a break.
Don't overdo it.
Try to stay calm.
Slow progress is still progress.
Narrow your focus.
Don't judge your progress by a finished product.

Until next time.

_Doombrowski

Shenanijam 2018

This past weekend, I decided to take part in a game jam arranged by Butterscotch Shenanigans, a little indie studio in St. Louis who made Crashlands, Flop Rocket, Roid Rage, Towelfight of the Gods, and assorted other games.

It was sort of a last minute decision to take part, but I figured it would be a good way to freshen my game development perspective. I needed a break from Loop of the Lost. 

The theme choices for the jam were "Void Sandwich", "Sticky Justice", and "Burn it Down". After taking the day at work to think about what kind of game I could make out of the themes, I decided on making something with the Sticky Justice and Burn it Down themes.

My original plan was to make a puzzle game where the goal was to burn a rope to drop a block on a heckler. Your bullets stick to whatever they hit, with a set amount of ammo. The idea was to platform to a certain zone that ignites your player, thus igniting his bullets so you could burn the rope. That plan didn't end up being something that I felt would be accomplished in time or well enough.

The next plan, which is what I ended up with, was to make a top down shooter where your bullets stuck to enemies and slowed them down. If an enemy could no longer move, it would burst into flame and burn for a set amount of time before dying. The idea was to make the enemies turn into dangerous terrain for a short time before they eventually exploded.

After toying with sticky bullets, I couldn't make it look quite right so I removed the graphic of the bullets being stuck.

The next task was to try to make something that had more playability. This brought me to the idea of an endless mode of play where each level gets progressively more difficult and you just survive for as long as you can. This gives incentive to replay.

After failing at an enemy spawn system or a while, I ended up making a system that did a very close version of what I was looking for. The idea was to give enemies a point value then populate a list with semi randomized numbers one at a time in a for loop until reaching the total relative to the difficulty. Then each value would be popped from the list and an enemy is spawned in a random location along the outer edge of the room.

The game would definitely need some work to make it feel a little better, but I surprised myself with what I could make with only 23 hours of work.

I may take some time to make the enemy waves feel a little more difficulty accurate, as well as making the boss better (I failed hard at making it do what I wanted), and adding a couple extra bosses and basic enemies and making an online leaderboard. 

Oh yeah, I've been learning networking. Expect some form of an online multiplayer game from me in the future. It's really intriguing to me right now. I briefly spoke to Dan Fornace (Creator of Rivals of Aether) about net code and he told me about his current system in Rivals and pointed me in the direction of some literature on the subject.

Until next time. 

_Doombrowski

Items Galore

I decided, after telling myself that I needed to work on some less fun stuff, to just work on fun stuff. the plan was to work on boss entrance animations, but I didn't feel like it so I made a bunch of items.

Items are probably the most fun part of this whole creation experience. 

This week, I decided to start putting in work on more of the active items. The plan is to have them all compound into the same activation. I'm sure this will take some balance down the road, but it seems to be working alright so far.

I think the coolest items that I've made recently are the "Sharp Sprinter" (which is mechanically a "Blade Runner" :P) and "The Bit" (which is pretty much directly from R-Type). Other notable items recently made are the "Power Bomb" (a-la Metroid), Dark Static (was the name of a band I created years ago), Bass Cannon (given the okay by Flux Pavilion via Twitter), and a few others that are less cool but still have their place. 

It's good to be making some items that seem not so powerful. For a while there, I thought that once you picked up X items of any type, you would just be over powered. That doesn't look like it will necessarily be the case. Of course, I haven't made anything beyond level 2 yet, so the scaling of enemies could make a big difference in item power.

I'm thinking about making a short video for the Patreon backers that shows more in depth progress with some game play and verbal explanation of systems and mechanics and whatnot. Should be fun.

Surprisingly, I haven't run into an item that I feel the game should have that I couldn't code and make look at least somewhat decent yet. Well, not in the recent past. Were not going to talk about "COIL." That wasn't happening. It's above my pay grade.

Until next time.

_Doombrowski

 If you want to help fuel the cause, consider backing me on Patreon.

If you want to help fuel the cause, consider backing me on Patreon.

The Bird Programs

After the clouds in my head cleared and I gained a bit of focus, I decided on starting work on new consumables. This makes item drops more diverse and gameplay a bit more varied as well.

There were more hurdles than I expected to get these items working correctly.

The first item that I made was easy. Hummingbird. It's a single use item that refreshes the cooldown on your Soul (active item). One and done. All I had to do is create a variable and visual for when you have the item, and make it go away when you use it. EZ-PZ.

Adding extra bird programs added lots of complexity.

First, if you have a program in your inventory and you walk over another program, they needed to swap. This means that the new program is destroyed, and the one that was in your inventory is created. The newly created program had to also have a buffer to not allow the player to pick it up for a brief period so they don't infinitely swap.

With that finished, I had to figure out a system to apply temporary stat changes to the player. A few extra variables to hold values before the change and a few timers to keep track of when the effect ends and to change it back and we're good to go.

Now, the player needs to know which effects are active. This was the interesting part that I over-complicated. I wanted to display an icon with a timer beneath it corresponding to the active ability. (ie. when you use "Eagle", it shows an eagle icon with a decreasing number beneath it) This would be easy with only a single effect being available at a time. There are multiple different cooldown effects which the player can have simultaneously. This meant that I needed to make an adaptive system to move icons as cooldowns expired.

A ds_list and a few "for" loops later, I managed to make it work. Now, when you use a program, it shows the icon in the first available space to the right of the last used program. If a cooldown expires, the remaining cooldowns shift to the left. Pretty neat.

In other news, I'm going to have to crack into Spriter soon to work on a couple fire animations. The code that I'm currently using for fire is way too taxing. It looks sweet, but can be done substantially more efficiently. It just takes some fine tailored sprites. I'll post more fire when I have the animations finished.

I feel like I need a fresh set of eyes on the game soon. I'll probably invite over a friend to toy around with the first 2 levels and get some feedback. It's still not feeling very challenging, but it could just be because I've played it so much and I know it so well.

*shrug*

Until next time.

_Doombrowski

Bomb Launcher

I'm finally getting to a point where things that I need to work on are more interesting and varied. It's pretty nice after spending a couple weeks on laying out level chunks. 

The latest change, which is looking like will cause me to have to make more rooms (irony?), was to make the starting level smaller. Doing this meant removing chunks from the level. What will normally be 25 chunks per level is currently reduced to 16. Substantially smaller. This is making me realize that I may need to add some variance to the core and edge chunks. 

I made something of a mini tutorial quest yesterday. It's a quest that will always show up on the first level which tasks you with fetching an item that is randomly placed within certain areas that require some sort of special action to access. The idea is to make the player figure out how to interact with the different pieces of the environment. It shows that you can shoot fire and dirt blocks to eventually destroy them, you can unlock areas with key blocks, certain blocks are destroyed by explosions, and that some spikes are retractable. 

To make sure the player knew that rock blocks were destroyed by bombs, I made a bomb launcher. This guarantees that the player will be able to make an explosion happen regardless of if they have a bomb or not. This bomb launcher will definitely come in handy in the future. It will help with a bit of puzzle and accessibility. Now, if I want to block off an area temporarily, I can just put one of these bad boys next to it. It can also be used for combat purposes since it's creating a damaging explosion.

I made some sounds to go along with the bomb launcher as well. I think that creating sounds as I go along will help a bunch in the end. It will also help with morale since it'll make the game feel more complete. You can check out the sounds that I created in the video below.

My next goal is to make the active item slot and the temporary effect consumables. (The bird programs) I noticed yesterday that the player can easily get trapped in a scenario where they'll have to take damage. I'm going to try to remedy that with the active item and possibly a new mechanic. We'll see how it turns out.

Until next time.

_Doombrowski