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.

Categories
Marketing/Business

Proximity Effect

For some time I’ve been reading the words of naysayers who believe that the golden age of indie game development has passed and that there is too much competition. When you were the only one around, it was “easy” to make a living from your games. Now there is too much competition and it is hard to get your name out there. Blah blah blah.

Seth Godin wrote about the proximity effect. It basically describes how most products actually sell well when they are part of a category. Books sell next to other books. Fish sells next to other fish. No one is complaining about how there is too much competition in a bookstore because it is exactly where the sales occur.

Steve Pavlina’s article on how to create successful shareware games mentioned the idea of selling the sizzle instead of the steak. The difference between your freely available demo and your full version is what you are selling. Don’t tell me that I’ll get the five levels from the demo. I already have them. Tell me about the 100 levels I’ll get if I pay for the game. Of course, if you go to a higher altitude and compare your offerings with your competitors, what are you selling now? You may offer 105 levels, but if the other game can run on an operating system of the player’s choice, will it matter?

At a bar, you don’t have to sell vodka. You should have to sell why your vodka tells a better story than the other guy’s vodka.

You should be concerned about how your potential customers will perceive the benefits of paying for the full version, but you should also think about how paying for your full version compares to paying for someone else’s full version. Why should I buy Flatspace 2 when I could buy Gish or Tribal Trouble? Why should I pay for Darwinia when I could pay for Geneforge 3? Why Alien Flux instead of any of the above?

Of course, no one wants to get into a silly cold war by claiming to have one more feature than the competition. Mainstream game developers and publishers already do so when they make a sequel to a game that has more graphics, more sound, more controller buttons, more more more more more…

Still, there is more to worry about than how your game competes with itself. Indie game portals may make it easier to get an audience, and obviously competition is a concern, but you basically have to convince the potential customer that your game is well worth the money AND worth more than an offering from another developer.

Categories
Marketing/Business

Incorporating GBGames: The Business Plan

I’ve had a chance to read through some of the materials I’ve received from my visit to SCORE. For the most part, I know about the different things involved in running a business, but I’ve never dealt with the details. I haven’t asked the hard questions.

For example, “What business am I in?” How I answer this question will pretty much dictate how I run my business, so I can’t just blow it off. Perhaps while I write my business plan, I’ll change or refine the answer. Still, it is a very good question that I’ve never answered. I will need to describe my business in terms of how it works, how I plan on making it profitable, and should also identify clear goals. I already know why I want to be in business, but I will need to clarify the how and what.

Since marketing is an important aspect of any business, it deserves its own section of the business plan. It’s tough, but I’ll need to be able to identify who my customers are. “Gamers” isn’t good enough, but am I going to be targetting casual game players? Interstitial gamers? Hardcore gamers bored of the mainstream offerings? How about people who would otherwise be hardcore game players but can’t overcome their fear of a complicated interface? Whose life do I want to change? What’s my pricing strategy? Is the market for my kind of games growing?

It will be a lot easier to direct and control my own business if I have an idea of the resources I’ll have to use. I can’t make good decisions if I am not sure how much money I’ll have to work with from one month to the next. I’ll need to specify a startup budget as well as an operating budget.

Who is my competition? And not just other indie game developers, either. What other products and services are competing with me? People don’t watch television as much, but it still poses an alternative if I don’t make my offerings compelling enough. For that matter, people might prefer using instant messenger clients and talking with their friends rather than play my game. Identifying the competition allows me to try to enhance my own offerings.

I’ve never addressed these questions in detail, but I can already see how doing so will go a long way towards improving my chances of succeding.

Categories
Games Geek / Technical

RealTimeBattle: A Programming Game

I’ve seen programming games that can teach you Java by programming the AI of your robot. Of course, it was Java specific, and as nice as Java might be, there could still be some reasons for you to want to learn something else. Other games might teach their own language, which wouldn’t be very useful directly. Enter RealTimeBattle.

RealTimeBattle is a programming game, in which robots controlled by programs are fighting each other. The goal is to destroy the enemies, using the radar to examine the environment and the cannon to shoot. You can play RTB on many different platforms, but my favorite feature is the fact that robots can be constructed in almost any programming language.

You talk to the server by using the standard input and output. You don’t need any specific functions from a library. You just need to be able to send and receive regular text. What you do with the information might make use of various properties of your specific language, but so long as you can manipulate text, you can program a robot to compete.

RTB is now at version 1.0.8.