Categories
Geek / Technical General Politics/Government

How Well Do You Know GNU?

Recently the Free Software Foundation put forth a call for volunteers to help answer licensing questions about the GPL, LGPL, and Free Software licenses in general.

The Compliance Lab does do one job which is very public: we answer licensing questions from the free software community. When people want to learn how they can mix code under different terms, or what license would be best for their program, we try to help them so they can spend less time worrying about legal nitty-gritty and more time hacking. It’s not the most glamorous job, but it’s a unique way to help out.

If you are interested in volunteering, or even if you just want to see how well you understand the GPL, take the Free Software licensing quiz.

The questions can be tricky, especially if you are not at all familiar with the GPL or LGPL. Some things might surprise you. I answered four or five answers correctly, which shows that I have a few things to learn. Even if you don’t want to volunteer, the quiz is informative, so go ahead and see how well you do.

Categories
Game Development Geek / Technical

Automating Build and Test Systems

Years ago, I read Automating the Build Process at Gamasutra, which documented an automated build process for the game Creatures 3. The advantages for implementing an automated build process include better reliability, reduced time, and reduced risk.

A few weeks ago, a new article has appeared called
Automated Build and Test Systems for Games, which outlines what Nihilistic Software does when developing their own games. Once again, time savings are emphasized.

In both articles, it seemed that some customization was needed, but you should be able to find a way to automate the process for your own games. One tool I found is BuildBot, which mentions among its users id, which uses it for Return to Castle Wolfenstein: Enemy Territory.

The overall goal is to reduce tree breakage and provide a platform to run tests or code-quality checks that are too annoying or pedantic for any human to waste their time with. Developers get immediate (and potentially public) feedback about their changes, encouraging them to be more careful about testing before checkin.

Any time you can use a computer to automate a repetitive task, you’ll find consistency in quality and speed as well as fewer headaches related to the meta-work of making a game. While I believe that having it automatically build everytime a change is made would be overkill for a one-indie shop, having it delegated to a button-press would definitely help.

Categories
Games Geek / Technical General

Are Games Art Chat Log Available at Manifesto Games

Sometime back Gamasutra posted a news item regardinga discussion about games as art held at Manifesto Games.

Are games art? If not, why not? And if so, why? Is thinking of games as art useful or actually a hindrance for game developers? If games are art, what should our aspirations for the form be?

MIT’s Henry Jenkins, video game theory professor Jesper Juul, game designer Santiago Siri and gameLab’s Eric Zimmerman were invited to argue whether or not games could be considered art and who gets to define it as such. It was a playful discussion, with comments ranging from the humorous to the serious. While nothing definitive was decided, it did show that labeling video games as a form of art is difficult, but it is not because they are inherently not artistic, as Roger Ebert would claim.

The complete chat log can be found at Manifesto Games.

Categories
Games Geek / Technical Marketing/Business

I Played with a Wii

While out buying some much needed replacement gym shoes (I haven’t rotated them every 100,000 steps like I should have), I decided to stop into a Game Stop and try out the Wii on display. I had heard that they require a credit card, but it turns out that they only needed a state ID.

Ok, seriously, why would you purposefully put up barriers to get your potential customers to try out your products? “Come check out our cool stuff that we want you to purchase! It’s amazing! It’s sweet! You’ll love it! Not so fast there, Mr. Customer! First you need to give us something. We can’t just trust you to try it out, after all.”

When I was given the Wii remote, it was in a steering wheel. Apparently Ubisoft makes plastic steering wheel-shaped holders for the remote? The reason for the wheel was to let it feel more natural while playing Excite Truck. It was the only game on display, which disappointed me. I was looking forward to some Wii-sports or something other than a game in the only genre that I don’t care much about.

I’m not a racing fan. I will play Cruisin’ USA or similar arcade games because for some reason out of all of the games that my female friends could play, racing games appeal the most. And not games like Super Mario Kart. No, they like realistic racers with no missiles to shoot or banana peels to drop or oil slicks to leave behind for the next player. I’m sure it appeals to a lot of people. It just doesn’t appeal to me.

Anyway, I start working with the menu, and I wasn’t sure if the remote wasn’t calibrated or if my hand was shaking (I had been playing basketball not too long before), but eventually I got used to it. It was kind of cool to have the remote rumble when it highlights something that can be picked. I checked out a few of the options, such as the photo album and the calendar. I even left a note, “gbgames was here”. Childish? Maybe. What’s it to ya’?

So I finally start the game. It had a tutorial section, and I made it through a good portion of it with only a little difficulty. Part of it was getting used to the controls. My video-game-playing hands kept hitting the directional controls whenever I wanted to turn. At first, I kept forgetting that you need to turn the controller itself. Eventually I got the hang of it, but I swear it reminded me of my Atari 2600 days. I would dodge, jump, and dive with that controller because it still wasn’t obvious to me that doing so was a waste of energy. With the Wii, it actually becomes not only functional, but necessary.

I did a bunch of tricks and jumps, but I could not get the 720 air spin down. I eventually quit the tutorial and started a race. Apparently while racing three laps I also had to earn a certain number of stars. It was interesting, but just like in most racing games, I found myself struggling to stay on the track. I got a lot of air, though, and a few times I managed to spin 360 degrees and land perfectly to get a speed boost. All the while I was spinning, tilting, and turning the controller.

In my limited period of time playing with the Wii, I thought it was promising. I just wish that the demo had something more interesting for me to try out. This weekend, plenty of people will receive their preorders for the Wii and probably the new Zelda game. I will not be among those people, but that just means that when I do eventually get a Wii, it will have more games and the price will probably have come down a bit. Oh, and maybe I will have more time to play games.

I will eventually get a Wii…once I have something more compelling than Excite Truck to play. When the N64 was in kiosks, I had a blast playing Super Mario 64. I would walk over to the stores over and over to play something on that system. It seems to me that someone messed up somewhere. I know that other people have been able to try out other games, but somehow the one store I go into had such a limited ability to market to me. I WANTED to try out things, but my options were limited. I couldn’t even check out some of the networked features that the menu promised would be there if the network was only configured.

In summary:

The Wii: Promising.
Marketing the Wii: Not so much.

Categories
Game Development Geek / Technical General Politics/Government

Games 4 Girls Competition Registration Is Open

In an effort to attract more females to computer science, a male-dominated field, the Games 4 Girls competition asks college women to create computer games designed to be fun for middle or high school age women.

In previous competitions, Game Maker was required, but this year other tools and platforms can be used. The only requirement is that the games can run on Windows XP (the competition is partly sponsored by Microsoft, after all).

This past year’s winners were Cornell University’s Green, Eggs, and Pan, the University of California-Irvine’s Eterative Tale, and North Central College’s DummerUnfall. Honorable mention went to Fluff, created by the team from University of Buffalo.

For this year’s competition, each member of the winning team will be awarded $1,000. Second and third place team members will receive $500. Also, three teams will win $1,000 for their Women’s Club/Organization. If you are a female college student, and you’re interested in the competition, the registration date is December 22nd, 2006. Deadlines and general information about the competition can be found at the Games 4 Girls site.

Categories
Games Geek / Technical

On Games Podcast

Recently I learned about a new podcast: On Games.

While the hosts, Charcoal and Makka, do discuss video games in general, they have an emphasis on indie games. They are definitely opinionated, but I find that it adds to the fun. They love responding to hate mail, for example, although they haven’t received any yet.

As of this writing, they have two shows up, but it appears that we can look forward to weekly updates.

Categories
Game Development Geek / Technical General

Google Code Search

A few months ago, I posted about searching for code. I just learned that Google made an announcement last week about Google Code Search.

I tried it out, but I didn’t find too much more than other code search engines. I was expecting something more, especially in the advanced search section. You can search by license, for instance, but how hard would it be to list compatible licenses, too? For instance, if I look up code under the GPL, wouldn’t it be rather simple to also list similarly licensed code?

I tried looking for a piece of code that I tried to find a few weeks ago. I just wanted to use a Point class to represent a two-dimensional position in space. I figured it would be trivial to write myself, but it would probably be even simpler and less error-prone to find someone else’s well-tested implementation. I actually found that Google’s code search wasn’t returning results as well as other search engines. It was finding all sorts of code that happened to have the word “point” in it.

On the other hand, the engine does support regex, which is really nice. I don’t know how many times I have wanted to search for something with:

 #include\ "sd[a-z]*.h" 

Typing the above actually shows you the source to SDL_image.h, specifically as part of the framework source for the Weird Worlds demo, interestingly enough. Small world, eh?

And of course, being the vain Internet user I am, I decided to do a search for my name. The search engine actually returned results that included the source to a number of my projects! I guess Google does a really good job of crawling websites.

Categories
Games Geek / Technical

LAN PAR-TAY!

I am writing this post from DeLan, the largest and longest LAN party open for students only (although I distinctly remember being at some more intimate parties that lasted two days). It started on Saturday at 3PM and goes until 9AM Sunday. There were a number of firsts for me.

One, this is the first time I have ever paid to be at a LAN party. It was $5 to get in, and another $5 for tournament play. It’s not too much, but it’s still different.

Two, I never played Counter-Strike before. We played in a double-elimination Counter-Strike Source tournament, and my team had one other person who had never played. We played fairly respectably, all things considered, and we were eliminated in the third round. In the first round, I saved the team. We were playing as terrorists, and I decided to take a completely different route compared to my teammates. Well, something happened, and I was the only one left alive. I had to go back, get the bomb, then find an area to prime and set it. Apparently the counter-terrorists thought I was going to go where the rest of my team was heading, so it took them longer to find me. One killed me, but the bomb was set, and my team held our breath as we waited to see if they could disarm it. My heart was actually racing, and then BOOM! We won! High fives, lots of “w00t!”, and general cheers went around to the rag-tag team, Psycho Squad. Yeah, I wasn’t too happy with the name…

Unfortunately, the second and third rounds didn’t go so well for us.

Three, it is the first time I get to try out my new laptop at a LAN party. I bought a Dell Precision M90, which is a desktop replacement more than a laptop. I named her EsmereldaGB. So far I had installed games on it, but I haven’t played any of them yet. There were machines specifically provided for the tournament, so I haven’t had a chance to play on this new machine yet. I will, however, be playing Total Annihilation, which is a game I haven’t played in earnest in a year or two. There are apparently some fans here, too.

Four, I had Bawls for the first time. It’s not bad, but it isn’t as good as Red Bull.

I’m hungry, and my food just arrived.

Oh, and by the way, I finished the basic gameplay of Pong before I left. Today is a good day.

Categories
Games Geek / Technical

PSP Security Vulnerability?

These days I am generally trying to catch up with all of the weekly reviews I haven’t been doing, but I received a bit of news in my inbox that caught my eye: Game Console Vulnerability Identified.

Apparently it isn’t completely new news as the PSP has had security vulnerabilities before, but wow! How long will it be before someone finds something similar on the XBox?

Categories
Game Development Geek / Technical General Linux Game Development

Physics, Collision Detection, and Porting Code

As I develop Oracle’s Eye Prime using component-based methods, I have found myself thinking about how to implement features in a general way. For example, if I am trying to make Pong, I shouldn’t hardcode the Ball and Paddle and Walls. Instead, I should have a more general way to detect collisions. After all, even if I have a Ball entity bouncing off of a wall entity in Pong, I might want to do Space Invaders next and have bullet entities that destroy alien entities.

There are two aspects to collision detection with which I am grappling. The first problem is determining how to detect collisions between different, arbitrarily defined objects, which generally are represented by sprites on the screen, while still knowing where it collided. In Pong, I would like to know if the Ball hit the front or the sides of the Paddle since it would bounce differently. The second problem is figuring out what to do when a collision happens. If the Ball hits a Paddle, it should bounce off depending on the side it hit. If the Ball hits the goal, or goes out on one side, it should result in the score increasing for one of the players.

Metanet Software’s N Tutorials section helped me to figure out the solution to the first problem. While the code examples use ActionScript, the interactive example animations demonstrate the concepts and make them easy to grasp.

However, in the forums, there was a mention of Erin Catto’s GDC presentation on sequential impulses. Sequential impulses for “fast and easy” physics? It technically takes care of both problems? Count me in!

My first task: port the code.

It was originally written in Visual C++, but I am using an entirely different operating system and compiler. I obviously had to remove the #include for “windows.h”. The application used GLUT so I didn’t need to worry about WinMain or anything specific to VC++. On Windows, filenames are case-insensitive, so including <GL/glut.h> is the same as including <gl/glut.h> is the same as including <gL/Glut.H>. On Gnu/Linux, filenames are case-sensitive, so I had to determine which name was needed.

The next problem I encountered was a bit trickier. The code makes use of the class Arbiter, which basically regulates the collisions between different bodies. The World class has makes use of std::set to hold and sort through the Arbiters. The problem?


for (ArbIter arb = arbiters.begin(); arb != arbiters.end(); ++arb)
{
(*arb).PreStep(inv_dt);
}

g++ won’t compile the above code. It complains that it is modifying a const Arbiter, even though ArbIter is not a const iterator. VC++ will compile it just fine, obviously. Which one is correct?

It turns out that both are correct. At least, the standard library implementations are both correct. See, std::set’s keys must be ordered, and if a key can be modified, the ordering can’t be guaranteed. A set could be implemented so that std::set<T>::iterator is equivalent to const_iterator, which is how it is implemented for g++. If the key is only accessible through const methods, then there is no concern that the key can be changed in a way that would change the order. Other implementations can allow modification of a set’s keys so long as the parts relevant to ordering don’t change.

The problem is that the code as written wasn’t portable, and I didn’t like the idea of using const_cast or mutable to work around it.

Scott Meyers, author of “Effective C++” and “Effective STL”, provided the safe and portable solution.


ArbIter arb = arbiters.begin();
while (arb != arbiters.end())
{
// Erase key from set, modify it, then add it again.
Arbiter newArb((*arb).body1, (*arb).body2);
newArb.PreStep(inv_dt);
arbiters.erase(arb++);
arbiters.insert(newArb);
}

As the comment above states, you modify a copy of the key, erase the original, and then insert the copy. The above code should compile on any implementation, which means that it works with g++ on Gnu/Linux or VC++ on Windows.

Moments later, I was able to get the physics demos to run on Gnu/Linux.

The next step: integration with Oracle’s Eye Prime.