@winkclub23 it's called travel pillow and it only exists in my mind for now sry ;_; (Today)

@r_rdein so far I'd say it leans a little bit more toward fighting enemies than platform challenges? but I dont have a lot of items yet (Today)

@konjak could u (Today)

@konjak do what you feel. the platforming is really snappy and felt weird to me at first, but once I got used to it it made sense ~I M H O~ (Today)

I've been playin' Hollow Knight and I like it A LOT, feels super fun, dark & spooky & somehow cute at the same time~ t.co/kZTPFlbBB5 (Today)

@theBanov keep a cycle of 12 hour sudafed running. I'm not even sick and I'm going to be doing that for GDC. sleep as much as you can. (Today)

RT @TeamCherryGames: The wait is over! Grab @HollowKnight and start exploring the strange, amazing, insect world of Hallownest! #Steam: htt… (Today)

@flurrycow get plenty of sleep and eat well (Yesterday)

@pietepiet jfc paul (2 days ago)

@midio here take this HM01 (2 days ago)

@konjak sounds good <3 <3 (2 days ago)

RT @MattThorson: Celeste is coming to Nintendo Switch in 2017! See you on the mountain :) t.co/TMOon1iCAs t.co/Aqm2AXcqKo (2 days ago)

it always amazes me when making games you can jam out a playable thing in a weekend but then it still takes somehow 3 years to complete (2 days ago)


RT @NightInTheWoods: (Night In The Woods will be out in all its glory on PC/Mac/Linux at 1pm EST tomorrow. get hype. etc.) (4 days ago)

@ADAMATOMIC @nealen y yes I'll have this burger... *wipes tears* With two patties (6 days ago)

@ADAMATOMIC @nealen help t.co/Yz9wHJq2St (6 days ago)

RT @ishisoft: The beach is Leilani's territory! New Leilani's Island devlog update t.co/t7Pj7xSzeh 🌺🌴🍍 t.co/OyhOEsDGbM (6 days ago)

looking forward to hanging out with fellow introvert devs at gdc. lets all sit in the same room together with laptops in comfortable silence (7 days ago)

@ChrisBellDesign oh whoops I also read that as expo pass. I think that's supposed to be ONLY expo hall, but you can be sneaky sometimes. (7 days ago)

posts that are featured

2015 - 1 - 26 / 12:37 am / tools

Google Spreadsheet Sync

Google Spreadsheet Sync

Have you ever wanted to take the contents of a Google Spreadsheet and drop it right into your game project? So have I! That's why I made a tool that will take the contents of a Google Spreadsheet and turn it into a C# code file full of data!

Let's say we have a spreadsheet full of data for our video game written in C#, and it looks something like this.


The resulting output of that spreadsheet will be this.

class Sheets {

public static Dictionary<string, CharactersRow> Characters = new Dictionary<string, CharactersRow>() {
{"Adventurer", new CharactersRow() {
Name = "Adventurer",
Health = 100,
Magic = 100,
Attack = 100,
Defense = 100,
Speed = 100,
VictoryPhrase = "Nice try, \"chump!\"",
FailurePhrase = "Ah... well done..."
{"Thief", new CharactersRow() {
Name = "Thief",
Health = 75,
Magic = 100,
Attack = 100,
Defense = 50,
Speed = 200,
VictoryPhrase = "I take what I want!",
FailurePhrase = "Not fair!"
{"Assassin", new CharactersRow() {
Name = "Assassin",
Health = 100,
Magic = 50,
Attack = 200,
Defense = 50,
Speed = 100,
VictoryPhrase = "You're lucky to be alive.",
FailurePhrase = "How could you defeat me?!"

public class CharactersRow {
public string Name;
public int Health;
public int Magic;
public int Attack;
public int Defense;
public int Speed;
public string VictoryPhrase;
public string FailurePhrase;

public static Dictionary<string, WeaponsRow> Weapons = new Dictionary<string, WeaponsRow>() {
{"Bronze Sword", new WeaponsRow() {
Name = "Bronze Sword",
Attack = 45,
Defense = 0,
Type = WeaponType.Sword,
Value = 100,
CanUpgrade = true
{"Silver Bow", new WeaponsRow() {
Name = "Silver Bow",
Attack = 20,
Defense = 0,
Type = WeaponType.Bow,
Value = 250,
CanUpgrade = true
{"Fire Wand", new WeaponsRow() {
Name = "Fire Wand",
Attack = 35,
Defense = 15,
Type = WeaponType.Staff,
Value = 400,
CanUpgrade = false
{"Lasso", new WeaponsRow() {
Name = "Lasso",
Attack = 30,
Defense = 0,
Type = WeaponType.Whip,
Value = 150,
CanUpgrade = true

public class WeaponsRow {
public string Name;
public int Attack;
public int Defense;
public WeaponType Type;
public int Value;
public bool CanUpgrade;

With a class like that in my project now it becomes very simple to get data from the spreadsheet with the key of the row (the first column.)

var charName = "Adventurer";
var health = Sheets.Characters[charName].Health;
var victoryPhrase = Sheets.Characters[charName].VictoryPhrase;

Download GoogleSpreadsheetSync.zip (0.02MB)

I use Visual Studio, so I can only really tell you about that.

It's easiest to set this up as an EXTERNAL TOOL in Visual Studio.
* In Visual Studio go to the Tools menu at the top, select "External Tools..."

* Click "Add"
* Name it something like "Google Spreadsheet Sync"
* For Command, press the "..." button to the right and find the exe.
* For arguments you can use "$(TargetName)" "$(ProjectDir)GoogleSheet.key"
* Include the quotes in those arguments!
* For Initial Directory put $(ProjectDir)
* No quotes in that one.
* Below that check the "Use Output Window" option.


Before you run it though you're going to need to create a GoogleSheet.key file. That file should only contain google spreadsheet key.

For this example here's a URL to a published google spreadsheet: https://docs.google.com/spreadsheets/d/11Ia3wr-Pon1180M0_KRR1hywEITLn_P1BoUedbNQeqw/pubhtml

The key is that big long section: 11Ia3wr-Pon1180M0_KRR1hywEITLn_P1BoUedbNQeqw So in this example the contents of your GoogleSheet.key file should only be:


Save the file as GoogleSheet.key inside your root project folder. (So probably the same folder as your Program.cs)


You should be all set to now run it from Visual Studio! It should appear in your Tools menu. You can even set a keyboard shortcut for it later if you want.

Run the tool from the Tools menu and what should happen is a Sheets.cs file is generated with all the data from your spreadsheets.


Of course it would be way better if you're able to take this tool and craft it into your own needs, so here's the source code!

I've started a public repository where I'll keep any useful tools I create right here.

If you run into any trouble feel free to post a comment and I'll try to help! Or you can reach me at hi@kpulv.com, or the contact form at the bottom of my site.

No Comments

2014 - 9 - 9 / 12:45 am / games

Starforger II

Starforger II

A few weeks ago I went to a local game jam in Phoenix! The them was discovery and I set out to make some kind of space exploration procedural thing. The final result was a game I named Starforger II. There is no Starforger I, but maybe I can make a prequel someday.

Starforger II v1.0 - Windows (92mb)

Whoa what's with the file size? Well this game has a lot of weird sounds in it, and maybe I can figure out how to get them more compressed, but right now they take up a lot of space.

The game uses Enter, X, C, and the arrow keys, or a USB game controller (although the game is designed around the 360 controller, so using one of those would be ideal.)






2013 - 11 - 12 / 2:39 pm / games

All the King's Men

All the King's Men

Over the weekend I went to a local game jam in Phoenix to try out making a game using Otter. I was fully prepared to face the reality that Otter would have major problems preventing me from using it for this jam... but everything turned out way better than I expected. Check out the first game ever made using Otter!

All the King's Men v1.0 - Windows (6mb)

Apologies to Mac and Linux people, I don't have a solid way to get builds for anything but Windows right now.

There's a readme included in the download that has some more info in it as well.




What's Next
Eventually I would like to open source All the King's Men, but right now I need to figure out what kind of license I should use for it. Open sourcing a game is a little different than open sourcing a framework. I want to maintain control of the distribution of the game, but also allow people to look at and use the code for their own projects. Basically I just don't want people to edit the game slightly and then re-release it as their own work, or something sneaky like that. I'm sure whatever license I choose won't actually prevent that from happening if someone really wants to do that, but I guess I would still feel slightly better by using the right thing.

I also recorded a time lapse of the production of the game during the 48 hour game jam, so once I put that together I'll release that as well!

If you have any feedback then leave a comment, or stop over to the Otter forums.


2013 - 10 - 26 / 1:54 pm / otter



For the past couple of months I've been working on a little framework using C# and SFML, and I think it's time to finally release it (in beta form) to the public!

Check out Otter!


Right now Otter is only officially working in Windows with Visual Studio, but if anyone wants to figure out how to get it working in other programs and operating systems then let me know! The SFML dll files should be able to be used with Mono for Mac and Linux, but I don't know how to do that yet.

It's important to know that this is a beta release of the framework. There's still no official documentation, so you'll have to fumble around on your own for now if you're planning on using it. I also would advice against tackling any huge game projects for now unless you're comfortable digging into the source and changing stuff around yourself.

I'll be posting updates about Otter here on my web zone, and the latest version and updates will be available on Otter's website.

1 Comment

2013 - 5 - 11 / 12:13 am / general

Platforming Ledge Forgiveness

Platforming Ledge Forgiveness

When it comes to making a cool platforming game there's all kinds of little tricks you can do to make your game shine above all the rest. I mentioned jump input buffering in a previous post and how silently helping the player out here and there can make a huge difference in the feel of your game. The topic of this post is very similar to that!


Take a look at this typical platforming scenario. Our player is barreling toward a ledge at top speed, just holding right without a care in the world. They're going to want to jump when they get to the end of that ledge, and they're probably going to want to hit jump as late as possible so that they get the maximum distance out of their jump. read more


2013 - 4 - 23 / 4:00 pm / tutorials

FlashDevelop to iPad Workflow

FlashDevelop to iPad Workflow

I recently got one of them new fangled iPad things and I heard on the internet that Adobe AIR is actually pretty decent at building things for iOS. Offspring Fling used Adobe AIR so I'm already a little familiar with how to build for Windows and Mac, but it turns out that iOS is an entirely different beast... sort of. The set up and configuration of the whole workflow can be a nightmare, but once it's over then you'll have a set up that lets you push F5 to build right to your device!

Follow along on this series of text and images and hopefully you will be enjoying pushing the F5 key on your keyboard and seeing an app pop up on your iOS device! Also put on some relaxing music because some parts of this tutorial might be hard to understand and frustrating. I'm using Windows 7 64-bit for this. read more




Hi! My name's Kyle, and I make video games most of the time in Denver, Colorado. Here you will find my thoughts, games, websites, doodles, and other stuff like that. I worked on Snapshot, Offspring Fling, and a whole bunch of other games. I also created and maintain Otter, a 2d game making framework. If you want to get a hold of me use the form on the bottom of the page, leave a comment, or just tweet at me. I try to post three times a week. Thanks for stoppin' by! You're the coolest.

blog stuff






Do you want to make a Let's Play of one of my games, or a just a video featuring footage of my games? You have my full permission to do so! Even if you are monetizing your videos, you still have my full permission to use any footage from any of my games. Go for it!


Your message has been sent! Thanks :)