Categories
Marketing/Business

Incorporating GBGames: Overkill?

I finally managed to talk to a CPA about incorporating GBGames. I had done a bit of research, but it seems odd that there wasn’t a simple bullet list of items to look at regarding incorporation. I mean, if the government knows what I need to do, why can’t I find a simple list? File articles of incorporation, send in a check, send a form to the IRS, and then…what? I found that I would need a Federal Tax ID, which I could request, but I also learned that there are certain responsibilities such as recording minutes for meetings and paying for the privilege of filing annual reports. I also didn’t realize that even though I don’t plan on hiring anyone, I would be considered an employee of the corporation. The descriptions of the employment laws that I’ve been ignoring up until now will need to be looked over in more detail. I’m sure there is one or two things I’m leaving out, but suffice it to say that it would cost me money and time to maintain the corporation.

And so the CPA suggested that a corporation would be too much effort and cost for very little gain. I had originally decided not to go for a Limited Liability Company, but he advised that while it cost more up front, the maintence of the company would be a lot simpler in this form.

I am planning on running this business part-time initially with no outside investment. I don’t want to hire employees, although I will contract out certain work. I also don’t believe I’ll be able to make any income for some time (I’ll need a game to sell first), and even then I won’t be able to live off of it for maybe a year or four. For now, an LLC sounds a bit more appealing. I can always form an S Corporation later, specifically when I start looking at much more serious income and/or start running it full-time.

Categories
Game Development

Oracle’s Eye Development: Another Month

It’s the start of the fourth month of my one month project. B-) On the one hand, I’m getting impatient. On the other hand, I am learning quite a bit, both about game development in general and about scheduling specifically.

I had a few items I wanted to tackle for the next few sessions. When I last left off on Oracle’s Eye, I had a Ball spinning around in a Room, and the Player could walk around. I had also updated the Kyra Sprite Engine. The new version doesn’t use a certain class anymore when it comes to hit detection, but it mimicked the std::vector class and my code didn’t do too much with it. It was easy to just change the type of the object. I had collision detection with a change on one line of code. Pretty sweet.

Now on to the new stuff! I eventually want the Player to be able to kick the Ball around the Room. Of course, if the Ball can’t move in the first place, I’m stuck. I already have the code available to move the Player, and I already used the same code in the Ball class. All that was left to do was provide a way for the game to tell the Ball to move.

I cheated. I just wanted it to move around, and so I used the same function that moves the Player. In GameWorld, I have moveX() and moveY() functions which normally move the Player if he isn’t hitting a WallTile. I simply did a similar test. Now, the Ball isn’t in the same subtree as the Player and WallTiles. With the Player, I can do the test with the following function:

bool CheckSiblingCollision (KrImNode *checkThis, std::vector < KrImage * > *outputArray, int window=0)

The Player and the WallTiles are siblings, and so if this function returns true, then I shouldn’t move the Player. It works for what I need so far, although I can foresee some difficulties if I keep them on the same subtree. The Ball is on a different subtree, and so it needs to use this function:

bool CheckChildCollision (KrImNode *checkThis, KrImNode *parent, std::vector< KrImage * > *outputArray, int window=0)

I basically pass the pointer of the Ball’s KrSprite and the root node of the subtree that the Walls are in. I actually uncovered a bug in my program here. Since I didn’t want to keep pointers everywhere, I named the parent KrImNode when I originally created it. I can then search for it by the constant string I supplied it. In this case, I used “foreground”. What was weird was that the Ball wasn’t able to detect the Walls and would pass right through them. It turned out that the code that creates the node was being run twice, meaning that the node was being added to the Kyra Tree twice, and so when I named it a second time, the first one was basically lost. Unfortunately it already had the information for the WallTiles and the Player, and so the Ball was looking at the wrong node whenever I searched by the name. It actually didn’t take me too long to find the source of the problem, and the fix was even easier. In the end, I had a Ball that not only moved but also obeyed the Wall boundaries.

Even cooler was that it would not run through the Player, but the Player can still go through it. I’ll eventually have to write code that makes the Player and the Ball respect each other’s positions. For now, I will need to address a different problem.

The Ball starts out in the center of the Room, near the top Wall. My animation images aren’t that high quality, and the Ball seems to jump slightly at certain frames. Apparently it is hitting the Wall as it moves, which means that every so many frames, it will actually stop moving to the side. It gives the impression that the Ball is grinding along the Wall. I think I would like to make my Player and Ball images smaller anyway. Right now they fill up the entire Floor tile, and I think they should be able to maneuver better if they had a bit more leeway when walking around.

It’s not bad for a few hours of work. Still, I think I’ll schedule an entire Saturday this month to working on this project. Having a day dedicated to development with (hopefully!) no distractions should provide a big boost in productivity.

Categories
Games Geek / Technical General Linux Game Development

Why I Want to Make Games for Gnu/Linux

LinuxGames posts about the possibility of porting the sequel to Savage to Gnu/Linux. Basically, the Savage 2 engine is heavily utilizing DirectX, and the developers are going to try to work with Transgaming to get it working with Cedega instead of providing native binaries. Apparently Never Winter Nights 2 is also having these issues.

I really don’t like the idea that I have to buy games and then pay recurring fees for the right to play them on my preferred operating system. But if you read through the threads, apparently people are also upset at the level of support they received for the first Savage.

It is already bad enough that I have to keep Windows around to play most games, and there aren’t very many natively Gnu/Linux games of great quality, but why develop half-ass “ports” and make it worse?

I want to make great games natively for Gnu/Linux because I am tired of waiting for someone else to step up and do it.

Categories
Linux Game Development

Learning Kyra: Installing the New Version

I decided to install the latest version of the Kyra Sprite Engine since I am still so early in the Oracle’s Eye project. Historically, Kyra allowed you to dynamically link to the library, and so I had it installed on my system as any other library.

I wanted to install the latest version similarly. I found that the latest version doesn’t have a working configure file; I was expecting to be able to use the standard ./configure; make; make install. It still worked for the most part without the ./configure part. In fact I took advantage of checkinstall to create a nice Debian package for me so I can uninstall and install easily.

So it builds, but I found that there are a few differences. For one, kyra-config doesn’t exist. I normally used it to get the cflags and the lib arguments for my Makefile, similar to the way you would use sdl-config. So, how do you build a project now?

I asked on the Kyra forums, and the maintainer was actually just sitting in front of it waiting for my posts. He was that quick! Eventually I found that the way I wanted to use Kyra wasn’t the way it was supposed to be used anymore.

Kyra isn’t currently capable of being backwards compatible, meaning that different versions of the same library can’t be installed at the same time. So basically statically linking is easier and less likely to cause problems. My only concern is the fact that the LGPL license requires different things for code that statically links to it, but I was planning on releasing my code under the GPL anyway so it isn’t a huge problem.

To make one of my famously long stories short, I ended up working on my Makefile and the library until I found out how to get it to work dynamically…just in time to read that I shouldn’t use it that way. I managed to get my project to build with the new library only to find out that I should use it a different way. I spent some more time until I finally managed to get it to build the preferred way. I have a source directory with all of my source files as well as a subdirectory with the Kyra library source.

It was definitely a good learning experience, as I learned more about linking and libraries on my Gnu/Linux system. I actually built my project successfully three different times: once with the old dynamic library, once with the new library fixed up to be dynamic, and once with the code statically linked. The last option is actually cool because I can actually add the Kyra library directory to my Subversion repository for Oracle’s Eye.

Still, I would have liked to schedule my learning experiences better. I was supposed to be working on my game project instead of the supporting library. I really wanted to try to work on what William Willing mentioned on his blog about Composition vs Inheritance. I’ll probably be able to work on it this Friday though. At least the new library seems to be working great now.

Categories
Games Geek / Technical General

Carnival of Gamers

I saw that Aeropause was hosting this year’s Carnival of Gamers, which has its “headquarters” at Buttonmashing.com.

Carnivals are basically traveling blog shows. There is a Carnival of Capitalists that I’ve heard about, but when I found that there was a Carnival of Gamers, I had to look into it. Essentially, people submit posts on the topic or theme to the carnival host, and the host, which is Aeropause for this month, provides links to the other blogs involved. It’s like normal blogging but much more organized.

Categories
Game Development

Oracle’s Eye Development: Thanks for the Save, Subversion!

I spent the evening working on the project, and I was going to try to get the Ball to move in four directions. I thought that I should probably start by laying the groundwork and having Player and Ball inherit from a class called Entity.

My thinking was that Entity would control the movement of the object in question. It would set the position, move in a certain direction, and also control the KrSprite pointer. Then Player and Ball could inherit from Entity and have all of the functionality available, and I would be able to handle the code in one place instead of two or three.

My gosh, what a mess!

When I finally decided to give up and revert the changes, I realized that I might not want to inherit Entity. Perhaps it would be better if the Player and the Ball each own an Entity object. After all, each owns the KrSprite pointer currently, and essentially Entity acts as a wrapper. It will still require some reworking, but it might be easier than what I was trying to do.

Entity had pure virtual functions, and after Player inherited it and defined the functions, I was getting linking errors that I couldn’t figure out. The messages insisted that there were undefined references to the Kyra Sprite Engine’s functions, and that made no sense to me because they were defined nicely before I did anything to the code. I kept at it for some time, and by the time I gave up I have to admit that I still don’t understand what was wrong. Of course, I don’t exactly have the greatest grasp of the C++ language, and so I more than likely wasn’t using pure virtual functions correctly. I decided that I should think about it.

Reverting it was fairly easy with Subversion, so I am very thankful that I’m using this tool. I feel bad that I haven’t made any progress on the code, but I’m chalking it up to experience.

Never write code when you have no idea what you’re doing with it. I started to hack away and tried to do something without knowing how I was going to handle it beforehand. Now I’m backing away from the code and trying to write down some design ideas before progressing. If I take the functionality from Ball and Player and put it into its own class, I already know that aggregation is probably going to be better than inheritance. Of course, I should really try to write it down and figure out if that is the case before making the same mistake the other way. I don’t want to assume that if I was wrong with one choice that another choice is automatically correct. After all, Ball and Player are both going to be classes that provide the functionality to move the objects around. Why shouldn’t they inherit the implementation to do so?

I’ve already found one resource that suggests composition is the way to go: Game Object Structure: Inheritance vs. Aggregation.

In any case, I didn’t fail. I just found a way that doesn’t work. Or at the very least I found that there is a limit to the “just get something, anything, working” method of game development. B-\

Categories
Marketing/Business

Incorporating GBGames: Business Plan Resources

I’ve read through the SCORE information on writing a business plan, but now I need to start making one.

Unfortunately, I’ve found that the resources provided by SCORE were very general. Parts of it were not relevant to an online software company, let alone to an indie game development company. Also, most indie game companies are privately owned; there isn’t a lot of publicly available information on them. For the most part, actual developers don’t feel comfortable giving out real stats and numbers, and some would argue that the information is worthless anyway. So now what?

I did what any good technical-minded person would do: I searched online for information. I found this post from the Dexterity archives on Indie Gamer. It’s cool because it has the words of Steve Pavlina along with Thomas Warfield. They liken indie game development to turning a flywheel: the more you work at it, the easier it becomes to stick with it. Both were making a few hundred dollars per month at first, but when they are working consistently at it, the sales just keep increasing. It isn’t a get rich quick method, and I never thought it would be, but it is good to know how long it took to make significant and regular sales. Pavlina also touches on the need to stop thinking like a hobbyist if you expect to actually make money from the business. Definitely good advice, especially since I catch myself thinking too small sometimes. While it does provide some information, it doesn’t delve too deeply in what it takes to create a business plan.

I also thought to check out Steve Pavlina’s articles on Dexterity. I credit those articles and the Dexterity forums with the inspiration that got me thinking about starting up my own game company, and I like to read through them every few months. To Plan or Not to Plan is especially relevant. When I first read it, I thought it was good, but I am seeing it in a new light now. “Failing to plan is planning to fail” was a nice saying a year ago, but I now see how effectively it reiterates the importance of planning for my business. The article also goes into what should be covered, such as sales, cashflow, product development, marketing, and customer service among other items. There’s more to it, but suffice it to say that I’ve found the first solid resource on forming an indie game development company in this article.

The article mentions that the business plan should be two to five pages long, which goes with my feeling that it shouldn’t be a monstrous, formal document. I should be able to write a rough outline and draft within the week. Well, I should be able to dedicate an afternoon or two to the task, but I’ll need to schedule the time when I can.

EDIT: Thanks to Troy Hepfner on the ASP newsgroups, I remembered that I own the book Game Development Business and Legal Guide and that I would probably do well to pull it off the shelf, dust it off, and read it now that it applies to my situation a lot better.

Categories
Game Development

Oracle’s Eye Development: Having a Ball

While I didn’t work on Oracle’s Eye as much as I would have liked these past two weeks, I did make some progress. I created a Ball class, drew up a Ball sprite with eight frames of animation, and got it into the game.

I had to change some of the design and the code. I found that the Player couldn’t walk around the small Room with the Ball in the way, and it is partly because of the way I did collision detection.

To make the Player respect the Wall boundaries, I coded a simple test: if the Player’s movement would cause it to collide with something on the same level as it, then don’t move. It worked great when I only had Floor tiles on a lower level and Wall tiles at the same level as the Player. Now that there is a new object to interact with the Player, I needed to change the code. I don’t feel discouraged at all since the purpose of my original code was to have something and anything working. I’m supposed to change it as the project evolves. Months ago, my much more novice self would probably have been discouraged to think about the need to change code that I already wrote. That’s experience for you. B-)

For the time being, I simply put the Ball on a different, third level. It simply spins in place, but the Player can walk past it now. Well, actually, it walks over it. It’s not an ideal “solution” but it will do for now.

But the point of this last session was to get a Ball into the game. I’ve accomplished it, although it isn’t too functional. What it did do is bring a number of issues to light:

  • The Ball spins nicely, but only in one direction. I’ll need it to move in four directions when I finally get it to move around. I can step backwards through the animation to account for rolling right and left, but I just realized that I’ll also have to make it move up and down. I’ll need more sprite images.
  • I’ll need to think about how I am going to let the game know that the Player has touched the Ball or that the Ball hit a Wall. I am thinking that I will need to add a significant chunk of code to handle Game Events. Not trivial at all.
  • I need to also think about how to load levels. I now have three of the four significant objects ready. The last one is the Goal Tile. I will need to be able to load levels that specify not only the Floor and Wall tile layouts but also the locations of the Ball and Player objects.

On another note entirely, I also need to start thinking about sound. I might not have any significant music, but I should probably have some sound effects. Besides using the PC speaker back in the QBasic days, I haven’t done much with audio programming. What an ideal project to learn about it. B-)

Categories
Games General

Aspiring To Be Cool With Video Games

The New Mainstream: How Hip Hop and Geek Culture Are Revolutionizing America’s Pop Culture is one of the latest articles in the Escapist. This week’s issue focused on hip hop and its relationship with video games. According to this specific article, the middle class used to aspire to be rich by becoming doctors or lawyers, but these days the rich are made up of geeks. Geeks generally like to play video games. Hence, if you want to aspire to be rich, you’ll likely want a big entertainment center with a few game consoles.

So what that means is that some of the wealthiest people in our society like to spend lavishly on games and tech. And that, in turn, means that games and tech have become aspirational goods on the Street.

Which leads to the current bizarre case: Games are now cool because middle class teenagers are emulating hip hop moguls who are adopting the trappings of wealth which are defined by Silicon Valley millionaires who like games and tech.

The New Mainstream is why technology is now a luxury good and style suddenly matters. It’s why Microsoft’s Xbox 360 looks like it was designed by Apple, and Nintendo’s Gameboy Micro looks like it was designed by Nokia. It’s why, today, it’s cool to own an Alienware computer with a stylized case and building your own PC from parts just means you’re broke. It’s why the Motorola Razr was such a huge success. It’s why you can expect Rockstar to release its own line of hip hop lifestyle clothing one of these days.

It’s all very interesting. I don’t think I’ve ever been concerned with style when it comes to my geekery. Heck, I don’t even own a Mac. On the other hand, I have to admit being impressed by a modded computer case or two. So maybe it just makes sense that as technology has evolved it has to become stylized. BMW and Jaguar have come a long way from Ford’s Model T. Perhaps it won’t be so easy to impress people with the technology. People might think that something that doesn’t look as amazing as its internal workings must be shoddy.

But in my defense, I build my own computer partly because I can, partly because I like customizing my machine, and partly because I am broke. You get a lot more bang for buck building it yourself. Also, I’m, uh, keeping it real. Yeah, that’s right. So you can go take your super-stylized, factory-built, expensive paper weight excuse for a computer and go home because you won’t be able to hold a candle to me when we play Pong. Fool.

Categories
Personal Development

Waking Up

I’ve been trying to wake up earlier since I found that I could get a lot accomplished in the early morning hours. Eventually I’d like to get up at 5AM, get some of my own work accomplished, then leave for my day job.

Some days it is easy. The alarm goes off at 5:45AM, and I get up pretty much immediately. My backup alarm, my cell phone, will go off in about 15 minutes, and so I sometimes find that I’ll need to take it with me to breakfast so that I can turn it off before someone else wakes up. B-)

Other days it is a struggle. I can actually feel a battle between my body and my mind. “Ok, I’m up. I just need to move out of bed and get going. Move the blanket, move my leg, move my arm…why am I not moving?”

Why the difference? Some days I just don’t feel like getting up. Everyone has those days. Some people have them more than others. Sometimes the feeling is overwhelming. Logically I know I want to get out of bed. I’ll be late for work if I don’t get up. On Saturday and Sunday, I still like to get up early so I can get a lot accomplished before most errands and appointments are set. I’ll end up with less time for the things I want to accomplish. And yet, I’ll still stay in bed.

I had to take care of my cat when my parents were away for a week. My father would generally feed him and change the litter box, but I had to take over these responsibilities. My father works early, and so he wakes up even earlier. My cat is used to getting food at a certain time. I woke up to my alarm and stayed in bed long enough to think about getting out of it. It was one of those epic struggles between the mind and the body, and my mind was losing.

Then I remembered that my cat was depending on me for food. I got up immediately and easily.

Again, why the difference?

Purpose. I woke up with a purpose. Apparently getting to work on time wasn’t as motivating as making sure my cat was happy and fat (I found out that week he was 18 pounds, or 8.16 kilograms to the rest of the world).

When I spend the night before thinking about what I want to do the next day, I find that waking up is a lot easier, even if I went to sleep very late. On the other hand, when I just go to sleep without a thought to tomorrow, even if I get enough sleep, I’ll struggle to get out of bed. I’ve found myself lying wide-eyed and awake but unable to move simply because I didn’t have a compelling reason to get up.

I’ve read about how making todo or next action lists the night before is useful because it makes the next day purpose-driven. It also helps remind you that you have a reason to get up in the morning.