• entries
8
23
• views
2534

Hobbyist pretending to write game code

## Another change of direction

Hi all! In case anybody reads this thing, sorry not to have updated it for so long. As I am easily distracted by random things, I got myself one of those "open" handheld gaming/media devices called the "gp2x" and have been having a lot of fun writing code for it.

I released a game called "Vektar" -- an arcade-style abstract 2D shooter, which has been reasonably well received, and will probably continue playing around with the gp2x for a while, since I'm having fun doing it.

## Efficient enough

Switching to storing vertices apart from triangles, and a few other tweaks, has made the engine efficient enough for now. It isn't blazing fast but I only need it to be fast enough to not be annoying.

Here's a test that looks slightly more planet-like, but there's still a long way to go obviously!

## A rounder cube

To make the cube begin to appear more planet-like, I implemented a simple ROAM-type surface subdivision scheme, so it adapts the number of triangles as I zoom in and out.

Even though I'm not really concerned with efficiency, the implementation is pretty bloated (stores three vertices per triangle) so I think I'll take a little bit of time to improve the memory use and CPU time somewhat, mostly by moving to a vertex list.

## New stuff

Well, that didn't last too long. I lost interest in the "make a whole simple game" project. But I did get inspired by Ysaneya's amazing journal, so I decided instead to pretend that I'm working on a big space game with aliens and spaceships and planets and so on.

Since there's no hope that I'd actually release anything within five years or more, I don't think I'll spend too much time worrying about frame rates or memory optimization or whatever -- who knows what graphics hardware will be like five years from now?

I imagine nothing will come of it, but making planets looks like too much fun, though Ysaneya's incredible work will be hard to follow. So anyway I got a book on OpenGL and coded up a first little test. It doesn't look much like a planet yet!

## Revised Screen List

Ok, here's a new screen list. With this setup, the obvious default path gets right to playing a level by clicking on "Play" from the first screen.

1. INTRO  Music and animation of some kind to hold a user's interest    - probably the "intro" music should extend over all the non-game screens  This screen includes some sort of description of the basics of gameplay.    Probably the animation on the page should lead the player's attention to    that information.  The idea is to give them enough info to start playing.  One corner left free to put junk in (like the distributor's logo or whatever)  "Loading" progress bar while resources are fetched and precomputation done  After loading is complete, the following choices appear:    "Options" (goes to OPTIONS)    "Quit" (goes to QUIT)    "Player Name" (goes to PLAYER NAME)    "High Scores" (goes to HIGH SCORES)    "Play"      The Play button is prominent to encourage its selection      The first time through, play goes right to LEVEL INTRODUCTION for        an introductory level which is just difficult enough to get the        player used to the mechanics and may include some tutorial info        if needed.      Subsequent launches go to GAME SELECTION2. OPTIONS  This presents gameplay options:    Full screen vs windowed    Sound and music volume    More if needed, depending on game mechanics    "OK"    "Cancel"    Returns to the previous screen3. QUIT  Simple screen asking for confirmation.  If a game is in progress, the  text should include something like "You can resume this game next time  if you wish"    "Quit"    "Don't Quit"    Exits program or returns to previous screen.  If a game is in progress    it gets saved with the player name (or 'default' if there    is no player name set)4. HIGH SCORES  Display of the high score list.  Personally I couldn't care less about  what scores I get on games, but some people are into it.  "OK"  Goes to previous screen5. GAME SELECTION  After the first run through the game, this appears to give various  options.  "Difficulty"    Choose between game difficulty levels (radio button type deal)  "New Game"     Starts a new game with the chosen difficulty level  "Untimed Play"    Starts a free-form version of the game at the chosed difficulty level    This just gives random levels and does not save anything on quit  "Continue Saved Game"    This only appears if there is a saved game.  It should be the most    prominent option if available.  "Cancel" (goes to INTRO)  All other choices go to LEVEL INTRODUCTION6. PLAYER NAME  Prompts the user to enter a player name    Text entry box (pre-populated if a recent user name exists)    Could get fancy and have a dropdown of all user names, but      that probably isn't necessary    Button for "OK"    Returns to previous screen7. METASTORY INTRODUCTION  The "metastory" is the thing that shows progress through the game  toward the point where it is "over" (all levels have been played).  This screen explains the metastory.  "OK"  "Don't Show Me This Again"  Both go to METASTORY PROGRESS8. METASTORY PROGRESS  This shows the current state of the metastory, and includes animations  or actions related to progress in the metastory.  User might have to  make some sort of selection, they might be able to examine things in  some detail, or there could even be a separate mini-game associated  with the metastory.  At least the following options:  "Play" (goes to LEVEL SELECTION)  "Quit" (goes to QUIT)  Unless the game is over, in which case this leads to GAME OVER WIN9. LEVEL SELECTION  This is optional.  For some types of games it might make sense  to let the user choose a level - a particular quest they want to go on,  a particular prize they want to go after, a particular maze they  want to solve, etc.  Maybe a "stage" is comprised of several levels  and it doesn't matter which order they are done in, so the user can  be given control over what they want to do.  Goes to LEVEL INTRODUCTION10. LEVEL INTRODUCTION  Level-specific loading and computation, shows the level name and  might show other stuff as well.  This could be integrated into GAMEPLAY  especially if there isn't much to introduce or if the loading time  is very short.  "Go" goes to GAMEPLAY11. GAMEPLAY  Starts with a brief animation saying "Go!", and lets the user  play the game.    Available commands:      "Pause" (goes to GAME PAUSED)      "Options" (goes to OPTIONS)      "Hint" (performs some specific gameplay highlighting)      "Quit" (goes to QUIT) - each user only has one saved game, so        there's no need to ask about saving    If the level is completed, goes to LEVEL COMPLETE    If the player loses, goes to GAME OVER LOSS 12. GAME PAUSED  "Continue" (goes back to GAMEPLAY)  "Quit" (goes to QUIT)13. GAMEPLAY HINT  When new gameplay elements are introduced, in some cases at least it  is probably a good idea to explain them.  This type of screen should  definitely be an overlay over the gameplay screen with a visual indication  of what is being discussed  "OK"  "Don't Show This Again"  Both return to GAMEPLAY14. LEVEL COMPLETE  Some sort of animation and score summary to congratulate the user.  "OK"  Goes to METASTORY INTRODUCTION or METASTORY PROGRESS15. GAME OVER LOSS  Should contain their score and game stats.  "Save Score"    If there is no user name, first goes to PLAYER NAME    Goes to HIGH SCORES with current score highlighted  "High Scores" (goes to HIGH SCORES)  "Quit" (goes to QUIT)16. GAME OVER WIN  Starts with some sort of celebratory message.  Should contain their score and game stats.  "Save Score"    If there is no user name, first goes to PLAYER NAME    Goes to HIGH SCORES with current score highlighted  "High Scores" (goes to HIGH SCORES)  "Quit" (goes to QUIT)

## Game Screens

So I thought I'd plan out the various screens that the game should have -- only now do I realize what a truly massive undertaking even a small "complete" game is!

Many games have the same sort of flow, so maybe this analysis will be useful to somebody else.

Some of these "screens" might actually be dialogs that pop over the previous screen, but they are encapsulated functionality with a large UI so it still makes sense to think of them separately. Other sequenes of events are possible and the design needs to be thought through a little more.

Note: the rest of this entry has been superceded by the following entry, after making some changes in response to a helpful comment

## Fun with spheres

So I have more or less picked some mechanics for my little puzzle game, and it involves moving balls around (impressive, eh?). Even such a trivial thing has its interesting points though.... I'll have to render a lot of different styles of spheres from arbitrary orientations, and I'd like them to look reasonably nice.

Time to crack out the algebra.

The first picture is just a rendered heightfield to show that my sphere intersections were working. The second one adds some phong shading, and the third one gets a little fancier.

Beyond that I started playing with some classic Perlin-style effects:

Eventually the idea is to streamline this so I can bash out renders of the balls very quickly. Next steps: work on that rendering including oversampling for anti-aliasing, and figure out a way to map textures onto spheres without distorting them (that's a head-scratcher for right now).

Beyond that, I downloaded the trial of Photoshop and I played with it a bit. I think I'll probably have to buy it, which is fairly painful, but learing photoshop is probably good for me anyway.

## Brief Introduction

So after years of liking games, I decided to try and make games (like everybody else!).

The whole process is interesting to me so I'm going to start by tring to make a "complete" but small game, probably a puzzle game of some kind, just to get experience (though I'll try to make it fun to play).

Mostly just research so far; I decided to use the PopCap framework to handle some of the tedious details robustly, so I'm studying that. Also for some reason I'm curious about making the colorful fonts that make good games look so nice.

And trying to figure out the best way to make game music.

Fun stuff! I'm just a hobbyist so if anybody happens to read this, don't expect too much. I just wanted to make a journal to help with motivation and on the off chance that somebody else finds it interesting.