RT @pixelnicks: Want to explore this island? Just support #EagleIsland on Kickstarter 😊🦉 t.co/jeAAnRtaWG #gamedev #pixelart #indi… (Today)

@rustym @celsiusgs just round that shit UP (Yesterday)

@impbox dang there's always a catch... (Yesterday)

@impbox ah, dunno if you can customize the shortcutz (Yesterday)

I'm now trying out DYNALIST t.co/pxwNPUMXtC for brain management/task tracking/misc writings. Might be cool! (Yesterday)

@kertgartner okay well now you *have* to make your voicemail this t.co/NVtMVTzIVE (Yesterday)

@Commanderstitch yeah it is. I didnt tweet that in the morning. what are you a time cop? (Yesterday)

@mangadrive yeah okay also the opening of episode 22 of kill la kill (Yesterday)

every morning I start my day with a cup of coffee, 4 eggs, and the arc-gurren lagann transformation scene (Yesterday)

@theBanov thx :3 (Yesterday)

@Vash3stampid3 naming them would only give them more attention~ (Yesterday)

@ADAMATOMIC classic pikagreg (Yesterday)

@AsherVo @fell_martins any% world record (Yesterday)

@kinifi hahah amazing! thanks <3 (Yesterday)

getting excited while watching a trailer for a video game but at the end it reminds me that there's already dlc and… t.co/WJh1g2gcGB (Yesterday)

@MoviusC soooo unreal tournament definitely tried terrain maps with their twitch-fps weapons and they were god damned awful lol (2 days ago)

@MoviusC well if it were like a quake map there'd probably be less giant open spaces, or if there were they'd be in… t.co/0LK7FJCbVs (2 days ago)

if PUBG was just like the same concept but a giant quake map and played like quake then I would be dead from playing it for 999999 hours (2 days ago)

@TeddyDief ancient me: "my bloodline will carry out this task for me sometime before the sun consumes our home plan… t.co/T27Mb6a93W (2 days ago)

RT @fell_martins: 💰💎✨ Boys and girls, I'm open for business ✨💎💰 Resposting artwork because most of my stuff is under very secretive NDAs.… (2 days ago)

follow
search
posts dated from: january 2015

2015 - 1 - 30 / 2:01 am / general

Splash Page Changes

Splash Page Changes

One of the things on my to do list for the past billion years has been a rearrange of my website! You may notice now that you're probably looking at kpulv.com/blog/ instead of plain old kpulv.com. Now when you go to kpulv.com you'll see a big list of all of my video game releases.

The number one reason I did this is because a lot of the traffic that comes to my site is coming from people who are looking for my games first and foremost. I think that it might be a little confusing if the first thing they see is a bunch of blog posts and some kinda odd navigation. Plus I think just putting my games in front of visitors first is just a better idea in general. If they're interested in anything beyond that then they can easily click on the link that goes right here.

All of my modifications should preserve any of the urls for my posts so there won't be any weird broken links. Also when I was coming through some of my old code I fixed a few bugs here and there that I'm sure only I noticed.

Of course this is something I've been putting off because I dreaded breaking everything on my site, but it turned out to be incredibly straight forward and I was able to crank it out in a day. Totally related to this I am still digging toggl quite a bit as it shows me pretty accurately how I'm spending my time on tasks, and sometimes it's crazy to see how little time I spend on things that I thought would take forever. More thoughts on this coming sometime soon. Back to work!

No Comments

2015 - 1 - 27 / 11:42 am / tools

Asset Class Generator Update

Asset Class Generator Update

Just a quick post to say I've updated my Visual Studio Asset Class Generator with some bug fixes here and there. Download the new version right here.

There were some issues with duplicate file names, and also files with more than one period in the name would destroy it so I've now set it to ignore those files. I've also cleaned up the code that the generator writes.

The source code for the updated version is also now available here so you can feel free to modify it to your hearts content!

No Comments

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!

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

Image

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;
Console.WriteLine(victoryPhrase);


Download
Download GoogleSpreadsheetSync.zip (0.02MB)

Usage
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..."

Image
* 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.

Image

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:

11Ia3wr-Pon1180M0_KRR1hywEITLn_P1BoUedbNQeqw

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

Image

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.

Image

Source
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.

Trouble?
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

2015 - 1 - 23 / 1:21 am / general

Dev Log: Event Queues Everywhere

Dev Log: Event Queues Everywhere

I've been working on a little prototype involving turn based combat. I'm not quite 100% ready to dive back into Stratoforce yet, and I had this idea gnawing at me and I just have to get it out of my system. What exactly is the idea? Well I can't say what it is yet, but if it works out then I'll talk more about it!

Since it is based around turn based combat I had to figure out how exactly that works. I'm so used to programming things that happen all in real time that suddenly going into a turn based game makes absolutely no sense to my brain. At first I had these huge state machines that were incredibly clunky, then I transformed it all into events that can be placed into a magical event queue.

Here's a simple class that can be dropped into Otter that is an event queue manager. It was whipped up very quickly so there might be some slight issues to debug. Check it out:

/// <summary>
/// A Component to manage and process queue of events
/// </summary>
class EventQueue : Component {

public List<EventQueueEvent> Events = new List<EventQueueEvent>();
public EventQueueEvent CurrentEvent { get; private set; }

bool isFreshEvent = true;

public EventQueue() {

}

public bool HasEvents {
get {
return Events.Count > 0;
}
}

public void Add(params EventQueueEvent[] evt) {
Events.AddRange(evt);
}

public void Push(params EventQueueEvent[] evt) {
Events.InsertRange(0, evt);
}


public override void Update() {
base.Update();

if (CurrentEvent == null) {
NextEvent();
}

while (CurrentEvent != null) {
if (isFreshEvent) {
isFreshEvent = false;
CurrentEvent.EventQueue = this;
CurrentEvent.Start();
CurrentEvent.Enter();
}

CurrentEvent.Update();
CurrentEvent.Timer++;

if (CurrentEvent.IsFinished) {
isFreshEvent = true;
CurrentEvent.Exit();
CurrentEvent.EventQueue = null;
Events.Remove(CurrentEvent);
NextEvent();
}
else {
break;
}
}

}

void NextEvent() {
if (Events.Count > 0) {
CurrentEvent = Events[0];
}
else {
CurrentEvent = null;
}
}
}

class EventQueueEvent {

public EventQueue EventQueue;
public int Timer = 0;
public bool IsFinished { get; private set; }

public void Start() {
IsFinished = false;
Timer = 0;
}

public virtual void Enter() {

}

public virtual void Update() {

}

public virtual void Exit() {

}

public void Finish() {
IsFinished = true;
}
}


This is sort of similar to just a very simple behavior tree (see Kodo for more advanced stuff!) Basically what happens is there's a list of events that all need to be run. The current event is run during the Update, and if it's finished then it's removed and now the next one starts up. You can both Add and Push events into the Queue. Push will insert an event at index zero so it will be the next thing to run. To make events just make classes that extend EventQueueEvent!

So I have events like "Damage" "ActorDefeated" "ChooseTarget" "TakeActions" and more. It becomes very easy to manage when things are broken up into separate classes like this! This is actually also giving me ideas on how to run cutscenes in more real time action type games as well. Maybe it will be of some use to you!

No Comments

2015 - 1 - 22 / 9:25 pm / doodle

Doodle Post

Image

No Comments

2015 - 1 - 21 / 2:34 pm / general

Dev Log: Productivity Experiements

Dev Log: Productivity Experiements

When the new year came about I was determined to break my cycle of endless procrastination loops. I find that my productivity is tied to my mood, and my mood is tied to my productivity, so when things are going great in either one of those then it's awesome, but if one of those drops then it's kind of a self reinforcing downward spiral into the abyss. It's not impossible to break out of it, but it is really really difficult.

When I got back from my holiday season travels the very first thing I did on my main workstation computer was completely block reddit. I'm using a website blocking extension for Chrome that will just straight up block the site entirely. Reddit is a big problem for my procrastination. When facing a super hard problem I could either sit down spend a lot of time trying to solve it... or maybe open a browser and type "r" and suddenly an hour has gone by.

I've blocked reddit before, but not as hard. Usually my previous reddit blocks have just been totally mental. I would catch myself starting to type in reddit and then divert to something else, but this time I wanted to try a more all out approach. Also I can still browse it on my phone which I still do sometimes before bed, but having it blocked on my computer I should be doing work on feels different.

In similar fashion I've also limited my Twitter and Facebook time on my computer to one hour every 24 hours. Other sites are included in this time limit but it's mostly the big T and F. I actually don't think Twitter and Facebook are that much of a problem for me, but it is nice to have a hard limit on it per day, and even just having that limit does make me mindful of how much time I'm actually spending on those sites. For limiting time on sites I'm using the Chrome extension StayFocusd. I think I've only ever hit the hour limit once, but there are some times where working on various projects does involve Facebook and Twitter usage.

Blocking and restricting sites on my computer felt weird at first. I thought "well if I do this won't I just immediately find ways around my own restrictions?" As time goes on though the restrictions feel more like a part of my routine. Since I only have an hour of Twitter and Facebook I spend very little time on those sites now, and the time I do spend on there is very focused and brief. I haven't really felt a need to go to reddit lately, and I feel like I might just be better off without it. If I really really want to browse it I can use my phone which is a separate entity from my work computer.

The last thing for now is toggl which I've mentioned before. It's a simple time tracking application which can also be downloaded as a desktop program. I have a couple of different work categories such as game dev, drawing, blog, misc tasks, and I put exercise on there to track that as well. So far it's been working out pretty well and I am interested to see the results of it after a month or so. It is useful to see how much time was actually spent on certain things during the day.

I'm not holding myself to any sort of requirements through the day. Right now I just work on stuff as much as I feel like I can. Between drawing, game dev, and other stuff I'm logging about 4.5 to 5 hours of productivity a day which seems pretty decent.

As a continue to experiment with productivity I'll be sure to talk more about the results. Right now things are going pretty well with a weird prototype. It's getting me back into the groove of coding which I'm hoping will transfer back to my current projects like Super Sky Sisters and Stratoforce.

2 Comments

about

About

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

categories

tags

archives

facebook

videos

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!

contact

Your message has been sent! Thanks :)
SEND MESSAGE