I moved to a new URL! Check it out!

posts filed under: general

2016: I Guess Part I

2016: I Guess Part I
I must be getting pretty old now because these yearly review posts feel like they're coming on faster and faster. Another year goes by and I'm not really even sure what happened to it. I feel like I've written too many paragraphs about this feeling by now though, so I'll just skip over it this time.

I also accidentally slash totally on purpose took a really long break from everything work related including this blog unfortunately. I think it was actually pretty overdue. Looking back I haven't really taken a real break in the past however many years. Sure I take some time off from coding every once in a while, but not from "work" entirely.

Alright let's get down to business with my yearly review.

January


2016 in particular felt like a pretty fresh start compared to the last couple of years. Back in good ole January 2016 I had just moved to Denver, Colorado about two months earlier. I was back into the cold of winter compared to my previous home in the hot deserts of Arizona. It was nice to get a feel of seasons again, although it wouldn't take me long to feel totally sick of snow.

This month I was invited to be on the stream for Awesome Games Done Quick 2016 to provide commentary for the Snapshot run. It was an absolute blast and it was actually one of my game developer bucket list items checked off. The Games Done Quick marathons are my favorite things in the world, and to be a small part of them was a huge honor. Shout outs to Blechy and Nightmare and all the GDQ staff for making it possible!



I was also spending time this month working on a prototype of an procedural RPG type game that is still unfortunately in the early prototype stages. It's still a pretty loose idea for a game, and it's still one that I want to get around to, but unfortunately right now it's not really in the cards. I was working on some concepts of the over world based on some of the style from Links Awakening, as well as some of the core mechanics of the battle system.

Image


Image


Also this month marked the beginning of my epic Pathfinder campaign with a few of my closest friends in Denver. I rolled up a Samsaran Reincarnated Oracle named Ryn. The campaign is still going today and we're almost through the "last" season! This has been by far the most fun I've had in a tabletop pen and paper game, and I hope it goes on forever (or has a really cool ending at least.)

Image


Toward the end of the month I also got into writing music again for some reason. Every once in a while I feel the itch to try to write music but unfortunately it doesn't last very long. There's something about music that makes it really tough to improve. I think the fact that I'm always exposed to super professional amazing music is what gets me. Sometimes I'll get really into one a song that I'm writing, and I think it sounds really good, but then I listen to a single song from a game or something on my work playlist and I realize how absolutely terrible my song is. Plus music software is a gosh dang nightmare to work in and even the simplest digital audio workstations give me infinite pain.

Song 6!

And of course I'm always doodling stuff.

Image


February


This is the month that I decided to start streaming, and I used that as a launch pad to get myself working on Super Sky Sisters again.

Image


My Pathfinder campaign progressed and the design of my character Ryn kept evolving. One of my favorite things about Pathfinder or any tabletop game really is that it's a constant source of material for doodling. Playing a good tabletop game with a solid group of people is way more captivating to me than any other form of media!

Image


I also put together a presentation about explosions in video games for the fine folks of Warp Zone in Louisville Kentucky.



One of the first things I did on Super Sky Sisters was completely redo the backgrounds. One of the main pieces of feedback I got on the game in 2015 was that the background was pretty dull compared to the rest of the art. At first this was intentional as I didn't want to detract from the foreground art, but the more I looked at it the more I agreed with that feedback. I redesigned the background with some more stuff going on, and tried to shift the style of the background to that of the rest of the game.

Image


I also dipped my toes into song writing once again this month before giving up on it forever-ish.

Song 11!

Another addition to Sky Sisters was giving the players upgrades along their play through which I think is one of the best things I added in my return to the game.

Image


March


Looking back at this stuff now I can't believe how long ago it was. This month I went back and redid the art for the two player characters in Super Sky Sisters. At first I didn't actually like the new style, but I had to redraw them for the purposes of doing a bunch of animations for them.

Image


I actually hate hate hate doing animations. I think I might actually like the end result, but animations are so frustrating for me to work on. Making good animations is a gosh dang mystery to me, but I do what I can.

March of course was also the month of the big Game Developers Conference which I've been going to every year since 2008. Dang that is a long time. Look at how serious I look in this picture.

Image


Wow my hair was so blue back then! As I write this my hair is a big faded out mess. One of the biggest draw backs of moving out of Arizona was losing access to my ultra talented hair stylist, Stacy. At this point I'm actually making plans to go back to Arizona so that I can have her do my hair again (and also visit my friends.)

Along with GDC this was also the month of the big TowerFall showdown at The Foundry. Some really amazing games were played and I somehow walked away with the crown. I remember telling Matt "I don't know who was playing TowerFall just now, but it wasn't me." It was this weird feeling where I was playing so well that I felt like I was having an out of body experience. Anyway check out some footage.





I went back and spent some time revisiting my art style tests for my rpg prototype. I ended up ditching the pixel art look and going with a high definition style that uses pixel art as its source. Basically I draw everything at 4x its normal size using the pencil tool.

Image


And of course the doodle train doesn't stop.

Image

Dev Log: SortedDictionaryList

Dev Log: SortedDictionaryList
As I transfer all of my framework making knowledge over to the land of FNA I've been trying to clean up a few things that turned out pretty dang messy in the original Otter.

In the Scene class of Otter it keeps track of Entities, and Entities have an Order and Layer. Multiple entities can be in the same layer, and can be in the same order as well. Order is the order in which they update every tick, and layer is the order in which they render. So what I usually do is have a sorted dictionary of lists. The dictionary sorts on an integer value that matches the value of the order or the layer, and the value is the list of entities that belong to that order or layer.

Old Otter has kind of a big mess of copied and pasted code for this system, so for new Otter I tried to make a cleaner version of it.
class SortedDictionaryList<TKey, TValue> : SortedDictionary<TKey, List<TValue>> {
public SortedDictionaryList(IComparer<TKey> comparer) : base(comparer) { }
public SortedDictionaryList() { }
public bool HasItem(TKey key, TValue item) {
if (!ContainsKey(key))
return false;
else
return this[key].Contains(item);
}
public TKey FindKey(TValue item) {
foreach(var key in Keys)
if (this[key].Contains(item)) return key;
return default(TKey);
}
public void AddItem(TKey key, TValue item) {
if (!ContainsKey(key))
Add(key, new List<TValue>());
this[key].Add(item);
}
public void RemoveItem(TKey key, TValue item) {
this[key].Remove(item);
}
}

Another thing I'm looking to implement is a generic version of a "buffered" list of items somehow. A lot of times in Otter I don't want to add or remove items in a list in the middle of the update, so I end up buffering adds and removes until I get to the end of the frame and then all of them execute. I end up doing this in both Scenes for Entities, and in Entities for Components, so I'm rewriting a lot of the same code in both spots, but I'm still questioning if its worth it to try a generic solution for this or if it's fine the way it is.

Anyway I'm still on "break" for another couple of days. At this point I'm looking forward to my vacation being over!

Dev Log: FNA Tiles

Dev Log: FNA Tiles
Been working a little bit on getting tile maps set up in the FNA version of Otter along with a quick platforming movement test.

Image


I'm still wrestling with some issues in FNA that I'm sure are totally my fault, but so far things have been working pretty nicely. Understanding the whole sprite batch drawing thing is still a little bit tricky for me, and I'm hoping that I can wrangle my familiar engine api into something that doesnt perform like garbage. Trying to manage when I should be calling End() and Begin() is a little bit more challenging than I hoped, and I don't want to just be calling them both for every single draw if I can help it.

I've hit a weird snag with my initialization process and render targets, and I think it's related to some kinda weird race condition that I can't pin down... but probably more on this in a future post.

Dev Log: FNA Font Stuff

Dev Log: FNA Font Stuff
I'm currently in the midst of an actual break from development but I'll try to catch up on some recent developments while I'm loungin' about.

I'm still developing my new version of Otter using FNA instead of SFML. I'm slowly but hopefully surely finding out the best way to go about certain things like rendering and input. Fonts and text graphics are working pretty well now and I also have some basic input stuff hooked up for things like keyboard, mouse, and text entry.

Image


I'm using a C# binding of freetype for rendering fonts and text, and recently I implemented a system to handle huge font sizes. I say system but all it's really just a list of textures for the font instead of just one texture. Unfortunately the upper limit of font sizes is still the maximum size of the texture though... so right now 2048 I think.

I've almost got enough in my FNA engine to make a simple game aside from a few missing collision overlap checks and a handful of bugs. As much as I hate to say it I think I actually like SFML's rendering system better because so far using SpriteBatch feels like a giant pain in the butt most of the time. I understand why SpriteBatch is so important, but it seems like it'd be easier just to pass my own vertices and textures into the renderer... but for some reason that's mega slow. Right now one of the bugs I have to look into is the fact that rendering 10 or so primitives already starts to take a toll on performance, and it's only rendering a bunch of untextured vertices! Nothin' makes sense.

Dev Log: Upgrade Path Arts

Dev Log: Upgrade Path Arts
I'm home for the holidays so that gives me plenty of time to catch up on my missing blog posts for the month!

Here's something I updated in Sky Sisters a little while back:

Image


The assets for the "upgrade path" were a little lacking. Previously they were just some simple monocolored assets that had some minor effects. What I found though was that they were very hard to see against certain sky palettes. I tried some tricks like shifting the color of the asset around to make them stand out more, but I was having a hard time making them out. If I was having a hard time that meant that any players would have an even harder time, so out they went.

I opted for a more detailed asset that is trying to be more in line with how the upgrade diamonds look themselves. There are some minor issues with these but I don't see them changing much beyond this iteration.

Dev Log: Particle Polish

Dev Log: Particle Polish
I've just been hopping around on Sky Sisters revisiting some areas that needed a little bit more love. I wanted to make the upgrade diamonds a little bit more clear when the players touch one.

Image


The changes are super subtle but hopefully they get the message across a little bit more. I adjusted the screen flash and the particle burst when the orb touches the diamond, and I also added a flashing effect onto the diamond itself that gets more intense. I also shortened the overall time it takes for the whole effect to play out.