Categories
Games General

Interview with PopCap’s James Gwertzman

Gamasutra published an interview with James Gwetzman, PopCap’s Director of Business Development.

It goes through a few different topics, such as the history of the company and the amount of growth it experienced, but I think the most interesting part was the overview of the development process:

“Our path of development is extremely prototype-heavy,” said Gwertzman. “We’ll make half a dozen prototypes, and pick just one of those to be a hit casual game. And once we develop that one, it’s a very iterative process. It’s a sandbox model. We try different things out, and find out what’s fun. Only when we find out that the core mechanic is fun do we worry about the art, content, and all the other little details.”

“We really obsess over the core game mechanics. In a game like Bejeweled, hardcore developers look at that and might think it’s kind of…it’s very easy to kind of dismiss it, but we literally spent weeks on just the right way for the gems to fall when you make a match. In a game like that, it’s little details like that. How does it feel? Getting those little details right is what we prioritize. So when we’re designing a new game, we’ll spend months and months prototyping core mechanics.”

Casual games are perceived to be simple to create. People still talk about how Tetris could have been made in a day and made someone very rich. They slap their foreheads at missing the opportunity, but I think it is very easy to look back on games like Pac-man and Bejeweled and decide that they were incredibly simple to create.

What’s forgotten is that a game like Pac-man still took months to create the first time. The developers cut features, agonized over details, and tweaked until it was finished. You could implement a clone within a few weeks, but I’m sure that the same team could throw away what they made, start from scratch, and come up with the same game in a much quicker time frame, too.

The idea that it takes a lot of effort to make high-quality casual games might be surprising to a lot of people, but how often does a great game get made accidently?

Categories
Game Development

Oracle’s Eye Development: Gameplay Tweaks, Planning Next Steps

Oracle’s Eye is really shaping up as a game. I’m awfully close to the project, of course, so there could be lots of things wrong with it, but it’s definitely much more playable than when I called it “technically completed” a few weeks ago.

The links from December 9th still reflect the game’s current state, which means I haven’t done too much to update it. I made the Player’s sprite smaller and haven’t been able to walk through walls so far. Some of the small tweaks I’ve made with the code have made drastic changes in the resulting gameplay. For example, I combined two sections of code knowing that it wasn’t exactly what I wanted. I just wanted to get closer to whatever it was I was doing. The result: now instead of just pushing the Ball, you can push against the Walls, and depending on the direction you are facing, the Ball moves. Psychic powers?! Maybe I could make some Walls into switches that create a gravitational pull on the Ball? It might be an interesting gameplay development.

Of course, I haven’t exactly created or updated a detailed design, so how can I know when something is progress or the introduction of a bug? This project is starting to become a bit more concrete, so I think it is appropriate to list specific implementation goals. Since I’ve gotten this far, I really think it would be appropriate to turn it into a commercial quality game. Besides having a game to sell, it would also allow me to have the experience of finishing a game that doesn’t look and feel like a newbie’s first project.

It’s clear that Oracle’s Eye is becoming more like a puzzle game than anything else. The basic premise: maneuver the Ball through the Room to get to the Exit. Maybe that’s all a player needs to know, but what about me? I’m still making it!

  • The Player should not be able to occupy the same space as a Ball. If the Ball hits a Wall, the Player should find that he/she needs to push at the Ball from a direction that isn’t towards the Wall in question. The point is to force the Player to use the level layout to find the best way to move the Ball. Allowing the Player to move the Ball through him/her would break the game since the Player would not need to worry about where certain Walls are.
  • Graphics: the Ball should rotate when it is moving and in a way that implies rolling. As it stands,the Ball rotates in only one direction, and while it might not be too noticeable, it is incorrect. Similarly, the Player should have images from multiple angles and various key frames. The static Player image is fine for placeholder art, but it will need to be replaced by someone that looks alive and breathing. The Ball and the Wall and Floor tiles should also be updated with higher quality art. The graphic style should be cartoonish but not exaggerated.
  • Sound: the game is silent currently. I should work on getting at least one piece of music for the background. The music should be upbeat and fun. There should also be sound effects for the Player when he/she kicks the Ball or hits a Wall. There should also be sound effects for the Ball hitting a Wall or getting to the Exit.
  • Levels: each level will consist of a Room with Floor and Wall tiles, an Exit, and a starting location for the Ball and Player. Rooms should be able to have different dimensions. One Room might be 10×10, another might be 5×15, and another might have varying widths. The purpose is to allow vastly different level designs as well as varying visuals. The maximum limit is related to the screen dimensions and the Tile lengths. The Player should be able to choose levels from a menu, and finishing one level should allow him/her to continue to the next one. I imagine that the game would require the ability to restart a level if the Ball gets stuck in a corner or gets in some other situation that prevents Player progress.

I was about to add that I wanted extra items, like angled banks for the Ball to bounce in new directions, but I already decided to cut out such features. It’s a nice-to-have, and maybe I’ll find that it will be easy to add, but the above listing is what I want to concentrate on. I think that focusing on these things will greatly improve the game, and I can always write down the gameplay elements I come across that don’t fit this design but might be useful elsewhere. I will keep an offline version of what I have here. It should be easy to update as I gain more insight into the project and its needs. I already know that this isn’t nearly detailed enough, but it should be good enough to show you (and me!) what I’ll be working on.

Categories
Games Geek / Technical General

IGF 2006 Finalists Announced

The 2006 Independent Games Festival finalists have been announced. Among the finalists are a few games that run on Gnu/Linux, such as Darwinia, Tribal Trouble, and Professor Fizzwizzle.

I’ve played those three games, if only in demo form, so I know they’re good. I’m also in the middle of reviewing Weird Worlds, another finalist which is also really good.

I decided to check out a few of the other games. For instance, Glow Worm looked like a typical match-3 puzzle game, but it is a finalist for Innovation in Visual Art, so I had to check it out. It definitely deserves to be in the running, and it is a fun game to boot. I also tried Strange Attractors. Well, actually tried isn’t a good word. I got to level 25. I should have gone to sleep, but I couldn’t help it. And that giant head! I would have destroyed it if I hadn’t teleported and got stuck right into those damaging electric beams!

Suffice it to say that the 2006 IGF looks like it is full of quality games.

Categories
Personal Development

Happiness Is a Choice

Jon Jones recently wrote Happiness is a CHOICE, a short post on the idea that happiness isn’t just something that’s “out there” or something you only get after accomplishing something.

A key idea from the article is that being upset about something doesn’t have to affect your mood. It isn’t productive to focus on negative things. It makes it very hard to be motivated or think positively when you have thoughts about your bad day burning mental cycles. They don’t even have to dominate your thoughts; if you think about it at all, it means you aren’t focusing on whatever you should be focusing on.

Some people think that once they accomplish something, then they will be happy. I think you can be happy now, in the moment. Why wait?

Categories
Geek / Technical Linux Game Development

Distributing Binaries: G++, libstdc++, and Static Linking

I’ve been asking certain Gnu/Linux-using friends to test out Oracle’s Eye while I work on it. I’ve already found that I need to specify SDL_image as a requirement because of such testing; however, I don’t want to have to send an 8MB source package that contains mostly useless-for-the-tester code or binary data. Asking someone to get such a huge download and build a project themselves just to check it out or test it is asking too much, I think.

Since they don’t need the source to test it, I can just put together the binary files I need and send them together in a tar.gz or zip file. Or so I thought.

I stumbled upon one of the things that developers face when they are new to Gnu/Linux: shared libraries that prevent distribution of your binary files. When you distribute the source and expect people to build it usually isn’t a problem, but I don’t anticipate all of my end users being proud geeks who wouldn’t mind spending hours getting my game to work again when it was working perfectly fine previously.

I have two Gnu/Linux systems, one which runs Debian Testing, with a 2.6 kernel and GCC 4.0.2, and the other which runs Debian Stable, a 2.4 kernel, and GCC 3.3. I don’t update the latter often because I use it as a backup machine. I don’t want to accidentally introduce incompatibilities that would prevent it from working properly.

When I brought my “release” over to the other machine and tried to run it, I got the following:

./oracleseye: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

Let me just say that searching for solutions to this issue is difficult. You get a lot of results that aren’t relevant. Or I did, anyway. And I knew it had to be possible. Quake 3 Arena works fine, and I’ve upgraded libstdc++ a number of times, so why can’t my own code work so nicely?

So I asked on IRC, but people who leave their clients running all day even if they aren’t there are not too helpful. I searched some more, posted a question gamedev.net, but then found the possible solution immediately after the post.

Linking libstdc++ Statically by Johan Petersson talks about the exact problem I am having and offers a solution that is easy and seems elegant.

Basically, you need to statically link to both libstdc++ AND libgcc. GCC won’t let you do one without the other. And so far it seems to work.

I managed to get my code to run on my main system, my backup system, and my work system, and I no longer have to recompile on each. It only adds 0.5MB to my download, and I may even get better results once I stop using the debug build options. I’m not sure if there is a “better” solution, but I’m pretty happy for now. Thanks, Johan!

Categories
Game Development Linux Game Development

Oracle’s Eye Development: Graphical Enhancements

To continue with the improvements necessary for Oracle’s Eye, I decided I would focus on simple and quick things. On my list:

  • Shrink the Ball images to half size.
  • Create an actual sprite for the Player.

No coding for tonight, mostly. And there really isn’t too much to describe for the Ball, either.

The Ball

I just took the Ball image and scaled it so that it was 32×32 instead of 64×64. The tough part was rotating it 45 degrees at a time and putting it in the graphics collection for the Kyra Encoder. I could use the Kyra Sprite Editor to create the animation, but I found it much easier to manually edit the XML file. I already had the larger Ball, so I just changed the numbers. It was really easy, and I only had to fix a problem once. When I ran the game, the top of the Ball was cropped so it looked flat on top.

I even added some more Walls to the level. Eventually I’ll be able to dynamically load the level from a file so I don’t need to recompile for each change. For now I’m still working on the mechanics. The new Walls actually make the level a slight challenge. You can’t just kick the Ball three times and win anymore, although it isn’t all that more difficult either. Still, it is definitely a nice improvement. What is especially nice is that the Ball only spins if it is moving now. Once it stops, it stops spinning as well. Eventually I’ll change the rotation depending on which way it goes, which means more frames of animation to handle movement up and down.

I also decided to change the movement of the Ball. Instead of bouncing perpetually between the Walls, it now stops upon collision. I think handling the Ball movement will be more interesting this way, and levels can be created that take advantage of the fact that the Ball stops once it hits a Wall. We’ll see how it works out. It’s actually more of a puzzle now, so I think it might stick.

The Player

Next, I wanted to change the image of the Player. A white stick figure isn’t all that exciting. A non-animating stick figure is even more so. If he can’t move between two Walls, that would be a problem. I needed to provide a better Player.

I didn’t exactly want hyper-realistic graphics, but I realized that I hadn’t thought of an art style to use. I was thinking about making it simple for now and using a cartoon blob, but I felt it would be cheap and would make it look too much like Lolo. I wanted something that showed character but was also mine. I still wanted a cartoon feel to it, but I thought I would do well to make up a nifty character. Beetles? Snails? Pigeons?

I made a quick drawing of a corporate cubicle dweller. No reason, really. Yeah, this is all very temporary, but it is easier on the eyes, as you can see:

Image of updated Player and Ball

The Player still floats around the Room, but I figure that animating him would be premature. I would prefer something a bit more adorable than this guy. B-)

Downloads:

codenameOraclesEye-r97.tar.gz, 8.0 MB
codenameOraclesEye-r97.zip 8.5 MB

To build, you will need libsdl1.2 and libsdl_image. Go into source/kyra_2_1_1/kyra/engine/ and run ./make. Then, you go back to source/ and run ./make. To run, ./oracles-eye.

Only available for Gnu/Linux currently, but apparently it doesn’t take much to get it to run on Windows. Thanks, Scott!

Categories
Personal Development

Focus, Focus, Focus

Action wrote about Feeling Success, a phenomenon in which you can actually feel yourself succeeding. I think it sounded like being in The Zone. You can’t lose because you are in a mode that is beyond your normal capabilities. It’s a good read, especially the part about cultivating this feeling.

One of the drawbacks of “feeling success”…is that you get super-focused and put a lot of things aside. When I begin to “feel” the business….I am so focused that I have to stop a lot of other activities.

Can I “feel” the business, while still living a balanced life. Maybe. But I think hyperfocus is imperative.

I think the key to maintaining a balance is to apply your ability to focus on things other than your business. Being able to maintain focus on a single task or event is key to keeping from being overwhelmed. The best part is that it works for everything, not just your business.

Are you hanging out with friends? Stop worrying about the coding issues you’re having! If you come up with an idea, by all means write it down, but stop thinking about it and focus on being with friends.

Are you eating? Focus on your food. Taste it. Chew it. Swallow it. Enjoy the experience. Then go back to the business after you’re done.

Some people make it a point to work for an hour early in the morning, every day, without fail, no matter what. People can die, disasters can happen, but they will do whatever it is they dedicated themselves to doing at that early hour. Dan Kennedy writes, for example. The ability to focus on the task at hand is important in getting things accomplished and making progress on your goals.

Amazingly, I was just thinking about this very topic today. I realized that it can be very easy for me to be distracted from a task. I was writing down the somewhat-detailed action plan for my game development work tonight. Whenever I got stuck or paused for a moment to think, I realized that I mindlessly started browsing through my Active Bookmarks. I would read someone’s blog (in fact, two blogs at the same time! Yeesh!), then stop and work on my plans. I would check email. I managed to get the plans finished probably because they were so small. I could have finished them in minutes, but instead I let distractions get in the way. A little too easily, I think.

Maintaining focus is something I will need to improve. I’m able to accomplish quite a bit as it is, but if I could really focus on my tasks, I would be unstoppable.

Categories
Game Development

Oracle’s Eye Development: Kicking the Ball Some More

Working off of the list of improvements for Oracle’s Eye, I managed to improve the hit detection somewhat.

I was originally thinking about changing the movement code completely. Instead of freely moving about, the Player and Ball would move in a tile-based manner. I spent a bit of time thinking and writing about how I would go about implementing a tile-based game, and I still believe that it might make some things easier. I could also start adding different objects easily.

But when I sat down to code, I decided to continue to do what seems to work for me: mold the existing project until it works.

A major problem with the movement is that the Ball can get stuck in Walls. It can bounce back out normally, but if the Player is too close, it will get stuck in the Wall. Unfortunately, one of the ways I tried to avoid problems with movement causes a very annoying bug. If the Ball moves into the Wall, it is supposed to move back out at twice the distance. It looks like it bounces back out. But if the Player is touching the Ball, it stops moving. Well, if it stops moving, it won’t bounce back because the reverse of stationary doesn’t exist! The next update through, if the Player moves, the Ball wants to move with the Player; however, because it is stuck in the Wall, it “bounces back”. The result is that the Ball looks like it is going the exact opposite way that the Player would expect, which makes the game feel buggy. And not the good, on-purpose buggy, either.

I’m not a fan of guessing with my code. If X = X + 1 doesn’t seem to work, I don’t just automatically turn it into X = X – 1. I prefer to analyze my code and try to determine what exactly is going wrong. In this case, I found that each update, the Player moves, then the Ball moves. Then the Kyra engine’s tree is walked, which allows me to accurately handle collision detection. The next step is to check if the Player collided with a Wall. No problem there. I just reverse the direction of the Player, move him, then change his direction to STOPPED. Then I check if the Player collided with the Ball. If it does, then the Ball will take on the direction of the Player. It makes sense in most cases. If the Player touches a stationary Ball, the Ball should act as if it had been kicked in the same direction that the Player was moving.

When the Ball is near a Wall, however, the Player can kick a Ball, and the Ball can bounce off the Wall. Now the Player and the Ball overlap. Again, it is not a big problem. If the Player moves, the Ball follows the Player. The problem occurs when the two overlap AND the Ball is overlapping the Wall. The Player moves, makes the Ball move, but then the Ball wants to reverse itself.

I found that most of the Ball/Wall overlap can be avoided by changing the order of the collision checking code. The Ball will check for collisions first, then the Player will do the same. The Ball might still get stuck in the Wall, but I’ve found that it is a quite a bit more rare and not as dire a situation. It is a lot harder to reproduce the issue, but of course, right when I was about to say that the problem was completely solved, it occurred.

In any case, it was a quick fix and didn’t require any new code. I’ll probably continue to work on this same issue, but for now it has been vastly improved. I think I will also want to change the size of the Ball. The diameter of the Ball is the width of a Tile, which makes it very difficult to maneuver. If there is a single Tile opening between two Walls, a player might find it incredibly frustrating to try to get the Ball in between. It is part of the reason why I was thinking about using Tile based movement. I should eliminate this problem entirely. Of course, Duke Nukem Forever has had its engine gutted and replaced a number of times, and I would actually like to complete this game soon. B-)

Download files: EDIT: I decided to take down this set of downloads. For both tar.gz and .zip files, it comes to about 16.5MB, and I’m running out of space on my server apparently. This update doesn’t exactly merit its own release, so I will remove it and allow space for better uploads.

Categories
Game Design

Game Design Directions

Cliffski juxtaposes two theories about the direction new games should be developed.

On the one hand, technology is getting more complex. Everyone uses computers, everyone watches involving television shows, everyone has a cell phone that has more computing power than the first computers did. Why shouldn’t games also become more complex to keep up?

On the other hand, information overload is very real. People don’t understand that “their Microsoft” isn’t broken. There are too many channels to surf. Too many websites to look at. Life has become overwhelming, and games should become a safe haven. Make them simple, and people will enjoy them more. It isn’t fun if it feels like work just trying to get the game to start.

Cliffski leaves it at that, but I guess that’s where we’re expected to come in and talk about it. Diabolical!

Steven Johnson, author of “Everything Bad is Good For You: How Today’s Popular Culture Is Actually Making Us Smarter” would argue that the Sleeper Curve is at work. Popular entertainment is requiring more and more brains to “get it”. He compares classic shows such as Dragnet with 21 Jump Street, and he demonstrates how today’s shows, even “reality” shows, are just more complex. Dragnet was easy to watch. One event led to another. Everything was sequential. People would say the obvious as an aid to the audience. While watching it today might bring back some sense of nostalgia for some, you’ll quite frankly get frustrated at the simplicity of it. They hit you over the head with plot points and dialogue.

Today, even the “dumbed down” shows have more complexity than the brightest shows of the past. You just need to think more to understand television today.

Similarly, I think, with video games. A child today is able to work with a complex piece of equipment such as an XBox controller as if it was an extension of his/her body. Children look at older games with disgust. They make fun of Pong and Super Mario Bros. My cousin laughs at me for loving Pac-man instead of some new racing game that’s all the rage.

But what about people who don’t play video games? There is a learning curve involved, and for some games, that curve is incredibly steep. Casual games are meant to be simple to play, and it would be easy to say, “Complex games for those who can handle it, and casual for the rest”. But are these people relegated to playing casual games exclusively?

I don’t know how to play poker, but I don’t want to play Go Fish or solitaire all my life either. Won’t military history buffs want to play accurate war games? Games like Uncommon Valor, as great as they might be, might not be appropriate because they are just so darn complex! I bought this game thinking that it would be like Koei’s PTO II, which I had bought for the SNES. It turned out that it was incredibly detailed, and focused on a very specific part of the Pacific Theater of Operations. I tried to play a few turns, but it was hard to tell if I was doing anything important. Oh, to have hours a day to play games again…

So while you can focus on making a game complex to keep up with the Sleeper Curve or making it simple to provide relaxation for the mind, I’d have to argue that some people might not appreciate the idea that you need to “dumb down” games for them. Sure, there are some people who will say, “I don’t want to think!” but other people WANT to be challenged. They don’t want to passively have fun. They want to be involved in the fun!

So I think I won’t be as quick to complain if someone takes an old game and remakes it with “more weapons ” and “better AI” anymore. It seems to be a natural step to take something and add complexity to it. Those kinds of games might not be all succesful (Tetrisphere comes to mind), but I don’t believe there is any law that dooms them all to fail.

But adding complexity doesn’t necessarily mean making it impossible to play. People figured out how to drive cars. Automatics were added to make it easier, but you don’t see labels like “casual driver” being thrown at those who use them. I think you can add complexity and the requisite brain power to play a game while simultaneously providing the player with the means to easily “get it”. You can also do so without upsetting the veteran game player who doesn’t need any hand holding. It’s a balance, and it might be tough to achieve, but hey, that’s what helps a great game appeal to such a wide audience, right?

Categories
Politics/Government

Illinois Video Game Ban Ruled Unconstitutional

Governor Blagojevich plans to appeal a ruling by U.S. District Court Judge Matthew Kennelly that deemed the Illinois restrictions on sales were unconstitutional.

“This battle is not over,” Blagojevich said in a statement. “Parents should be able to expect that their kids will not have access to excessively violent and sexually explicit video games without their permission.”

He also added excessively violent movie tickets, DVDs, books, magazines, and cable television would be added to the list.

No, wait. That would be logically consistent. I made that part up.

Anyway, my favorite part from the article:

“In this country, the state lacks the authority to ban protected speech on the ground that it affects the listener’s or observer’s thoughts and attitudes,” Kennelly wrote.

Of course, what impact will it have on banning indecent material, such as porn? Wasn’t the point of doing so to prevent children from “being led astray”? You know, by affecting their thoughts and attitudes?

I didn’t read the official ruling, but I would think that that statement alone might do more than expected. Was it careless? I’m not a lawyer, but I think it was.

At the same time, while I am not a parent, I am not sure that I would want my government dictating to me what my children should and shouldn’t be able to see, read, or hear. No porn? No violent content? Yeah, I’ll just ban it in my own home, thank you very much.

Of course, banning the sales of such games to minors wasn’t really going to have a huge effect. Most of the time the parents buy the games for them anyway, and according to some anecdotal reports, they buy them even if the clerk at GameStop asks, “Are you sure it’s appropriate?” So how does the law help parents be better parents?

It doesn’t.

So why am I upset about such a law? If it wouldn’t have a big effect anyway, why oppose it?

Because if this law is allowed, then what’s to prevent someone from going further the next time? Will the actual development of violent games be banned next because the previous was found to not be good enough? Will the government actually be able to accurately rate games as appropriate or not, or will it just use vague language to cause a lot of confusion, resulting in the banning of games like Super Smash Bros Melee along with Mortal Kombat and GTA?

The government has enough problems and issues to deal with. Parenting is a tough job, and the government is not going to be able to do it.