I moved to a new URL! Check it out!

posts filed under: general

2014: A Pretty Weird Year Part I

2014: A Pretty Weird Year Part I
I feel like 2014 has been a pretty strange year for me. It's been a long time now since both Snapshot and Offspring Fling came out and it's pretty crazy how fast time seems to be moving lately. Snapshot took three years to make and it felt like the longest three years ever, and halfway through 2015 it will be three years since we finished the game. It's also going to be three years since Offspring Fling came out... madness.

Anyway, let's recap the year and see if I managed to actually do anything worthwhile!

January


I spent half of January last year at Steam Dev Days up in Seattle. Dev Days was a conference put on by Valve I think mostly to promote their new Steam Machines idea that was going to do battle with consoles or something like that. Ever since then we haven't really heard much about the whole Steam Machines idea though... so I don't really know what happened to that.

The conference was fun though and I got to spend some quality time with some Seattle area friends. Afterwards I got to bounce up to Vancouver to visit my lovely friends at Indie House (not to be confused with Indie House AZ.) I spent my time up there working on the beginnings of Stratoforce. I spent a lot of this month developing some of the core systems that I think the game will use.

Image


February


This month was spent a little bit working on some first pass art for Stratoforce.

Image


I also ended up joining Tumblr as another place to post my doodles to. I spent part of this month working on getting Spine animations implemented in Otter, and also made a quick example game showing off some of the basic features of the framework.

Image


This month I also remember being plagued by insanely bad sinus problems. While I was in Seattle in January I had developed some pretty bad sinus headaches. They were probably the worst head aches I've ever experienced, and this made it pretty hard to sit down and work on stuff. I still don't have any idea as to what was causing it, but I know that I do have pretty bad sinuses that often cause me various troubles like this.

Also in February the super smash hit mobile game Threes! came out, and I had the distinct honor and privilege of providing the voice for Torvus: Number 48. My girlfriend Corey also appeared in the game as Number 24. We recorded our dialogue on her mac book one night before going to sleep and somehow it sounded good enough to be included in the game!

March


March is a pretty crazy month usually since it's when Game Developers Conference takes place and I spend a week in San Francisco with a bunch of awesome people. For the conference I stayed with a bunch of people from all over the world in a huge place we found on AirBnB. I spent a lot of time just hanging out with awesome people and eating a crazy amount of good food. I'm not really sure how much appeal GDC has for me anymore outside of those things. Going to sessions for the Independent Games Summit is fun, but the main conference is just too expensive to go to for a little ole indie developer like me.

Later that month I was working on more artwork for Stratoforce and even more featrues for Otter. I managed to implement coroutines into the engine with some help from Chevy. Coroutines are amazing and have been a huge help for me (especially in game jams.)

Image


I should also mention there was a big TowerFall tournament at the end of the week of GDC. It was a 32 person 1v1 tournament with some pretty serious players. At the very end it came down to myself and my friend Will in the final set. It was an awesome experience since both of us were from Phoenix, and all we wanted to do was prove that the Phoenix area had the best TowerFall metagame. Ultimately it was I, the Assassin Prince who claimed victory.

March is also the time where Offspring Fling was in a Humble Weekly Sale which a bunch of cool games supporting open source development tools.

Image


The weekly sale was a huge success, and it's crazy to me that Offspring Fling is able to provide me with the means to cover my living expenses. I feel incredibly fortunate that both Offspring Fling and Snapshot were successful enough to allow me to keep pursuing my dream of making video games.

-

So far so good... but I think looking back on it my progress on everything is so slow! I don't feel like I got anything done in 2014, and thinking back on the year is a little stressful for that reason. I guess I'll find out if that's really the case... stay tuned for Part II!

Moving the Console Window

Moving the Console Window
Just wanted to share a quick tidbit of code that's useful for making a game with a console window for debug information. A lot of times I want to launch my game and have the console window on a different monitor, or just out of the way in general. It gets super annoying to have to move it over every time I launch a game for debugging, but then I found that I can move it with programming!

I'm going to be honest and say I don't totally understand how this works. It uses DllImport to get some functions from the user32.dll in Windows and then uses those to move the window around... I think? It should be noted that this probably only works for Windows.
class Program {
static void Main(string[] args) {
IntPtr handle = FindWindowByCaption(IntPtr.Zero, Console.Title);
MoveWindow(handle, -700, 50, 1000, 1100, true);

Core.Game.Start(); // Start the Otter game
}

[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
public static extern IntPtr FindWindowByCaption(IntPtr zeroOnly, string lpWindowName);

[DllImport("user32.dll", SetLastError = true)]
internal static extern bool MoveWindow(IntPtr hwnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
}

I use functions to find the console window by it's name which can be accessed through the Console class in .net, and move the window by its handle. I give it a negative X coordinate because that pushes it onto my left monitor, so now every time I launch the game my console window appears and immediately gets pushed over to the left monitor. Neat!

Dev Log: Board Game Stuff

Dev Log: Board Game Stuff
Work continues a little bit on a board game prototype with some local Phoenix developer friends. Dave ended up making some amazing tokens for us to prototype with which makes the game feel a billion times more fun. Every week we have a play test and it seems like we're narrowing in on something that's actually a playable game.

Image


We've been using Google Sheets and nanDECK to prototype and print out our cards, and then sticking them into sleeves along with Magic cards to play with. I think having a total break from making games with code and complex art assets has been pretty fun -- it's a totally different experience than making a video game, and getting better at board/tabletop game design is something I really want to work towards.

Image


I'll get back to my main project soon I promise! (but now holiday travel season is upon us and that puts a giant wrench in everything too.)

Dev Log: That Lost Feeling

Dev Log: That Lost Feeling
I feel like days are just flying by lately. What have I even been up to?! The past week or so has probably been a record low in the motivation department, and I have no good idea why that is. I guess it just happens. Sometimes I just end up feeling totally lost as to what I should do, or what I should be working on.

I'm working a little bit on a board game idea that some local Phoenix developer friends came up with, and I'm poking around at finishing my two player coop action game, but overall my amount-of-work-getting-done value has dropped off a lot, and the crazy thing is just a week or so ago it felt like it was at an all time high! I've been doing creative stuff and making games and whatever else for years now and I still don't understand how it all works.

Sometimes it just seems like every other developer or creative person on the planet has everything figured out and I'm the only one that totally drops off the face of the earth for weeks. (I know that's pretty hyperbolic, but I'm not claiming to be rational here.) When I get programming demotivated I start to draw more, and you'd figure I'd draw art for my games, but the problem is that for some reason that stresses me out, and so I just start to doodle what makes me comfortable instead.

I'm going to try just fiddling around with Otter to see if I can get a spark going again for programming. I think some of this feeling might have to do with upcoming travel which always stresses me out beyond belief. I wish I didn't freak out so much whenever I have upcoming travel, but I'm not really sure how to fix it!

Oh well, game development isn't all sunshine and puppy dogs and rainbows or whatever. Sometimes it sucks, and it's really depressing! But maybe it will clear up again soon.

On the upside I've been watching Handmade Hero and so far it's been pretty awesome. It's going to be a complete series on making a game from scratch. It's opening my eyes to a lot of stuff that I thought was just dark magic, and there are a lot of great programming and development tips scattered throughout all of the videos.

Dev Log: Photoshop Animations

Dev Log: Photoshop Animations
I may have figured out a Photoshop animation workflow that actually makes sense after all these years. I've been trying to use the frame based animation timeline, but it turns out the video timeline makes way more sense.

Using "Video Groups" is almost how I wished Photoshop animations would work. To create a video group you can click on the little film strip icon with a down arrow on it that's next to "Layer 1" in the video timeline. I have no idea why this option is only located here and nowhere else that I can see.

Image

Each layer in a video group is another frame of the animation (if you make each layer's duration only 1 frame long.) The video timeline then only shows each group and not every individual layer. Also you can totally use onion skinning with a video group which is already a billion times better than using the frame based animation timeline.

Image

I'll have a more detailed post going over this workflow once I get a little bit more used to it, but for the initial tests seem really promising.

Dev Log: Jam Game Stuff

Dev Log: Jam Game Stuff
I've been doing pretty bad on blog posts this month so far, but I've been getting a lot of cool stuff done lately. I've been mostly focusing on my game jam game from a few weeks ago. I want to get that into a good playable state and do some testing at a local indie gathering and hopefully push it out to the public after that. This is another game that I'm making using my 2d .net framework Otter.

During the game jam I started to use the idea of components a lot more. The entity component system is the new hotness in video game programming as it seems many developers are starting to favor it over the old school hierarchy tree of classes. Here's a pretty good write up explaining how it works.

Image


So far all of my games depend very heavily on the whole class hierarchy tree. Like I would have a base Entity, and then maybe a game specific Actor which extends Entity. Then I would have a MovingObject which extends Actor, and then a PlatformerObject which extends MovingObject. Finally the player would be a class (like the momma from Offspring Fling) that extends PlatformerObject. It seemed like a good idea at the time!

Now with this jam game I'm working on I'm trying to use components as much as possible. It may be a little overkill, but I'm using this as a learning opportunity.

Image

For example here's what the Heart component looks like. I use the Heart for everything that can be involved in combat in some way, like anything that can take damage and all that stuff.

There's also something as simple as the RenderAllColliders component, which is handy for just slapping into an Entity if I want to see all of it's colliders during runtime. It will only render colliders on its parent Entity if the game is running in debug mode which is pretty neat.

So what does an Entity look like with all this component stuff? Here's a quick snippet from my main player class:
AddComponent(new CameraTarget());

// Add the movement and pass the axis from the controller.
var movement = new MovementTopdown(7, 0.3f);
movement.AxisMovement = c.Movement;

// Add the weapon, and pass it the shoot button from the controller.
var weapon = AddComponent(new AngelWeapon());
weapon.Button = c.Shoot;

var special = AddComponent(new Components.SpecialAttacks.Shotgun());
special.Button = c.Special;

AddComponent(movement);
AddComponent(new ClampInsideScene());
AddComponent(new SpriteEffects());
AddComponent(new RenderAllColliders());
AddComponent(new PushAway(2, Tag.Angel, Tag.Orb));

Later if I need to I can use GetComponent to retrieve any of those components if I need to change anything on them.

So far I'm really liking this approach, and it seems like it's the way things are heading in the video game programming world as far as I can see. I'm a little concerned with the performance of using a lot of components with GetComponent() running all the time, but it's probably not going to have that much of an effect.