Make great games
games geeqs support

GeeQ site news


Some of you may be familiar with the popular Facebook application, Vampire Wars. It's one of those timed turn-based RPGs where you battle other players and do missions to increase your stats. It's mostly monetized (I presume) by advertisements and premium content purchases.

I have a silly weakness for these types of games. I even started working on a developer's toolkit for them at one point, dubbed MOWGLI (Multiplayer Online Web Game Language Interface....thanks, it took me a while to come up with that one). Anyway, I was fooling around with Vampire Wars while enjoying a quiet weekend at home, and just happened to find a vulnerability in their system which allowed me to create a ridiculously powerful character with very little effort. See the end of this post for a screenshot.

Predictably, this got some attention from other players - especially those who had spent weeks or months building up their characters only to see mine shoot past them in the rankings in just a few minutes. To those who have worked hard on and take pride in their Vampire Wars characters, I'm sorry if I caused you any grief. My character, Hack, is as her namesake suggests - a result of exploiting a vulnerability in the Vampire Wars code, and in no way would it be fair to compare her standings with those of your real characters.

For the rest of the audience, by category:

Other players : Thank you for your kind words and interest. No, I will not tell you how I did it. Zynga, the developer of Vampire Wars, does not need their entire player base to start hacking their system. They made a mistake, and they will figure out what it was and eventually fix it. Sharing this information would force them to do a purge and/or restore from backup, which would be a nightmare for everybody.

Zynga : Don't worry, I'm not here to make your lives miserable, I'm completely white-hat. None of your servers were affected, I don't have access to any personal data, and there's nothing wrong with your security (as far as I know). I'll gladly share what I've learned with the appropriate people. Please understand if I want you to verify your identity first, though :)

Fellow geeks : Ok, so I guess it's technically cracking and not hacking but any linguistics major will tell you that a word's meaning is determined by communities, not dictionaries. The general public would call it "hacking", and that's the majority of the audience I'm expecting here. Anyway, I'll probably discuss the exploit in further detail after Zynga has fixed it. Stay tuned, I think you'll find it interesting.

All new visitors : Thanks for dropping by. This is the website of GeeQ Studios, an independent video game studio and advocacy group for aspiring game developers. We recently released a game on the Xbox 360 community games channel, a simple old-school black-and-white table tennis game called Aaron's Ping-Pong, and we are currently working on some other projects (see below). If you like video games or are interested in helping make them, keep an eye on our twitter account for news and updates.

Once again, thank you all for dropping by. I apologize for the site's appearance, we're in the middle of a redesign. If you have any comments or questions, feel free to email hackthevampire@geeq.com.

5/26 - It's time to reinvent ourselves
The current GeeQ website was cobbled together about 5 years ago in our spare time, and features were added rather haphazardly as needed. That was fine for an internal-use-only site, but with our first published game on the 360 and more in the works, we're starting to get some real traffic, and that means we need a more useful and attractive website.

While we're at it, a game studio's "internet presence" is more than just a website. We'll be revamping our whole online image to include opportunities for aspiring game developers to contribute (and get credit for!) to our projects, news feeds to keep gamers up-to-date on new releases and extra content, forums and other community tools, developer blogs, product pages, and customer support too.

We're planning a YouTube channel, a Twitter feed, and pretty much anything else that seems like a good idea.

If this sounds like something you'd like to get involved in, feel free to email us at contribute@geeq.com.

5/19 - Voice Actors wanted for a new Xbox 360 Community Game
Last year, we celebrated the launch of Community Games on the Xbox 360 with Aaron's Ping-Pong, a simple retro black & white table tennis game. We intended to give it away for free (having only put a few Sundays worth of work into it anyway), but 200 Microsoft points was the lowest option, so that's what it was tagged at.

Quite a few of you decided to buy it anyway, and we thank you for your generosity and support. We're glad there are others out there who enjoy playing retro games on new consoles.

We've got a few more serious projects in the works now, one of which is another retro Community Game - this one a space shooter with some interesting graphical effects that bring back the old green-screen arcade and console memories, for those of us old enough to have them.

One of the features of this space shooter game is the ability to select different "opponents" in single-player mode. Each opponent will have a different play style and (here's where you come in) its own voice. For the most part, we intend to have each voice actor be themselves. So for example, the player could be flipping through the list of available opponents, and select "Paddy from Thirteen1.com" - then play against "him" as a computer-controlled opponent, spouting whatever taunts and obscenities he comes up with.

That's pretty much all there is to it. In exchange for your voice acting, we can only offer you the same compensation we give every contributor and member of GeeQ - full attribution of your work and your name in the credits of any game that we use it in. Perhaps when we start getting publishing agreements, there'll be money to spread around ;)

If this sounds like something you'd be interested in, drop us a line at voices@geeq.com.

If you'd like to keep tabs on our development activities and be notified when new releases are coming out, you can subscribe to our mailing list too :)

Thanks so much for dropping by, we hope to see you online!

11/30 - State-based games
A video game, like any other computer program, consists at a basic level of a finite number of "states", each of which results in a particular set of outputs. The current state changes based on user input and program instructions.

For example, our recent Pong homage had many distinct states. Most of them exist within easily identifiable categories, or phases of the game:

  • splash screen
  • menu
  • gameplay
  • win screen

Note that each of these categories theoretically contain a large number of states. The splash screen, for example, had a state for each opacity level of the logo. The menu had a state for each selection, one for each tick of the volume scale, and another for the instructions screen. The gameplay had a huge number of states, corresponding to every possible combination of ball/paddle locations, directions, and velocities.

Most states are not handled explicitly, but by restrictive parameters. Each update, the ball is moved and its location is compared to the boundaries of the board. If it has moved past a certain threshold, its direction is changed to keep it in play. However, because we are only checking restrictive parameters, we leave ourselves vulnerable to conditions that extend past our acceptable states before we are able to make a correction. In this case, as the ball increases in speed, it moves greater distances each update, eventually resulting in it extending past the boundaries of the board before its direction is corrected. This is a case of allowing the game to enter undesireable states due to incorrect boundary checking. A better solution would have been to check the boundaries prior to changing the ball's position, and factoring in any "bounce" at that time. In a more complex game, a problem like this could cause some serious bugs.

Obviously it's not feasible to write code specific to every possible state in a game. Many modern developers have learned to rely on "engines", often written by third parties, to constrain the states in which their game can exist. They frequently include things like physics rules, collision detection, rendering techniques, and so on.

That seeems like a pretty good idea for first person shooters and other games with 3D environments, but what about simpler fare, like puzzle or arcade-style games? With a much-limited number of significant states, how feasible is it to write state-based code for them?

I'm considering a code design that focuses on the current value of a single state-category variable for most of its decision making. It tells the game which screen to display, what interface elements to overlay on it, and what options are available to the user. It wouldn't have all the details, the position and movement of play elements wouldn't be included, but it might contain enough information to determine, for example, the following:

  • the game is in play on level 4
  • player 1 is a blue mage
  • player 2 is a green warrior
  • player 1 has their inventory screen open

Whether this data is contained within a single variable or an object or structure of some kind is not as important as how it is checked. In this design, the code branches out like a tree into each state layer. First it determines what screen is being displayed - in this case, it's level 4 of the game screen. Then it finds out who the active players are (and thus knows which interface elements to display for health and other information). Finally it finds any special overlays to be shown on the screen, like an inventory management or options menu.

The player input is passed directly to the portion of the code that deals with that specific game state. All input checks are made _after_ the game has decided where it is, and so it already knows what is and is not valid under those conditions. This helps avoid "spaghetti code", in which it's often hard to tell where decisions are being made.

Another thing I'd like to incorporate into this generalized design is output elements. Especially in a 2D game, a set of graphical elements associated with each state-category seems like an easy way to save work in the long run. So if you wanted to have a particular graphical or audio or force-feedback element to be produced when the game was in a particular state-category, you just add it to that category's collection of outputs.

Some basic code iterating over a collection would need to be written, and there would have to be some way of adding special instructions to each output element - what "layer" images should be drawn on, how a sound should be handled if it's already playing, and so forth. Some care also needs to be taken in selecting an appropriate storage data structure.

If such a framework could be constructed, could it streamline creation of this type of game and encourage rapid development? Maybe we can find out.

11/25 - Aaron's Ping-Pong is now available on the Xbox 360
Well, we have released our first console game - Aaron's Ping-Pong, on the Xbox 360. It's nothing flashy, just a simple retro black-and-white paddle game, but we're proud of it anyway.

If you'd like to download it, you can find it under the "Community Games" section of the marketplace on your Xbox 360. We've also created a YouTube video that shows how to download the game and includes a short gameplay sample.

Thank you all so much for your support and encouragement. You can certainly look forward to more and better games from us in the future!

About GeeQ Studios


Founded in 2002, GeeQ exists to develop video games and tools for the development of video games, to support, promote, and act as an advocate for the independent gaming community. We provide opportunities for aspiring game developers everywhere to build their portfolios and resumes by contributing to commercially published video games and being properly credited for their work. You can email us at contribute@geeq.com.